CoderCastrov logo
CoderCastrov
Держстат

Мой ОПЫТ работы с данными ДЕРЖСТАТА

Мой ОПЫТ работы с данными ДЕРЖСТАТА
просмотров
4 мин чтение
#Держстат
Table Of Content

    У нас было множество латинских I на все случаи жизни и одна латинская O специально для ОБЪЕДИНЕННЫХ АРАБСКИХ ЭМИРАТОВ, Людмила Степановна и Степан Людмиленко, которые любили спорить относительно норм правописания, поэтому мы всегда были обеспечены БЕЛЬГИЯМИ и БЕЛЬГИЯМИ в полной мере, 3 килограмма кокаина, который мы использовали для генерации новых идей — например, упаковывать архивы в архивы и делать публикации в формате slk. А еще был Владлен Леонидович, который носил модные очки, бороду, пиджак под шорты, галстук в горошек, и умел архивировать в rar и zip. Жаль только, про 7zip мы узнали слишком поздно Из тайного дневника составителя данных в Держстате

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

    ДИСКЛЕЙМЕР: Этот текст прежде всего предназначен для новичков в работе с данными и самоучек, таких, как я, для которых могут быть интересны нюансы, которые профессиональные разработчики или аналитики данных считают слишком очевидными. Если вы относитесь к последним, но данные Держстата все же интересуют, можете проскроллить до конца, там есть ссылка на github со скриптами (Python).


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

    С Держстатом все немного сложнее. Сначала данные просто нужно найти, потому что они могут публиковаться в разных местах, категории могут пересекаться, а их названия неочевидны. Я читер — сразу знал, где искать (мне подсказали), поэтому этот этап мы пропустим.

    Итак, нам нужна «Географическая структура внешней торговли Украины товарами». Данные публикуются ежемесячно, каждый месяц в отдельном архиве, архивы — по годам на отдельных страницах. Скачивать такое вручную — это мазохизм, поэтому я написал простенький скрепер.

    Здесь есть один важный нюанс — если вы кликнете по сайту Держстата, то увидите, что ссылка в адресной строке браузера остается неизменной — http://www.ukrstat.gov.ua/. Некоторых это может отпугнуть — скрепить без ссылок на нужные страницы невозможно. К счастью, в этом случае страницы не генерируются javascript'ом (тогда скрепить действительно сложнее). Просто разработчики сайта решили использовать структуру на основе фреймов с помощью тегов <frameset>``</frameset>, которые скрывают полный адрес.

    Мы можем легко получить нужную ссылку из исходного кода страницы. Рекомендую это сделать в Firefox, Chrome у меня неверно открывал ссылку.

    Вуаля — мы теперь работаем за пределами фреймов и имеем доступ к полным ссылкам.

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

    Каждый из архивов содержит приложения с определенными кодами УКТЗЕД, всего 22 штуки.

    Нужно извлечь приложения и переименовать их, включив в название год и месяц, к которым относятся эти данные. Например, «5.V. Минеральные продукты.xls» станет «5.V. 2018 1–5.xls», что означает данные из приложения 5 за январь-май 2018 года. Да, Держстат публикует данные по накопительному итогу в течение года, но к этой проблеме вернемся позже.

    Меня интересовали приложения 5,6,16, поэтому я извлекал именно их, но по аналогии можно извлечь и другие. Для этой задачи хватило стандартных библиотек для работы с регулярными выражениями (re) и zip-архивами (zipfile).

    Жизнь не всегда такая простая и предсказуемая, как нам бы этого хотелось, и данные Держстата не забывают нам об этом напомнить. Несколько архивов по неизвестным причинам решили запаковать в rar, а часть данных запихали в еще один архив или поленились сохранять в xls в формате slk. Все эти штуки я исправил вручную за час.


    Теперь самое интересное — выгнать данные по нужным кодам, почистить и собрать в один файл. Кроме pandas, для работы с эксельками понадобится xlrd. Последний уже не поддерживается и не обновляется, но поскольку openpyxl работает только с xlsx, особых альтернатив для работы с xls в Python нет. К счастью, с багами я не столкнулся, хотя документация, на мой вкус, немного запутана.

    Алгоритм работы простой:

    При очистке я заменял латинские буквы на кириллические (все понимаю, но почему O в ОБЪЕДИНЕННЫХ АРАБСКИХ ЭМИРАТАХ не кириллическое — в голову до сих пор не ложится), сводил к общему знаменателю названия стран (СОЕДИНЕННОЕ КОРОЛЕВСТВО и ВЕЛИКАЯ БРИТАНИЯ часто оказывались в одном документе), удалял лишние пробелы и т.д. Важно отсортировать полученные данные по направлению торговли (импорт-экспорт), году, стране и месяцу — тогда очень просто преобразовывать накопительный итог в ежемесячные данные.

    Преобразование в помесячные данные я делал уже в редакторе электронных таблиц, формула очень простая: =IF(AND($B3>$B2;$D3=$D2);F3-F2;F3) (работает в MS Excel и LibreCalc).

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

    Принагидно хочу выразить благодарность чиновникам Держстата, которые готовы всегда подкинуть повод попрактиковаться в работе с данными в Python. Так держать!