Последнее время язык Scala стал обширно применяться специалистами Data Science. Он приобрел популярность в основном благодаря появлению Spark, который написан на Scala. На практике, часто на этапе исследования анализ и создание модели выполняются в Python, а затем реализуются в Scala, поскольку этот язык больше подходит для production. Мы подготовили подробный обзор наиболее интересных библиотек, используемых для реализации задач машинного обучения и data science в Scala. Часть из них используется в нашей образовательной программе "Анализ данных на Scala". Для удобства все представленные в рейтинге библиотеки были разделены на 5 групп: анализ данных и математика, NLP, визуализация, машинное обучение и прочее. Библиотека Breeze известна как основная научная библиотека для Scala. В ней есть похожие вещи из MATLAB (с точки зрения структур данных), а из Python – классы NumPy. Breeze обеспечивает быстрые и эффективные манипуляции с массивами данных и позволяет выполнять многие другие операции, включая следующие: Стоит отметить, что Breeze также позволяет строить графики, но об этом поговорим позже. Другой инструмент для работы с данными для Scala – Saddle. Это аналог Pandas в Python, но только для Scala. Как и датафреймы в Pandas или R, Saddle основана на структуре фрэймов (двумерная индексированная матрица). Всего существует пять основных структур данных, а именно: Vec (1D вектор) Mat (2D матрица) Series (1D индексированная матрица) Frame (2D индексированная матрица) Классы Vec и Mat расположены в Series и Frame. Вы можете осуществлять различные манипуляции с этими структурами данных и использовать их для базового анализа данных. Еще одна замечательная особенность Saddle – его устойчивость к пропускам в данных. ScalaLab – это своего рода MATLAB в Scala. Более того, ScalaLab может напрямую вызывать и получать доступ к результатам скриптов MATLAB. Основное отличие от предыдущих вычислительных библиотек состоит в том, что ScalaLab использует свой собственный предметно-ориентированный язык, называемый ScalaSci. Scalalab удобен тем, что получает доступ к множеству научных библиотек Java и Scala, поэтому можно легко импортировать свои данные и затем использовать различные методы для выполнения манипуляций и вычислений. Большинство вещей похожи на Breeze и Saddle. Более того, как и в Breeze, существуют возможности построения графиков, которые позволяют дополнительно интерпретировать полученные данные. Scala имеет несколько хороших библиотек обработки естественного языка в составе ScalaNLP, включая Epic и Puck. Эти библиотеки в основном используются в качестве инструментов анализа текстов. При этом Puck более удобен, если необходимо анализировать тысячи предложений из-за его высокой скорости и использования графического процессора. Кроме того, Epic известен как фреймворк прогнозирования, который использует структурированное прогнозирование для построения сложных систем. Как следует из названия, Breeze-viz – это библиотека для визуализации, разработанная Breeze для Scala. Он основан на известной библиотеке Java JFreeChart и создание графиков чем-то похоже на MATLAB. Хотя Breeze-viz имеет гораздо меньше возможностей, чем MATLAB, matplotlib в Python или R, тем не менее полезна при создании моделей и анализе данных. Еще одна библиотека Scala для визуализации данных – это Vegas. Она гораздо более функциональная, чем Breeze-viz, и позволяет делать некоторые преобразования, полезные для графиков: фильтрацию, трансформации и агрегации. В целом, библиотека похожа на Bokeh и Plotly в Python. Vegas позволяет писать код в декларативном стиле, что дает возможность сосредоточиться главным образом на определении того, что необходимо сделать с данными, и проведении дальнейшего анализа визуализаций, не беспокоясь об имплементации кода. Statistical Machine Intelligence and Learning Engine или же просто Smile – является многообещающей современной библиотекой машинного обучения, в чем-то похожей на scikit-learn в Python. Он разработан на Java, но у него также есть API для Scala. Библиотека достаточно быстрая и производительная: эффективное использование памяти, большой набор алгоритмов машинного обучения для классификации, регрессии, NNS, выбора функций и т. д. Библиотека машинного обучения, которая работает из коробки в Apache Spark. Сам Spark написан на Scala и имеет соответствующее API для всех своих библиотек. Spark ML – в отличие от Spark MLlib (более старой библиотеки), работает с датафрэймами. Также она дает возможность строить пайплайны различных преобразований на ваших данных. Это может рассматриваться как последовательность этапов, где каждый этап представляет собой либо Transformer, который преобразует один датафрейм в другой, либо Estimator, например, алгоритм машинного обучения, который обучается на датафрейме. DeepLearning.scala – это альтернативный инструмент машинного обучения, который позволяет строить модели deep learning. Библиотека использует математические формулы для создания сложных динамических нейронных сетей посредством комбинации объектно-ориентированного и функционального программирования. Она использует широкий спектр типов, а также классы аппликативных типов. Последнее позволяет начинать несколько вычислений одновременно, что повышает производительность. Summingbird – это фреймворк обработки данных, который позволяет использовать batch и real-time MapReduce-вычисления. Основным катализатором для разработки языка стали разработчики Twitter, которые часто занимались написанием одного и того же кода дважды: сначала для батчевой обработки, затем еще раз для стриминга. Summingbird использует и генерирует два типа данных: потоки (бесконечные последовательности кортежей) и снэпшоты, которые в определенный момент времени считаются полным состоянием набора данных. Наконец, Summingbird предоставляет платформу для Storm, Scalding и движок для вычислений в памяти для целей тестирования. Стоит также упомянуть сервис машинного обучения для создания и развертывания прогностических механизмов, называемых PredictionIO. Он построен на Apache Spark MLlib и HBase и даже был оценен на Github как самый популярный продукт машинного обучения на основе Apache Spark. Он позволяет вам легко и эффективно создавать, оценивать и развертывать сервисы, реализовывать свои собственные модели машинного обучения и включать их в свой сервис. Akka, разработанная компанией-разработчиком Scala, представляет собой параллельную среду для построения распределенных приложений на JVM. Она использует модель на основе акторов (actor), где актор представляет собой объект, который получает сообщения и выполняет соответствующие действия.  Основным отличием является дополнительный уровень между акторами и фреймворком, который требует только, чтобы акторы обрабатывали сообщения, в то время как фреймворк берет на себя обработку всего остального. Все акторы иерархически организованы, это помогает акторам более эффективно взаимодействовать друг с другом и решать сложные проблемы, разделяя их на более мелкие задачи. Последняя библиотека – Slick, что означает Scala Language-Integrated Connection Kit. Это библиотека для создания и выполнения запросов к базам данных: H2, MySQL, PostgreSQL и т. д. Некоторые базы данных доступны через расширения slick-extensions. Для построения запросов Slick предоставляет мощный DSL, который делает код таким, как если бы вы использовали коллекции Scala. Slick поддерживает как простые запросы SQL, так и строго типизированные джойны нескольких таблиц. Кроме того, простые подзапросы могут использоваться для создания более сложных. В этой статье мы выделили и кратко описали некоторые библиотеки Scala, которые могут быть очень полезны при выполнении основных задач по обработке данных.  Если у вас есть опыт работы с любыми другими полезными библиотеками или платформами Scala, которые стоит добавить в этот список, пожалуйста, не стесняйтесь делиться ими в комментариях. Education program designer