Язык программирования Python на глазах превращается в важный инструмент специалистов по анализу данных (data scientists). Мало-помалу он теснит специализированные средства вроде языка R или пакета MATLAB. До окончательной победы ещё очень далеко, однако рост популярности Python в этой области вызывает интерес.
Исторически сложилось так, что чаще всего специалисты по анализу данных программируют на малоизвестном языке R. Его применяют, когда сложность задачи превосходит возможности обыкновенных электронных таблиц вроде Excel, производительность некритична, а объёмы данных позволяют избежать параллелизации обработки при помощи Hadoop.
Многие аспекты R оставляют желать лучшего. Его не так-то легко освоить, программы, написанные на R, трудно отлаживать, он плохо документирован, а доступные разработчикам пакеты не отличаются разнообразием: львиная их доля так или иначе связана со статистикой, анализом данных и визуализацией.
Впрочем, последнее — не всегда недостаток. Когда всё, что нужно, — это как раз статистика, анализ данных и визуализация, с R трудно конкурировать. Ради доступа к богатому инструментарию, который открывает этот язык, люди готовы терпеть и сомнительный синтаксис, и отсутствующую документацию.
Из-за однобокости, которой страдает R, даже относительно несложные проекты в этой области зачастую требуют городить пугающую мешанину из множества различных языков программирования и программных продуктов. Каждый из них идеально подходит для решения какой-то задачи, но совершенно не годится для другой.
Тал Яркани, глава лаборатории психоинформатики при Техасском университете, перечисляет в своём блоге инструменты, которыми ему приходилось дополнять R. Для обработки текста он использовал Ruby, данные нейровизуализации обрабатывал при помощи MATLAB, вычислительные задачи решал при помощи Python и пакета NumPy. На долю R оставался лишь статистический анализ и построение графиков.
С тех пор ситуация радикально изменилась. За пару лет средства анализа данных, доступные разработчикам на Python, совершили рывок вперёд. С одной стороны, появились новые мощные пакеты, реализующие алгоритмы машинного обучения, обработку естественных языков, статистический анализ и визуализацию. С другой — существовавшие ранее пакеты достигли зрелости.
Яркани заметил, что постепенно Python заменил ему и R, и MATLAB, и Ruby:
«Дело не только в удобстве. Есть ещё одна вещь, которая впечатляет меня в экосистеме средств для научных вычислений, основанных на Python: удивительное количество инструментов, которые являются лучшими в своём классе (или близки к этому), если оценивать их с точки зрения широты возможностей и простоты использования. А если учитывать интеграцию с Си, то зачастую и с точки зрения производительности.
Трудно вообразить более удобный пакет, предназначенный для машинного обучения, чем scikit-learn, — и это даже в том случае, если не брать во внимание разнообразие реализованных в нём алгоритмов, великолепную документацию и выдающуюся производительность.
По тем же причинам я совершенно не скучал по возможностям манипуляции данными, встроенным в R, с тех пор как переключился на pandas. По правде говоря, я уже обнаружил в pandas такие трюки, о которых не знал, когда использовал R. Если учесть, что pandas заметно опережает R по производительности во многих распространённых операциях, поводов возвращаться к R или другим инструментам — хотя бы от случая к случаю — остаётся всё меньше».
В чём причина? Микио Браун, немецкий специалист по машинному обучению и основатель стартапа Streamdrill, разделяющий точку зрения Яркани, предполагает, что развитие научных пакетов для Python подхлестнула недальновидная ценовая политика компании Mathworks.
Mathworks разрабатывает пакет MATLAB, который широко используется для научных и инженерных вычислений. Стоит он тысячи долларов, однако образовательные учреждения компания обслуживала по льготной цене. Логика была проста: студенты, освоившие MATLAB, будут применять его и в своей профессиональной деятельности. Их работодателям придётся раскошеливаться, и льготы многократно окупятся.
Так продолжалось до 2005 года, когда в Mathworks решили ужесточить свое определение «образовательного учреждения» и отменили льготы для организаций, которые не выдают дипломы о высшем образовании. За бортом осталось множество академических пользователей. Они стали присматриваться к альтернативам — и заметили Python.
Первая версия Python появилась больше двадцати лет назад, и практически сразу язык начали использовать для научных вычислений. Пакет NumPy, добавляющий поддержку многомерных массивов и матриц и математических функций для работы с ними, появился задолго до того, как Python превратился в адекватное средство веб-разработки. Этому способствовала простота разработки на С/С++ высокопроизводительных библиотек, которые можно вызывать из кода на Python.
На таком фундаменте и выросли средства анализа данных, которые упоминает Яркани, а неудовлетворённый спрос, возникший в результате решения Mathworks, лишь ускорил их появление. Кроме того, не могла не сыграть роль огромная популярность Python за пределами статистического сообщества.
Впрочем, каковы бы ни были причины, развитие Python в этом направлении можно только приветствовать. Оно делает анализ данных доступнее — довольно важная задача, учитывая нехватку специалистов.