О KNIME
Вашему вниманию представляется обзор Knime Analytics Platform – open source фреймворка для анализа данных. Данный фреймворк позволяет реализовывать полный цикл анализа данных включающий чтение данных из различных источников, преобразование и фильтрацию, собственно анализ, визуализацию и экспорт.
Скачать KNIME (eclipse-based десктоп приложение) можно отсюда: www.knime.org
Кому может быть интересна эта платформа:
- Тем, кто хочет анализировать данные
- Тем, кто хочет анализировать данные и не владеет навыками программирования
- Тем, кто хочет покопаться в неплохой библиотеке реализованных алгоритмов и, возможно, узнать что-то новое
Workflows
В Knime процесс программирования логики осуществляется через создание Workflow. Workflow состоит из узлов которые выполняют ту или иную функцию (например чтение данных из БД, трансформация, визуализация). Узлы, соответственно, соединяются между собой стрелочками которые показывают направление движение данных.
![image](https://www.knime.org/files/images/products/AnalyticsPlatform/end-to-end_analytics_workflow.png)
(картинка с официального сайта)
После того как workflow создан – его можно запустить на исполнение. После того как workflow запущен на исполнение, в базовом сценарии узлы workflow начинают отрабатывать один за одним, начиная с самого первого. Если в ходе выполнения того или иного узла произошла ошибка, то исполнение всей ветки следующей за ним прекращается. Существует возможность перезапуска workflow не с первого, а с произвольного узла.
Светофор у каждого узла отражает его текущее состояние – красный – ошибка, желтый – готов к исполнению, зеленый – выполнен.
Nodes
Workflow состоит из узлов (или «нод»). Практически у каждого узла есть конфигурационный диалог в котором можно настраивать свойства.
Все узлы разбиты на категории:
![](https://habrastorage.org/files/28a/739/c40/28a739c407534a328cf4313f54ed12e0.png)
Поддерживается следующие типы узлов: IO — ввод/вывод данных (например чтение CSV), Manipulation – преобразование данных (включая фильтрацию строк, столбцов, сортировку), Views – визуализация данных (построение различных графиков включая Histogram, Pie Chart, Scatter Plot, etc), Database – возможность подключения к базе данных, чтения/записи, Workflow Control – создание циклов, итерирование групп в ходе выполнения workflow и прочее.
Из узлов реализующих анализ данных доступны различные статистические методы (включая линейную корреляцию, проверку гипотез) а также Data Mining методы (например нейронные сети, построение decision trees, cluster view).
На официальном сайте есть хорошая диаграмма показывающая как можно компоновать узлы разных типов в единый flow:
![image](http://i2.wp.com/blog.fractalanalytics.com/wp-content/uploads/2015/02/KNIME.png)
Пример workflow #1: построение простого Scatter Plot
Рассмотрим пример простого workflow который вытягивает данные, производит JOIN значений по некоему полю ID, фильтрацию и визуализацию результата на Scatter Plot.
![](https://habrastorage.org/files/f3c/727/0cc/f3c7270ccf13462598c2a43c7ef16d6b.png)
В данном workflow мы создаем два соединения к БД через Database Table Connector. Внутри Database Table Connector-ов находятся SQL-запросы вытягивающие требуемые данные. При помощи Database Connection Table Reader данные непосредственно выгружаются. После того как данные прочитаны Reader-ами, они приходят в узел Joiner, в котором выполняется операция, соответственно, JOIN. В узле String to Number происходит преобразование строковых значений в численные, далее фильтруются лишние столбцы и наконец данные приходят в визуализационный узел Scatter Plot.
Далее, после успешного исполнения Flow, можно нажать на View Scatter Plot в контекстном меню и посмотреть результат визуализации:
![](https://habrastorage.org/files/d3b/217/1d2/d3b2171d26be42c2b2591afcee621666.png)
Построенный график открывается в новом окне.
![](https://habrastorage.org/files/6a1/dab/926/6a1dab926850412d94a14c81e679c08f.png)
Таким образом, за небольшое время, не написав ни строчки кода, можно сделать выборку требуемых данных из источника, применить различные фильтрации, сортировки и визуализировать результат.
Пример workflow #2: Correlation Analysis
Рассмотрим еще один пример. Хочется сделать относительно большую выборку данных из БД, сгруппировать выборку по значениям некоего поля, и внутри каждой группы найти коррелляцию значений из этой группы и целевого вектора.
![](https://habrastorage.org/files/a33/d07/dd6/a33d07dd6ed34675bc4876ca165bf370.png)
В данном примере открывается два соединения к БД. Через одно соединение (Node 2) SQL-запросом вытягивается вектор из нескольких значений. Это будет целевой вектор к которому будем искать корреляцию.
Через другое соединение (также SQL-запросом) вытягивается относительно большая выборка данных. Далее данные попадают в Group Loop Start – Workflow Control оператор который делает GROUP BY, внутри этого loop-а к данным JOIN-ится целевой вектор, делается преобразование строковых значений в численные и считается линейная корреляция. Результаты вычислений аккумулируются в узле Loop End. На выходе из этого узла применяется фильтрация по строкам и столбцам, нормализация значений и построение Box Plot.
После исполнения всего workflow и нажатия на View: Box Plot открывается окно с подсчитанными значениями для Box Plot.
![](https://habrastorage.org/files/c5d/016/2f0/c5d0162f03604d858b722cc41f380c1f.png)
Альтернативный вариант – применить операцию Pivot и при помощи JOIN добавить целевой вектор, а затем итерироваться по столбцам и считать корреляцию. На workflow предоставлена заготовка для альтернативного варианта (в виде узла Pivot), но сам подход не реализован.
Дополнительные возможности
Из интересных особенностей, на которые я обратил внимание, можно выделить следующие:
- Исполнение workflow на сервере и предоставление доступа к результатам работы через REST API. Данная функциональность доступна при покупке KNIME-Server
- Полный дистрибутив KNIME-а со всеми плагинами весит почти 2 гигабайта. В данный дистрибутив входит большое количество сторонних библиотек (например JFreeChart), которые становятся доступны в виде узлов
- Реализована возможность сделать операцию Pivot прямо на базе данных или на данных загруженных в локальный кеш
- Доступна большая библиотека примеров
- Работа с Hadoop и другими BigData источниками
Проблемы и выводы
Данная система предоставляет довольно гибкий подход к построению алгоритмов анализа, преобразования и визуализации данных, но все же на сложных workflow, на мой взгляд, можно столкнуться со следующими проблемами:
- Недостаточно гибкое поведение узлов – они работают так как хотят и подтюнить какие-то нюансы работы может быть достаточно сложно (если не влезать внутрь кода)
- Программирование сложных flow может вылиться в длинную и сложную диаграмму с циклами, условиями что приведет к сложности чтения и отладки. В данном случае написание кода на R или Python может быть более правильным выбором
Данный фреймоврк хорошо подойдет для людей не сильно знакомых с программированием, с его помощью можно быстро создавать простые и средней сложности workflow и предоставлять к ним доступ через REST. Это может быть востребовано в каких-либо организациях.
Data scientists, возможно, тоже найдут для себя много интересного и могут рассмотреть эту систему как дополнение к R или Python.
Этот фреймворк хорош также для работы со студентами, поскольку наглядно видно все что происходит с данными, по каким веткам они перемещаются и как преобразуются. Студенты могут изучать реализацию существующих узлов, дописывать свои компоненты (узлы) и пополнять ими библиотеку.