Pull to refresh

Hippotable — анализ данных прямо в браузере

Level of difficultyEasy
Reading time5 min
Views5.4K

Сегодня я расскажу про hippotable — удобный инструмент для анализа данных, который я сделал для себя и для людей.

Я люблю ковыряться в данных. Иногда станет интересно, в какой области больше всего городов, так аж кушать не могу, пока не выясню (как легко догадаться, в Московской, но потом в Свердловской). А на работе мне иногда удаётся совместить приятное с полезным: о нет, вижу ошибку в логах! Из каких браузеров она летит?

Но чем простому парню вроде меня поковыряться в данных? Есть 3 варианта, но все они так себе:

  1. bash. Я могу нашлепать что-то вроде cat user-ids.csv | sort | uniq | wc -c для подсчета уникальных пользователей с багом. Если вопрос чуть сложнее (посчитать распределение по платформам), начинаются проблемы — будем честны, настоящих мастеров баша мало.

  2. Google sheets & co на вид хорошо подходят для задачи — много статистических функций, графики, все удобно и интерактивно. Но есть две беды: много ненужных функций (зачем мне ручное форматирование?) и сложность работы с несколькими таблицами (если вы пробовали поджойнтить таблицы через VLOOKUP, вы понимаете, о чем я). У онлайн-решений ещё проблемы с конфиденциальностью, не отправлять же данные пользователей на сервер гугла.

  3. Pandas / jupyter отличный инструмент для анализа, но нужно писать много кода. Мои задачи довольно простые, мне вполне подойдет что попроще.

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

Делаем сами

Чего я желаю от инструмента для анализа данных?

  • Открывать довольно большие файлы (до 100 Мб).

  • Сортировки и фильтры.

  • Агрегации — без них не получится ответить на многие вопросы.

  • Работает в браузере, чтобы я мог поковыряться в данных хоть с компьютера, хоть с телефона, не устанавливая никаких программ.

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

  • Удобная таблица для просмотра данных со скроллом, автоматической шириной столбца и вообще отличным UX.

  • Графики, чтобы видеть закономерности глазами.

Теперь подберем инструменты, которые нам понадобятся. Это UI-фреймворк для отрисовки интерфейса и мощный dataframe-движок (я уже делал эффективное column-based хранилище на JS, боьше не хочется).

С UI определился быстро — давно хотел попробовать solidjs, и вот подвернулся шанс. По бенчмаркам солид в топе, на уровне ванильного JS. Синтетические бенчмарки ругают за то, что в них тестируют отрисовку большой таблицы, а это же не типичное приложение, но вот удача — мое приложение по сути и есть большая таблица! Не жалуюсь, работает правда быстро.

С датафреймом интереснее. Есть два вида решений: классические JS-бибилиотеки (arquero, danfo.js) и wasm-сборки in-memory СУБД (SQLite, DuckDB). wasm-сборки работают быстрее, но грузятся дольше. В итоге я решил использовать традиционный JS, чтобы не закапываться в wasm и асинхронность, а из двух библиотек выбрал arquero — он лучше по бенчмаркам, и по репозиторию видно, что продукт развивается. Скорости вполне хватает — можно работать с датасетами на миллионы строк. Но тут я сомневаюсь в выборе: SQL — популярный язык, и на нем пользователям проще писать мощные запросы. На будущее оставлю возможность подмены дата-бекенда на DuckDB (у нас же OLAP, duck как раз для этого и сделан).

Про саму разработку рассказать особо нечего. Дедлайн в январе помог за 8 суббот нашлепать простую первую версию, которая уже помогает мне в работе и по жизни.

Пользуемся

Сейчас покажу небольшой пример использования hippotable на демо-датасете с kaggle — наборе 40К+ фильмов с оценками. Если интересно, можете сами воспроизвести мой анализ.

Начнем с простого — в какой стране, в среднем, снимают фильмы с лучшими оценками? Группируем по стране, сортируем по средней оценке:

Упс, мы нашли экзотические комбинации стран, которые однажды вместе сняли неплохой фильм — не совсем то, что мы хотели. Оставим только страны с выборкой из более 10 фильмов:

Неожиданно. Кстати, если любопытно — худшие фильмы, в среднем, снимали в Италии:

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

Что же дальше

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

Импорт. Главная цель — поддержать импорт не только CSV, но и JSON. Это позволит подключать hippotable к данным из API — получится публичный no-code дашборд. Еще можно попробовать импорт xlsx, но боюсь, что будет сложно обработать все форматы, которые люди делают в своих таблицах.

Сохранение пайпланов. Иногда хочется подпихивать разные данные в один и тот же пайплайн — например, я часто считаю число уникальных пользователей или распределение по платформам. Было бы здорово сохранять фильтры и агрегации, а потом просто "загружать" их — для начала локально, но можно подумать и про серверное хранилище (и премиум хранилище, куда можно сложить и данные, и пайплайн, за деньги).

Инструменты анализа. Тут самые большие дыры, просто перечислю: вычислимые столбцы, агрегации с параметром (это квантили), корреляция, дедубликация. Сюда же — работа с несколькими таблицами.

Графики. Что за анализ данных без красивых графиков? Осталось определиться с подходящей библиотекой и продумать UX расположения графиков на экране.

Экспорт. Результатами анализа хочется делиться. Сейчас есть экспорт в CSV — неплохо, но бедновато. В идеале каждой таблицей можно поделиться по ссылке или скачать в HTML, подредактировать и выложить на свой хостинг.

И два направления, которые меня не сильно интересуют:

  1. Поддержка более огромных датасетов. Я люблю самое-самое (самые большие датасеты! самая быстрая обработка!), и это интересная задача (с потоковой обработкой можно загрузить хоть 1 Тб данных), но hippotable уже хорошо работает в районе миллиона строк, и этого вполне достаточно для практических задач.

  2. Продвинутая аналитика с произвольным JS / tensorflowjs и так далее. В первую очередь я делаю удобный браузерный интерфейс для arquero. Если вы мастер программирования, проще напрямую использовать его в своем коде с любой дополнительной обработкой вокруг. Интересный вариант — опубликовать веб-компонент таблицы как npm-пакет, который можно подключать в любое приложение для удобного просмотра данных.


Сегодня я рассказал вам про hippotable — браузерный инструмент для анализа данных. В первой версии уже есть много классного:

  • Открывайте большие CSV-файлы (сотни мегабайт, миллионы строк).

  • Удобный и быстрый UI, можно скроллить таблицу даже на телефоне.

  • Фильтры и сортировка в реальном времени.

  • Агрегации для анализа данных.

  • Мощные пайплайны из нескольких слоев фильтров и агрегаций.

  • Экспорт результата в CSV.

  • Под капотом — arquero и solidjs.

На этом всё! Используйте hippotable, если поставите звездочку на гитхабе — очень мне поможете. Буду держать вас в курсе новостей.

Tags:
Hubs:
Total votes 15: ↑15 and ↓0+15
Comments13

Articles