valerymamontov / gks

Parsing data.xml from https://www.fedstat.ru/indicator/31293

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Предыстория

Коллеги скачали файл из Федерального портала государственной статистики. Файл оказался в формате XML.
Скачать статданные в формате XLS не получилось. Они обратились с просьбой обработать XML-файл.

Сайт и статданные

Федеральный портал государственной статистики содержит различные индикаторы и статистические данные по России. Требовалось обработать расчётный показатель "Ожидаемая продолжительность жизни".
Данные были выгружены по Центральному федеральному округу (Калужская, Брянская, Тульская и другие области).
Период: с 1990 по 2017 годы.
Сайт работает нестабильно и попытка зарегистрироваться на нём не увенчалась успехом.
Без регистрации выгрузить статданные в эксель нельзя. Только в XML.
Вот так выглядит страница сайта, с которой можно скачать статданные:

Image alt

При анализе XML-файла я увидел, что в самом начале он содержит три справочника:

  1. список регионов
  2. структура населения
  3. тип поселения

Image alt

Ниже, после справочников, идут статданные. Видно, что они структурированы, т.е. представлены в виде "блоков":


	<generic:SeriesKey>
		<generic:Value concept="s_OKATO" value="643"/>
		<generic:Value concept="S_GRUP_2" value="2"/>
		<generic:Value concept="s_mest" value="w2:p_mest:11"/>
	</generic:SeriesKey>
	<generic:Attributes>
		<generic:Value concept="EI" value="год"/>
		<generic:Value concept="PERIOD" value="значение показателя за год"/>
	</generic:Attributes>
	<generic:Obs>
		<generic:Time>1991</generic:Time>
		<generic:ObsValue value="74,2"/>
	</generic:Obs>

Image alt

Решение:

Для парсинга XML-файла я использовал python 3.7 и модуль xml.dom.minidom.
Скрипт script.py обрабатывает XML, извлекает данные и сохраняет их в CSV-файл.
Затем этот файл можно открыть в экселе и навести красоту. Поставить фильтры на заголовки. Выделить заголовки цветом и т.д. Image alt

Скрипт писался только для обработки статданных за 1990-2017 годы, по регионам, входящим в ЦФО.
Чтобы получить сведения за другой период и/или по другим регионам, на этой странице сайта необходимо:

  • поставить нужные фильтры в столбце регионы;
  • выбрать годы;
  • скачать новый XML-файл.

Затем в скрипте (script.py) модифицировать код в следующих строках:

  • 3, где указано имя XML-файла;
  • 7-9, где перечисляются коды регионов;
  • 23, где с помощью функции range идёт перечисление 1990-2018 годов (обращаю внимание, что последний 2018 год не идёт в расчёт).

Файлы:

data.xml - исходный XML-файл, выгруженный с сайта;
script.py - Python скрипт;
data.csv - промежуточный CSV-файл, полученный после запуска скрипта;
Ожидаемая продолжительность жизни при рождении.xlsx - итоговый XLSX-файл с фильтрами.

About

Parsing data.xml from https://www.fedstat.ru/indicator/31293


Languages

Language:Python 100.0%