Загрузка, парсинг и визуализация данных без программирования

Kate

Administrator
Команда форума
9c6c9f6f7790267cd8f8d0a7cddd1fdc.png

Признаюсь честно, у меня как у программиста, хоть и не настоящего, есть недоверие к «no-code» решениям. То есть тем, которые не требуют программирования, где всё можно делать через drag-and-drop и клики мышкой. Разве можно сделать на них что-то серьёзное? Как говорила ещё моя прабабушка: чтобы у кого-то появился «no-code», кто-то другой должен написать «a lot of code», ибо булки не растут на деревьях.

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

Сейчас нет дефицита в ETL-инструментах. Их точно десятки, а если сосчитать все мелкие стартапы, то может и сотня наберётся. Одни импортируют данные из SQL баз, другие умеют подключаться к разным сервисам, наподобие Google Analytics или 1С, третьи — работают со статическими файлами. Есть и универсальные, которые «всеядны», причём часть из них умеют всё делать без программирования, то есть «no code». Проверенных сейчас найдётся, наверное, с дюжину. А точнее — «дюжина + 1», потому что я написал ещё один (да, в изобретении велосипедов мне нет равных).

TABLUM.IO — это многофункциональный сервис для загрузки и анализа данных, со встроенной визуализацией и автоматизацией. Сервис умеет работать и с базами данных, и со статическими файлами. Но в этой заметке я покажу, как с помощью него можно парсить данные из сервисов, работающих по API, и приведу несколько примеров загрузки и парсинга данных по URL. А в конце расскажу, какие фокусы можно делать с импортированными данными: в частности, как по ним строить графики и отправлять результат по расписанию в Телеграм, Slack или на email. Причём, это будет почти «no-code», т.к. из программирования нам потребуется только щепотка SQL команд для фильтрации лишних данных, а остальное выполняется кликами мышкой, drag-and-drop'ом файлов и магией кода, который Дедушка Мороз напрограммировал вам на Новый Год (старался с самого лета).

Чтобы было интереснее, попробуем реализовать небольшую, но вполне конкретную задачку. На базе TABLUM.IO соберём информер с ежедневной отправкой графиков и таблиц в Telegram, Slack и на email. Например, это будет информер курсов обмена валют. Хотя по аналогии можно настроить мониторинг продуктовых метрик, состояния сервера, динамики оплат из биллинга, статистики коммитов из гита и многого другого. Было бы откуда загружать данные.

Итак, мы собираем свой информер курса обмена валют, и начинаем с выбора источника данных. Для нашей задачи подойдёт фид с floatrates.com. Он возвращает массив обменных курсов для указанной валюты (в нашем случае — рубля) в формате JSON. Фрагмент возвращаемой структуры приведён ниже:

36265d84f4c128dba8333a4d358039ca.png

Для загрузки данных по указанному URL нужно выбрать коннектор URL Downloader и вставить адрес источника данных в форму:

89e4f2e1924e9d35cae9a9013292fc74.png

TABLUM.IO загрузит данные, распарсит их и превратит в SQL таблицу (что немного похоже на магию). Сущность, в которую запишутся данные, будем называть «View».

d8d66f29d1b0df437d8b189f9a1f9229.png

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

d45c7192d9318cb6cd25bdb2d037008c.png

В интерфейсе сервиса тип данных кодируется цветным буллетом рядом с заголовком столбца: зелёный — числовой тип, оранжевый — дата и время, фиолетовый — финансовый числовой.

0b7a0d05daf15ca13b4dac75eecf7a2c.png

В зависимости от типов данных в столбце доступны разные функции сортировки, фильтрации, генерации запросов и т.п.

Но вернёмся к нашей исходной задаче создания информера. Текущая таблица слишком объёмная для отправки в мессенджер, поэтому было бы неплохо сократить число валют до нескольких популярных (пусть это будут USD, EUR, GBP), а также убрать лишние столбцы. Для этого нужно сгенерировать новый «View» из текущего. Это можно сделать через SQL-запрос ко «View» со списком курсов валют, выбрав в качестве источника данных «Saved Datasets».

4331f5b78692fb23f9e6956c4f6ae2a6.png

Подзапросы возможны благодаря тому, что все данные, которые загружаются в TABLUM.IO, превращаются в SQL таблицу. И с ними можно работать, как с обычной БД (синтаксис SQLite3). Для адресации к конкретной таблице нужно указать имя «View» в формате <Dataset_X>.<View_Y>. Например, если текущий датасет имеет идентификатор DS_1247, а вью — V_1001, то общий запрос к данным будет выглядеть так:

SELECT * FROM DS_1247.V_1001
Следующей SQL-командой можно получить значения курсов валют для нашего случая:

SELECT
`date` as Date,
`alphacode` as Currency,
`inverserate` as RUB
FROM
DS_1247.V_1001
WHERE `alphacode` in (’USD’, ‘EUR’, ‘GBP’)
5299084bbb7ecaf1535bbaee40b786c6.png

Теперь таблица компактная, в ней только три столбца и три строки. Можно настраивать периодическую отправку данных в мессенджеры или на email:

24ed9d0c4b044ff42d199b3c8b3a5088.png

Выбираем обновление раз в сутки и в целях демонстрации все доступные каналы (Slack, Telegram и Email).

Чтобы убедиться, что всё работает не дожидаясь следующего дня, можно нажать на «Run Test».

В Телеграм-бот и Slack придут примерно такие сообщения:

fa7bda422ea34fb04d34435b73e0002f.png

А на почту:

f383e8380600b0bef8fae0533eef5be8.png

Как вы наверняка заметили, данные из табличного вида сконвертировались в текстовое представление. Но данные можно отправлять и в виде картинки с диаграммой или графиком.

Для примера №2 построим график, используя другой набор данных — динамику курса доллара за последние 30 дней с сайта ЦБ, и настроим его отправку в Telegram и Slack.

97fdfed5ff23bc8b11365d17cbd00491.png

Здесь данные также загружаются через URL Downloader, но в формате XML.

4223c6cbd5cb2ab641c2ca82620582f0.png

В данном запросе появляется дополнительный параметр root=”Record”, который определяет корневой элемент XML данных, с которого URL Downloader начнёт парсить массив.

f91235df4a6a13200f253e11b6bc2230.png

Итак, данные загружены, сконвертированы сервисом в таблицу, остаётся построить график. Это три клика:

7a777f17da0366a73609c725931dab12.gif

Результат:

032a2a00977bf695834be6579659c143.png

Теперь выбираем мессенджер для отправки результата:

3388781c8cc245d1f3c7c6e4517a5ef9.png

Вот в таком виде будет приходить ежедневный апдейт в Telegram:

8a6e0caef1101112bbd24afe168c6fe5.png

URL Downloader — это универсальный загрузчик данных в форматах XML, JSON, CSV, TSV. Для многомерных массивов или древовидных структур ему можно задавать корневой элемент через параметр root в формате

root=”node1>node2>node3”
А также указывать дополнительные HTTP заголовки. Например, мой запрос к сервису JIRA выглядит следующим образом:

(в примере ключ от Basic авторизации я, конечно, немножко поменял)
(в примере ключ от Basic авторизации я, конечно, немножко поменял)
С помощью TABLUM.IO в SQL таблицу можно перевести результат любого API вызова, при условии, что он вернёт данные в форматах JSON, XML или CSV. И, в общем случае, можно загружать данные по URL и с желаемой периодичностью. Вот ещё несколько примеров:

Можно распарсить что-нибудь с GIT, построить аналитику по коммитам и получать апдейты в мессенджер:

1dc944ca6d68cad4d7df7cedd08c7723.png
75d148e212b8fbdfbf28a32aa09bf491.png

Аналогичным образом парсятся RSS/Atom-фиды или погода:

7f4148e884d87aa7dbee3320fe96dc4c.png

Учитывая то, что современные сервисы работают по HTTP POST, авторизуются по токену и возвращают данные в JSON или XML форматах (всё это сервис умеет делать), TABLUM.IO становится своеобразным «карманным» Zapier, на котором можно реализовать даже несложные пайплайны данных (через API).

Буду рад, если и вы также найдёте для себя сценарии работы с сервисом.

 
Сверху