В постоянно меняющейся экосистеме инструментов для анализа данных вам придется часто изучать все новые и новые языки, чтобы идти в ногу со временем и эффективно работать в команде. В течении нескольких лет я писал код на языке R, но давно уже хотел перейти на Python, чтобы в полной мере использовать библиотеки глубокого обучения и инструменты, такие как PySpark. Кроме того, я начал работать в команде Data Science в Zynga, где Python является основным языком. Прошло всего несколько недель, но я уже начинаю осваивать анализ данных и прогнозное моделирование на Python. Это не первый случай, когда я пытался быстро освоиться с новым языком, но случай с Python оказался наиболее успешным. Я хочу дать вам несколько рекомендаций по работе с новым языком программирования в качестве сотрудника по анализу данных.
Сосредоточьтесь на результатах, а не на семантике языка
Понимание семантики языка, с которым вы собираетесь работать, безусловно важно и без этого никуда, однако я считаю, что для того, чтобы быстро освоить новый язык, достаточно понимания его основ. До знакомства с Python я прочитал вторую главу «Data Science from Scratch», этакий вводный курс в язык Python. Далее я составил список задач, которые мне необходимо было выполнить, используя Python, который включал следующее:
- Чтение и запись данных в CSV — файлы
- Выполнение базовых операций с таблицами данных, таких как отображение типов данных
- Визуализация данных посредством гистограмм и линейных диаграмм
- Подключение к базе данных и последующий вывод данных в таблицы (dataframes)
- Создание модели логистической регрессии
- Оценка показателей моделей, таких как lift и accuracy
Вместо того, чтобы полностью сосредоточиться на изучении семантики языка, например на понимании разницы между списками и кортежами в Python, я начал практиковаться в выполнении моих повседневных задач по анализу данных. Со всеми этими задачами я мог справиться посредством языка R, но теперь мне нужно было научиться делать тоже самое с помощью Python. Например, я узнал, что summary() в R аналогичен describe() в датафреймах Pandas.
Почти сразу я понял, что для выполнения тех или иных задач в Python, вам придется использовать несколько разных библиотек. Вышеупомянутые задачи намного проще выполнять при использовании библиотек Pandas и SciKit-Learn. Так я перешел к следующему этапу по освоению языка Python.
Изучайте экосистему, а не язык
Такие библиотеки, как Tidyverse, значительно расширяют базовый функционал языка R. Другие языки имеют схожие библиотеки, посредством которых вы получаете полезные расширения и функционал. Вместо того, чтобы сосредоточиться на изучении семантики языка, я включил изучение библиотек в мой первоначальный процесс изучения языка Python. В качестве отправной точки я изучил следующие библиотеки:
1) Pandas: обеспечивает функционал датафреймов, аналогичный языку R
2) Framequery: позволяет использовать SQL
3) SciKit-Learn: предоставляет модели машинного обучения со стандартными интерфейсами
4) Pandas-gbq: интерфейс BigQuery в Python.
Используя эти библиотеки, я облегчил себе выполнение тех задач, с которыми я раньше справлялся посредством других языков. Такие библиотеки как Framequery полезны при изучении новых языков, потому что они позволяет вам использовать SQL для работы с датафреймами, прежде чем вы начнете с ними работать посредством, например того же Pandas. Для меня Framequery оказался прост в использовании, потому что он похож на библиотеку sqldf, которую я уже использовал при работе с R.
Используйте межъязыковые библиотеки
Это очень здорово, если в процессе обучения, вы сможете применять библиотеки, с которыми ранее уже работали на других языках. Одной из таких библиотек, была библиотека глубокого обучения Keras, которую я изучил ранее, работая с R. Хоть синтаксис и будет отличаться, но те концепции, которые вы применяете при использовании библиотек, одинаковы, как для R, так и для Python. Вот пример настройки модели Keras на обоих языках:
# Creating a Keras model in R model <- keras_model_sequential() %>% layer_dense(units = 64, activation = "relu", input_shape = 10) %>% layer_dense(units = 64, activation = "relu") %>% layer_dense(units = 1) # Creating the same Keras model in Python model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=10)) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(1))
Сама возможность работы с той библиотекой, которую я уже знал, помогла мне ускорить процесс освоения Python. Plotly — еще одна библиотека, с которой я работал на языке R и которую сейчас я использую в Python.
Работайте с реальными данными
Примеры наборов данных, таких как diabetes dataset в sklearn, отлично подходят для запуска и работы с новым языком или новой библиотекой. Однако вы не освоите все тонкости языка, пока не начнете работать с реальными данными. Я бы порекомендовал вам, при изучении нового языка, сразу применять наборы данных вашей организации и пробовать решать те или иные задачи.
Работа с реальными данными будет полезна по следующим причинам:
- Масштаб. Наборы учебных данных обычно невелики, по сравнению с реальными данными, которые включают в себя гораздо большие объемы, требующие таких методов, например, как выборка.
- Представление. Используя данные вашей организации, вам нужно будет определить, как подписывать данные и программировать функции для моделирования.
- Форматирование. Вам придется извлекать данные в память и выполнять определенные задачи, например, с отсутствием определенных значений.
- Оценка. Используя реальные данные из вашей организации, вы сможете сравнивать свои результаты с использованием нового языка, с результатами, полученных при использовании других языков. Например, сравнить glm на языке R с sklearn.linear_model.
Если возможно, начните работать локально
При изучении языков программирования для распределенных вычислений, например, таких как Scala, часто бывает сложно сразу же влиться в работу с такими огромными объемами. Я рекомендую начинать не с распределенных систем или виртуализации, а попробовать что-нибудь попроще. К примеру, с помощью Spark, вы можете локально настроить машину и использовать такие инструменты, как Zeppelin, чтобы обеспечить доступ к интерактивному фронт-енд интерфейсу. Когда вы изучаете новый язык программирования, вам не нужно беспокоиться о проблемах размещения, вроде передачи кода на сервер. Потому что локальный запуск кода в большинстве случаев означает, что доступно больше средств для отладки.
Для работы с Python, рекомендации аналогичны. Jupyter Notebooks крайне полезен для данного языка программирования, но только в том случае, если вы уже хотя бы немного имеете опыт работы с Python. Для тех же, кто совсем не разбирается в теме, я рекомендую использовать IDE (Интегрированная среда разработки), типа PyCharm. Ну и наконец, когда вы созреете для сотрудничества со своими товарищами по несчастью, вам очень пригодится JupyterLab.
Приступайте к работе как можно раньше
Когда учишь новый язык программирования, ты не знаешь, чего именно ты не знаешь, пока не столкнешься с этим на практике. Вместо того, чтобы целыми днями сидеть, уткнувшись носом в учебник, нужно полдня сидеть перед учебником и полдня перед монитором, набирая на клавиатуре очередную строчку кода. Во времена, когда я только начинал работать с кодом, первое, что я понял — библиотека Pandas должна быть в арсенале каждого новичка.
Существует несколько подходов при изучении практической стороны какого-либо языка или библиотеки. Когда я изучал глубинное обучение с помощью R, я использовал предложенные библиотеки, чтобы начать работу над шаблонными проблемами. Некоторые компании предоставляют своим новым работникам — Jupyter Notebooks, чтобы они быстрее адаптировались. Подход, обычно используемый мною — это использование существующего набора данных при повторной реализации модели на новом языке.
Прогрессируйте в процессе обучения
После того, как вы изучили основы и научились выполнять общие задачи в области анализа данных, будет полезно опробовать некоторые из особенностей нового языка. Например, когда я впервые изучал R, я описал основные примеры использования функций в качестве параметров apply в датафреймах. На тот момент, я был относительным новичком в функциональном программировании, а эти примеры помогли мне узнать о новых идиомах программирования.
Просите о помощи
Это здорово, когда есть к кому обратиться за помощью, будь то другой специалист или целый онлайн-форум. Вы можете узнать о новой библиотеке или о языковых возможностях, доселе вам неизвестных. Но это сложнее сделать, если вы работаете в небольшой компании или над независимым проектом.
Во время моей последней работы в качестве единственного специалиста по данным, я обнаружил, что rstats subreddit — отличное место, где вы можете попросить о помощи. Также есть сообщества программистов, которые могут стать полезными для обучения. Я принимал участие в конференции useR в 2016 году и это было круто — особенно знакомства с различными учеными и специалистами, использующие R. У Python также есть подобные конференции, но мне еще не удалось на них побывать.
Заключение
Изучение нового языка — всегда нелегкий процесс, но нужно понимать, что это поможет вам в дальнейшем построить свою карьеру. Моя общая рекомендация — сочетайте теоретическую и прикладную часть. И в конце концов, это поможет вам составить правильный план обучения.
Перевод статьи Ben Weber: Learning A New Data Science Language