基于 Python 的城市共享单车骑行需求时空分析系统
本系统是一个基于 Python Flask 框架的城市共享单车骑行需求时空分析平台,使用 Oslo City Bike(奥斯陆城市自行车)开放数据,提供系统总览、时间维度分析、空间维度分析、站点运营分析、OD 起讫流动分析、骑行需求预测、综合分析报告等功能模块,适用于城市共享单车运营调度与骑行需求研究场景。
项目封面

项目说明
基于 Python 的城市共享单车骑行需求时空分析系统
项目简介
本系统是一个基于 Python Flask 框架的城市共享单车骑行需求时空分析平台,使用 Oslo City Bike(奥斯陆城市自行车)开放数据,提供系统总览、时间维度分析、空间维度分析、站点运营分析、OD 起讫流动分析、骑行需求预测、综合分析报告等功能模块,适用于城市共享单车运营调度与骑行需求研究场景。
功能模块
| 模块 | 功能说明 |
|---|---|
| 系统总览 | 展示核心 KPI 指标(总骑行次数、活跃站点数、平均时长、平均距离、总里程、数据区间),日骑行量趋势图、24 小时分布图、工作日与周末对比图、热门出发站点 Top10、站点空间分布地图 |
| 时间分析 | 24 小时骑行分布、星期分布、按月分布、骑行时长分布(饼图)、骑行距离分布(饼图)、高峰时段 Top5、日骑行量趋势 |
| 空间分析 | 往返骑行占比 KPI、站点热力图(Leaflet 地图)、热门出发站 Top15、热门到达站 Top15、空间网格密度 |
| 站点运营 | 支持按出发量/到达量/净流量/名称排序,选择站点查看 24 小时出发分布,站点运营明细表格(含净流量标记) |
| OD 流动 | OD 流向地图(线段粗细表示流量)、Top OD 流量对表格 |
| 需求预测 | 基于梯度提升回归模型(GBR)的全城小时级需求预测,展示模型评估指标(MAE、RMSE、R²)、特征重要性、未来 24 小时预测、历史实际与模型拟合对比 |
| 分析报告 | 自动生成综合分析文字报告,包含数据概况、时间特征摘要、空间特征摘要、预测模型评估、结论与建议,支持浏览器打印 |
| 登录注册 | 用户登录鉴权、新用户注册、Session 管理 |
数据来源
| 数据集 | 文件 | 说明 |
|---|---|---|
| Oslo City Bike 2024年1月 | oslo_2024_01.csv | 2024 年 1 月奥斯陆共享单车骑行记录 |
| Oslo City Bike 2024年2月 | oslo_2024_02.csv | 2024 年 2 月奥斯陆共享单车骑行记录 |
| Oslo City Bike 2024年3月 | oslo_2024_03.csv | 2024 年 3 月奥斯陆共享单车骑行记录 |
| Oslo City Bike 2024年4月 | oslo_2024_04.csv | 2024 年 4 月奥斯陆共享单车骑行记录 |
| Oslo City Bike 2024年5月 | oslo_2024_05.csv | 2024 年 5 月奥斯陆共享单车骑行记录 |
| Oslo City Bike 2024年6月 | oslo_2024_06.csv | 2024 年 6 月奥斯陆共享单车骑行记录 |
- 数据来源:Oslo City Bike Open Data (NLOD 2.0)
- 数据地址:https://oslobysykkel.no/en/open-data/historical
- CSV 下载 API:https://data.urbansharing.com/oslobysykkel.no/trips/v1/{year}/{month:02d}.csv
- 数据字段:行程起止时间、起止站点 ID/名称/经纬度、骑行时长
数据合理性验证
| 指标 | 本系统值 | 行业参考值 | 判定 |
|---|---|---|---|
| 平均骑行时长 | 12.6 分钟 | 中国城市共享单车平均 12.1 分钟(2024 年中规院报告) | ✅ 合理 |
| 平均骑行距离(非往返) | 1.63 km | 中国城市共享单车平均 1.5 km(2024 年中规院报告) | ✅ 合理 |
| 高峰时段 | 16:00、17:00 | 北欧城市晚高峰 15:00-17:00 | ✅ 合理 |
| 季节趋势 | 1月34次/天→5月5483次/天 | 奥斯陆1月严寒极低、5月春暖激增 | ✅ 合理 |
| 往返行程占比 | 2.57% | 共享单车系统普遍 2-5% | ✅ 合理 |
| 工作日/周末比 | 79.4% / 20.6% | 约 80/20(奥斯陆冬季运营少周末出行) | ✅ 合理 |
| 站点数量 | 269 | 奥斯陆市约 250-300 个站点 | ✅ 合理 |
数据清洗规则
- 时长异常过滤:骑行时长超过 2 小时(7200 秒)的记录视为用户忘记还车,予以剔除(约 1,049 条,占总数 0.28%)
- 往返行程距离处理:起终点相同的往返行程,其 Haversine 直线距离为 0,但这不代表真实骑行距离为零。系统将这些行程的
distance_km设为 NULL,距离统计仅计算非往返行程 - Haversine 距离说明:本系统计算的
distance_km是起终点站点之间的球面直线距离,低于实际骑行路径距离(道路绕行) - 坐标范围验证:所有起终点坐标均在奥斯陆范围内(纬度 59°-61°,经度 10°-12°),无坐标异常
标准版目录结构
python-share-bike-fenxi/
├── app.py # Flask 应用主入口,页面路由定义
├── config.py # 应用配置模块(数据库路径、密钥、城市信息、默认账号)
├── requirements.txt # Python 依赖包清单
├── data/
│ └── raw/ # 原始 CSV 骑行数据
│ ├── oslo_2024_01.csv
│ ├── oslo_2024_02.csv
│ ├── oslo_2024_03.csv
│ ├── oslo_2024_04.csv
│ ├── oslo_2024_05.csv
│ └── oslo_2024_06.csv
├── database/
│ └── bike_analysis.db # SQLite 数据库文件(自动生成)
├── models/
│ ├── __init__.py # 数据模型包
│ └── database.py # SQLite 连接管理、表结构定义、初始化
├── models_saved/
│ └── demand_gbr.pkl # 训练完成的 GBR 模型文件(自动生成)
├── scripts/
│ ├── download_data.py # 从 Oslo City Bike 下载数据 CSV
│ ├── import_data.py # 导入 CSV 数据到 SQLite(含距离计算、小时聚合)
│ ├── train_model.py # 训练需求预测模型
│ ├── run_all.py # 一键导入数据 + 训练模型
│ ├── verify_data.py # 数据与计算一致性校验
│ ├── repair_station_stats.py # 修复站点进出统计
│ └── test_api.py # API 端到端测试
├── services/
│ ├── __init__.py # 服务包
│ ├── analytics.py # 统计分析服务(概览、时间模式、高峰识别)
│ ├── spatial.py # 空间分析服务(站点列表、热力、OD 流、网格)
│ └── prediction.py # 需求预测服务(模型训练、预测、评估)
├── static/
│ ├── css/
│ │ └── custom.css # 自定义样式
│ └── js/
│ ├── common.js # 公共 API 工具与 ECharts 辅助函数
│ ├── dashboard.js # 总览页图表
│ ├── temporal.js # 时间分析页图表
│ ├── spatial.js # 空间分析页图表
│ ├── stations.js # 站点运营页交互
│ ├── od_flow.js # OD 流动页地图
│ ├── prediction.js # 需求预测页图表
│ └── reports.js # 分析报告页数据
├── templates/
│ ├── base.html # 基础模板(导航栏、CDN 引用)
│ ├── login.html # 登录页
│ ├── register.html # 注册页
│ ├── dashboard.html # 总览页
│ ├── temporal.html # 时间分析页
│ ├── spatial.html # 空间分析页
│ ├── stations.html # 站点运营页
│ ├── od_flow.html # OD 流动页
│ ├── prediction.html # 需求预测页
│ ├── reports.html # 分析报告页
│ └── about.html # 关于页
├── 运行步骤必看/
│ └── window.md # Windows 运行步骤说明
├── mac_run.sh # macOS/Linux 一键启动脚本
├── window_run.bat # Windows 一键启动脚本
├── 训练手册.md # 模型训练手册
└── 项目说明.md # 本文件
技术栈
| 类别 | 技术 |
|---|---|
| 后端 | Python 3.12 + Flask 3.0 |
| 数据库 | SQLite 3 |
| 前端 | HTML5 + Bootstrap 5.3 + ECharts 5.5 + Leaflet 1.9 |
| 机器学习 | scikit-learn 1.5(梯度提升回归) |
| 数据处理 | pandas 2.2 + numpy 1.26 |
| 模型持久化 | joblib 1.4 |
| 密码安全 | Werkzeug pbkdf2:sha256 |
环境要求
| 项目 | 要求 |
|---|---|
| Python | 3.12 |
| 操作系统 | Windows / macOS / Linux |
| 内存 | 建议 2GB 以上 |
| 磁盘 | 约 500MB(含依赖和数据库) |
| 浏览器 | Chrome / Firefox / Safari / Edge 现代版本 |
账号信息
| 角色 | 用户名 | 密码 |
|---|---|---|
| 管理员 | admin | admin123 |
管理员账号在首次初始化数据库时自动创建。新注册用户默认为普通用户角色。
技术分类
包含内容
适用人群
学习参考与二次开发
关于 AI源码
AI源码 专注优质项目源码分享,提供完整源码、详细文档与技术支持,助力源码设计与课程作业。
相关推荐
查看全部 →
城市交通流量预测与拥堵成因分析系统
是一个面向城市交通拥堵分析的 monorepo,覆盖计算机设计课题中的主要能力链路:

电商用户行为漏斗与CRO转化率优化分析
电商用户行为漏斗与CRO转化率优化分析(E-Commerce Funnel CRO)是一套面向电商运营的数据分析平台,覆盖从用户访问到最终购买的完整漏斗链路,提供多维诊断、统计检验、PIE 优先级矩阵与 XGBoost 购买预测等能力,帮助运营团队精准定位转化瓶颈并制定优化策略。

多组学癌症预后预测分析系统
基于 Flask 的 Web 应用,用于上传 TCGA 风格合并表、做特征与标签概览、Cox 预后风险评分与生存相关可视化。模型在本地训练后以 形式加载,不提供旧版演示数据或假模型兜底。

基于 Apriori 算法的中药配伍审查系统
本系统是一个基于经典 Apriori 关联规则挖掘算法的中药配伍审查平台,使用真实中医药处方数据集(PTM-TKDE2018),实现药材频繁项集挖掘、关联规则生成与配伍禁忌审查。

基于 Python 的短视频用户行为分析系统
基于快手 KuaiRec / KuaiRand 数据集的短视频推荐分析平台,提供用户行为分析、推荐偏差检测、内容运营洞察、图神经网络推荐等完整分析链路。

基于 Python 的汽车市场数据分析与可视化平台
本平台是一个基于 Python Flask 框架的汽车市场数据分析与可视化系统,整合了多个真实汽车市场数据集,提供数据概览、车辆检索、多维分析、价格预测、品牌对比、技术规格分析、销量统计等功能模块,适用于汽车市场趋势研究和二手车价格预测场景。