Футы, рамы, инстаграммы,
Стулья, Бендер, вольный найм,
В рамках выбранной программы -
Дальше изучаем KNIME!

И снова здравствуйте!

Данная статья является следующей в цикле статей про оперативную аналитику данных, начатую здесь: https://habr.com/ru/company/stc_spb/blog/594483/.

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

Темы обучающих примеров KNIME
Темы обучающих примеров KNIME

Когда я просматривал их, с целью выбрать интересный вариант для рассмотрения в очередной статье нашего цикла, я подумал, что уже сейчас и могу начать практическую часть изложения. То есть, для выбора темы – давайте-ка с вами и
начнем препарировать KNIME средствами KNIME. Это будет уроборос «оперативной аналитики данных», причем в конкретных прикладных целях.

Итак, в KNIME нам доступен приведенный слева набор тем обучающих примеров. Этот же список доступен на хабе KNIME, по адресу https://hub.knime.com/knime/spaces/Examples/latest/.

Сформулирую себе задачу так: «Для выбора темы следующей статьи я хочу получить полный список всех примеров, которые есть для KNIME, с описаниями, блэкджеком, и…»… эээ… ну, достаточно.

Сначала в KNIME создается проект, workflow, в котором уже размещаются и настраиваются цепочки узлов-компонентов. Для доступа к web-странице я буду использовать элемент «Webpage Retriever». Этот элемент позволяет обратиться к интернет ресурсу по указанному адресу и получить соответствующее содержимое.

Выбор компонента в репозитории
Выбор компонента в репозитории

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

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

Страница подсказки "Description"
Страница подсказки "Description"

Доступ к параметрам компонента осуществляется двойным кликом. Основной параметр – адрес страницы. После заполнения, закрываю окно параметров.

На каждом узле внизу «светофор». Красный свет – означает, что компонент не настроен или настроен с ошибками. Желтый свет – настроен, но еще не был запущен на обработку данных. Зеленый свет – данные обработаны.

Запускаю обработку нажатием клавиши F7 (или нажатием зеленого треугольничка на иконке управления, или через всплывающее меню узла). После считывания проверяю полученный результат. Сделать это можно либо при помощи того же всплывающего меню, либо на специальной странице/вкладке «Node Monitor».

Результат выполнения узла - загрузчика
Результат выполнения узла - загрузчика

Далее надо извлечь необходимое содержимое. Для этого беру компонент XPath, умеющий формировать запросы к структурированным XML-данным и соединяю его вход с выходом первого узла. Открываю диалог настройки и визуально в окне парсера входного содержимого выбираю мышью необходимый мне элемент загруженной страницы, а именно гиперссылку раздела группы тематических примеров. Интерактивно можно выбрать только конкретный элемент исходного представления страницы, поэтому для получения списка таких элементов – вручную редактирую предложенный XPath запрос:

/html/body/div/div/div/div/main/section[3]/div/div/table/tbody/tr/td[1]/a/@href

Закрываю окно настройки, запускаю обработку данных.

Параметры запроса и предварительный результат
Параметры запроса и предварительный результат

После обработки, на выходе получаю список гиперссылок, представляющих соответствующие разделы тематических примеров на сайте KNIME.

Набор извлеченных ссылок
Набор извлеченных ссылок

Состав ссылок в точности соответствует группам, представленным в интерфейсе программы KNIME. Теперь я предполагаю последовательно обработать каждую из полученных ссылок, чтобы сформировать полное дерево примеров. Но сначала, я хочу извлечь названия групп из гиперссылок. Это можно сделать при помощи компонента «Regex Split», при помощи привычных регулярных выражений.

Формирование регулярного выражения для извлечения данных
Формирование регулярного выражения для извлечения данных

Составляю стандартное regex-выражение, в котором скобками выделяю то содержимое, которое меня интересует и запускаю выполнение узла. После выполнения, выходная таблица данных дополняется новым столбцом «split_0» где находятся названия групп.

Для обработки ссылок в цикле я делаю управляющий контур при помощи узла «Table Row To Variable Loop Start». Этот компонент поочередно запустит обработку для каждой строки нашей таблицы данных. Очевидно, в составе обработки будет присутствовать уже знакомый компонент получения содержимого www-страницы. Чтобы сообщить KNIME, где кончается цикл – используется узел «Loop End». Именно этот узел, в конечном итоге, соберет все данные, полученные в ходе цикла, в итоговую таблицу.

Инициализация цикла производится при помощи пременной, определенной в начальном узле цикла. KNIME по очереди переберет строки начального узла цикла и подставит нужное нам значение переменной туда, куда мы ему укажем при настройке. Сделать это можно, например, на вкладке диалога настройки «Flow Variables».

Настройка обработки данных в цикле
Настройка обработки данных в цикле

Узел ХPath в цикле настраивается аналогично предыдущему случаю. После настройки – запускаем обработку и смотрим результат.

Извлеченные данные, с учетом обработки в цикле
Извлеченные данные, с учетом обработки в цикле

На контрольной вкладке видим, что KNIME извлек 155 строк со вторичными гиперссылками. Причем не все из них нам нужны. Если просмотреть всю таблицу то видно, что некоторые гиперссылки дублируются. В качестве варианта фильтрации, давайте устраним дубликаты при помощи элемента «Duplicate Row Filter».

Настройка фильтра простейшая и после его отработки – из 155 строк остаются 144. Отфильтровались гиперссылки «возврата на предыдущую страницу». На следующем шаге получаю таким же образом гиперссылки третьего (и последнего) уровня.

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

Второе отступление – я заметил, что дублированные «возвраты на предыдущую страницу» - неудобны, когда постоянно выдаются ранее созданной схемой обработки. Поэтому я на этом шаге принял решение вернуться назад и скорректировать схему. А именно: применить другой фильтр – убирающий первую строку результатов цикла. При переделке схемы сбрасываются все данные, начинающиеся с точки разрыва цепочки обработки (загорается желтый светофор).

Итак, переделываю, запускаю, жду. Через некоторое время, на оконечном узле загорается зеленый свет и контрольная таблица показывает, что извлечено 679 ссылок на учебные примеры KNIME. Я, кстати, могу посмотреть статистику времени исполнения любого компонента в окне монитора узла. Например, в актуальном случае сообщается, что узел обращения к веб страницы был вызван 141 раз, последнее обращение заняло 219 миллисекунд, а общее время исполнения составило 39 секунд.

Общая схема исполнения и сведения о времени исполнения
Общая схема исполнения и сведения о времени исполнения

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

Считываем страницы каждого из 679 примеров и извлекаем оттуда описание примеров. Для доступа к полям структуры, названия и описания примера я использовал парсинг содержимого при помощи различных регулярных и строковых фильтров, которые объединил в общий гипер-узел «String Parser». После запуска парсера, получилась итоговая таблица примеров с описаниями, которую я далее буду использовать для поиска интересных тем для разбора в цикле статей про KNIME.

Узлы исполнения записи в файл Excel
Узлы исполнения записи в файл Excel

И на этом – почти все. Осталось разобраться с объявленным выше «блэкджеком и …».
В качестве этого, посчитаем банальную статистику найденных примеров и запишем все, что мы нашли – в Excel-файл. Для этого используем узлы «GroupBy» и «Excel Writer».

Данные полученные при помощи группировки и отображаемые на листе Excel
Данные полученные при помощи группировки и отображаемые на листе Excel

Статистика по распределению примеров видна на рисунке, а файл Excel теперь
содержит два листа, с рассчитанной статистикой и описаниями каждого имеющегося в
KNIME примера.

Данные, размещенные в Excel
Данные, размещенные в Excel

И вот на этом, эта статья действительно заканчивается. Спасибо за внимание, жду ваших вопросов и комментариев. Продолжение? Следует!

Небольшая иллюстрация
Пример диаграммы, построенной по данным о наборе примеров.
Пример диаграммы, построенной по данным о наборе примеров.

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

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