Denver Urban Pulse
Платформа инженерии данных и BI-аналитики
Автоматизированная аналитическая платформа на данных из 4 публичных API: PostgreSQL-архитектура raw → staging → marts, Python ETL, интерактивные карты, тепловые карты, динамика KPI и централизованная фильтрация. Данные обновляются пакетным процессом по расписанию, а актуальность источников отображается в дашборде.
SQL PostgreSQL Python ETL API Integration Data Modeling Next.js TypeScript Leaflet Recharts
Обзор
Автоматизированная аналитическая платформа на данных из 4 публичных API: PostgreSQL-архитектура raw → staging → marts, Python ETL, интерактивные карты, тепловые карты, динамика KPI и централизованная фильтрация. Данные обновляются пакетным процессом по расписанию, а актуальность источников отображается в дашборде. Охватывает преступность, ДТП, обращения в службу 311 и качество воздуха с анализом по районам.
Архитектура
┌─────────────────────────────────────────────────────┐
│ Источники данных │
│ ArcGIS (Crime, Crashes, 311) · AirNow API (AQI) │
└──────────────────────┬──────────────────────────────┘
│ daily cron (06:00 UTC)
▼
┌─────────────────────────────────────────────────────┐
│ Python-пайплайн (Railway) │
│ Migrations → Ingestion → Staging → Marts │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ PostgreSQL (Railway) │
│ raw (5 таблиц) → staging (5) → marts (9) │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ Next.js API Routes (Vercel) │
│ /city-pulse/kpis · /categories · /heatmap │
│ /category-trends · /neighborhoods │
│ /environment/aqi · /environment/comparison │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ React-дашборд (Vercel) │
│ KPI · Карта · Графики · Heatmap · Рейтинг · Фильтры │
└─────────────────────────────────────────────────────┘
Источники данных
| Источник | Провайдер | Обновление |
|---|
| Криминальные инциденты | Denver Open Data (ArcGIS) | Ежедневно, последние 90 дней |
| ДТП | Denver Open Data (ArcGIS) | Ежедневно, последние 90 дней |
| Обращения 311 | Denver Open Data (ArcGIS) | Ежедневно, последние 90 дней |
| Качество воздуха (AQI) | AirNow API | Ежедневно, последние 90 дней |
| Границы районов | Denver Open Data (GeoJSON) | По мере изменений |
Ключевые возможности
- KPI-карточки со спарклайнами, дельтами и отметкой свежести данных по каждому домену
- Интерактивная хороплет-карта — клик по району фильтрует весь дашборд
- Разбивка по категориям — типы инцидентов, сгруппированные по доменам, с трендовыми спарклайнами
- Heatmap по дням и часам — матрица плотности инцидентов (день недели × час)
- График AQI — мультилинейный чарт по загрязнителям (Ozone, PM2.5, PM10)
- Рейтинг районов — композитный балл с переключением по доменам
- Лидеры изменений — топ-5 улучшившихся / ухудшившихся районов за период
- Глобальные фильтры — временное окно (7д / 30д / 90д) и выбор района
- Адаптивная вёрстка — мобильные устройства, планшеты и десктоп
Технологический стек
| Слой | Технология |
|---|
| База данных | PostgreSQL (Railway) |
| Пайплайн данных | Python 3.12, ежедневный cron (Railway) |
| Фронтенд | Next.js 16 (App Router), React 19, TypeScript 5.9 |
| Стилизация | Tailwind CSS 4, shadcn/ui, IBM Plex Sans |
| Графики | Recharts 3 |
| Карта | Leaflet + React Leaflet |
| API | Next.js Route Handlers (7 эндпоинтов) |
| Деплой | Vercel (фронтенд), Railway (БД + пайплайн) |
| Тестирование | Jest 30, React Testing Library |