Ivan Begtin
8.02K subscribers
1.75K photos
3 videos
101 files
4.45K 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
К вопросу о том сколько в мире общедоступных / открытых данных, приведу цифры чуть более приближенные к настоящим оценкам.

Всего в индексе Dateno сейчас 2 миллиона CSV файлов. Из них 144 тысячи файлов уже собраны и выгружены, на них обучаются алгоритмы и отрабатываются инструменты для выявления семантических типов, конвертации, преобразования форматов и тд. Всего эти файлы в несжатом виде составляют 697ГБ. Итого 697 ГБ / 144 * 2000 получается ~ 9.7 терабайта. Это только из проиндексированных каталогов данных и только CSV файлы. Кроме них ещё немало файлов XLS и XLSX, JSON, XML и многих других.

Ещё цифры:
- половина хранения, около 350ГБ - это 300 крупнейших CSV файлов. Наибольшие достигают размера в 11ГБ в несжатом виде
- крупнейшие датасеты выкладывают французы, канадцы, британцы и американцы на своих национальных порталах открытых данных

Если создавать архив хотя бы самых очевидных файлов в наиболее распространённых форматах потребуется порядка 100-500 ТБ хранения, конечно с оговорками что данные можно хранить сжатыми, с тем что если хранить несколько версий то старые версии можно класть в холодное хранилище и с тем что можно почистить дубликаты, но порядки примерно понятны. Большие отличия начинают возникать при хранении научных и спутниковых датасетов.

И добавлю что работа с таким бесконечным числом дата файлов вскрывает порой самые неожиданные технические челленджи. Например, то что нет функции из коробки по определению что содержание файла CSV файл. Даже если в каталоге данных написано что он CSV, на входе может быть ZIP или GZip файл с CSV внутри, HTML файл если файл уже удалили, ошибка в виде JSON ответа когда по какой-то причине сервер не отдаёт файл и так далее. Но если сервер не выдал ошибку, если файл лежит в хранилище, то лучший способ определить его формат - это прочитать и разобрать из него несколько строк. А встроенные идентификаторы формата не работают. У класса csv.Sniffer в Python слишком много ошибок False Positive (FAR), у duckdb полностью отсутствует поддержка не UTF-8 кодировок, Magika от Google выдаёт слишком много ошибок , как FAR, так и FRR. Приходится делать собственные простые инструменты.

#opendata #dateno #thoughts
Кстати, продолжая о том что получается достигать в Dateno того чего нет в других агрегаторах и поисковиках данных покажу на примере Эстонии.

В Европейском портале данных (ЕПД) всего 324 датасета из Эстонии. В Dateno их 39310.

Откуда такая разница? ЕПД агрегирует только данные национального геопортала Эстонии, а Dateno использует 43 каталога данных внутри страны и 18581 индикатор из базы Всемирного банка и 1760 индикаторов из базы индикаторов Банка международных расчётов. И ещё не все внутренние источники проиндексированы, набрать 50-60 тысяч наборов данных вполне реально.

Причём большая часть датасетов будут статистическими индикаторами, научными данными и геоданными.

#opendata #datasets #estonia #dateno #datacatalogs
Сугубо техническое и инструментальное. Я на днях обновил исходный код утилиты 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
Где то полтора года назад я писал про то как устроен поиск по данным у Гугла и про ограничения использования разметки из Schema.org. Для тех кто пропустил ту публикацию, расскажу: Schema.org - это стандарт структурированной разметки веб страниц помогающий поисковикам извлекать из веб страниц структурированные разметку о продуктах, статьях, людях , фильмах, книгах и других понятиях. Включая такое понятие как набор данных (Dataset). Саму разметку делают веб-мастера или они встроены в код веб сайта, а поисковая система находит веб страницы и умело их обрабатывает.

Изначально готовили этот стандарт Google, Microsoft и Yandex. Сейчас главный её потребитель это Гугл. Данные этой разметки индексируют, также, другие краулеры и её извлекают из индекса Common Crawl. Я как раз недавно об этом писал.

И всё бы ничего, если бы не один немаловажный факт который прост и неизбежен. Проблема в том что все врут!
Уж не знаю как разметка помогает при SEO оптимизации, но реально всё устроено так что большая часть датасетов не имеет такой структурированной разметки и в том что большая часть того что так размечено, в реальности датасетами не являются. Это какие-то другие концепты/понятия, к данным не относящиеся.

В таблице выборка сайтов в которых есть разметка Dataset. И вот разве они есть на сайтах вроде kakprosto.ru или cbonds.ru ? Совсем нет. Там статьи и другие материалы. И так не только по российским доменам, но и по многим другим.

Из 1.4 миллионов размеченных Datasets в Common Crawl, реально ситуация такова что около 33% мусор, около 33% коммерческие датасеты и оставшиеся 33% данные которые можно скачать. И ещё надо проверять качество их метаданных.

Конечно, реально датасетов больше чем в индексе Common Crawl и индексация веба даст больший охват. Но даже индексация данных по стандартам API CKAN или DCAT работает быстрее и качество метаданных лучше.

#opendata #dateno #data #datasetsx
У меня есть регулярные аналитические задачи которые я решаю и которым сложно обучать других, не потому что нет людей способных к ним, а потому что они нетиповые и требуют опыта довольно длительного в разных областях. Это задачи по data discovery, обнаружению данных и систематизации источников. В каком-то смысле Dateno как поисковик, а до того каталоги каталогов данных появились как отражение этих задач. Потому что данные регулярно необходимо искать, находить, систематизировать и описывать.

Так вот в этих задачах ключевым является то что при всём развитии каталогизации данных за последние пару десятилетий слишком часто приходится сводить информацию из сотен полуструктурированных или неструктурированных источников и в таких задачах Dateno (пока что) мало помогает.

Вот примеры вопросов, выдуманные конечно, но близкие, таких задач.
1. Энергопотребление по странам Ближнего Востока
2. Индикаторы экономического роста и ёмкости рынка по странам Южной Африки
3. Реальная ценовая инфляция в Юго-Восточной Азии

И такого довольно много. В том числе по России, и пост-советским странам.

Первый шаг в таких задачах - это построение модели data stakeholders, определение всех организаций/подразделений/групп владеющими частичной или полной информацией по исследуемой области. Иногда только их составление может занять до недели.

Следующий шаг - это data sources (источники данных) которые практически всегда зависят от списка дата стейкхолдеров и которые могут варьироваться от специальных порталов, до веб сайтов и отчетов международных организаций.

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

Всё это не творчество, а весьма структурированный процесс, результат которого, по сути, идёт в основу ТЗ на дата продукт.

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

Что я могу сказать точно так то что для всех областей data discovery инструментов нехватает. Dateno закрывает некоторые поисковые задачи, но не аналитические. GPT подобные инструменты не помогают в решении поиска данных когда данных нет. Но, возможно, инструменты подспорья аналитика могут быть куда как более структурированными и решать если не типовые задачи, то реализовывать типовые подсказки для их решения.

#thoughts #dateno
В качестве лирического отступления. Если бы я был писателем пишущим по методу Хэмингуэя, без исправления текста, то сказал бы что "аллилуйя", пришёл настоящий вызов. Но я не такой писатель, и художественное творчество моё куда как скромно, но вот работа с нефункционирующей кнопкой бэкспейса на клавиатуре и ещё рядом других кнопок накладывает свои ограничения, как минимум на скорость печати. К сожалению замена клавиатуры будет только через несколько дней, так что это писать также часто как раньше пока не выходит.

Но даже так я слегка пробежался по старому коду движка metacrafter'а [1], инструмента для идентификации семантических типов данных, или более простым языком, инструмент идентификации того что за колонка в наборе данных или в базе данных и что с ней можно делать. Инструмент я потихоньку начал приводить в целевое состояние - усиление поисковых возможностей у Dateno и автодокументирование датасетов.

Что нового:
- правила для metacrafter'а перенесены теперь в новый репозиторий metacrafter-rules [2], их стало больше, в основном за счёт правил для других языков отличных от английского и русского;
- обновился серверный и клиентский режимы работы. Теперь можно ускорить сканирование данных запустив metacrafter как сервер и обращаясь к нему через параметр remote при вызовах сканирования файлов или баз данных. Это важно для ускорения процесса поскольку правила инициализируются только один раз
- добавилась команда просмотра правил 'metacrafter rules list'
- и так далее

Главный недостаток сейчас - это скорость работы на больших датасетах. Чем больше колонок тем дольше анализ, до нескольких минут. Это не так критично для задач вроде сканирования корпоративных СУБД, но тяжко для задач Dateno когда миллионы датасетов.

На самом деле чтобы всё ускорить нужно просто много ресурсов: процессорных, хранения и памяти. А прикрутив LLM'ку можно сильно повысить качество автодокументирования данных.

Понимание данных, автодокументирование датасетов, автоматизация анализа данных - это одни из наиболее любимых мной тем в дата инженерии и дата анализе. Жаль удаётся уделять немного времени.

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

#opensource #data #datatools #dateno #metacrafter
В рубрике как это работает у них, один из источников геоданных и их каталогизации - это геопорталы. Продуктов для их создания довольно, но есть наиболее популярные и типовые и один из них - это QGIS Web Client 2 (QWC2) [1], на его основе создано немало европейских и не только геопорталов. Например, геопорталы некоторых кантонов (регионов) Швейцарии работают на QWC2 [2] и слои карты используемые в его работе доступны онлайн через специальный файл themes.json [3]

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

Слоёв данных там не так уж много, десятки, в среднем, но данные хорошо локализованы и удобно доступны.

А ещё у швейцарцев есть серия каталогов геоданных с дата моделями по их стандарту INTERLIS. Но о нём как-нибудь в другой раз. А пока в реестр Dateno вношу ряд каталогов на QWC2.

Ссылки:
[1] https://qwc-services.github.io/master/
[2] https://map.geo.gl.ch
[3] https://map.geo.gl.ch/themes.json

#opendata #datacatalogs #dateno
Уникальная фича Dateno [1] - это сужение поиска датасетов до субрегионального уровня, городов и регионов стран. Например, можно в фасете SubRegion где для многих стран можно найти данные сразу в региональном разрезе. Не просто по Франции, к примеру, а сразу по Парижу. В классическом поиске для этого обычно используют комбинации слов, вроде "COVID Paris" или "COVID Berlin", но на порталах данных часто неочевидно к какому города или регионы они относятся.

Такой фасет возможен самым банальным образом, автоматизированной и ручной разметкой каталогов в реестре каталогов Dateno [2]. В файлах YAML описания каталогов регионы прописываются явным образом в блоге coverage и построено это на основе стандарта ISO 3166-2, к примеру, код Берлина DE-BE.

Указание регионов есть только для каталогов которые отмечены как Regional government и Local government и тех по которым тип владельца ещё неизвестен (Unknown). Таких каталогов более 7989 и из них 1041 имеет привязку к subregion.

Это самый простой и очевидный способ дать геопривязку к данным. Аннотирование каталогов данных действенная штука для таких задач. Более сложный сценарий когда региональных каталогов мало, всё централизовано, а на центральном портале региональные данные есть. Что делать в этом случае? Тут есть два решения/подхода.

1-й - это машинное обучение и идентификация геопривязки наборов данных по ключевым словам в заголовке и в описании. Тут, правда, будет много ошибок потому что, к примеру, есть страна Armenia, а есть муниципалитет Armenia в Колумбии.

2-й - это ручное или автоматическое аннотирование публикаторов данных. На порталах данных, как правило, есть инфа о том кто данные опубликовал и по ней можно идентифицировать регион.

Это будет работать на некоторых крупных порталах данных вроде США с data.gov, но даже там на национальный уровень выводится относительно немного данных и нужен хороший матчер названий организаций и их территорий.

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

Ссылки:
[1] https://dateno.io
[2] https://dateno.io/registry

#opendata #datacatalogs #datasets #dateno
Я уже рассказывал про геоклассификацию данных в Dateno и то что существенная фича в поиске - это возможность поиска по городам/регионам, на субрегиональном уровне. Классификация датасетов по субрегионам основана почти полностью на аннотировании каталогов данных и с этой точки зрения это довольно простая задача с понятным решением.

Как оказывается куда менее простой задачей является привязка датасетов к странам и макрорегионам.

Базово привязка эта привязка делается через привязку каталога данных которые, как правило, конкретными странами ограничены. К примеру, если есть национальный портал данных какой-то страны, то и данные почти всегда касаются этой страны. Но это самые простые случаи и в основном про порталы открытых данных и про геопорталы.

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

Другая сложность возникает со всей статистикой и производными индикаторами. Помимо стат. показателей по странам существует неимоверное число разных групп стран, от простых, до хитровыдуманных. К примеру, группы арабских стран, страны MENA, G20, G7, Андское сообщество, наименее развитые страны, страны без выхода к морю и ещё много какие. Причём, конечно, группы стран пересекаются, но не всегда входят в друг друга.

Внутри Dateno, при этом, для группировки стран используется список макрорегионов из UN M49. Разметить страны по вхождение в эти макрорегионы несложно и внутренний справочник для этого есть. А вот справочника вхождения стран в эти многочисленные группы и их пересечений - нет и его надо составлять де-факто полувручную и нет кого-то кто бы поддерживал такую живую базу данных или программную библиотеку.

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

Пока что отсутствие привязки каких-то датасетов к странам и макрорегионам не так критичны поскольку другие поисковики даже такого не поддерживают и есть фасеты где разметка куда хуже. К примеру, наличие информации о лицензии есть не более чем у 10% датасетов.

Тем не менее качество фасетов в Dateno влияет на пользовательский опыт и это важная задача для построения максимально достоверного поискового индекса по данным.

#dateno #statistics #indicators #geodata #geo #thoughts
Пополнение в каталоге каталогов данных Dateno, +40 репозиториев научных данных на базе Weko3 [1], все они относятся к Японии и в совокупности содержат около 50 тысяч наборов данных. Не очень много по глобальным меркам, но хорошо индексируется и имеет стандартизированное API. Прежде чем данные таких каталогов индексируются в Dateno, они описываются и размещаются в реестре, идентифицируются их точки подключения к API и тд.

Ссылки:
[1] https://dateno.io/registry/country/JP

#opendata #dateno #datacatalogs