msnoorani/UK-Road-Accident-Analysis-and-Social-Network-Mining
GitHub: msnoorani/UK-Road-Accident-Analysis-and-Social-Network-Mining
基于英国道路事故数据的时空分析与预测项目,结合关联规则挖掘和社交网络社区发现算法,为交通安全政策制定提供数据支撑。
Stars: 0 | Forks: 0
# 英国道路事故与社交网络分析
## 📌 项目概述
本项目将**大数据与数据挖掘技术**应用于两个真实数据集:
- **A 部分:** 来自政府 SQLite 数据库的英国道路事故数据(2019 年)——通过时空分析、关联规则挖掘、聚类和时间序列预测,为交通部(DfT)提供政策干预建议
- **B 部分:** Facebook 社交网络数据(SNAP)——图构建、边介数中心性和社区发现
## 🗂️ 数据集
| Dataset | Source | Description |
|---------|--------|-------------|
| `accident_data_v1.0.0_2023.db` | 英国交通部 (STATS19) | SQLite 数据库 —— 包含 2019 年的事故、车辆、伤亡表 |
| `facebook_combined.txt` | Stanford SNAP | Facebook 自我网络边列表 —— 4,039 个节点,88,234 条边 |
## 📊 A 部分 —— 道路事故分析
### 应用技术
- **时空分析** —— 事故的小时和每日分布
- **关联规则挖掘** —— 针对事故严重程度的 Apriori 算法
- **地理空间聚类** —— 结合 Folium 交互式地图的 KMeans 算法
- **时间序列预测** —— 针对 3 个警察辖区的每周事故预测
- **LSOA 级别预测** —— 针对 Hull 事故高发前 30 个区域的每日事故预测
### 关键发现
**1. 事故何时达到高峰?**
- 大多数事故发生在 **周五 18:00** —— 与晚间通勤高峰时段一致
- 高峰日:**周五(第 6 天)**;高峰时段:**18:00**
**2. 摩托车事故**
| Category | Peak Hour | Peak Day |
|----------|-----------|----------|
| 125cc 及以下 | 17:00 | Friday |
| 125cc–500cc | 17:00 | Friday |
| 超过 500cc | 17:00 | Sunday |
**3. 行人事故**
- 高峰时间:**周五 15:30** —— 与接送放学及午间交通有关
- 大多数发生在干燥路面和日间条件下
**4. Apriori 关联规则**
- 通过相关性热力图选择的变量:限速、路口详情、城市/农村区域、驾驶员性别、首次碰撞点
- 最小支持度:0.02 | 最小置信度:0.2
- 规则揭示了 **更高限速 + 农村区域 → 致命/严重程度** 之间的强关联
**5. 区域聚类 —— 赫尔河畔金斯顿、东约克郡**
- 对经纬度坐标应用 **KMeans (k=5)**
- 使用肘部法则确定最佳 k 值
- 为每个区域生成交互式 **Folium 地图**
- Hull 的聚类揭示了集中在 A 道路路口和市中心区域的事故热点
**6. 时间序列预测(3 个警察辖区)**
- 历史数据:2017–2018 年每周计数
- 预测目标:2019 年每周计数
- 模型与每个警察辖区实际的 2019 年数据进行对比
**7. LSOA Hull —— 每日预测**
- 根据事故计数(2019 年 1 月–3 月)确定了前 30 个 LSOA
- 构建 2019 年 1 月–6 月的汇总时间序列
- 使用模型预测 **2019 年 7 月的每日事故发生情况**
### 数据清洗
- 使用 `sqlite3` 连接到 SQLite 数据库 —— 提取 2019 年的事故、车辆、伤亡表
- 使用 **按 ONS 区域的众数** 填补缺失的坐标
- 根据 STATS20 指南,将负值(-1)替换为 `np.nan`
- 对剩余的数值空值使用 **KDE 填补**(高斯核,带宽=2)
- 根据 STATS20 参考修正所有三个表中的无效代码(0, 9, 99)
- 在 `accident_index` 上合并表以进行统一分析
## 🔗 B 部分 —— Facebook 社交网络分析
### 网络特征
| Property | Value |
|----------|-------|
| Nodes | 4,039 |
| Edges | 88,234 |
| 网络密度 | 0.010819 |
| 平均度 | 43.69 |
### 边介数中心性
- 对所有 88,234 条边进行计算
- 分布呈**高度右偏** —— 少量边充当社区间的关键桥梁
- 高介数边可能连接不同的社交圈
### 社区发现 —— 算法比较
| Algorithm | Communities Detected |
|-----------|---------------------|
| **Louvain** | 15 |
| **Label Propagation** | ~17–20(可变) |
**Louvain 顶级社区:**
- 最大社区:约 600+ 个节点
- 计算了 Louvain 模块度得分 —— 表明社区结构紧密
- 计算了每个社区的平均聚类系数
**比较:**
- Louvain 在多次运行中产生更稳定、一致的结果
- Label Propagation 速度更快,但由于随机初始化,产生的社区边界不稳定
- 两种算法都揭示了与现实世界社交群体(朋友圈、大学网络)一致的清晰社区结构
## 🛠️ 技术栈
**A 部分:**
- `sqlite3` —— 数据库连接和 SQL 查询
- `Pandas`, `NumPy` —— 数据操作
- `Matplotlib`, `Seaborn` —— 可视化
- `mlxtend` —— Apriori 算法和关联规则
- `scikit-learn` —— KMeans 聚类、MinMaxScaler、KernelDensity 填补
- `Folium` —— 交互式地理空间地图
- `SMOTE / RandomUnderSampler` —— 类别平衡
**B 部分:**
- `NetworkX` —— 图构建、边介数中心性
- `python-louvain` —— Louvain 社区发现
- `NetworkX label_propagation_communities` —— Label Propagation
- `Matplotlib` —— 网络可视化
## 📁 仓库结构
```
├── part_a_coding.ipynb # Road accident analysis notebook
├── part_b_coding.ipynb # Social network analysis notebook
├── README.md # Project documentation
└── data/
└── README.md # Dataset instructions
```
## 📥 数据集
设置说明请参见 `data/README.md`。
- **A 部分:** 英国 STATS19 事故数据库 —— 可通过英国交通部开放数据门户获取
- **B 部分:** Facebook SNAP 数据集 —— [Stanford SNAP](https://snap.stanford.edu/data/ego-Facebook.html)
## 🏛️ 政策建议(A 部分)
基于分析,向交通部提出的关键建议:
1. **加强周五 17:00–19:00 的执法** —— 全国范围内的事故高峰时段
2. **针对农村 A 道路采取限速措施** —— Apriori 规则将高车速 + 农村区域与致命后果联系起来
3. **改善学校附近的行人基础设施** —— 行人高峰在 15:30,与放学时间一致
4. **针对休闲骑行者部署摩托车安全宣传活动** —— 超过 500cc 的摩托车高峰在周日,而非工作日
## 👤 作者
**Muhammad Salahuddin**
赫尔大学 人工智能与数据科学 硕士
[GitHub](https://github.com/msnoorani) | [LinkedIn](https://linkedin.com/in/msnoorani)
标签:Apex, Apriori算法, BSD, Facebook数据, Folium地图, KMeans聚类, Python, SNAP数据集, SQLite, 交通政策建议, 关联规则挖掘, 图算法, 地理空间分析, 大数据分析, 摩托车事故分析, 政府数据, 数据挖掘, 无后门, 时空分析, 时间序列预测, 机器学习, 特权检测, 社交网络分析, 社区发现, 英国交通事故, 行人事故分析, 边介数中心性, 逆向工具