Kotlin для Data Science

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

  • Kotlin лаконичен, удобочитаем и прост в освоении;
  • Статическая типизация и null-безопасность помогают создавать надежный код, который легко поддерживать и улучшать;
  • Будучи JVM языком, Kotlin обеспечивает отличную производительность и возможность использовать целую экосистему проверенных и надежных Java библиотек.

Интерактивные редакторы

Блокноты, такие как Jupyter Notebook и Apache Zeppelin, предоставляют удобные инструменты для визуализации данных и исследовательских исследований. Kotlin интегрируется с этими инструментами, чтобы помочь вам изучать данные, делиться своими выводами с коллегами или развивать свои навыки в области Data Science и машинного обучения.

Kotlin ядро для Jupyter

Jupyter Notebook - это веб-приложение с открытым исходным кодом, позволяющее создавать и обмениваться документами (также известными как "ноутбуки"), которые могут содержать код, визуализации и Markdown разметку. Kotlin-jupyter - это проект с открытым исходным кодом, который обеспечивает поддержку Kotlin для Jupyter Notebook.

Kotlin в Jupyter-ноутбуке

Ознакомьтесь с GitHub репозиторием ядра Kotlin для получения инструкций по установке, документации и примеров.

Kotlin интерпретатор для Zeppelin

Apache Zeppelin - популярное веб-решение для интерактивного анализа данных. Оно обеспечивает мощную поддержку кластерной вычислительной системы Apache Spark, которая особенно полезна для дата-инжиниринга. Начиная с версии 0.9.0, в Apache Zeppelin есть встроенный Kotlin интерпретатор.

Kotlin в Zeppelin-ноутбуке

Библиотеки

Экосистема библиотек для задач, связанных с данными, созданная сообществом Kotlin, быстро расширяется. Вот некоторые библиотеки, которые могут быть полезными:

Kotlin библиотеки

  • Multik: многомерные массивы в Kotlin. Библиотека предоставляет Kotlin-идиоматический, типо- и размерно-безопасный API для математических операций над многомерными массивами. Multik дает возможность работы как с реализацией на JVM, так и с оберткой нативного оптимизированного кода, а также позволяет автоматически переключаться между реализациями для оптимизации производительности;

  • KotlinDL - это высокоуровневый API глубокого обучения, написанный на Kotlin и вдохновленный Keras. Он предлагает простые API для обучения моделей глубокого обучения с нуля, импорта существующих моделей Keras для вывода и использования обучения передаче для настройки существующих предварительно обученных моделей для ваших задач;

  • Kotlin для Apache Spark увеличивает уровень совместимости между Kotlin и Apache Spark. Это позволяет разработчикам Kotlin использовать знакомые особенности языка, такие как классы данных и лямбда-выражения, в виде простых выражений в фигурных скобках или ссылок на методы;

  • kotlin-statistics - это библиотека, которая предоставляет функции-расширения для статистического анализа. Она поддерживает основные функции для обработки числовых списков, последовательностей, массивов (от sum до skewness), операциями группировки (ориг.: slicing operators) (такие как countBy, simpleRegressionBy), операции группировки, выборки дискретной плотности вероятности, наивный байесовский классификатор, кластеризацию, линейную регрессию и многое другое;

  • kmath - это библиотека, вдохновленная NumPy. Эта библиотека поддерживает алгебраические структуры и операции, структуры, подобные массивам, математические выражения, гистограммы, потоковые операции, обертку вокруг commons-math и koma и многое другое;

  • krangl - это библиотека, вдохновленная dplyr в R и pandas из Python. Эта библиотека предоставляет инструментарий для обработки данных с использованием API функционального стиля; она также включает функции фильтрации, преобразования, агрегирования и изменения формы табличных данных;

  • lets-plot - это библиотека построения графиков для статистических данных. Она мультиплатформенная и может использоваться не только с JVM, но также с JS и Python;

  • kravis - это еще одна библиотека для визуализации табличных данных, вдохновленная ggplot в R;

  • londogard-nlp-toolkit - это библиотека, которая предоставляет инструменты для обработки естественных языков, например для работы со словами/частями слов/предложениями, частоты использования слов, стоп-слов, поиском основы слова и многим другим.

Java библиотеки

Поскольку Kotlin полностью совместим с Java, вы также можете использовать Java-библиотеки для Data Science в своем Kotlin-коде. Вот несколько примеров таких библиотек:

  • DeepLearning4J - библиотека глубокого обучения для Java;

  • ND4J - эффективная матричная математическая библиотека для JVM;

  • Dex - инструмент на основе Java для визуализации данных;

  • Smile - комплексная система машинного обучения, обработки естественного языка, линейной алгебры, графики, интерполяции и визуализации. Помимо Java API, Smile также предоставляет функциональный Kotlin API, а также Scala и Clojure API.;

    • Smile-NLP-kt - переписанные на Kotlin Scala имплициты для части Smile, отвечающей за обработку естественного языка, в виде функций-расширений и интерфейсов;
  • Apache Commons Math - библиотека общей математики, статистики и машинного обучения для Java;

  • NM Dev - математическая библиотека Java, охватывающая всю классическую математику;

  • OptaPlanner - инструмент поиска решения для проблем оптимизации планирования;

  • Charts - библиотека JavaFX для научных графиков (в разработке);

  • CoreNLP - инструментарий для обработки естественного языка;

  • Apache Mahout - распределённая программная среда для регрессии, кластеризации и рекомендаций;

  • Weka - набор алгоритмов машинного обучения для решения задач сбора данных;

  • Tablesaw - Java датафрейм (инструменты для загрузки, преобразования, фильтрации и суммирования данных), включающий в себя основанную на Plot.ly библиотеку для визуализации данных.

Если в этом списке нет того, что вам нужно, вы можете найти дополнительные варианты в GitHub репозитории Kotlin Machine Learning Demos с демонстрационными материалами от Томаса Нилда.