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

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

Специфика

Когда дело доходит до передовой науки о данных, вам придется изобретать колесо только каждый раз. Научитесь осваивать различные пакеты и модули, предлагаемые на выбранном вами языке. Степень, в которой это возможно, зависит, в первую очередь, от того, какие пакеты для конкретного домена доступны вам в первую очередь!

Общность

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

Производительность

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

Производительность

В некоторых случаях жизненно важно оптимизировать производительность вашего кода, особенно при работе с большими объемами критически важных данных. Скомпилированные языки обычно намного быстрее интерпретируемых; аналогично языки со статической типизацией значительно более отказоустойчивы, чем языки с динамической типизацией. Очевидный компромисс - против производительности.

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

Помня об этих основных принципах, давайте взглянем на некоторые из наиболее популярных языков, используемых в науке о данных. Далее следует сочетание исследований и личного опыта меня, друзей и коллег - но это ни в коем случае не окончательное! Вот примерный порядок популярности:

R

Что тебе нужно знать

Выпущенный в 1995 году как прямой потомок более старого языка программирования S, R с тех пор набирает обороты. Написанный на C, Fortran и сам по себе, проект в настоящее время поддерживается R Foundation for Statistical Computing.

Лицензия

Бесплатно!

Плюсы

  • Отличный выбор качественных, предметно-ориентированных пакетов и пакетов с открытым исходным кодом. В R есть пакет практически для всех количественных и статистических приложений, которые только можно вообразить. Сюда входят нейронные сети, нелинейная регрессия, филогенетика, расширенное построение графиков и многие, многие другие.
  • Базовая установка содержит очень полные встроенные статистические функции и методы. R также особенно хорошо справляется с матричной алгеброй.
  • Визуализация данных - ключевая сила использования таких библиотек, как ggplot2.

Минусы

  • Представление. Тут нет двух вариантов: R - не быстрый язык.
  • Специфика предметной области. R отлично подходит для статистики и анализа данных. Но в меньшей степени для программирования общего назначения.
  • Причуды. R имеет несколько необычных функций, которые могут привлечь внимание программистов, имеющих опыт работы с другими языками. Например: индексация с 1, использование нескольких операторов присваивания, нестандартные структуры данных.

Вердикт - «блестяще в том, для чего он предназначен»

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

Python

Что тебе нужно знать

Гвидо ван Россум представил Python еще в 1991 году. С тех пор он стал чрезвычайно популярным языком общего назначения и широко используется в сообществе специалистов по науке о данных. В настоящее время основными версиями являются 3.6 и 2.7.

Лицензия

Бесплатно!

Плюсы

  • Python - очень популярный язык программирования общего назначения. Он имеет широкий спектр специализированных модулей и поддержку сообщества. Многие онлайн-сервисы предоставляют Python API.
  • Python - язык, который легко выучить. Низкий барьер для входа делает его идеальным первым языком для новичков в программировании.
  • Такие пакеты, как pandas, scikit-learn и Tensorflow, делают Python надежным вариантом для передовых приложений машинного обучения.

Минусы

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

Вердикт - «отличный универсал».

Python - очень хороший выбор языка для науки о данных, и не только для начального уровня. Большая часть процесса обработки данных вращается вокруг процесса ETL (извлечение-преобразование-загрузка). Это делает универсальность Python идеально подходящей. Такие библиотеки, как Tensorflow от Google, делают Python очень интересным языком для машинного обучения.

SQL

Что тебе нужно знать

SQL (язык структурированных запросов) определяет, управляет и запрашивает реляционные базы данных. Язык появился в 1974 году и с тех пор претерпел множество реализаций, но основные принципы остались прежними.

Лицензия

Варьируется - одни реализации бесплатны, другие проприетарны.

Плюсы

  • Очень эффективен при запросах, обновлении и управлении реляционными базами данных.
  • Декларативный синтаксис часто делает SQL очень удобочитаемым языком. Нет никакой двусмысленности в том, что должен делать SELECT name FROM users WHERE age > 18!
  • SQL очень широко используется в ряде приложений, что делает его очень полезным языком для ознакомления. Такие модули, как SQLAlchemy, упрощают интеграцию SQL с другими языками.

Минусы

  • Аналитические возможности SQL довольно ограничены - помимо агрегирования и суммирования, подсчета и усреднения данных, ваши возможности ограничены.
  • Для программистов, пришедших из императивного опыта, декларативный синтаксис SQL может потребовать обучения.
  • Существует множество различных реализаций SQL, таких как PostgreSQL, SQLite, MariaDB. Все они достаточно разные, чтобы сделать совместимость головной болью.

Вердикт - «вечный и эффективный»

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

Джава

Что тебе нужно знать

Java - чрезвычайно популярный язык общего назначения, работающий на виртуальной машине Java (JVM). Это абстрактная вычислительная система, которая обеспечивает плавную переносимость между платформами. В настоящее время поддерживается Oracle Corporation.

Лицензия

Версия 8 - Бесплатно! Устаревшие версии, проприетарные.

Плюсы

  • Вездесущность. Многие современные системы и приложения построены на основе Java. Возможность интегрировать методы науки о данных непосредственно в существующую кодовую базу - это очень мощный инструмент.
  • Сильно типизированный. Когда дело доходит до обеспечения безопасности типов, в Java нет ничего излишнего. Для критически важных приложений с большими данными это бесценно.
  • Java - это высокопроизводительный компилируемый язык общего назначения. Это делает его подходящим для написания эффективного производственного кода ETL и алгоритмов машинного обучения с интенсивными вычислениями.

Минусы

  • Многословие Java делает ее маловероятным первым выбором для специального анализа и более специализированных статистических приложений. Языки сценариев с динамической типизацией, такие как R и Python, обеспечивают гораздо большую производительность.
  • По сравнению с предметно-ориентированными языками, такими как R, в Java не так много библиотек для расширенных статистических методов.

Вердикт - «серьезный претендент на науку о данных»

Об изучении Java как языка анализа данных первого выбора можно многое сказать. Многие компании оценят возможность беспрепятственно интегрировать производственный код науки о данных непосредственно в свою существующую кодовую базу, и вы обнаружите, что производительность Java и безопасность типов являются реальными преимуществами. Однако у вас не будет набора пакетов для конкретной статистики, доступных для других языков. Тем не менее, определенно стоит подумать, особенно если вы уже знаете один из R и / или Python.

Скала

Что тебе нужно знать

Scala, разработанный Мартином Одерски и выпущенный в 2004 году, представляет собой язык, работающий на JVM. Это мультипарадигмальный язык, допускающий как объектно-ориентированный, так и функциональный подходы. Фреймворк кластерных вычислений Apache Spark написан на Scala.

Лицензия

Бесплатно!

Плюсы

  • Scala + Spark = высокопроизводительные кластерные вычисления. Scala - идеальный выбор языка для тех, кто работает с большими объемами данных.
  • Мультипарадигматичность: программисты на Scala могут использовать лучшее из обоих миров. Им доступны как объектно-ориентированные, так и функциональные парадигмы программирования.
  • Scala компилируется в байт-код Java и работает на JVM. Это обеспечивает возможность взаимодействия с самим языком Java, что делает Scala очень мощным языком общего назначения, а также хорошо подходит для науки о данных.

Минусы

  • Scala - непростой язык для освоения и использования, если вы только начинаете. Лучше всего загрузить sbt и настроить IDE, такую ​​как Eclipse или IntelliJ, с конкретным подключаемым модулем Scala.
  • Синтаксис и система типов часто описываются как сложные. Тем, кто работает с динамическими языками, такими как Python, очень сложно освоиться.

Вердикт - «идеально подходит для больших данных»

Когда дело доходит до использования кластерных вычислений для работы с большими данными, Scala + Spark - фантастические решения. Если у вас есть опыт работы с Java и другими языками со статической типизацией, вы тоже оцените эти возможности Scala. Тем не менее, если ваше приложение не работает с объемами данных, которые оправдывают дополнительную сложность Scala, вы, вероятно, обнаружите, что ваша продуктивность намного выше при использовании других языков, таких как R или Python.

Юлия

Что тебе нужно знать

Выпущенная чуть более 5 лет назад, Julia произвела впечатление в мире числовых вычислений. Его авторитет был поднят благодаря раннему принятию несколькими крупными организациями, в том числе многими в финансовой отрасли.

Лицензия

Бесплатно!

Плюсы

  • Julia - это язык, скомпилированный JIT («точно в срок»), что позволяет ему обеспечивать хорошую производительность. Он также предлагает простоту, возможности динамической типизации и написания сценариев интерпретируемого языка, такого как Python.
  • Джулия была специально разработана для численного анализа. Он также может программировать общего назначения.
  • Читаемость. Многие пользователи языка называют это ключевым преимуществом.

Минусы

  • Зрелость. В качестве нового языка некоторые пользователи Julia столкнулись с нестабильностью при использовании пакетов. Но, как сообщается, сам базовый язык достаточно стабилен для использования в производственной среде.
  • Ограниченные пакеты - еще одно следствие молодости языка и небольшого сообщества разработчиков. В отличие от давно зарекомендовавших себя R и Python, у Джулии нет выбора пакетов (пока).

Вердикт - «один на будущее».

Основная проблема с Юлией - та, в которой нельзя винить. Как недавно разработанный язык, он не так зрел и не готов к производству, как его основные альтернативы Python и R. Но, если вы готовы набраться терпения, есть все основания уделять пристальное внимание развитию языка в ближайшие годы.

MATLAB

Что тебе нужно знать

MATLAB - это устоявшийся язык числовых вычислений, используемый в академических кругах и в промышленности. Он разработан и лицензирован MathWorks, компанией, основанной в 1984 году для коммерциализации программного обеспечения.

Лицензия

Собственный - цена зависит от вашего варианта использования.

Плюсы

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

Минусы

  • Собственная лицензия. В зависимости от вашего сценария использования (академического, личного или корпоративного) вам, возможно, придется раскошелиться на дорогую лицензию. Доступны бесплатные альтернативы, такие как Octave. Это то, о чем вы должны серьезно подумать.
  • MATLAB - не очевидный выбор для универсального программирования.

Вердикт - «Лучшее для математически интенсивных приложений».

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

Другие языки

Есть и другие основные языки, которые могут быть интересны, а могут и не представлять интереса для специалистов по данным. В этом разделе представлен краткий обзор… конечно, есть много места для обсуждения!

C++

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

Как сказал один пользователь Quora:

«Если вы пишете код для проведения специального анализа, который, вероятно, будет выполняться только один раз, вы бы предпочли потратить 30 минут на написание программы, которая будет выполняться за 10 секунд, или 10 минут на написание программы, которая будет пробежать за 1 минуту? »

Чувак прав. Тем не менее, для серьезной производительности на производственном уровне C ++ был бы отличным выбором для реализации алгоритмов машинного обучения, оптимизированных на низком уровне.

Вердикт - «не для повседневной работы, но если производительность критична…»

JavaScript

С появлением Node.js в последние годы JavaScript становится все более и более серьезным серверным языком. Однако его использование в областях науки о данных и машинного обучения на сегодняшний день ограничено (хотя проверьте brain.js и synaptic.js!). Он имеет следующие недостатки:

  • Поздно к игре (Node.js всего 8 лет!), Что означает…
  • Доступно несколько соответствующих библиотек и модулей по науке о данных. Это означает отсутствие реального массового интереса или импульса.
  • С точки зрения производительности Node.js работает быстро. Но JavaScript как язык не без критики.

Сильные стороны Node в асинхронном вводе-выводе, его широком использовании и существовании языков, которые компилируются в JavaScript. Так что вполне возможно, что полезная структура для науки о данных и обработки ETL в реальном времени могла бы объединиться. Ключевой вопрос заключается в том, предложит ли это что-нибудь отличное от того, что уже существует.

Вердикт: «Еще многое предстоит сделать, прежде чем JavaScript станет серьезным языком для науки о данных»

Perl

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

Это немного удивительно, учитывая его использование в количественных областях, таких как биоинформатика. Когда дело доходит до науки о данных, Perl имеет несколько ключевых недостатков. Он не выделяется быстро, а его синтаксис заведомо недружелюбный. Не было такого же стремления к разработке специализированных библиотек для науки о данных. И в любой области ключевым моментом является импульс.

Вердикт - «полезный язык сценариев общего назначения, но он не дает реальных преимуществ для вашего резюме по науке о данных»

Рубин

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

Это может показаться удивительным, но, скорее всего, это результат доминирования Python в академических кругах и положительный эффект обратной связи. Чем больше людей используют Python, тем больше модулей и фреймворков разработано, и тем больше людей обратится к Python. Проект SciRuby существует для того, чтобы привнести в Ruby функциональные возможности научных вычислений, такие как матричная алгебра. Но пока Python по-прежнему впереди.

Вердикт - «пока не очевидный выбор для науки о данных, но не повредит резюме»

Заключение

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

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

Однако - возможно, у вас уже есть некоторый опыт работы с Java. Или вы можете использовать Scala для больших данных. Или, возможно, вы хотите принять участие в проекте Julia.

Может быть, вы изучали MATLAB в университете или хотите дать SciRuby шанс? Возможно, у вас есть совсем другое предложение! Если да, оставьте, пожалуйста, ответ ниже - я с нетерпением жду вашего ответа!

Спасибо за прочтение!