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 и визуализаций
- Host: GitHub
- URL: https://github.com/odaiseas/road-crash-analysis
- Owner: odaiseas
- License: mit
- Created: 2025-04-28T10:48:31.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-20T11:57:23.000Z (about 1 year ago)
- Last Synced: 2025-06-07T15:06:33.384Z (about 1 year ago)
- Topics: jupyter, pandas, python, sql, sqlite, traffic-accidents
- Language: Jupyter Notebook
- Homepage:
- Size: 23.2 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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
- Смоделированы факторы, влияющие на число погибших в ДТП и экономические потери с использованием различных видов регрессий, дерева решений и случайного леса