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, 交通政策建议, 关联规则挖掘, 图算法, 地理空间分析, 大数据分析, 摩托车事故分析, 政府数据, 数据挖掘, 无后门, 时空分析, 时间序列预测, 机器学习, 特权检测, 社交网络分析, 社区发现, 英国交通事故, 行人事故分析, 边介数中心性, 逆向工具