Абстрактная иконка

Ночь, улица, фонарь, аптека,
Блок-схема, данные, цейтнот,
Еще похож слегка на человека,
РП к дедлайну радостно идет…



Здравствуйте, коллеги! Разрешите представиться. Зовут меня Дмитрий Изумрудов, и я руководитель IT-проектов компании ООО «СТЦ».

Работа руководителя IT-проектов – рисковая, как работа сапера на минном поле. Руководитель проектов разработки программного обеспечения, связанного с Data-mining, рискует вдвойне. А если это еще и научно-исследовательская работа, связанная с поиском нестандартных решений стандартных задач в условиях ограниченного времени и ресурсов? Руководитель такого проекта часто становится научным руководителем и должен искать пути достижения результата, оценивать возможности реализации тех или иных решений, представлять и аргументировать свои предложения по разработке не только для заинтересованного инициатора работ, но и для своих коллег исполнителей. При этом может существовать множество замыслов, и далеко не каждый из них в итоге будет эффективен.

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


Абстрактная иконка Итак, далее речь пойдет о продукте KNIME Analytics platform. Платформе анализа данных. Заинтересованный читатель без труда найдет описание KNIME в сети Интернет, его дистрибутив можно скачать с официального сайта разработчика.

Абстрактная иконка KNIME интересен тем, что позволяет осуществлять визуальное конструирование схем обработки и представления данных, в том числе больших объемов, при помощи весьма обширного набора узлов-компонентов. При этом, есть набор компонентов, которые существуют в дистрибутиве KNIME и множество компонентов из состава дополнений, также бесплатно устанавливаемых в среду KNIME и имеющих специфическую, именно Вам требуемую, направленность. Например, расширения обработки изображений, аудио, аналитики текстов, биоинформатики, а также разнообразные коннекторы к внешним ресурсам типа Git, OpenStreetMap, Google Cloud и т.д. — перечень весьма обширен. Настолько обширен, что глаза разбегаются.
На приведенном рисунке (слева) представлена структура классов компонентов, используемых при конструировании схем обработки данных в KNIME. Из основных, можно выделить класс компонентов ввода/вывода, преобразования/обработки, отображения, анализа, работы с БД, работы с нестандартными типами данных, работ со структурами, компоненты скриптов, внешних сервисов, узлы управления процессами обработки данных, узлы формирования отчетов. Каждый из этих классов содержит множество различных компонентов, и далее мы рассмотрим лишь некоторые из них.

Ввод-вывод данных


Абстрактная иконка Источниками данных в KNIME могут быть файлы различного типа, например, Excel-файлы (Excel Reader), CSV (CSV Reader, File Reader, …), построчно считываемые файлы (Line Reader). Также можно загрузить данные при помощи подключения к внешним ресурсам по протоколам, например, FTP, SSH, и т.п. Достаточно ли этих источников?
Думаю, нет. И действительно, если заглянуть поглубже – то можно обнаружить, что есть возможность подключения также к базам данных распространенных форматов, таким как Microsoft SQL, SQLite, PostgreSQL и т.п.
А если хочется чего-то еще? Хорошо, можно еще поискать, например, в загружаемых дополнительно расширениях. И найти, например, возможность подключения к базе MongoDB.
А если и этого мало?

Смотрим дальше – и находим еще, например, возможность получения данных от внешних интернет-ресурсов при помощи REST Web Service.
Но и это еще не все. Можно получать данные при помощи интеграции со скриптовыми расширениями, такими как JAVA, Python, Groovy, R, … Можно обрабатывать тексты, работать с архивами, аудиофайлами и изображениями. То есть для входа KNIME предоставляет весьма богатый набор адаптеров.


Что происходит дальше? При загрузке из любого источника, в большинстве случаев, данные преобразуются во внутренний табличный формат KNIME, не требуют перезагрузки из исходного источника и оперативно доступны для последующих преобразований и обработки.
Итак, на первом шаге я, как исследователь, имея в своем распоряжении информацию в разных местах и в произвольном формате, при помощи KNIME оперативно загрузил ее в систему анализа, привел к единому формату и теперь готов дальше ее обрабатывать и анализировать.

Преобразование/обработка


Большинство операций преобразования и обработки в KNIME предполагают манипулирование строками и столбцами таблиц, сформированных при загрузке данных из различных источников.
Если посмотреть на состав компонентов, собранных в соответствующей группе репозитария, то можно выделить такие операции, как конвертацию и замену, фильтрацию, разделение и комбинирование, трансформацию.
Перечисленные операции производятся как в режиме обработки столбцов, так и в режиме строковой обработки. У каждого режима есть свои особенности. Так как строка таблицы (как правило) представляет один набор данных, то операции над столбцами преобразуют данные в целом для всех имеющихся записей (ну, например, здесь производится нормализация значений). Операции со строками больше предназначены для отбора данных для дальнейшего использования, например, здесь можно разбить таблицу данных на блоки по какому-либо признаку.
В качестве банального примера можно предложить произвести фильтрацию столбцов исходных данных с малым количеством содержательных полей (Missing Value Column Filter), отфильтровать столбцы с повторяющимися значениями (Constant Value Column Filter), переименовать столбцы, сменить тип или исключить какой-либо столбец из дальнейшей обработки (Table Manipulator).
В качестве менее банального примера можно предложить вариант математической обработки данных и формирование новых вычисляемых столбцов, или обработку строковых столбцов при помощи регулярных выражений.
Можно произвести транспонирование таблицы (Pivoting/Unpivoting), сортировку строк (Sorter), агрегирование (GroupBy) и т.п.
На этом этапе я могу отбросить малозначащие и ошибочные данные, сделать какие-то выводы о содержательности анализируемых данных, прочесть вспомогательную информацию о составе данных, распределении значений и принять решение о достаточности данных и целесообразности их дальнейшей обработки.

Отображение


Под отображением данных в данном случае подразумевается их визуализация. На каждом этапе цепочки обработки данных, практически для любого компонента имеется встроенная возможность отображения данных в табличном виде.



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


KNIME предлагает для графической визуализации ряд стандартных компонентов, расположенных также в области репозитория. Здесь есть как стандартные виды графиков и диаграмм, так и представления, характерные для статистического анализа данных или других вариантов анализа.
В частности, есть компоненты для отрисовки диаграмм типа «ящик с усами» (Box Plot, Conditional Box Plot), Облако тегов (Tag Cloud), диаграмма дерева решений (Decision Tree View), Тепловая карта (Heatmap).
Таким образом, практически любой вариант визуализации данных доступен пользователю. Если же нужен какой-то специфический вариант визуализации, то его можно поискать в составе дополнительно устанавливаемых компонентов. Примером такого варианта является отображение географической подложки (на основе карт Open Street Map).
Кстати, в составе расширения работы с картами есть интересные фильтры. Например, можно штатным образом производить фильтрацию географических координат путем интерактивного выделения полигонов на подложке карты.
Не размещаю в статье рисунков с примерами графического отображения – предлагаю посмотреть их заинтересованному читателю самостоятельно. Для того, чтобы это сделать можно воспользоваться набором предусмотренных в программе тестовых примеров с самыми различными представлениями обработки и визуализации.

Анализ


KNIME мало бы отличался по полезности от Microsoft Excel, если бы не содержал в себе средств анализа больших данных. Компоненты такого специфического анализа представлены на рисунке. Здесь можно увидеть много знакомых аналитику названий методов и средств. Это и кластеризация (Clustering), и работа с наивным Байесом (Bayes), нейронные сети (Neural Network), деревья решений (Decision Tree), опорные вектора (SVM), просто статистический анализ данных с подсчетом различных метрик (раздел Statistics) и т.д.
Опять-таки, это только базовые компоненты.
Если хочется чего-то еще – пожалуйста! В качестве примера, работа с натуральным языком представлена загружаемым расширением KNIME Textprocessing.
При помощи инструментов данного расширения можно проводить анализ текстов, загружаемых предусмотренными парсерами из различных источников, включая MS Word и PDF.
К сожалению, специфические компоненты текстовой обработки, типа теггеров, не работают с русским языком. Возможно, это досадное упущение будет устранено впоследствии энтузиастами KNIME.
Можно также упомянуть расширение KNIME, предназначенное для работы с временными рядами. Оно может весьма заинтересовать исследователей, работающих с биржевыми котировками и, не побоюсь этого слова, криптовалютными рынками.
Да, при помощи KNIME можно оперативно осуществлять проверку гипотез, например, при выборе акций, фьючерсов для краткосрочных спекуляций и долговременных капиталовложений. Причем (кто в курсе, тот оценит) здесь можно даже учитывать новостные ленты. И даже брать данные из Twitter. Для этого есть коннектор. Twitter Трампа, где ты?

Настройка, управление и прочее, прочее, прочее…


Описать весь функционал KNIME в рамках одной статьи невозможно. Ну, если, конечно, не использовать только эпитеты. Поэтому, буду останавливаться и в завершение отмечу еще несколько интересных сторон KNIME. Что еще здесь есть?
Есть возможность интегрировать в схемы обработки данных существующие алгоритмы, написанные на языках Java, Python, R, Groovy и не только. При этом, можно даже работать с некоторыми средствами интерактивно. Например, выводить графики обработанных данных средствами IDE языка R.
Есть возможность «графического» программирования обработки данных с циклами, обработкой ошибок, условным ветвлением.
Есть возможность реализации собственных компонентов и метаузлов, включающих типовые для вашей специфики обработки данных преднастроенные цепочки.
Есть возможность организации интерактивного интерфейса со средствами ввода и редактирования данных, переменных расчета и т.д.
Есть возможность экспорта в MS Excel и даже в такие инструменты визуализации и обработки как Tableau!
Есть возможность, причем с достаточно удобными средствами извлечения данных, работать с XML и JSON документами.
Есть возможность работы с БД в режиме SQL запросов.
Есть возможность доступа к HTML ресурсам.
Есть, есть, есть…
В общем, в заключение, хочу сказать, что я достаточно редко встречаю настолько продуманные и функциональные продукты.
Полагаю, что кого-то смог заинтересовать KNIME. Хорошо, если он окажется для кого-то настолько же полезным, каким полезным и интересным он оказался для меня.

Думаю, даже знаю, что в KNIME скрыто еще много интересных возможностей. И про эти возможности мы поговорим далее уже на конкретных примерах.

Комментарии (2)


  1. Ustas4
    10.12.2021 08:47

    10 лет тому назад Talend был крут. KNIME на первый вгляд круче. Надо попробовать.

    В моем случае требования к скорости обработки данных, работа в локальной сети без выхода в интернет, дистрибутив или локальный WEB server.


  1. ivymike
    11.12.2021 02:18

    Можно было просто скинуть ссылку на документацию))

    и статью писать не надо