Ivan Begtin
8.07K subscribers
1.5K photos
3 videos
100 files
4.25K links
I write about Open Data, Data Engineering, Government, Privacy and Data Preservation and other gov and tech stuff
Telegram @ibegtin
Facebook - https://facebook.com/ibegtin
Secure contacts ivan@begtin.tech

Contact @NMBabina for ads proposals
Download Telegram
Регулярная подборка ссылок про данные, технологи и не только:
- Desbordante [1] инструмент идентификации паттернов в данных. Обещают что может находить хависимости между колонками таблиц, на входе получает csv, на выходе список зависимостей. Команда разработчиков из СПбГУ, на английском и на русском языках есть пояснения как инструмент работает [2]. Лицензия AGPL, что слегка ограничивает использование, но сам продукт выглядит интересно для тех кто занимается exploratory analysis, data discovery и иными дисциплинами о том какие данные бывают и как они устроены. Я так понимаю что команда разработки имела/имеет какое-то отношение к компании Unidata, судя по тому что от неё был текст на русском на хабр
- Cloudzip [4] утилита на языке Go по дистанционному листанию и выгрузке отдельных файлов из больших ZIP архивов без скачивания ZIP архива целиком. Не первый вижу инструмент в этой области и но он безусловно выглядит практично, когда тебе надо скачать индивидуальный файл из многодесяткогигабайтного архива. Практического применения у такого инструмента много, а автор его Oz Katz, один из создателей lakeFS. Написано на языке Go. Лицензия Apache 2.0
- remotezip [5] в продолжение к предыдущему инструменту, то же самое но в виде библиотеки для Python. Да, идея давняя давно витающая и реализуемая.
- klib [6] набор функций в виде библиотеки для Python по очистке данных внутри датафреймов Pandas. Выполняет набор простых операций, в каком-то смысле заменяет OpenRefine. Для тех кто чистит данные в Jupyter Notebook'ах будет полезно.
- ydata-profiling [7] ещё один инструмент из области Exploratory Data Analysis, тоже интегрированный с датафреймами. У этой же команды есть коммерческий продукт каталога данных (только облачный увы) в котором явно profiling применяется.

Ссылки:
[1] https://github.com/Desbordante/desbordante-core
[2] https://medium.com/@chernishev/desbordante-2-0-0-released-8c174aa04e87
[3] https://habr.com/ru/companies/unidata/articles/667636/
[4] https://github.com/ozkatz/cloudzip
[5] https://github.com/gtsystem/python-remotezip
[6] https://github.com/akanz1/klib
[7] https://github.com/ydataai/ydata-profiling

#opensource #data #datatools
Подборка полезных ссылок про данные, технологии и не только:
- Scrapegraph-ai проект с открытым кодом по интеграции языковых моделей в задачи скрейпинга данных с сайтов. Выглядит как бэкэнд для будующих и текущих проектов по скрейпингу для не-Итшников или как полезный инструмент тем кто хочет упростить себе эту работу.
- pyspread альтернатива Excel написанная на Python. Открытый код под почти все платформы. Может показаться странным, но, как минимум, идея заслуживающая внимания.
- Substrait межязыковая сериализация операций над данными. Спецификация, будет понятна всем кто делает запросы к данным в разных СУБД и не только SQL и непонятна тем кто с таким не сталкивался. Одна из попыток создать универсальный подход/язык запросов поверх десятков диалектов SQL
- Data Council 2024 видео с выступлениями спикеров конференции Data Council 2024 в Austin. Много интересного по дата инженерии, стандартам и созданию больших датасетов. Хорошая концентрация интересных докладов
- nimble новый формат хранения больших колоночных данных. Под открытой спецификацией, сделан внутри Meta. Подробнее в выступлении рассказывают про главный акцент на скорости загрузки датасетов и о том что загрузка датасетов для ML задач занимает до 30% времени.

#opensource #data #datatools
В блоге UBER история о том как они реализовали движок по автоматической категоризации данных DataK9 [1]. Выглядит интересно и очень похоже на то что я делал в опенсорсном продукте Metacrafter [2].

Если пересказать вкратце, то они взяли чуть более 400 тысяч датасетов для анализа, а до этого 1 тысячу датасетов для обучения и ручной разметки людьми и далее натравили созданные людьми правила на оставшиеся датасеты. Правила готовились людьми вручную, но пишут что и ИИ применяли где-то, до конца непонятно где.

Описания правил у них в YAML что тоже очень похоже на Metacrafter

В чём сходства и отличия:
1. В их правилах есть bloom filters и value range, что является хорошей идеей, надо к ней присмотреться.
2. Кроме include patterns они используют ещё и exclude patterns что тоже весьма логично и разумно.
3. Cмешивают типы данных и правила, фактически правила детекции привязывают к типу прямо в YAML файле. В Metacrafter'е это иначе. Типы данных и правила разделены.
4. Не имеют языковых особенностей при идентификации, всё про английский язык.
5. Не используют семантические типы данных. В Metacrafter они вынесены в отдельный реестр [3]

Ключевое, конечно, в среде эксплуатации. DataK9 работает в корп среде с внутренними данными заточенными под AI/ML, а Metacrafter писался под работу с общедоступными данными на разных языках.

Ссылки:
[1] https://www.uber.com/en-DE/blog/auto-categorizing-data-through-ai-ml
[2] https://github.com/apicrafter/metacrafter
[3] https://github.com/apicrafter/metacrafter-registry

#opensource #data #datatools #semanticdatatypes
В продолжение про категоризацию данных я расскажу о том какое моё видение по развитию Metacrafter'а [1]. Напомню что это опенсорс утилита по идентификации семантических типов данных, категоризации и автодокументирования данных.

1. Это расширение числа семантических (смысловых) типов данных и правил их идентификации. Сейчас есть сотни типов и сотни правил, но далеко не для всех типов данных правила есть и добавлять там много что есть. В особенности когда это касается отраслей: медицина, биохимия, финансовые структуры, нефтянка, и много что другое. Специфики отраслевой немало, правила для них готовятся совсем не быстро.
2. Расширение видов правил идентфикации смысловых типов данных. В первую очередь определение уникальных полей, общих префиксов и других особенностей.
3. Возможно обновление языка управления правилами и добавление и переписать правила для добавления bloom filter, пространств значений для цифр и исключающих фильтров.
4. Перестройка работы metacrafter'а на работу с сервером по умолчанию. Сейчас для работы утилиты командной строки правила каждый раз загружаются и компилируются из файлов с правилами. А это небыстро, дольше чем сама работа категоризатора. Альтернатива в виде prefech и запуска локального сервера и работы через него.
5. Введение режима идентификации неизвестных типов данных. Это когда Metacrafter'у скармливаются датасеты для обучения и по определенным правилам он рекомендует разметить конкретные поля и конкретные типы данных. Это самая сложная и исследовательская задача. Вот её по настоящему интересно решить.

Ну и как не добавить что сейчас создаётся архив датасетов проиндексированных Dateno и по ним как раз идёт тестирование Metacrafter'а и будущая доработка.

Ссылки:
[1] https://github.com/apicrafter/metacrafter


#opensource #data #datatools #semanticdatatypes
Firecrawl [1] любопытный новый инструмент по работе с данными с помощью LLM. Обещает что умеет отдавать команды LLM по извлечению данных по определенным схемам.

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

Я когда-то много времени посвятил теме преобразованию сайтов в данные, но остановился когда написал алгоритм превращения в RSS любой вебстраницы со списками чего-то.

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

Ссылки:
[1] https://firecrawl.dev

#data #datatools #ai
Свежий доклад State of Data Engineering 2024 от команды LakeFS.

Подмечают три ключевых тренда:
1. Генеративный ИИ влияет на инструментарий в Modern Data Stack
2. Конкуренция дата продуктов растёт и, соответственно, моё дополнение, цена выхода на рынок с новым продуктом.
3. Открытые форматы создают закрытые заборы. В центре конфликт между Databricks и Snowflake.

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

Что характерно в таких обзорах State of ... так то что от 75 до 95 процентов инструментов, по разным категориям, это облачные продукты. К российским реалиям, к примеру, они не применимы. Как и ко многим особо закрытым не-российским стекам данных.

И, кстати, чтобы не забыть, составители таких State of продолжают путать открытые данные и каталоги открытых данных и корпоративные каталоги. А это очень разные продукты под очень разные задачи.

А если бы я выпускал свой State of data ... то делал бы два отдельных. Один для облака, а другой для корп оффлайна. А может быть даже и три. Ещё один для корп оффлайна открытого кода.

#datatools #opensource #stateof #dataengineering #moderndatastack #readings
Разное, дата инженерное:
1. При работе с JSON lines (NDJSON) по прежнему MongoDB поглощает любой скормленный файл, DuckDB лучше умеет считывать схемы и Clickhouse включая Clickhouse-local оказался самым "капризным". Для ситуаций данных с большим числом NoSQL данных и множеством схем clickhouse применим ограниченно и надо делать специальный инструментарий/надстройку чтобы иvмпортировать уже по предраспознанным схемам, что сильно замедлит импорт на больших файлах. По прежнему очень не хватает высокопроизводительного инструмента для работы с NoSQL.
2. DuckDB примечателен в плане й удобства разработчика, доступных примеров и документации, расширяемости и тд. DuckDB - это очень крутой инструмент. Причём можно смотреть на него как на вещь в себе и подспорье для аналитика, а можно как один из компонентов создаваемого дата-продукта.
3. Ценность Parquet'а начинаешь понимать когда взаимодействуешь с командами публикующими плохо документированные CSV файлы с кучей ошибок из-за того что они в CSV файлы упихивают иерархические структуры из первоисточника. Такие файлы или очень неудобно или совсем нормально не импортируются стандартными средствами. Parquet должен быть форматом для данных по умолчанию, остальное производится из него быстро.
4. Clickhouse или DuckDB были бы хорошими инструментами для замены движка внутри OpenRefine. Но, похоже, этого не дождаться. Разве что, сделать всё же, инструмент для headless data refine, я такой когда-то смастерил для MongoDB, но скорость там оставляет желать лучшего. Скорее это был прототип для оценки возможности реализации.
5. Классические ETL/ELT инструменты для геоданных не то чтобы совсем непригодны, но не заточены ни разу. Создавать / адаптировать существующие ETL движки под них? Или использовать что-то целенаправленно созданное в этой области? Пока не очень впечатляет всё что я видел.

#notes #dataengineering #data #datatools
В рубрике интересных поисковиков по данным, Lens.org научный поисковик по патентам, авторам и научным работам. Причём научных работ там проиндексировано 272 миллиона из которых 3.8 миллиона - это наборы данных.

Грамотно спроектированный интерфейс, удобный поиск (хотя и в Dateno быстрее) и большой охват источников.

Из минусов:
- существенный дисбаланс в сторону США и мало данных других стран
- многое названное там датасетами таковым не является
- только научные данные и даже не всех отраслей

#opendata #datasearch #datatools
Чем с больше данных тем больше потребности в их эффективном сжатии. Из любопытных продуктов на эту тему:
- llama-zip - LLM-powered lossless compression tool, как уже понятно использует языковую модель LLAMA для сжатия текстов на английском языке. Работает только с текстами, сжимает как-то совсем неимоверно судя по примерам. Хочется дождаться его внешнего тестирования и сравнений с другими.
- ts_zip архиватор от Fabrice Bellard работающий с помощью встроенной языковой модели RWKV 169M v4 . Автор известен тем что создал NNCP, компрессор и прекомпрессор на основе нейросетей и побеждающий несколько лет в конкурсе Large Text Compression Benchmark

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

1. Если у данных есть предопределённые схемы то самый эффективный способ их отдавать - это Parquet.
2. Если хранение данных вообще ничем не ограничено, то сохранять в JSONL
3. Если данные нужны для аналитики и их хочется сохранять сжатыми, то форматы gz, br, xz, zst, lz4 и bz2 если их обрабатывать в Clickhouse и в формате gz если в DuckDB. Фактически надо использовать сжатие GZip'ом при всех его недостатках.
4. Для холодного хранения можно сжимать чем угодно дающим хорошее сжатие, например xz, bz2 или 7z


#thoughts #compression #data #datatools
Свежий open source продукт для каталогизации корпоративных данных, в этот раз от Databricks и под названием Unity Catalog [1]. Обещают что это чуть ли не единственная open source платформа для data governance для data и AI.

Бегло посмотрев его могу сказать что:
- сделан каталог по cloud-first модели, полностью ориентирован на работу через облачных провайдеров
- в основе Delta sharing protocol, для обмена структурированными и неструктурированными данными
- UI сейчас нет, можно сказать этакий headless data catalog, может быть позже добавят
- он совсем не про инвентаризацию данных и про data assets, а скорее про приведение имеющегося к стандартным/популярным форматам
- внутри всё написано на Java

Итого:
1. Если надо сделать единый каталог для нескольких дата команд работающих с разными cloud сервисами и таблицами (Iceberg, Delta, Hudi) - годится
2. Если надо систематизировать работу data science команд с разными ML моделями и данными для обучения - скорее годится
3. Если надо проинвентаризировать корпоративные базы данных и разные данные, особенно унаследованные форматы - не подходит
4. Если надо организовать работу по документированию данных внутри - не подходит

И туда же до кучи, Snowflake тоже пообещали опубликовать код своего каталога данных Polaris [2]. Исходного кода пока нет, но тоже видно что это cloud-first решение на связке Iceberg и разных клауд провайдеров.

Ссылки:
[1] https://www.unitycatalog.io/
[2] https://github.com/snowflakedb/polaris-catalog

#opensource #datacatalogs #datatools
Сугубо техническое и инструментальное. Я на днях обновил исходный код утилиты metacrafter [1] и библиотеки для Python iterabledata [2].

Metacrafter - это утилита и библиотека для Python по выявлению семантических типов данных и далее автодокументирования датасетов. Она изначально поддерживала MongoDB, базовые типы файлов вроде csv, xml, jsonl и тд, а также большую часть SQL баз данных (через SQLAlchemy). Не хватало только поддержки файлов которые могут быть разнообразно сжаты. Эту задачу получилось решить переключившись на библиотеку iterabledata которая поддерживает работу с файлами вроде .csv.bz2, .xml.xz, .jsonl.gz и так далее. Собственно к уже имеющимся алгоритмам сжатия и форматам я добавил ещё Zstandard и Brotli. Из популярных форматов не поддерживаются пока только Snappy и 7z . Но у Snappy неудобная реализация на Python, надо её переписывать, а библиотека для 7z не поддерживает режим открытия файла в контейнере, без обязательного раз сжатия .

Но в остальном оказалось очень удобно . Осталось часть других инструментов переписать с этой библиотекой для простоты обработки условно любых входящих дата файлов с условно любым типом сжатия/контейнеров.

А поддержку сжатых файлов в metacrafter пришлось добавлять не просто так, а потому что хранение бесконечного числа CSV'шек и других первичных файлов в Dateno сжирает очень много места, а обрабатывать их надо. И обрабатывать достаточно быстро и с достаточно небольшими ресурсами памяти, процессора и тд.

Один из способов такой экономии это обновление инструментария для поддержки сжатых файлов на всех этапах. Причём не только на этапе обработки данных, но и на этапе извлечения и загрузки. Импорт в СУБД тоже нужен не в чистых .csv или .json, файлах, а в том числе, сжатыми тоже.

Ссылки:
[1] https://github.com/apicrafter/metacrafter
[2] https://github.com/apicrafter/pyiterable

#opensource #datatools #data #metacrafter #dateno
Свежий инструмент Amphi для визуальных ETL процессов, с low-code проектированием труб данных (data pipelines) через интерфейс в Jupyter lab

Из плюсов:
- low code
- не cloud-first
- базовый набор для обработки структурированных и неструктурированных данных
- всё можно делать в UI прямо в Jupyter Lab
- открытый код

Из минусов:
- low-code (для кого-то минус)
- не cloud-first (для кого-то минус)
- мало разнообразия в источниках получения данных
- лицензия Elastic, недоопенсорс

Мне чем-то напомнило Apache Nifi, но только отчасти.

Интеграция в Jupyter Lab - хорошо,но пока что и в целом надо приглядется. Продукт явно сделан пока скорее для инвесторов чем для пользователей, но без пользователей и инвестиций не будет.

В целом из разработки дата инструментов мне нравятся не только продукты, но и команды Clickhouse и Duckdb.

Хочется дождаться ETL сделанное по аналогии с Duckdb. Удобным ядром и большим числом хорошо написанных расширений. Какое-то время назад мне казалось что Meltano на эту роль подходит, но с тех пор как они отдали свои публичные ресурсы довольно хреновым маркетологам читать их стало тяжело. Развитие продукта сложно оценивать.

#etl #opensource #datatools
Подборка ссылок на продукты публикации датасетов для API и аналитики:

С открытым кодом:
- SQLite Studio [1] быстро первращает базы SQLite в веб интерфейс. Можно смотреть структуру таблиц и делать запросы. А также есть демо [2]. По ощущениям очень простой и удобный для этой небольшой задачи.
- Datasette [3] хорошо известный в узких кругах продукт, очень быстро превращающий датасеты в веб интерфейс. Умеет в разные данные, разные API, разные интерфейсы и куча расширений. Когда хочется конструктор и разного
- CSVBase [4] простой до безобразия для превращения CSV файлов в API. Внутри всё Python, одновременно и сервис для публикации данных онлайн для тех кто очень хочет делать это за деньги
- APIReady [5] написанный мной 11 лет назад очень простой движок по превращению CSV файлов в API. Честно говоря с той поры я его даже не развивал, просто как демонстрация самой идеи.
- APICrafter [6] тоже написанная мной утилита по публикации API к базам MongoDB. Развитие APIReady и необходимость поскольку MongoDB по умолчанию не давало и не даёт приемлимое API в их Community Server. Только в облачном сервисе есть уже что-то удобное. Всё на Python, управляется развесистыми YAML конфигами которые строятся автоматически на основе просканированных баз данных [7]

Если Вы знаете другие open source инструменты для публикации датасетов, о них можно рассказать в чатике.

А я через какое-то время напишу про то какие есть бесплатные и коммерческие, не open source, онлайн инструменты делиться датасетами.

Ссылки:
[1] https://github.com/frectonz/sqlite-studio
[2] https://sqlite-studio.frectonz.io/
[3] https://datasette.io/
[4] https://github.com/calpaterson/csvbase
[5] https://github.com/ivbeg/apiready
[6] https://github.com/apicrafter/apicrafter
[7] https://github.com/apicrafter/apicrafter/blob/main/examples/rusregions/apicrafter.yml


#opensource #datatools #data #api
За много лет у меня накопилось множество инструментов для командной строки которые я создавал для разных дата задач:
- undatum [1] утилита для обработки данных с акцентом на JSONl файлы
- datadiff [2] утилита для создания патчей для датасетов
- mongo2md [3] утилита по автогенрации markdown документации к коллекциям mongodb
- metacrafter [4] утилита и библиотека по идентификации семантических типов данных
- docx2csv [5] утилита по превращению таблиц в файлах DOCX в CSV
- lazyscraper [6] утилита по быстрому и автоматическому извлечению данных из HTML таблиц и другой разметки

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

Сейчас я задумался не пора ли многие из них перенести в один инструмент. Тот же undatum.

Тем более что много есть задач в которых такой инструмент требуется. И есть незакрытые задачи

Вот примерно такое я хочу сделать с undatum добавив туда разные функции и поддерживая работу с NoSQL как приоритет.

Но самое интересная это думать над тем как это реализовать. Я всё чаще склоняюсь к тому что Duckdb правильнее воспринимать как data transformation движок, а не как хранилище. Можно очень многое ускорить с его помощью. Но не всё и тут важны альтернативы. Силами языка или встроенным DB движком.

А ещё у меня есть экспериментальный код mongorefine и код утилиты datacrafter которые живут несколько иначе и связать всё вместе сложнее.

В общем вот такие мысли в последнее время, и открытый код который хочется развивать. А вот код из Dateno можно раскрывать только ограниченно, потому что там много специфичного know how.

Ссылки:
[1] https://github.com/datacoon/undatum
[2] https://github.com/datacoon/datadifflib
[3] https://github.com/datacoon/mongo2md
[4] https://github.com/apicrafter/metacrafter
[5] https://github.com/ivbeg/docx2csv
[6] https://github.com/ivbeg/lazyscraper

#opensource #datatools #data
Подборка полезных инструментов для работы с данными и не только:
- GROBID [1] библиотека и набор утилит для разбора PDF научных статей. Извлекает таблицы, ссылки, заголовки, цитаты, даты и именованные сущности. Используется внутри проекта Semantic Scholar. Открытый код под Apache 2.
- sqleton [2] универсальная библиотека для Python для доступа к разным SQL СУБД. Альтернатива SQLAlchemy, но выглядит как более простая в использовании
- reladiff [3] библиотека для Python для сравнения больших таблиц, сравнительно легко её можно доработать для сравнения больших датасетов
- Daft [4] распределенная библиотека для датафреймов на Rust и Python. Внутри Apache Arrow и язык запросов в виде функций для Python

Ссылки:
[1] https://github.com/allenai/grobid
[2] https://github.com/erezsh/sqeleton
[3] https://github.com/erezsh/reladiff
[4] https://github.com/Eventual-Inc/Daft

#opensource #datatools #data #pdf #sql #dataframes