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

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

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Сегодня я расскажу про 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, если поставите звездочку на гитхабе — очень мне поможете. Буду держать вас в курсе новостей.

Источник: https://habr.com/ru/articles/783444/


Интересные статьи

Интересные статьи

Привет, Хабр!Микросервисы стали выбором многих благодаря их гибкости, масштабируемости и способности поддерживать сложные приложения в динамично меняющемся мире.Но не всё так просто. Одной из ключевых...
Иногда взрослые думают, что школьные проекты — это что-то несерьёзное, задания упрощённые, а получаемый результат нельзя внедрить в реальный IT-мир. Мы, шесть школьников, участвовавших в научно-технол...
Создание и практическое использование алгоритмов сильно зависит от возможности эффективно их реализовать. В лаборатории языковых инструментов JetBrains разрабатывают алго...
Мы рады объявить о публичном выпуске Infer#, который предоставляет сообществу .NET возможности межпроцедурного статического анализа Infer. Кроме того, в рамках нашей приверженности открыт...
Когда я только начал своё путешествие к науке о данных, я потратил много времени на то, чтобы понять, с чего начать, что я должен узнать в первую очередь и какие ресурсы должен использова...