Skip to content

TryAnotherName/IBC-Test-Work

Repository files navigation

Обзор

Этот репозиторий содержит скрипты для загрузки, очистки, нормализации и подготовки данных из открытых источников Москвы для дальнейшего использования в хранилище данных (DWH).

Структура ноутбуков

  • 01_mos_data_fetch.ipynb — скрипт для загрузки данных с портала открытых данных Москвы. Загруженные данные сохраняются в datasets/..._raw.csv.

  • 02_wiki_districts_extract_transform.ipynb — скрипт для парсинга таблицы районов Москвы из Википедии. Результат сохраняется в datasets/districts_cleaned.csv.

  • 03-05_*.ipynb — серия ноутбуков, содержащих этапы очистки и приведения к единому формату для дальнейшей нормализации. Данные сохраняются в datasets/..._cleaned.csv.

  • 06_data_normalization.ipynb — процесс нормализации всех очищенных данных. На выходе формируются фактовые и справочные таблицы, сохраняемые в папку dwh.

Зависимости

  • Python >= 3.8.10
  • requirements.txt

Структура DWH

1. Staging

Сырые данные

  • bike_parking_raw.csv - датасет велопарковок (ID 916)
  • sports_halls_raw.csv - датасет спортивных залов (ID 60622)
  • dog_parks_raw.csv - датасет площадок для выгула собак (ID 2663)

Очищенные данные

  • districts_cleaned.csv - датасет, составленный на основе данных из Википедии
  • bike_parking_cleaned.csv
  • sports_halls_cleaned.csv
  • dog_parks_cleaned.csv

2. DWH

Описание связей

Почти все фактовые таблицы связаны со справочными таблицами через связи типа «многие к одному»: одна запись в справочнике может соответствовать нескольким записям в фактовой таблице. Это обеспечивает нормализацию данных и снижает избыточность.

Исключение составляет таблица dog_park, которая дополнительно связана с таблицей dog_park_elements отношением «один ко многим»: одному объекту из dog_park может соответствовать несколько элементов оборудования в dog_park_elements. Такая структура позволяет сохранить атомарность данных в таблице dog_park и вынести многозначные характеристики (элементы площадки) в отдельную таблицу.

Справочные таблицы

  • adm_areas_dict.csv (adm_area_id, adm_area_short, adm_area_full)
  • bike_park_org.csv (org_id, org_phone)
  • disability_access_dict.csv (disability_friendly, disability_friendly_id)
  • dog_park_elements.csv (dog_park_id, element_id)
  • dog_park_elements_dict.csv (element_name, element_id)
  • lighting_types_dict.csv (lighting, lighting_id)
  • parks_dict.csv (park_global_id, park_name, park_id)
  • surface_types_dict.csv (surface_type_winter, surface_type_winter_id)
  • winter_services_dict.csv (services_winter, services_winter_id)
  • orgs_dict.csv (email, website, help_phone, org_id)

Фактовые таблицы

  • districts.csv (district_id, district, area_km2, population, population_dens, living_area, living_area_dens, population_trend, adm_area_id)
  • bike_parking.csv (global_id, id, bike_parking_name, address, capacity, longitude, latitude, district_id, org_id)
  • sports_hall.csv (global_id, object_name, name_winter, address, has_equipment_rental, has_tech_service, has_dressing_room, has_eatery, has_toilet, has_wifi, has_cash_machine, has_first_aid_post, has_music, usage_period_winter, seats, paid, longitude, latitude, mon, tue, wed, thu, fri, sat, sun, length, width, square, district_id, org_id, lighting_id, surface_type_winter_id, disability_friendly_id, services_winter_id)
  • dog_park.csv (address, dog_park_area, lighting, fencing, longitude, latitude, mon, tue, wed, thu, fri, sat, sun, dog_park_id, department_id, park_id, district_id)

ER-диаграмма

ETL

Архитектура разбита на этапы: загрузка — очистка — нормализация — хранение. Каждый этап реализован вручную в Jupyter-ноутбуках, но при масштабировании может быть перенесён в автоматизированный пайплайн под управлением Apache Airflow.

Data Flow Diagram

Data Flow Diagram

На текущем этапе данные на всех этапах ETL сохраняются в виде CSV-файлов (папки datasets/ и dwh/). Однако архитектура проекта предполагает возможность интеграции с СУБД — например, PostgreSQL для хранения сырых и нормализованных таблиц или ClickHouse для аналитических запросов на витринах. Подключение БД не реализовано в рамках данного прототипа, но учтено в структуре потока данных.

Инструменты

Выбор инструментов продиктован открытостью исходных данных, объёмом загрузки и требованиями к последующей аналитике. Используются широко применяемые open-source решения.

  • ETL: Apache Airflow для оркестрации пайплайнов; pandas и SQLAlchemy для обработки и загрузки данных.

  • Хранилище данных:

    • PostgreSQL — для хранения сырых, очищенных и нормализованных данных.
    • ClickHouse — в случае необходимости масштабирования по объёму данных или скорости аналитических запросов.
  • Визуализация и мониторинг: Superset (дашборды на основе витрин данных), Grafana (мониторинг ETL-процессов и метрик качества данных).

В рамках демонстрации пайплайны реализованы вручную (в ноутбуках), однако в реальной системе предполагается использование Apache Airflow для автоматизации, ClickHouse — для хранения агрегатов, Superset — для построения дашбордов.

Набор показателей и дашбордов для мониторинга Data Flow и качества данных

Метрики ETL/Data Flow (технические)

  • Количество загруженных строк из каждого источника.
  • Время выполнения каждого этапа (extract, transform, load).
  • Ошибки загрузки (например, падение парсера, таймауты).
  • Объем данных в каждой зоне (raw, cleaned, normalized).
  • Актуальность данных (время последней успешной загрузки).
  • Количество пропущенных записей или неконсистентных ключей.

Эти показатели можно отобразить в Grafana по логам Airflow. Также по этим метрикам настраиваются оповещения — например, при сбое загрузки, появлении orphan-записей или превышении допустимого уровня пропущенных значений.

Метрики качества данных

  • Процент NULL-значений в критичных колонках (например, longitude, latitude, capacity).
  • Согласованность ключей между таблицами (district_id, adm_area_id, и т.п.).
  • Аномалии — например, отрицательные площади, координаты вне границ Москвы.
  • Проверка справочников — нет ли orphan-записей в фактах.
  • Плотность данных — сколько строк на район, на парк, на организацию.

Идеи для дашбордов

  • ETL Pipeline Dashboard: загрузка по датасетам, ошибки, время, размер.
  • Data Quality Overview: null-значения, нарушения связей, некорректные значения.
  • Плотность покрытия: количество парковок/спортзалов/площадок по районам или округам (если возможно, то отображение на карте Москвы).
  • Обновление данных: мониторинг, когда последний раз обновлялись те или иные наборы.

Данные и источники для обогащения

data.mos.ru

  • Данные о транспортной доступности: расстояние до метро или до остановки общественного транспорта.
  • Экология/загрязнение воздуха: уровень загрязнения в районе.

OpenStreetMap

  • Плотность инфраструктуры количество, плотность и рейтинги ближайших объектов (кафе, магазины, достопримечательности).

Росстат

  • Богатство процент безработных, данные о доходах и возрастной структуре населения по районам Москвы.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors