Press "Enter" to skip to content

Тренинг по R в Продовольственной и сельскохозяйственной организации ООН

В декабре 2013 года я проводил тренинг по работе в R с сотрудниками отдела статистики Продовольственной и сельскохозяйственной организации (FAO/ФАО) ООН. Находится сие учреждение в славном городе Риме, что в Италии.

Отдел статистики FAO перерабатывает большое количество данных из разных источников: от официальных отчётов всех существующих стран до результатов опросов населения. Примером типичной задачи является следующее: собрать данные о количестве произведённых в стране продуктов питания, об импорте пищевых продуктов, экспорте, о количестве сельскохозяйственной продукции, пошедшей не в питание, а в другие сферы, например, производство ГСМ. По каждому виду продукции считается итог: производство + импорт – экспорт – непродовольственные расходы. Затем этот итог преобразуется в килокалории и делится на количество населения в стране. Получаем количество калорий на каждого жителя страны, сравниваем с нормативом и делаем вывод, существует ли в данной стране проблема голода. И так для каждой страны, которых около двух с половиной сотен.

Ещё добавьте к этому, что страны могут измерять продукцию в разных единицах, выращивать различающиеся виды и сорта – всё это нужно знать, учитывать и преобразовывать к одному виду. Например, в России принято производить куриные яйца, а в Китае – утиные, вот и сравните.

Добавьте к этому временное измерение – эти данные в ФАО начали собирать с 1961 года. И ещё маленькая проблемка, что страны появляются и исчезают. Что нам делать, если мы хотим посмотреть, как в России обстоят дела с яйцами начиная с 1980 года? Позже 1991 года понятно, а раньше этого года России нет, но есть Советский Союз: придётся вычленять долю “российских” яиц из общего числа “советских”.

Ещё одна интересная задачка – это различающиеся перечни стран у разных международных организаций. Например, Китай по версии Всемирного банка не включает Тайвань, Гонконг и Макао, что прямо противоположно Китаю по версии ИСО и отличается от ФАО-версии. Все три версии используются при обработке данных в ФАО.

Одним из результатов работы статистического отдела является Ежегодный статистический сборник. Кстати, создаётся он очень красиво: исходники обрабатываются в формате LaTeX с включёнными скриптами R в git-репозитории. Затем это всё с помощью Sweave перегоняется в чистый LaTeХ, из которого получается готовый дизайн-макет для типографии.

Для обработки всех разнокалиберных массивов данных в ФАО используется широкий перечень прикладного статистического обеспечения, начиная от Excel и заканчивая SAS. Видимо, для сокращения расходов и унификации процессов в отделе статистики запущена инициатива по переводу обработки данных на колёса R. Именно в этом процессе я и принял участие. Я работал в паре с коллегой из Великобритании. Наша работа заключалась в том, чтобы познакомиться с текущими способами обработки данных, которыми пользуются ключевые сотрудники статистического отдела, а затем предложить и показать им более эффективные варианты работы в R. У каждого специалиста свои специфические задачи, но ключевая потребность – это эффективная, быстрая подготовка данных к анализу и визуализация.

Естественно, я не мог не порекомендовать обратить внимание на разработки Хэдли Викхэма, ныне старшего научного сотрудника RStudio. Речь идёт о пакетах plyr и reshape2 для обработки данных и ggplot2 для визуализации.

Для тех, кто ещё не знаком с этими инструментами, рекомендую три вводных статьи. Каждая, понятно, про соответствующий пакет. Статьи на английском, здесь позволю перевести на русских их названия:

  • Стратегия “разрежь-примени-склей” в анализе данных. Это про пакет plyr. Название расширения происходит от apply R: вы подаёте на вход какой-то объект (список, таблица, массив), а одна из plyr-функций “разрезает” объект на нужные вам кусочки, применяет к каждому кусочку указанную вами функцию, а затем соединяет результаты в новый объект нужного вам формата (или обновляет исходный объект). Обнаружив этот пакет, я так и поленился изучать различные apply, lapply, tapply и прочие функции из базы R, т.к. plyr заменяет их все более логичным подходом.
    Также здесь есть хороший бонус для любителей Big Data. Научившись пользоваться инструментами из plyr-расширения, вы легко сможете распараллелить выполнение своего кода, просто добавив к plyr-функции параметр .parallel = TRUE: в этом случае кусочки будут обрабатываться с помощью пакета foreach.
    И ещё одна добавка: сейчас Хедли работает над новой версией этого расширения, он будет носить название dplyr (здесь d – это сокращение от data.frame). Пакет dplyr будет использовать тот же самый синтаксис, что из функции из plyr, но он будет более эффективным при работе с data.frame, а также он будет позволять вытаскивать данные через унифицированный интерфейс из различных источников – от баз данных до data.table.
  • Реорганизация данных. Это про пакет reshape, предок пакета reshape2. И хотя статья про предыдущую версию расширения, прочитать её следует, т.к. в ней объясняются теоретические основы предлагаемых преобразований, а различия в синтаксисе незначительны.
  • Многоуровневая грамматика графики. Введение в теорию построения статистических графиков, лежащую в основе мегапопулярного пакета ggplot2. Поскольку создание графиков в этом пакете отличается от традиционного “взять карандаш шириной 2 пикселя и провести из А в Б” и характеризуется большим уровнем абстракции, рекомендую понять идеи, представленные в этой статье, чтобы понимать, что происходит при рисовании в ggplot2.

В том числе этими инструментами я поделился с коллегами из статистического отдела Продовольственной и сельскохозяйственной организации Объединенных наций. Думаю, толк будет.

Leave a Reply

Your email address will not be published. Required fields are marked *

Защита от спама *