Привет, Хабр.
Мы — Анастасия Карасева и Елена Веретённик, научные сотрудники Прикладного Центра МАСТ Европейского университета в Санкт-Петербурге, а этот текст — о боли работы с открытыми неагрегированными данными госзакупок. Мы сделали свой первый самостоятельный дата-проект на данных из xml контрактов по 44-ФЗ, которые доступны в российской единой информационной системе «Закупки». Эта история — о страданиях, возрождении и ряде небольших открытий, которые помогут начинающим дата-сайентистам легче и увереннее пройти похожий путь в открытых хранилищах данных.
ЕИС «Закупки» — база открытых данных, в которой размещается различная документация о закупках начиная с 2011 года: извещения, контракты и пр. Данные, как правило, хранятся в зазипованных xml на ftp сервере. Структура папок и документов строго регламентирована справочниками, альбомами и схемами. Но не всё так однозначно…
(Помимо ЕИС, открытые данные о госзакупках — уже структурированные и обработанные — можно найти на сайтах «Госзатраты» и «Госрасходы», но там представлены не все тэги из оригинальных xml-файлов. Далее мы будем использовать для сравнения обработанные версии контрактов с «Госзатрат».)
Целью нашего проекта было исследование сверхурочной работы в госзакупках в разных регионах России, и нам лучше подходили открытые и необработанные данные: там была метка о времени (таймстамп). Эта метка создаётся автоматически и отражает действие специалиста по закупкам в режиме реального времени, а значит, может служить надёжным цифровым следом его работы.
У нас был понятный план:
спарсить из ЕИС данные по контрактам, заключенным в соответствии с федеральным законом 44-ФЗ
собрать их в единый csv файл.
…
n) PROFIT.
Но проблемы начались уже на втором шаге.
Меняющиеся тэги.
ЕИС постоянно эволюционирует. За год может выйти несколько обновлений системы, в т.ч. меняется и схема тэгов в xml. Тэг – переменная, в которой скрыты разные характеристики контрактов. Тэги, как правило, многоуровневые (см. пример на матрёшке).
![](https://habrastorage.org/getpro/habr/upload_files/4bd/279/938/4bd279938b64fad00e4dbb1d3f31a6be.png)
![](https://habrastorage.org/getpro/habr/upload_files/cd5/da1/1e5/cd5da11e5fcb63849de93cf129afceef.png)
Одна из важнейших трансформаций в схеме контрактов — изменение тэга, обозначающего поставщиков. Начиная с версии 11.1 XSD-схемы ЕИС на смену тэгу “suppliers” пришел “suppliersInfo”. Соответственно, поменялись и все дочерние тэги, а также добавились новые, с кодами из ЕГРЮЛ и ЕГРИП. Это изменение увеличило нашу csv в разы: к 19 тэгам “suppliers” добавились 28 тэгов “suppliersInfo”. Итого — 47 колонок в csv только для поставщика. При этом колонки заполнены неравномерно по регионам и требуют объединения в одну переменную с нужным числом текстовых категорий.
Проследить эволюцию схем xml в ЕИС можно по альбомам ТФФ — документам, содержащим требования к форматам данных в рамках интеграции с ЕИС. Последняя версия на сегодня — 12.2; мы работали с версией 11.3.
Несколько поставщиков и продуктов.
При самостоятельном парсинге данных ЕИС важно учитывать, что продуктов и поставщиков в контракте может быть больше одного, — и соответственно выбирать способ хранения данных: сгруппированные данные со списками списков или же тайдизированные с одним наблюдением продукта/поставщика на строку. Второй вариант менее предпочтителен для объёмных данных, поэтому стоит присмотреться к спискам и nested json. Парсить такие данные в csv было не очень удобно, а при обработке наш сервер «Осгилиат» почти пал.
Дубликаты контрактов.
В сырых данных ЕИС оказались дубли контрактов, причём разного происхождения и свойств. Были и полные совпадения наблюдений до последнего тега, были и частичные. В зависимости от региона доля дублей варьируется от 0 до 20%.
Карта распределения дублей с 01.01.2015 по 01.07.2021
Причины появления дублей нам не ясны, но в их распределении есть определенные закономерности.
Во-первых, все дубли были обнаружены в папках с ручными выгрузками. В ЕИС есть два режима выгрузки данных — автоматический и ручной. При автоматической выгрузке данные контрактов сначала сгружаются ежесуточно (в 00:15 по Мск) в региональную папку <Наименование региона>/Contracts/currMonth, затем (в первую субботу месяца в 06:00) перемещаются в папку /prevMonth, а из /prevMonth попадают в региональную папку контрактов просто с указанием года и месяца. В том, что касается информации о времени, имена архивов в автоматической региональной выгрузке содержат только сведения о периоде, за который выполнена выгрузка.
При ручной выгрузке в названии папки остается не только период выгрузки, но и «дата и время запуска выгрузки в формате yyyymmddhhmiss, где yyyy – год, mm – месяц (номер), dd – день, hh – час, mi – минуты, ss – секунды (в часовом поясе региона выгрузки)» (Альбом ТФФ версия 11.3, с. 72-73). Период выгрузки в этом случае не всегда составляет месяц, иногда это может быть всего несколько дней. Зачем проводятся ручные выгрузки, нам неизвестно. Отличия имен архивов в автоматической и ручной выгрузках см. на скриншоте.
![](https://habrastorage.org/getpro/habr/upload_files/88e/f0f/c73/88ef0fc73472954e5390ea55d53879d6.jpeg)
Во-вторых, выборочный анализ распределения дублей в 30 регионах (из 85) показал, что дубли встречаются в строго определенные временные периоды, хотя и не все из этих периодов актуальны для всех регионов. Меньше всего дублей — во Владимирской, Волгоградской, Вологодской, Воронежской областях и Забайкальском крае. Почему именно в этих регионах? В поисках ответа на этот вопрос мы предположили, что причина — в том, что они обслуживаются одним оператором региональных информационных систем (РИС используются гос. органами регионального уровня в дополнение к ЕИС). Но эта гипотеза не подтвердилась: операторы РИС в этих регионах оказались разные. Единственное, что их объединяет на внешний взгляд: это — последние пять субъектов в региональном каталоге ЕИС, структурированном по латинскому алфавиту.
![](https://habrastorage.org/getpro/habr/upload_files/6e8/fc2/99d/6e8fc299de68120e6425c23308075ea4.gif)
В-третьих, дубли в основном различаются версией ЕИС: в большинстве регионов (но не во всех, что добавляет интриги юному аналитику) они имеют одну из версий 9 (9.0, 9.1, 9.2, 9.3) и версию 11.1. Вероятно, различные версии ЕИС могут быть, в первую очередь, в продолжающихся контрактах, информация по которым обновляется. Кроме того, в версии контракта, которой соответствует версия 11.1, может быть другим и содержимое некоторых тэгов: например, может измениться информация о заказчике или о статусе размещающей организации в ЕИС: с «заказчика» на «уполномоченное учреждение». (См. пример на скриншоте из Республики Татарстан — это контракт с номером 3165028337219000006.)
![](https://habrastorage.org/getpro/habr/upload_files/0fc/b05/aae/0fcb05aae303b9f56c78bd058758ad36.png)
Важно: в обработанных данных с «Госзатрат» дублей нет, но какой вариант конкретного контракта сохранен — неизвестно. Хотя в основном попадаются имена из контрактов в версии ЕИС 11.1, нам также попадались и контракты с именем заказчика из одной из версий 9.
![](https://habrastorage.org/getpro/habr/upload_files/9fc/585/b72/9fc585b72566521bc5166ad23e7fbb7f.png)
Когда все дубли, казалось бы, были найдены, мы обнаружили ещё одну странность.
«Мусорные» контракты.
Как любая система, ЕИС требует отладки. После неё остаётся мусор — контракты, заведенные в систему исключительно ради тестирования. Поскольку в фокусе наших интересов были контракты, заведенные в ЕИС в нерабочее время (т.е. с 19:00:01 до 07:59:59), мы не могли не обратить внимание на большое число таких контрактов в Московской области, опубликованных заказчиками со специфическими ИНН: 4444444420, 4444444422, 4444444423, 4444444424, 4444444425, 4444444426, 4444444427, 4444444428. (Не все из них были именно там или имели много контрактов, но, обнаружив в Московской области нескольких «чемпионов», мы нашли и остальных.) Ни одного из этих ИНН нет в ЕГРЮЛ. Имена заказчиков с этими ИНН в ЕИС говорили сами за себя: «Тестовая организация 22», «Тестовая организация 24», «Тестовая организация 27» и т.п. К тому же, 85% этих контрактов заводились в то же время, когда в ЕИС были объявлены регламентные работы.
«Мусорные» контракты попадают не только в ЕИС, но и на электронные торговые площадки, вероятно, сбивая с толку потенциальных поставщиков.
![](https://habrastorage.org/getpro/habr/upload_files/220/7f8/09a/2207f809ab3ad80a0eb112ff17efe1e9.jpeg)
Скриншот с сайта электронной площадки «Росэлторг». 4 февраля 2022 г.
Попадаются они и на «Госзатратах», и, кажется, пока не ловятся алгоритмами, выявляющими аномалии на сайте. Во всяком случае, они не выделены в отдельный блок.
Вывод: Если вы — начинающий дата-сайентист и для вашего проекта на данных по госзакупкам не нужна специфическая информация вроде данных о точном времени публикации контракта или о функциональной роли заказчика в ЕИС, то имеет смысл брать уже подготовленные данные «Госзатрат» и не мучаться самостоятельно с меняющимися тэгами, учетом неизвестного количества предметов закупки и поставщиков, а также фильтрацией дублей контрактов. Если же вы из любителей хардкора (или souls-like игр) и, пользуясь этим и другими гайдами, вы к этому моменту успешно преодолели все сложности в загрузке и предобработке, то наконец-то можно начать Новую игру + и всё-таки приступить к анализу, визуализации и всем другим оригинальным задачам. Good luck, have fun!
Анастасия Карасева, Елена Веретённик (МАСТ ЕУСПб)
ilmarin77
А если вы особенно интересующийся дата-саентист успешно нарывший что-то в данных о гос-закупках то вам в скором будущем светить до 8 лет по 275.1
P.S. Хабр - иностранная организация, зарегистрированная на Кипре, если что.