Ivan Begtin
7.98K subscribers
1.83K photos
3 videos
101 files
4.53K links
I write about Open Data, Data Engineering, Government, Privacy, Digital Preservation and other gov related and tech stuff.

Founder of Dateno https://dateno.io

Telegram @ibegtin
Facebook - https://facebook.com/ibegtin
Secure contacts ivan@begtin.tech
Download Telegram
Вышла версия 2.8 одного из наиболее удобных инструментов полу-ручной, полу-автоматической обработки данных Open Refine [1].
Основные изменения:
- больше стабильности UI
- фильтрация по тексту на исключение
- поддержка метаданных
- импорт из Wikitables
и многое другое.

OpenRefine особенно удобен тем кому Excel'я давно мало, а программирование под каждый набор данных непривычно. Проект вырос из проекта Google Refine, несколько лет назад перестал развиваться, но вот, новая команда выпускает давно ожидаемый релиз.

Ссылки:
[1] https://github.com/OpenRefine/OpenRefine/releases/tag/2.8

#opendata #datawrangling
Как обрабатывать данные? Какие бесплатные и платные инструменты существуют? И, особенно, как работать с данными изначально не в самом лучшем качестве.

Наиболее правильный термин data wrangling, плохо переводится на русский, но по сути - это "преобразование данных" и в этой области есть много инструментов. Другой часто используемый термин - data preparation или data prep (подготовка данных) за которым скрывается обработка и трансформация данных для последующей загрузки (ETL) или постобработки после загрузки (ELT).

Инструментов существует огромное количество. Есть много что можно собрать из маленьких компонентов, в академической среде, чаще это инструменты завязанные на executive papers такие как Jupyter Notebook, в open source среде - это многочисленные инструменты преобразования данных через командную строку и в корпоративной среде - это, чаще, дорогие коммерческие продукты сочетающие в себе множество возможностей.


- OpenRefine [1] бесплатный инструмент, некогда вышедший из проекта Google Refine который опубликовали в Google после поглощения команды Metaweb (проект Freebase). Один из лучших бесплатных инструментов в этой области.
- Trifacta [2] де-факто лидеры рынка, изначально делали акцент на обработке данных, сейчас это комплексный продукт по подготовке данных, их преобразованию и построение дата труб (data pipelines). Одно из самых дорогих решений на рынке, от $419 в месяц за пользователя.
- Microsoft Excel один из мощнейших инструментов о возможностях применения которого в обработке данных знают не все. Но с расширениями вроде ReshapeXL [3] позволяет добиваться многого.
- Microsoft PowerBI [4] включает многочисленные возможности обработки данных для последующей визуализации
- Tableau Prep [5] позволяет делать пред-обработку данных для последующей визуализации в продуктах Tableau.
- Datameer X [6] подготовка данных специально для озёр Hadoop
- Easy Morph [7] ETL инструмент подготовки данных без программирования
- Meltano [8] инструмент обработки данных через Python и с открытым кодом с интеграцией с разными источниками

Также большой список инструментов в коллекциях:
- Awesome ETL [9] подборка Extract, Transform and Load инструментов
- Gartner Data Preparation tools [10] список от Gartner

Основной тренд сейчас - это то что подготовка данных уходит в облака, я ранее писал о переходе от подхода ETL к ELT и обработке данных уже в облачном хранилище. Таких продуктов всё больше и, похоже, будущее за ними.

Ссылки:
[1] https://openrefine.org/
[2] https://www.trifacta.com/
[3] http://reshapexl.com/
[4] https://powerbi.microsoft.com/en-us/
[5] https://www.tableau.com/products/prep
[6] https://www.datameer.com/datameer-x/
[7] https://easymorph.com/
[8] https://meltano.com
[9] https://github.com/pawl/awesome-etl
[10] https://www.gartner.com/reviews/market/data-preparation-tools

#dataprep #datawrangling #data
Интересный стартап Dropbase автоматизации работы с облачными базами данных [1] с финансируемый в Y Combinator [2] на неназванную сумму. Создан полностью поверх Snoflake, фактически является красивой надстройкой над ним, позволяет импортировать CSV и Excel файлы и проводить трансформации над ними прямо в облаке. Интеграция устроена по принципу что не он интегрируется, а даёт ключи для прямого подключения к базе Snowflake.

Трасформация данных там очень ограниченная. Я бы даже сказал куцая, по сравнению с серьёзными инструментами вроде Trifacta (коммерческий) или OpenRefine (открытый), но стратегия весьма интересная. Удобный быстрый интерфейс и развитие в сторону преобразования данных. Фактические пользователи такого - analytic engineers, инженеры готовящие данные для аналитиков.

Ссылки:
[1] https://www.dropbase.io
[2] https://www.crunchbase.com/organization/dropbase

#datatools #startups #datawrangling
UPDATE: О том же в англоязычной заметке в блоге на Medium

К вопросу о рынке инструментов работы с данными, могу сказать что за вот уже долгое наблюдение за тем как они развиваются, всё ещё явным образом есть дефицит инструментов 3-х типов с пересекающимися категориями
- data wrangling
- data quality (observation)
- data enrichment

Data wrangling
Это одна из многими нелюбимых, но актуальных тем, по очистке и подготовке данных. Особенность в что делают это обычно, или с командной строки, или в СУБД, а из удобных интерактивных инструментов только и есть открытый и бесплатный OpenRefine [1] или очень дорогие инструменты вроде Trifacta [2].

У OpenRefine очень серьёзные ограничения по объёму данных, но он весьма популярен в дата-журналистике и дата-аналитике (не дата-инженерии).

Так вот таких инструментов дефицит, бесплатных и коммерческих за небольшие-средние понятные деньги. А самое главное с меньшими ограничениями чем у OpenRefine. По моим ощущениям что если такой инструмент построить на современной колоночной или быстрой in-memory базе данных, вроде Tarantool или Clickhouse или одного из похожих движков, то можно создать очень востребованный продукт. Только надо вложить немало усилий в пользовательский интерфейс.

О дефиците инструментов по качеству и обогащению данных я ещё напишу в следующих постах.

Ссылки:
[1] https://openrefine.org
[2] https://www.trifacta.com

#datatools #datawrangling
Давно хочу написать про обработку документальных структурированных данных в NoSQL. Я затрагивал эту тему в англоязычной заметке Future of NoSQL in Modern Data Stack [1], но проблема, гораздо глубже, она связана со спецификой данных.

Классические наиболее распространенные подходы к обработке/очистке данных сейчас - это, или SQL запросы, или датафреймы вроде того же pandas, или инструменты вроде OpenRefine и Trifacta. Они все оперируют простыми плоскими таблицами и умеют по этим таблицам проводить относительно простые операции: переименовать колонку, разделить её, создать новую на основе имеющейся, изменить значение и тд.

В SQL это делается относительно просто, с учётом ограничений языка, конечно. В OpenRefine, Trifacta - это внутренние индексы для табличных данных и встроенные функции или внешний код. А для pandas и подхода через датафреймы - это код Python (или похожий в других языках).

Для данных с вложенными документами вроде тех что сериализуются в JSON или хранятся в MongoDB так не получится. При переносе из MongoDB в pandas вложенные объекты автоматически не нормализуются. А если их нормализовать, то потом назад в СУБД не перенести так просто. Будут потери, или в данных, или в возможности их обработки. И так со всем остальным, OpenRefine и аналоги также такой тип данных не поддерживают, только "уплощают" их в таблицы, но обратно могут отдать уже только плоскую таблицу.

Как работать с JSON подобными структурами? Например, используя языки запросов у NoSQL баз данных предварительно загрузив данные в саму СУБД.

А тут у нас начинают возникать уже ограничения другого рода. Ключевая NoSQL СУБД MongoDB не поддерживает большую часть операций по модификации данных иначе как запуском операций по перебору значений запроса итератором forEach. Самый банальный пример - это преобразование значений в полях в нижний или верхний регистр. То что в SQL решается простейшей командой UPDATE MyTable SET MyColumn = UPPER(MyColumn)
для MongoDB требует команды вроде
db.MyTable.find([find_criteria]).forEach(function(doc) {
db.MyTable.update(
{ _id: doc._id},
{ $set : { 'MyColumn' : doc.MyColumn.toUpperCase() } },
{ multi: true }
)
});

Похоже со многими другими операциями по преобразованию данных которые просты в табличных структурах, особенно в SQL и крайне затруднены в MongoDB. При том что MongoDB наиболее популярная NoSQL СУБД.

Можно ли такие операции проводить не в MongoDB, а, например, в другой NoSQL базе? Их поддерживает, например, ArangoDB. Там также есть циклы на выполнение операций, но они могут проводится внутри движка СУБД. Например, вот так.

FOR u IN MyTable
UPDATE u WITH {
MyColumn: UPPER(MyColumn)
} IN MyTable

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

Альтернативой использования СУБД является написание аналога pandas DataFrame для не-табличных документов. У Python есть библиотека glom [2] которая позволяет что-то подобное и может быть расширена, но имеет довольно серьёзные ограничения по объёмам данных и по скорости их обработки.

В итоге, если честно, я до сих пор не вижу оптимальный бэкэнд для data wrangling для NoSQL. Лучший кандидат как СУБД - это ArangoDB, но без интенсивного тестирования это неточно.
Наиболее эффективным способом обработки JSON/JSONlines всё ещё является программная обработка за пределами СУБД и инструментов ручного data wrangling вроде OpenRefine.


Ссылки:
[1] https://medium.com/@ibegtin/future-of-nosql-in-modern-data-stack-f39303bc61e8
[2] https://glom.readthedocs.io

#data #datatools #thoughts #nosql #dataengineering #datawrangling
В продолжение того о чём я писал тут в телеграм канале про обработку данных [1] написал короткую технологическую заметку NoSQL data wrangling [2] про проблему обработки NoSQL данных и о дефиците инструментов позволяющих обрабатывать JSON/JSON lines.

Правда заметка пока в формате размышлений вслух, готового решения у меня нет. Пока нет.

Ссылки:
[1] https://t.me/begtin/4255
[2] https://medium.com/@ibegtin/nosql-data-wrangling-50b5a2898a83

#datatools #datawrangling #dataengineering
Я тут несколько раз писал о том что нет удобных инструментов для обработки для обработки NoSQL данных. Нет аналога OpenRefine или возможности удобной манипуляции данными внутри NoSQL баз данных. Писал на русском [1] и на английском языках [2].

Но рассуждать вслух хорошо, а экспериментировать лучше. Поэтому на выходных я сделал вот такой простой инструмент mongorefine [3] воспроизводящий часть функций OpenRefine используя MongoDB как бэкенд. Штука эта экспериментальная, измерения по скорости с другими подходами могут быть не в её пользу, особенно в части плоских данных. Но для не-плоских данных, она полезна даже в таком виде.

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

Лично я пока не обладаю уверенностью что путь создания системы автоматизации обработки данных поверх MongoDB - это оптимальный путь.

Но если Вы готовы поэкспериментировать и дать обратную связь, то такой инструмент теперь доступен.

P.S. Никогда не делайте экспериментов на рабочих базах данных. Сделайте тестовую копию и тренируйтесь на ней;)

Ссылки:
[1] https://t.me/begtin/4255
[2] https://medium.com/@ibegtin/nosql-data-wrangling-50b5a2898a83
[3] https://github.com/ivbeg/mongorefine

#data #opensource #mongodb #dataengineering #datawrangling
В рубрике полезных инструментов для обработки данных VisiData [1]. Это весьма популярный в ограниченных кругах открытый продукт по просмотру и обработке данных через визуальный текстовый интерфейс. Такие инструменты ещё называют TUI (Text User Interface). Для кого-то это будет напоминать утилиты вроде Dos Navigator / Norton Commander / Vim и ещё огромное число утилит для Unix / DOS. А сейчас это вновь набирающее оборот явление, можно сказать что переоткрываемое.

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

Хорошая утилита, как по мне. Идет, почти, вровень с open refine когда дело касается обработки данных (data wrangling / refining).

Как и все подобные GUI / TUI инструменты он, в первую очередь, полезен тем кто решает задачи обработки данных без программирования. Например, дата-журналистам и аналитикам.

Ссылки:
[1] https://github.com/saulpw/visidata

#data #datatools #dataengineering #datajournalism #datawrangling #opensource