За последние несколько лет весьма скромно начинавший свое существование язык R приобрел невероятную популярность, став одним из основных инструментов для специалистов по статистике. По оценке аналитиков, тех, кто пишет на R, уже свыше двух миллионов, и их число постоянно растет — язык постепенно превращается в стандарт де-факто для категории специалистов, называющих себя data scientist. Язык R признан в качестве аналитического мэйнстрима, он используется во множестве организаций, встраивается во всевозможные системы, разработчики пишут для него пакеты, адаптированные к конкретным отраслям. Например, в The New York Times активно используются визуализационные возможности R при оценке новостных лент, а одно из самых крупных туристических агентств Orbitz с помощью R решает задачи, связанные с оценкой конкурентоспособности своих продуктов. Это классические примеры использования R, а новая волна интереса к языку возникла в связи с возможностью применения систем с массовым параллелизмом (MPP) и таких платформ, как Hadoop, способных в сочетании с реляционными СУБД хранить петабайты структурированных и квазиструктурированных данных, которые можно использовать для аналитических задач. Язык R обеспечивает аналитикам доступ к таким объемам данных, которые при работе на обычных серверах невозможно было представить.

Из истории R

Взлет R начался четыре года назад, когда The New York Times опубликовала большую статью под названием «Аналитики очарованы R», посвященную этому языку. По словам автора, этот язык привлекателен прежде всего своей доступностью для прикладных специалистов-аналитиков, не владеющих навыками программирования, — иногда R называют «форсированной таблицей Excel», позволяющей решать сложные аналитические задачи, не зная анатомии компьютерных систем. Поддерживающее R программное обеспечение распространяется как свободное и включает несколько тысяч специализированных библиотек, таких как BiodiversityR, предназначенная для анализа окружающей среды, или GenABEL, используемая при изучении генома человека.

 

Росс Айхак (слева) и Роберт Джентльмен
Росс Айхак (слева) и Роберт Джентльмен

Язык R был создан в середине девяностых двумя профессорами-статистиками, работавшими в университете новозеландского города Окленд. Их имена — Росс Айхак и Роберт Джентльмен, отсюда нетрудно догадаться, чем они руководствовались, выбирая название для языка. Хотя R стал плодом сотрудничества двоих, ему предшествовала самостоятельная работа одного Айхака, который в условиях островной изолированности много читал, в том числе изучил книгу «Структура и интерпретация компьютерных программ» Хала Абельсона и Джеральда Сассмана, изданную в МТИ в 1985 году. В «Википедии» есть отдельная статья, ей посвященная. Книга была написана в качестве введения в курс программирования, преподаваемый студентам инженерных специальностей, авторы книги и курса отдали предпочтение языку Scheme, диалекту Lisp. Кроме этого, Айхак познакомился с работами Рика Беккера и Джона Чамберса, посвященными не слишком популярному языку программирования S, предназначенному специально для обработки данных. Язык S относится к категории объектно-ориентированных, в нем объектами являются наборы данных, функции и модели анализа, что отличает его от классических специализированных программных пакетов, ориентированных на работу с данными. Преимущество языкового подхода по сравнению с пакетами — в возможности по шагам контролировать процесс обработки, что повышает уверенность в корректности результатов. А далее Айхак обратил внимание на общие и различающие языки S и Scheme черты и поделился своими наблюдениями с коллегой Джентльменом, который, как и он сам, вел курс статистики и тоже испытывал потребность в соответствующем программном обеспечении, но не мог найти ничего подходящего. После недолгих размышлений Айхак и Джентльмен сошлись на том, что следует объединить усилия и создать собственное учебное ПО, — так и родился R.

Для начала авторы решили сделать небольшой интерпретатор, аналогичный тому, что используется в Scheme, с нуля, так как готовые разработки их не устраивали, поскольку было понятно — в процессе работы будет множество изменений. В итоге было решено строить интерпретатор по принципам, изложенным в книге Абельсона — Сассмана, с использованием технологических наработок из доступных на тот момент свободно распространяемых интерпретаторов Scheme. Первая версия интерпретатора, поддерживающая основную функциональность языка R, была размером около тысячи строк кода на Cи, но ее требовалось расширить описанием структур данных и математической составляющей для статистики, кроме того, нужен был пользовательский интерфейс. Оба автора были хорошо знакомы с S, поэтому отдали предпочтение используемому в нем командному стилю.

В итоге R получился только внешне похожим на S, внутри он имеет существенные отличия, и прежде всего в распределении памяти — в R в момент запуска резервируется фиксированный объем памяти, а в процессе работы программы осуществляется уборка «мусора» с использованием механизма, который принято называть on-the-fly garbage collector, то есть «уборка на лету». Это значит, что ограничен рост мусора. Второе отличие — в двух языках по-разному определяется область действия переменных. Кроме этих двух фундаментальных различий в R есть то, чего вообще нет в S. Речь идет о средствах, которые облегчают построение графиков: наименование цветов, так называемая цифровая модель (Colour Model); система для описаний линий на графиках (Line Texture Description); техника для вывода математических формул в графиках.

На первых порах язык использовался исключительно в учебных целях, но в 1993 году авторы включили его в библиотеку Statlib, которая распространялась по подписке, с 1995 года R стал распространяться как свободное ПО по лицензии GNU, после чего он нашел множество приверженцев, особенно в Европе, а с начала 2000-х годов ему сопутствовал грандиозный успех — R был принят на вооружение не только университетами, но и государственными органами и крупными корпорациями. Росс Айхак получил за свою работу самую высокую академическую награду Новой Зеландии — медаль Пикеринга.

Загадка R

Про R можно сказать, что этот язык принимает эстафету у доминирующего среди статистических пакетов SPSS, ныне принадлежащего IBM, становясь универсальным языком для специалистов по обработке данных. В том, что это так, а не иначе, убеждает очевидный факт: главным апологетом R стал Норман Ни, создатель Tex и SPSS (Statistical Package for the Social Sciences), в 2009 году основавший компанию Revolution Analytics, являющуюся дистрибьютором продуктов на базе R. В своем комментарии Forbes по этому поводу он сказал: «R — это возможность изменить правила игры в самом быстрорастущем сегменте программной индустрии».

Возникает естественный вопрос: как случилось, что произведение двух академических ученых из Новой Зеландии опередило то, что делается профессионалами софтверной индустрии в Америке и Европе?

Роберт Мюнхен, автор книги «R для пользователей SAS и SPSS», убежден, что язык радикально изменил «ландшафт в области разработки ПО»: пользование R не только дешевле, чем применение коммерческих пакетов, но к тому же в R практически нет ничего такого, что есть в SAS или SPSS, а обратное утверждение невозможно, функциональные возможности R выше, чем у известных статистических пакетов. Мало того, при работе в мегабайтном масштабе данных R вполне может заменить и Matlab, и SAS. Подобное стало реальностью потому, что R — это не закрытый пакет, принадлежащий одному производителю, а развиваемый и эволюционирующий язык, разрабатываемый членами сообщества. Можно искать секрет успеха R в аналогии с успехом Linux, и этому он обязан основополагающим принципам, заложенным Айхаком и Джентльменом.

Развитию сообщества способствует языковая модель, отличающая R от готовых пакетов, — программу можно прочитать и усовершенствовать. Прогресс R обеспечивает так называемая «ядерная группа» (core group), в которую входят не только специалисты из компьютерной науки, но и серьезные математики и специалисты по статистике. Майк Кинг, главный статистик-аналитик Bank of America, высказался следующим образом: «Уверен, нет другого языка программирования, который бы собрал такое сильное сообщество. R попросту повезло — в core group вошли таланты, способные найти самые сильные ходы». R как инструмент позволяет сообществу с невероятной скоростью создавать новые R-программы, и сегодня это сообщество превратилось в гигантскую саморегулируемую фабрику по производству такого рода пакетов. Основным резоном в переходе на R является наличие сообщества, причем действует положительная обратная связь — чем больше становится сообщество, тем привлекательнее становится R. В сообществе силен дух соревновательности, что открывает дорогу молодым талантам.

R и Большие Данные

 

Схема взаимодействия Hadoop и HBase в среде R
Схема взаимодействия Hadoop и HBase в среде R

Как бы ни были велики преимущества отрытого ПО и коллаборативной деятельности виртуальных коллективов даже самых талантливых людей, иногда возникают ситуации, когда требуется предпринимать радикальные шаги, вносить такие изменения, управлять которыми можно только из единого центра. Именно такая ситуация возникла с появлением необходимости работы с Большими Данными — R не задумывался для этой цели и не эволюционировал в этом направлении. Руководство адаптацией R к таким задачам — созданию Big Data Analytics — взяла на себя компания Revolution Analytics, которая интегрировала R и Hadoop. Такая интеграция выглядит совершенно естественно, и то и другое относится к свободному ПО и подчинено данным (data driven), но есть несколько серьезных сложностей процедурного порядка. На протяжении всей своей истории R оставался итерационной технологией (как это принято в статистике), а Hadoop по определению работает в пакетном режиме: задача запускается и может работать минуты или часы. Вторая сложность заключается в ином оперировании данными. В языке R данные преимущественно размещаются в общей оперативной памяти, а Hadoop основан на процедурах map/reduce, где данные разделяются и обрабатываются параллельно. Эти противоречия были преодолены специалистами Revolution Analytics в продуктах серии RevoConnectR for Hadoop, предоставляющих программистам на R возможность работы с данными, размещенными в файловой системе Hadoop HDFS и СУБД Hbase. Из схемы взаимодействия Hadoop и HBase в среде R, показанной на рисунке, понятно, что клиент по-прежнему взаимодействует с традиционной файловой формой представления данных, которая подпитывается результатами работы Hadoop.