Джулия против Python: что лучше для науки о данных?

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

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

Какой язык у Юлии?

Созданная в 2009 году командой из четырех человек и представленная публике в 2012 году, Julia призвана устранить недостатки Python и других языков и приложений, используемых для научных вычислений и обработки данных. «Мы жадные», - писали они. Они хотели большего: 

Нам нужен язык с открытым исходным кодом и либеральной лицензией. Нам нужна скорость C при динамичности Ruby. Нам нужен язык, который является гомоиконным, с настоящими макросами, такими как Lisp, но с очевидными, знакомыми математическими обозначениями, такими как Matlab. Нам нужно что-то столь же удобное для общего программирования, как Python, такое же простое для статистики, как R, такое же естественное для обработки строк, как Perl, столь же мощное для линейной алгебры, как Matlab, так же хорошо склеивающее программы, как оболочка. Кое-что, что очень просто изучить, но порадует самых серьезных хакеров. Мы хотим, чтобы он был интерактивным, и мы хотели его компилировать.

(Мы упоминали, что он должен быть таким же быстрым, как C?)

Вот несколько способов, которыми Джулия реализует эти устремления:

  • Юля компилируется, а не интерпретируется.  Для более высокой производительности во время выполнения Julia скомпилирована точно в срок (JIT) с использованием инфраструктуры компилятора LLVM. В лучшем случае Джулия может приблизиться к скорости C.
  • Юля интерактивна. Julia включает REPL (цикл чтения-оценки-печати) или интерактивную командную строку, аналогичную тому, что предлагает Python. Быстрые разовые сценарии и команды можно вводить прямо сейчас.
  • У Джулии простой синтаксис. Синтаксис Джулии похож на синтаксис Python - краткий, но выразительный и мощный.
  • Джулия сочетает в себе преимущества динамической типизации и статической типизации. Для переменных можно указать типы, например «32-разрядное целое число без знака». Но вы также можете создавать иерархии типов, чтобы разрешить общие случаи для обработки переменных определенных типов - например, чтобы написать функцию, которая принимает целые числа, без указания длины или подписи целого числа. Вы даже можете обойтись без ввода текста полностью, если это не нужно в конкретном контексте.
  • Джулия может вызывать библиотеки Python, C и Fortran. Джулия может напрямую взаимодействовать с внешними библиотеками, написанными на C и Fortran. Также можно взаимодействовать с кодом Python через библиотеку PyCall и даже обмениваться данными между Python и Julia.
  • Юля поддерживает метапрограммирование. Программы на Julia могут генерировать другие программы на Julia и даже изменять свой собственный код способом, который напоминает языки, подобные Lisp.
  • У Юлии есть полнофункциональный отладчик.  Julia 1.1 представила пакет отладки, который выполняет код в локальном REPL и позволяет просматривать результаты, проверять переменные и добавлять точки останова в код. Вы даже можете выполнять мелкие задачи, такие как пошаговое выполнение функции, сгенерированной кодом.

Видео по теме: Как Python упрощает программирование

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

Julia vs. Python: преимущества языка Julia

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

  • Юля быстра. JIT-компиляция и объявления типов Джулии означают, что она может на порядки превзойти «чистый» неоптимизированный Python. Python можно сделать быстрее с помощью внешних библиотек, сторонних JIT-компиляторов (PyPy) и оптимизации с помощью таких инструментов, как Cython, но Julia спроектирована так, чтобы быть быстрее сразу.
  • У Джулии удобный для математики синтаксис. Основная целевая аудитория Джулии - пользователи языков и сред для научных вычислений, таких как Matlab, R, Mathematica и Octave. Синтаксис Джулии для математических операций больше похож на способ написания математических формул вне вычислительного мира, что упрощает понимание непрограммистами.
  • У Юли автоматическое управление памятью. Как и Python, Julia не обременяет пользователя деталями выделения и освобождения памяти и обеспечивает некоторую меру ручного управления сборкой мусора. Идея состоит в том, что если вы переключитесь на Julia, вы не потеряете одно из обычных удобств Python.
  • Юлия предлагает превосходный параллелизм. Математические и научные вычисления процветают, когда вы можете использовать все ресурсы, доступные на данной машине, особенно многоядерные. И Python, и Julia могут выполнять операции параллельно. Однако методы Python для распараллеливания операций часто требуют сериализации и десериализации данных между потоками или узлами, в то время как распараллеливание Джулии более совершенное. Кроме того, синтаксис распараллеливания Джулии менее сложен, чем синтаксис Python, что снижает порог его использования.
  • Юлия разрабатывает собственные библиотеки машинного обучения. Flux - это библиотека машинного обучения для Джулии, в которой есть множество существующих шаблонов моделей для распространенных случаев использования. Поскольку он полностью написан на Julia, он может быть изменен по мере необходимости пользователем, и он использует встроенную JIT-компиляцию Julia для оптимизации проектов изнутри. 

Джулия против Python: преимущества Python

Хотя Julia специально создана для науки о данных, тогда как Python более или менее превратился в эту роль, Python предлагает некоторые неоспоримые преимущества для специалистов по данным. Некоторые из причин, по которым Python «общего назначения» может быть лучшим выбором для работы в области науки о данных:

  • Python использует индексирование массивов с нуля. В большинстве языков, включая Python и C, доступ к первому элементу массива осуществляется с помощью нуля - например, string[0]в Python для первого символа в строке. Джулия использует 1 для первого элемента в массиве. Это не произвольное решение; многие другие математические и научные приложения, такие как Mathematica, используют 1-индексацию, и Julia предназначена для этой аудитории. В Julia можно поддерживать нулевую индексацию с помощью экспериментальной функции, но 1-индексация по умолчанию может препятствовать принятию более широкой аудиторией с укоренившимися навыками программирования.
  • У Python меньше накладных расходов на запуск.  Программы Python могут быть медленнее, чем программы Julia, но сама среда выполнения Python более легкая, и обычно программам Python требуется меньше времени для запуска и получения первых результатов. Кроме того, хотя JIT-компиляция ускоряет время выполнения программ Julia, она происходит за счет более медленного запуска. Была проделана большая работа, чтобы Джулия начала быстрее, но Python все еще имеет преимущество.
  • Python зрелый. Язык Джулии молод. Julia находится в стадии разработки только с 2009 года, и за это время она претерпела изрядное изменение функциональности. Напротив, Python существует уже почти 30 лет.
  • У Python гораздо больше сторонних пакетов. Широта и полезность культуры Python сторонних пакетов остается одной из самых больших достопримечательностей языка. Опять же, относительная новизна Джулии означает, что культура программного обеспечения вокруг нее еще невелика. Отчасти это компенсируется возможностью использовать существующие библиотеки C и Python, но для процветания Джулии нужны собственные библиотеки. Такие библиотеки, как Flux и Knet, делают Julia полезным для машинного обучения и глубокого обучения, но подавляющая часть этой работы по-прежнему выполняется с помощью TensorFlow или PyTorch.
  • У Python миллионы пользователей. Язык - ничто без большого, преданного и активного сообщества вокруг него. Сообщество вокруг Джулии полно энтузиазма и растет, но это все еще лишь небольшая часть сообщества Python. Огромное сообщество Python - огромное преимущество. 
  • Python становится быстрее. Помимо улучшений интерпретатора Python (включая улучшения многоядерной и параллельной обработки), Python стало легче ускорять. Проект mypyc переводит Python с аннотациями типов в родной C, гораздо менее громоздко, чем Cython. Обычно это дает четырехкратное повышение производительности, а часто даже больше для чисто математических операций.