An open API service indexing awesome lists of open source software.

https://github.com/odaiseas/road-crash-analysis

Анализ ДТП в России (2015–2024) с помощью Python, SQL и визуализаций
https://github.com/odaiseas/road-crash-analysis

jupyter pandas python sql sqlite traffic-accidents

Last synced: about 2 months ago
JSON representation

Анализ ДТП в России (2015–2024) с помощью Python, SQL и визуализаций

Awesome Lists containing this project

README

          

# Road-Crash-Analysis

Этот проект — практический кейс по анализу дорожно-транспортных происшествий в России. Цель — продемонстрировать навыки работы с реальными данными: от загрузки и предобработки до визуализации, работы с SQL и статистического моделирования.

## Лицензия

Этот репозиторий не содержит единой лицензии на весь проект, так как включает данные с разными условиями использования.

- Аналитический код и ноутбуки: MIT License (см. LICENSE.txt)
- Данные ДТП: [Creative Commons BY 4.0](https://creativecommons.org/licenses/by/4.0/)
Источник: https://tochno.st/datasets/traffic_accidents
- GeoJSON-файл: лицензия не указана; включён как вспомогательный файл для визуализации. При необходимости удалите файл russia_regions.geojson и загрузите с оригинального источника: https://github.com/hairymax/offline_russia_plotly

## Компетенции, демонстрируемые в проекте

- Работа с реальными данными о ДТП (7.2 млн записей)
- Использование SQL и SQLite для работы с большими таблицами
- Применение методов разведывательного анализа и визуализации
- Моделирование редких событий (летальных ДТП) и экономический последствий ДТП с использованием:
- линейных моделей с регуляризацией и счётных моделей (Poisson, Negative Binomial)
- классификаторов (решающие деревья, случайный лес)
- Оценка качества моделей, интерпретация коэффициентов, построение выводов

## Основные инструменты

- Очистка, преобразование и разведывательный данных с `pandas`
- Статистическое моделирование с `scikit-learn` и `statsmodels`
- Визуализация: `matplotlib`, `seaborn`, `plotly`
- Работа с SQL (`sqlite` из Python)
- Использование Jupyter Notebook для анализа
- Работа с геоданными и GeoJSON в `geopandas`

## Данные

### Данные о ДТП

**Данные проекта «Карта ДТП»** о дорожно-транспортных происшествиях в России и их характеристиках с 2015 года, преобразованные в формат плоских таблиц. Источник: *Дорожно-транспортные происшествия: координаты, участники и пострадавшие // Карта ДТП; обработка «Если быть точным», 2024*. Условия использования: [Creative Commons BY 4.0](https://creativecommons.org/licenses/by/4.0/). URL: [https://tochno.st/datasets/traffic_accidents](https://tochno.st/datasets/traffic_accidents).

Данные содержат сведения о 1 440 208 ДТП за 2015–2024 годы и вовлеченных в них участниках и транспортных средствах на основе карточек ГИБДД. Единица наблюдения — дорожно-транспортное происшествие. Атрибуты включают место совершения ДТП (с географическими координатами), категорию ДТП, состояние дорожного полотна, погодные условия, тяжесть ДТП, количество погибших и пострадавших, а также информацию об участниках (participants) и транспортных средствах (vehicles). Данные доступны в формате CSV (кодировка: UTF-8, разделитель: «;»).

Данные доступны по следующим ссылкам:
- [Accidents.csv](https://disk.yandex.ru/d/yPdgwafR_2xElg) — ДТП с координатами, тяжестью, дорожными условиями и др.
- [Participants.csv](https://disk.yandex.ru/d/YeyKLfXuETaEUQ) — участники ДТП (водители, пассажиры, пешеходы)
- [Vehicles.csv](https://disk.yandex.ru/d/NJApFGWb85CWVQ) — транспортные средства
- [Road-Crash-Analysis data](https://disk.yandex.ru/d/RkPaOQyX7dDwEQ) — архив с тремя файлами выше

### Карты

**Russia regions GeoJSON**
Источник: [hairymax/offline_russia_plotly](https://github.com/hairymax/offline_russia_plotly/blob/main/data/russia_regions.geojson)
Лицензия: не указана (дата обращения 2025-05-09). Если появится — будет добавлена. Файл включён только для целей визуализации. При необходимости вы можете загрузить файл напрямую с оригинального источника.

---

## Структура проекта

- `data/` — данные и база:
- `sample/` — выборка из 1000 ДТП (включена в репозиторий; создаётся скриптом `create_sample.py`)
- `sample_accidents.csv`
- `sample_participants.csv`
- `sample_vehicles.csv`
- `processed/` — очищенные выборки (включены в репозиторий; создаются в ноутбуке `01_data_cleaning.ipynb`)
- `processed_accidents.csv`
- `processed_participants.csv`
- `processed_vehicles.csv`
- `crash_database.db` — база данных SQLite (создаётся при выполнении кода; **не включена в репозиторий**)
- `russia_regions.geojson` — геоданные регионов России

- `scripts/`
- `create_sample.py` — генерация выборки и базы SQLite, очистка и предобработка выборки
- `utils.py` — вспомогательные функции, используемые в ноутбуках

- `notebooks/` — Jupyter-ноутбуки:
- `01_exploratory_analysis_sample.ipynb` — разведывательный анализ на малом объёме данных

> Этот ноутбук предназначен для отладки кода и воспроизводимости на небольшой выборке
- `02_exploratory_analysis_full.ipynb` — анализ всех данных с использованием SQLite
- `03_statistical_modeling.ipynb` — статистическое моделирование факторов аварийности: линейные и счётные модели регрессии, деревья решений и случайные леса

- `outputs/`
- `figures/` — сохранённые статичные графики
- `figures/interactive` — интерактивные визуализации
- `models/` — результаты моделирования
- `count_models` — негативная биномиальная регрессия
- `decision_tree` — дерево решений
- `random_forest` — случайный лес
- `linear_regression` — лассо- и гребневая регрессии

- `requirements.txt` — список зависимостей для установки окружения

- `.gitignore` — исключение временных и служебных файлов из репозитория

---

## Работа с базой данных

Для демонстрации навыков работы с SQL данные загружаются в SQLite базу средствами Python (`sqlite3`). Это позволяет выполнять выборки, фильтрацию и соединения данных через SQL-запросы прямо в ноутбуках, не используя внешние СУБД.

Работа с базой реализована в:
- `scripts/create_sample.py`
- `notebooks/02_exploratory_analysis_full.ipynb`
- `notebooks/03_statistical_modeling.ipynb`

---

## Как запустить

1. Установите зависимости:
```bash
pip install -r requirements.txt

2. Запустите скрипт для создания и очистки выборки (опционально):
```bash
scripts/create_sample.py

3. Запустите ноутбук для анализа выборочных данных:
```bash
jupyter notebook notebooks/01_exploratory_analysis_sample.ipynb

4. Запустите ноутбук для анализа полных данных:
```bash
jupyter notebook notebooks/02_exploratory_analysis_full.ipynb

5. Запустите ноутбук для статистического моделирования:
```bash
jupyter notebook notebooks/03_statistical_modeling.ipynb

> ⚠️ Файл `crash_database.db` создаётся при запуске `scripts/create_sample.py`, `notebooks/03_exploratory_analysis_full.ipynb` и `notebooks/04_statistical_modeling.ipynb` и может занимать до 2.5 ГБ. При необходимости его можно удалить вручную. Также ручное удаление рекомендуется перед повторым запуском скриптов.

## Реализовано

- Создана выборка из 1000 случайных ДТП и соответствующих участников/транспортных средств
- Произведена очистка и предобработка выборки
- Проведён разведывательный анализ выборки и полных данных
- Осуществлена загрузка полных таблиц в SQLite и работа с SQL
- Смоделированы факторы, влияющие на число погибших в ДТП и экономические потери с использованием различных видов регрессий, дерева решений и случайного леса