data.mos.ru

Ноутбук, используемый в примере:

 


В данной статье мы рассмотрим как:

  1. Забирать общедоступные данные с https://data.mos.ru/.
    Название выбранного датасета для примера: “Реестр лицензий на фармацевтическую деятельность…“.
    Ссылка на датасет: https://data.mos.ru/opendata/7707089084-reestr-litsenziy-na-farmatsevticheskuyu-deyatelnost-vydannyh-departamentom-zdravoohraneniya-goroda-moskvy

  2. Преобразовывать их в интерфейсе JupyterLab.

  3. Загружать в промежуточную базу данных PostgreSQL для последующей загрузки в базу данных ViQube платформы Visiology.

Здесь не рассматривается:


Сначала необходимо пройти регистрацию на сайте https://apidata.mos.ru/Account/Register для получения API ключа, а также изучить документацию портала открытых данных: https://apidata.mos.ru/Docs.

Теперь можно приступать к работе в JupyterLab.

  1. Создаем новый ноутбук.

  2. Первым блоком подключаем все необходимые нам для работы Python библиотеки:

    import requests import petl as etl import json import sqlalchemy as db import time
  3. Вторым блоком задаем для удобства полученный после регистрации API ключ и ID выбранного датасета. В нашем случае ID датасета - 1188.

    api_key = 'sdkjgh24758tywrg32' dataset_id = '1188'

    API ключ находится в очевидном месте https://apidata.mos.ru/Account/Manage, а dataset id можно посмотреть на вкладке “Паспорт” в поле “Идентификатор набора данных:“ https://data.mos.ru/opendata/7707089084-reestr-litsenziy-na-farmatsevticheskuyu-deyatelnost-vydannyh-departamentom-zdravoohraneniya-goroda-moskvy/passport?versionNumber=3&releaseNumber=165

  4. Далее подключаемся к порталу data.mos.ru, указываем API ключ и датасет id и получаем количество строк в датасете. Используем для этого подключенные ранее библиотеки requests и json. Этот шаг не обязателен и нужен лишь для отображения прогресса выгрузки данных при выполнении последующего блока.

    resp = requests.get('https://apidata.mos.ru/v1/datasets/'+dataset_id+'/count', params={'api_key':api_key}) nrows = resp.json()
  5. Теперь получаем сами данные, одновременно отображая прогресс выгрузки в процентах. Полученные данные записываем в переменную rows.

    Итого в переменной rows видим список, элементы которого являются словарями.

     

  6. Теперь необходимо сформировать таблицу из данных (используя подключенную библиотеку petl), лежащих в переменной rows. Пока это сделать нельзя, так как в каждом словаре есть ключ Cells, значение которого также является словарем. В принципе нам только эти данные и нужны. Поэтому вытащим значения ключа Cells и сформируем на основе них список словарей.

    Вот такой получится список словарей в переменной pharmacies_json.

     

  7. Теперь можно загонять данные в таблицу, используя библиотеку petl.

    Полученная таблица:

     

  8. В колонке RegistrationDate видим, что даты лежат в формате dd.MM.yyyy. Лучше сразу привести с стандартному формату yyyy-MM-dd. Меняем формат с помощью подключенной библиотеки time и petl. Записываем в новую таблицу.

     

  9. Последним шагом используем подключенную библиотеку sqlalchemy и petl для загрузки в базу данных. В данном примере PostgreSQL развернута локально на том же сервере. В PostgreSQL предварительно создана база данных databaseName и таблица в ней tableName.

     

  10. Всё! Данные готовы для загрузки в платформу.