data.mos.ru
Ноутбук, используемый в примере:
В данной статье мы рассмотрим как:
Забирать общедоступные данные с https://data.mos.ru/.
Название выбранного датасета для примера: “Реестр лицензий на фармацевтическую деятельность…“.
Ссылка на датасет: https://data.mos.ru/opendata/7707089084-reestr-litsenziy-na-farmatsevticheskuyu-deyatelnost-vydannyh-departamentom-zdravoohraneniya-goroda-moskvyПреобразовывать их в интерфейсе JupyterLab.
Загружать в промежуточную базу данных PostgreSQL для последующей загрузки в базу данных ViQube платформы Visiology.
Здесь не рассматривается:
Данные будут забираться с data.mos.ru вручную. Для регулярной автоматический выгрузки необходимо настроить планировщик Chronicle.
Для дальнейшей загрузки в платформу можно воспользоваться стандартными средствами в платформе: “создание загрузчика” и “планы загрузки”. Всё описано в разделе документации (ссылка для версии 2.17):
https://visiology-doc.atlassian.net/wiki/pages/createpage.action?spaceKey=v17&title=%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B8%20%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B%20%D0%B2%20%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9%20%D0%B1%D0%B0%D0%B7%D0%B5%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20ViQubeПодробности работы подключенных Python библиотек. Это необходимо изучать отдельно.
Сначала необходимо пройти регистрацию на сайте https://apidata.mos.ru/Account/Register для получения API ключа, а также изучить документацию портала открытых данных: https://apidata.mos.ru/Docs.
Теперь можно приступать к работе в JupyterLab.
Создаем новый ноутбук.
Первым блоком подключаем все необходимые нам для работы Python библиотеки:
import requests import petl as etl import json import sqlalchemy as db import time
Вторым блоком задаем для удобства полученный после регистрации 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
Далее подключаемся к порталу 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()
Теперь получаем сами данные, одновременно отображая прогресс выгрузки в процентах. Полученные данные записываем в переменную rows.
Итого в переменной rows видим список, элементы которого являются словарями.
Теперь необходимо сформировать таблицу из данных (используя подключенную библиотеку petl), лежащих в переменной rows. Пока это сделать нельзя, так как в каждом словаре есть ключ Cells, значение которого также является словарем. В принципе нам только эти данные и нужны. Поэтому вытащим значения ключа Cells и сформируем на основе них список словарей.
Вот такой получится список словарей в переменной pharmacies_json.
Теперь можно загонять данные в таблицу, используя библиотеку petl.
Полученная таблица:
В колонке RegistrationDate видим, что даты лежат в формате dd.MM.yyyy. Лучше сразу привести с стандартному формату yyyy-MM-dd. Меняем формат с помощью подключенной библиотеки time и petl. Записываем в новую таблицу.
Последним шагом используем подключенную библиотеку sqlalchemy и petl для загрузки в базу данных. В данном примере PostgreSQL развернута локально на том же сервере. В PostgreSQL предварительно создана база данных databaseName и таблица в ней tableName.
Всё! Данные готовы для загрузки в платформу.