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

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Последнее время язык 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, которые стоит добавить в этот список, пожалуйста, не стесняйтесь делиться ими в комментариях.


Источник: habr.com

Комментарии: