New Professions Lab corporate blog
Data Mining
Scala
Big Data
Machine learning
8 July

Топ-13 библиотек Scala для анализа данных

Original author: ActiveWizards
Translation

Последнее время язык Scala стал обширно применяться специалистами Data Science. Он приобрел популярность в основном благодаря появлению Spark, который написан на Scala. На практике, часто на этапе исследования анализ и создание модели выполняются в Python, а затем реализуются в Scala, поскольку этот язык больше подходит для production.


Мы подготовили подробный обзор наиболее интересных библиотек, используемых для реализации задач машинного обучения и data science в Scala. Часть из них используется в нашей образовательной программе "Анализ данных на Scala".


Для удобства все представленные в рейтинге библиотеки были разделены на 5 групп: анализ данных и математика, NLP, визуализация, машинное обучение и прочее.


Анализ данных и математика


№1. Breeze (Коммиты: 3316, Контрибьютеры: 84)


Библиотека Breeze известна как основная научная библиотека для Scala. В ней есть похожие вещи из MATLAB (с точки зрения структур данных), а из Python – классы NumPy. Breeze обеспечивает быстрые и эффективные манипуляции с массивами данных и позволяет выполнять многие другие операции, включая следующие:


  • Матричные и векторные операции для создания, транспонирования, выполнения поэлементных операций, инверсии, вычисления определителей и многих других вещей.
  • Вероятностные и статистические функции: от статистических распределений и вычисления описательных статистик (таких как среднее значение, дисперсия и стандартное отклонение) до моделей цепей Маркова. Основными пакетами для статистики являются breeze.stats и breeze.stats.distributions.
  • Оптимизация, которая подразумевает исследование функции для локального или глобального минимума. Методы оптимизации хранятся в пакете breeze.optimize.
  • Линейная алгебра: все основные операции основаны на библиотеке netlib-java, что делает Breeze чрезвычайно быстрым для алгебраических вычислений.
  • Операции по обработке сигналов. Примерами таких операций в Breeze являются свертка и преобразование Фурье, которое разбивает данную функцию на сумму компонентов синуса и косинуса.

Стоит отметить, что Breeze также позволяет строить графики, но об этом поговорим позже.


№2. Saddle (Коммиты: 184, Контрибьютеры: 10)


Другой инструмент для работы с данными для Scala – Saddle. Это аналог Pandas в Python, но только для Scala. Как и датафреймы в Pandas или R, Saddle основана на структуре фрэймов (двумерная индексированная матрица).


Всего существует пять основных структур данных, а именно:


  • Vec (1D вектор)



  • Mat (2D матрица)



  • Series (1D индексированная матрица)




Frame (2D индексированная матрица)



  • Index (в виде hashmap)

Классы Vec и Mat расположены в Series и Frame. Вы можете осуществлять различные манипуляции с этими структурами данных и использовать их для базового анализа данных. Еще одна замечательная особенность Saddle – его устойчивость к пропускам в данных.


№3. ScalaLab (Коммиты: 23, Контрибьютеры: 1)


ScalaLab – это своего рода MATLAB в Scala. Более того, ScalaLab может напрямую вызывать и получать доступ к результатам скриптов MATLAB.


Основное отличие от предыдущих вычислительных библиотек состоит в том, что ScalaLab использует свой собственный предметно-ориентированный язык, называемый ScalaSci. Scalalab удобен тем, что получает доступ к множеству научных библиотек Java и Scala, поэтому можно легко импортировать свои данные и затем использовать различные методы для выполнения манипуляций и вычислений. Большинство вещей похожи на Breeze и Saddle. Более того, как и в Breeze, существуют возможности построения графиков, которые позволяют дополнительно интерпретировать полученные данные.


NLP


№4. Epic (Коммиты: 1790, Контрибьютеры: 15) и Puck (Коммиты: 536, Контрибьютеры: 1)


Scala имеет несколько хороших библиотек обработки естественного языка в составе ScalaNLP, включая Epic и Puck. Эти библиотеки в основном используются в качестве инструментов анализа текстов. При этом Puck более удобен, если необходимо анализировать тысячи предложений из-за его высокой скорости и использования графического процессора. Кроме того, Epic известен как фреймворк прогнозирования, который использует структурированное прогнозирование для построения сложных систем.


Визуализация


№5. Breeze-viz (Коммиты: 29, Контрибьютеры: 3)


Как следует из названия, Breeze-viz – это библиотека для визуализации, разработанная Breeze для Scala. Он основан на известной библиотеке Java JFreeChart и создание графиков чем-то похоже на MATLAB. Хотя Breeze-viz имеет гораздо меньше возможностей, чем MATLAB, matplotlib в Python или R, тем не менее полезна при создании моделей и анализе данных.




№6. Vegas (Коммиты: 210, Контрибьютеры: 14)


Еще одна библиотека Scala для визуализации данных – это Vegas. Она гораздо более функциональная, чем Breeze-viz, и позволяет делать некоторые преобразования, полезные для графиков: фильтрацию, трансформации и агрегации. В целом, библиотека похожа на Bokeh и Plotly в Python.


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



Машинное обучение


№7. Smile (Коммиты: 1019, Контрибьютеры: 21)


Statistical Machine Intelligence and Learning Engine или же просто Smile – является многообещающей современной библиотекой машинного обучения, в чем-то похожей на scikit-learn в Python. Он разработан на Java, но у него также есть API для Scala. Библиотека достаточно быстрая и производительная: эффективное использование памяти, большой набор алгоритмов машинного обучения для классификации, регрессии, NNS, выбора функций и т. д.




№8. Spark ML


Библиотека машинного обучения, которая работает из коробки в Apache Spark. Сам Spark написан на Scala и имеет соответствующее API для всех своих библиотек.


Spark ML – в отличие от Spark MLlib (более старой библиотеки), работает с датафрэймами. Также она дает возможность строить пайплайны различных преобразований на ваших данных. Это может рассматриваться как последовательность этапов, где каждый этап представляет собой либо Transformer, который преобразует один датафрейм в другой, либо Estimator, например, алгоритм машинного обучения, который обучается на датафрейме.


№9. DeepLearning.scala (Коммиты: 1647, Контрибьютеры: 14)


DeepLearning.scala – это альтернативный инструмент машинного обучения, который позволяет строить модели deep learning. Библиотека использует математические формулы для создания сложных динамических нейронных сетей посредством комбинации объектно-ориентированного и функционального программирования. Она использует широкий спектр типов, а также классы аппликативных типов. Последнее позволяет начинать несколько вычислений одновременно, что повышает производительность.


№10. Summing Bird (Коммиты: 1772, Контрибьютеры: 31)


Summingbird – это фреймворк обработки данных, который позволяет использовать batch и real-time MapReduce-вычисления. Основным катализатором для разработки языка стали разработчики Twitter, которые часто занимались написанием одного и того же кода дважды: сначала для батчевой обработки, затем еще раз для стриминга.


Summingbird использует и генерирует два типа данных: потоки (бесконечные последовательности кортежей) и снэпшоты, которые в определенный момент времени считаются полным состоянием набора данных. Наконец, Summingbird предоставляет платформу для Storm, Scalding и движок для вычислений в памяти для целей тестирования.


№11. PredictionIO (Коммиты: 4343, Контрибьютеры: 125)


Стоит также упомянуть сервис машинного обучения для создания и развертывания прогностических механизмов, называемых PredictionIO. Он построен на Apache Spark MLlib и HBase и даже был оценен на Github как самый популярный продукт машинного обучения на основе Apache Spark. Он позволяет вам легко и эффективно создавать, оценивать и развертывать сервисы, реализовывать свои собственные модели машинного обучения и включать их в свой сервис.


Прочее


№12. Akka (Коммиты: 21430, Контрибьютеры: 467)


Akka, разработанная компанией-разработчиком Scala, представляет собой параллельную среду для построения распределенных приложений на JVM. Она использует модель на основе акторов (actor), где актор представляет собой объект, который получает сообщения и выполняет соответствующие действия.


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


№13. Slick (Коммиты: 1940, Контрибьютеры: 92)


Последняя библиотека – Slick, что означает Scala Language-Integrated Connection Kit. Это библиотека для создания и выполнения запросов к базам данных: H2, MySQL, PostgreSQL и т. д. Некоторые базы данных доступны через расширения slick-extensions.


Для построения запросов Slick предоставляет мощный DSL, который делает код таким, как если бы вы использовали коллекции Scala. Slick поддерживает как простые запросы SQL, так и строго типизированные джойны нескольких таблиц. Кроме того, простые подзапросы могут использоваться для создания более сложных.


Заключение


В этой статье мы выделили и кратко описали некоторые библиотеки Scala, которые могут быть очень полезны при выполнении основных задач по обработке данных.


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


+2
2.4k 37
Leave a comment
Top of the day