Некоторые языки программирования были созданы для обработки больших массивов данных, и вокруг них сложилась целая экосистема из библиотек и фреймворков. Другие языки совсем новые, но работают гораздо быстрее. Вместе с дата-сайентистом и ментором SkillFactory Викторией Тюфяковой разбираемся, в каких случаях лучше использовать R, а в каких — MATLAB и почему Julia может потеснить Python.
Программирование нужно для всех этапов работы с большими данными, от выгрузки и очистки до проектирования баз данных и точной настройки алгоритмов машинного обучения. Вы можете выбрать любой язык из этого списка, но у каждого из них есть свои особенности и задачи, для которых он лучше подходит. Если это работа с базой данных клиентов для маркетинговой аналитики, подойдут более простые языки, а если серьезное научное исследование — то более сложные и точные.
R — для любителей статистики
R был создан для работы со статистикой. Он позволяет собирать и очищать данные, работать с таблицами, проводить статистические тесты, различные виды анализа и составлять графические отчеты. R подойдет для специалистов, знакомых с теорией вероятности, статистическими методами и математическим анализом, поэтому на первый взгляд он может показаться сложным из-за интуитивно непонятного синтаксиса.
На практике R используют:
- для научных исследований в разных сферах;
- машинного обучения и нейросетей;
- маркетинговых исследований.
Для R создано более 10 тыс. библиотек и расширений. Например, Ggplot2 — для визуализации данных, Bioconductor — для работы с генетической информацией, а Quanteda — для анализа текстов.
Кроме этого, R выделяют среди конкурентов высокая скорость обработки данных и открытый исходный код.
Основная проблема при использовании R для больших наборов данных — ограничение в оперативной памяти, которая обеспечивает более быстрый доступ и манипулирование данными, чем при хранении данных на жестких дисках. Если вы готовы пожертвовать производительностью, то можно работать с большими наборами данных в R. Также есть пакеты R, которые помогают при работе с большими данными; я бы рекомендовала обратиться к представлению задач CRAN «Высокопроизводительные и параллельные вычисления с R».
Python — популярный и понятный
Самый популярный язык программирования в рейтинге TIOBE. В работе с Big Data Python зарекомендовал себя как один из лучших инструментов наравне с R:
- Дата-сайентисты используют язык для работы с машинным обучением и искусственным интеллектом.
- Аналитики при помощи библиотек и фреймворков обрабатывают большие массивы данных.
- Дата-инженеры с помощью него интегрируют сторонние решения для работы с данными.
Для работы с данными создано несколько специализированных Python-библиотек: NumPy — для вычислений, Pandas — для анализа табличных данных, Matplotlib — для визуализации. В отличие от R, Python кроме обработки и визуализации данных активно используется для разработки сайтов, приложений и других продуктов. Также считается, что это простой язык для новичков, так как у него понятный синтаксис (мы рассказывали, с чего начать учить Python, в этой статье).
Для анализа больших данных на Python можно использовать PySpark – это библиотека из проекта Apache Spark для анализа больших данных. PySpark предоставляет множество функций для анализа больших данных на Python. Она поставляется с собственной оболочкой, которую вы можете запустить из командной строки».
Кому и зачем нужен Python, мы писали тут.
Java — самый универсальный
На Java пишут сайты, разрабатывают ПО и приложения. Это многофункциональный и кроссплатформенный язык, код на котором одинаково работает на мобильных устройствах, консолях или в системе умного дома.
Он позиционируется как язык №1 в мире, которым пользуется около 9 млн разработчиков. На Java написано множество Big Data инструментов с открытым кодом (например, большая часть экосистемы Hadoop), поэтому разработчики могут на их основе создавать собственные продукты для управления данными. Универсальность — основное преимущество Java в Big Data.
Java — это высокоэффективный скомпилированный язык, который широко используется для высокопроизводительного кодирования (ETL) и алгоритмов машинного обучения. Вот почему большие данные и Java — большие друзья».
Кому и зачем нужен Java, мы писали в разборе.
Scala — самый недооцененный
Язык Scala не очень популярен у программистов, в рейтинге TIOBE он не входит даже в первую двадцатку. При этом в задачах по обработке данных он гораздо быстрее, чем более популярный Python. Scala способен быстро обрабатывать невероятно большие объемы информации, поэтому его используют Twitter, LinkedIn или Тинькофф.
На Scala написан фреймворк Apache Spark, важный для машинного обучения и анализа больших данных. Этот фреймворк входит в экосистему Hadoop и позволяет параллельно обрабатывать неструктурированные данные в реальном времени. Он легко взаимодействует с кодом на Java и библиотеками этого языка.
Scala работает на JVM и у него лучше структуры параллелизма, чем у Java, поскольку Scala обеспечивает лучшую поддержку парадигмы функционального программирования».
C++ — сложный, но быстрый
C++ — язык общего назначения; это значит, что с его помощью можно решить задачу из любой области программирования. Чаще всего на нем пишут операционные системы, крупные игры и такие пакеты программ, как MS Office или Adobe. В Big Data он тоже используется в основном для создания инструментов обработки данных, а не для непосредственной работы с ними. Например, MapReduce, который сейчас входит в экосистему Hadoop, изначально был написан как раз на C++.
Мы подробно разбирали, зачем и кому нужен C++.
C++ быстрее, чем многие конкуренты (Go, R или Python). Особенно это востребовано в машинном обучении, где нужно быстро обрабатывать терабайты данных. Это единственный язык, на котором данные размером более 1 Гб могут быть обработаны за секунду.
Но при этом он действительно сложный в изучении. В 2009 году компания Google создала простой и понятный язык Go, который справлялся бы с задачами C++, высокой нагрузкой и большими объемами данных. После этого в сообществе разработчиков стали возникать споры, что лучше: учить GoLang или C++:
У C/C++ лучшие производительность и скорость, когда все остальные аспекты совпадают. Большинство алгоритмов глубокого обучения реализованы на C++. На нем написано Caffe — популярное хранилище алгоритмов глубокого обучения, Minerwa от MSR China — библиотека быстрых нейронных сетей, AlexNet в CUDA ConvNet и так далее.
Go — создан Google для Big Data
Язык программирования Go создан компанией Google для работы с большими данными, поэтому сейчас он используется в большинстве продуктов компании:
- для работы с искусственным интеллектом;
- работы с базами данных;
- веб-разработки (особенно для backend).
MATLAB — для любителей научных методов
Это язык, который больше подходит для научной или производственной сферы и сложных математических вычислений. Университеты используют его в академических курсах по прикладной математике, физике и в инженерных разработках.
Считается, что рядовому разработчику не требуется этот язык. В основном его используют там, где нужны предельная точность и минимальные погрешности при работе с данными: в системах автопилота, медицине или космических исследованиях.
Julia — молодой и перспективный
Язык Julia задумывался как более простая и понятная альтернатива MATLAB. Он одним из самых молодых и современных языков, но уже вошел в топ-5 любимых языков программирования среди разработчиков по версии Stack Overflow.
По параметрам производительности Julia не уступает Python, R или MATLAB. Его используют для обработки запросов в backend, машинного обучения и даже для создания компьютерных симуляций. В будущем Julia может заменить популярный Python, но пока этот язык развивается, не имеет собственной экосистемы инструментов и большого набора библиотек, а разработчики используют для работы с ним Python-библиотеки.
*Hadoop — не язык, но активно используется
Это набор IТ-продуктов, который в основном написан на языке Java и адаптирует его к работе с Big Data. В него входят:
- Hadoop Common — набор библиотек для управления файлами;
- Hadoop Distributed File System — система хранения файлов на разных серверах;
- Yet Another Resource Negotiator — система планирования заданий и управления кластерами данных;
- Hadoop MapReduce — фреймворк для выполнения параллельных вычислений.
Так как Hadoop — это целая экосистема продуктов, его часто принимают за отдельный язык программирования. Его используют сайты и интернет-магазины с высокой пользовательской нагрузкой, такие как Google, AliExpress, Ebay. С помощью Hadoop они анализируют поисковые запросы и другую информацию о своих пользователях.