Categories

A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

Тренинг по 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

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>