В коллективном блоге Sharp Sight Labs недавна была опубликована интересная статья, где обобщаются аргументы в пользу выбора R в качестве основного языка/инструмента для тех, кто решил заняться "наукой о данных" (data science). Споры о выборе "правильного" языка программирования не утихают (в основном обмен любезностями идет между представителями двух "лагерей" - R и Python). Мне упомянутая статья понравилась своим здравым подходом к проблеме - автор советует сначала сосредоточиться на чем-то одном (R, конечно...), а потом, по мере необходимости, осваивать другие инструменты. Привожу (вольный) перевод этой статьи для тех, кто пока не очень дружит с английским. Обратите внимание на то, что устоявшегося перевода популярного сегодня термина "data science" на русский язык пока, насколько мне известно, нет. Поэтому я использую дословный, хотя и несколько "угловатый", перевод - "наука о данных".
- - - -


Каждый раз, когда я разговариваю с людьми, которые приступают к освоению науки о данных, я сталкиваюсь с разочарованием:

"Я не знаю, с какого языка программирования начать."

Это касается не только языков программирования, но и другого программного обеспечения, вроде Tableau, SPSS и т.п. Набор соответствующих инструментов и языков постоянно расширяется, и выбор действительно непрост.

Я понимаю. Когда я серьезно стал заниматься наукой о данных несколько лет назад, я сделал обзор всех популярных на то время языков: Python, R, SAS, D3, не говоря уж о не совсем подходящих для аналитики Perl, Bash и Java. Даже в эти дни, совсем недавно я прочитал рекомендацию (от известного блогера, пишущего о науке о данных) использовать такие древние инструменты, как AWK и SED. (Не волнуйтесь, если вы не имеете никакого понятия о AWK и SED - вам и не нужно их изучать. Во всяком случае, не в самом начале.)

Существует столько рекомендаций, материалов и возможностей, что выбор сделать нелегко. Контента - гора, и очень сложно найти "самородки золота", т.е. вещи которые стоит изучить, поскольку они с лихвой окупятся.

В этом как раз и заключается проблема. Факт в том, что у вас мало времени. Изучение нового языка программирования - это большие затраты вашего времени, и поэтому вы должны подходить к выбору стратегически.

Конечно, некоторые языки приведут к очень хорошей окупаемости ваших инвестиций (как в смысле времени, так и денег). Другие же языки являются всего лишь вспомогательными инструментами, которые вы, возможно, будете использовать не чаще нескольких раз в год.

Давайте сделаем ваш выбор простым: начните с изучения R.

Сосредоточьтесь на одном языке

Перед тем как описать, почему вам стоит выучить R, я хотел бы подчеркнуть, что в самом начале освоения науки о данных лучше изучать один язык программирования.

По мере того, как я публиковал свои уроки по R здесь, на Sharp Sight Labs, несколько человек спрашивали меня, следует ли им (одновременно) осваивать и Python. В принципе, мой ответ "нет". Во всяком случае, если у вас нет прямой необходимости в изучении нескольких языков, сосредоточьтесь на чем-то одном. 

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

Изучайте R

Практически без сомнений, я рекомендую изучать R в качестве вашего первого "языка программирования для науки о данных". Несмотря на некоторые исключения (например, когда ваш проект требует использования чего-то другого), я думаю, что R - это лучший выбор в самом начале пути. И вот почему.

R становится универсальным языком в науке о данных

R становится универсальным языком в науке о данных. Это не значит, что он является единственным языком, или что он одинаково хорошо подходит для любой задачи. Однако он точно является наиболее широко используемым, и популярность его растет.

Как я уже отмечал ранее, компания O’Reilly Media в 2014 г. провела опрос с целью выяснить, какие инструменты используются аналитиками в настоящее время. Они обнаружили, что R - наиболее популярный язык программирования (если не считать SQL полноценным языком).

Существуют и другие, более общие рейтинги языков программирования (используемых не только для анализа данных). Например, Redmonk измеряют популярность языков по интенсивности их обсуждения (на Stack Overflow) и использования (на Github). В их последнем рейтинге R оказался на 13-м месте - наиболее высоком из всех статистических языков программирования. Rdmonk отметили также, что популярность R в последнее время росла.

Схожий рейтинг от компании TIOBE (которая ранжирует языки программирования по количеству поисковых запросов по ним) также указывает на ежегодный рост популярности R.
Рост числа Google-запросов по R (рисунок с сайта http://www.sharpsightlabs.com)

Имейте в виду, что рейтинги Redmonk и TIOBE охватывают все языки программирования. Поэтому получается, что R сегодня входит в число наиболее популярных и широко используемых языков программирования в целом.

R используется компаниями

R широко используется одними из лучших компаний, которые сегодня нанимают специалистов в области науки о данных. Google и Facebook, которые я считаю одними из лучших компаний, на которые можно работать в нашей современной экономике, обе имеют специалистов, использующих R.

(Чтобы получить представление о том, как компании вроде Facebook используют R, я бы однозначно посоветовал посетить блог Соломона Мессинга (Solomon Messing). Соломон работает в Facebook, и статьи в его блоге превосходно демонстрируют возможности R.)

Как недавно отметили в компании Revolution Analytics, "R является также одним из главных инструментов аналитиков Microsoft, которые применяют методы машинного обучения к данным из отделов, отвечающих за Bing, Azure, Office, а также из отделов продаж, маркетинга и финансов."

Помимо таких гигантов, как Google, Facebook и Microsoft, R широко используется и другими компаниями, включая Bank of America, Ford, TechCrunch, Uber и Trulia.

R популярен в академической среде

R - это инструмент, используемый не только в коммерческих компаниях. Он также очень популярен среди ученых и исследователей - факт, засвидетельствованный в недавней статье о R в престижном журнале Nature.

Популярность R в академической среде очень важна, поскольку она создает пул талантов, которые потом попадают в коммерческие компании.

Другими словами, если лучшие и умнейшие люди изучают R в университетах, это приведет к возрастанию значимости R в индустрии. Переход ученых и исследователей из академической науки в бизнес создаст соответствующий спрос на людей, обладающих навыками работы с R.

Более того, по мере созревания "науки о данных", соответствующим специалистам из мира бизнеса придется плотнее общаться с академическими исследователями. Нам нужно заимствовать методики и обмениваться идеями. По мере того, как на планете появляется все больше измерительных приборов и мы превращаем наш мир в потоки данных, границы между академической наукой и бизнес-ориентированной наукой о данных, по-видимому, будут размываться.

R проще использовать для освоения необходимых навыков

Однако популярность R не является единственной причиной изучать этот язык.

В конечном счете, чтобы действительно постичь науку о данных, вам нужно освоить следующие ключевые области: манипуляции с данными, визуализация данных и машинное обучение.

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

Как я отметил выше, вам следует больше сосредоточиться на процессе и методике, нежели на синтаксисе языка.

Вам нужно научиться думать о том, как решать проблемы.

Вам нужно научиться извлекать полезную информацию из данных.

Для этого вам придется хорошо освоить три области: манипуляции с данными, визуализация данных и машинное обучение. Освоение этих навыков в среде R будет намного проще, чем при работе с (почти) любым другим языком.

Манипуляции с данными

Часто говорят, что 80% времени аналитиков уходит на приведение данных к необходимому виду. Чаще, чем этого хотелось бы, вам действительно придется тратить значительное количество времени на всевозможные преобразования ваших данных. R имеет одни из лучших инструментов для этого.

Пакет dplyr в R делает манипуляции с данными простыми. Это тот инструмент, который я очень хотел бы иметь несколько лет назад. Выстраивая несколько простых команд dplyr в "цепочку", вы можете значительно упростить свою работу по преобразованию данных.

Визуализация данных

По состоянию на 2015 г., пакет ggplot2 является одним из лучших среди существующих инструментов для визуализации данных. Что делает ggplot2 таким особенным, так это то, что по мере изучения его синтаксиса, вы также учитесь думать о самом процессе визуализации данных.

Я неоднократно говорил, что процесс визуализации данных имеет глубокую внутреннюю структуру. Эта четко структурированная система определяет ход наших мыслей при создании статистических графиков, и ggplot2 основан на этой системе.

Кроме того, при объединении ggplot2 и dplyr (путем последовательного выстраивания команд) обнаружение закономерностей в данных перестает вызывать затруднения.

Машинное обучение

Наконец, машинное обучение. Хотя я думаю, что большинству новичков не следует спешить с изучением методов машинного обучения (гораздо важнее сначала научиться выполнять разведочный анализ данных), знание этих методов является очень важным. Когда разведочный анализ данных перестает приносить новые порции полезной информации, вам потребуются более мощные инструменты.

Когда вы будете готовы к изучению методов машинного обучения, R предоставит вам одни из лучших инструментов и учебных материалов.

Одна из лучших и широко цитируемых вводных книг по машинному обучению "An Introduction to Statistical Learning" излагает соответствующие методы на примере языка R. Кроме того, курс Стэнфордского университета по статистическому обучению, основанный на этой книге, также преподается с использованием R.

Изучаейте дополнительные языки и инструменты позже

Уточню: со временем вы захотите изучить дополнительные языки программирования. Так же, как в ящике с инструментами нет самого лучшего инструмента, так нет и единственного языка программирования, который идеально подходит для любой задачи, которую вы хотите решить. Поэтому после освоения основных навыков науки о данных с использованием R вы, возможно, захотите изучить другие языки для решения конкретных проблем.

Вот небольшой обзор других языков, на которые стоит обратить внимание после изучения R:

Python

Python является замечательным языком программирования общего назначения, на который вам однозначно стоит обратить внимание в какой-то момент. В недавнем опросе O’Reilly Python оказался вторым наиболее популярным языком. Этот язык имеет отличные средства для визуализации данных, а также реализации методов машинного обучения. Я считаю, большинство людей должны изучать Python в качестве второго языка.

D3

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

Я также оптимистичен по поводу нового R-пакета ggvis, который позволяет пользователям создавать динамичные и интерактивные графики. Поэтому в ближайшем времени пользователям R, по-видимому, достаточно будет вместо D3 изучить ggvis.

Вывод: изучайте R и не распыляйте свои усилия

Повторюсь еще раз: выберите один язык. Если вы в самом начале пути, R почти наверняка окажется лучшим выбором. И сосредоточьтесь на освоении ключевых навыков.

Кроме того, когда вы приступите к изучению R, избегайте синдрома "нового блестящего предмета" (т.е. не переключайтесь на какие-то новые разрекламированные инструменты).

С большой вероятностью вам встретятся примеры работ, выполненных с помощью новых методик и инструментов. Вспомните хотя бы некоторые из тех головокружительных примеров визуализации данных, которые вам наверняка доводилось видеть!

Видя отличные работы других людей (и выясняя, что они использовали какие-то другие инструменты), вы можете захотеть попробовать что-то новое. Но поверьте мне: вам нужно сосредоточиться. Придется потратить несколько месяцев (или дольше), чтобы хорошо освоить один инструмент.

И, как я уже отмечал выше, вам всерьез нужно освоить основные навыки науки о данных. По-меньшей мере, вы должны обладать весомыми навыками по манипуляции и визуализации данных. До того, как вы двинетесь дальше, вы должны уметь выполнять серьезный разведочный анализ данных при помощи R.

Потратив 100 часов на R, вы получите гораздо более весомую отдачу, чем при затрате 10 часов на 10 разных инструментов. В конечном счете, отдача за потраченное время время будет выше, если вы сконцентрируетесь. Не отвлекайтесь на привлекательные новинки.


3 Комментарии

Unknown написал(а)…
Действительно очень здравый и прагматичный совет относительно концентрации на одном языке программирования. Я согласен, что выбрав R в качестве отправной точки, вряд ли ошибешься.
Как Вы считаете, какие пакеты R стоит в первую очередь освоить и научиться использоваться для анализа данных? Согласны с автором на счет ggplot2 и dplyr?
Sergey Mastitsky написал(а)…
Согласен с автором на 100%, в т.ч. по поводу ggplot2 и dplyr.
Что стоит освоить в первую очередь? Это зависит от стоящих задач и области, в которй вы работаете. Я бы посоветовал так:
1) Сам язык R и основные статистические методы:
- Dalgaard (2004) Introductory Statistics with R
- Имеющиеся книги на русском языке - см. раздел Библиотека на этом сайте
2) ggplot2 - материалов в Сети много. Начать с http://ggplot2.org/
3) dplyr - http://rpubs.com/aa989190f363e46d/dplyr_intro
4) Методы машинного обучения:
- James et al. (2013) An Introduction to Statistical Learning
- Kuhn and Johnson (2013) Applied Predictive Modeling
Анонимный написал(а)…
Не могу не выразить своё жгучее согласие с автором статьи. Передо мной и вопроса не стояло -- первым делом R, а Пайтон потом=)
Ещё мне кажется полезным изучить tidyr -- про него вроде даже был пост в этом блоге.
Новые Старые