跳到主要内容基于 Python 的杭州市网约车营运数据可视化分析系统 | 极客日志PythonAI算法
基于 Python 的杭州市网约车营运数据可视化分析系统
本项目是一个基于 Python 的杭州市网约车营运数据可视化分析系统,采用 FastAPI 后端、Bootstrap 5 前端及 ECharts 图表库,配合 MySQL 数据库存储。系统提供价格、行程、时间、平台、区域、关联等七大分析模块,以及全屏数据大屏和后台管理功能。数据来源于 2020 年 11 月至 12 月的杭州市网约车订单,经清洗后约 9.8 万条。支持用户注册登录、权限控制、数据 CRUD 及 CSV 批量导入。
beaabea35 浏览 杭州市网约车营运数据可视化分析系统
一、项目概述
1.1 项目简介
本系统是一个基于 Python 的网约车营运数据可视化分析平台,针对杭州市(含富阳区等各区县)的网约车订单数据,提供多维度的数据分析与可视化展示功能。系统涵盖价格分析、行程分析、时间趋势、平台对比、区域分析、关联分析共 7 大分析模块,并配备全屏可视化数据大屏和完整的后台管理功能。
1.2 项目信息
| 项目属性 | 说明 |
|---|
| 项目名称 | 杭州市网约车营运数据可视化分析系统 |
| 项目编号 | 337 |
| 技术栈 | FastAPI + Bootstrap 5 + ECharts + MySQL |
| 运行端口 | 8337 |
| 数据规模 | 100,000 条订单记录(清洗后约 98,485 条) |
| 数据时段 | 2020 年 11 月 ~ 2020 年 12 月 |
| 覆盖平台 | 26 家网约车运营平台 |
| 覆盖区域 | 杭州市为主,涉及上海、安徽等跨省订单 |
1.3 主要功能
- 数据可视化分析:7 个分析页面,覆盖运营概览、价格、行程、时间、平台、区域、关联等维度
- 可视化数据大屏:全屏深色主题大屏,含 6 个 KPI 指标、杭州地图、多图表联动展示
- 用户认证系统:注册、登录、个人资料管理、密码修改
- 后台管理:用户管理(角色/状态/密码重置)、数据管理(CRUD + CSV 批量导入)
- 权限控制:user(普通用户)和 admin(管理员)双角色体系
二、环境要求
2.1 运行环境
| 环境 | 版本要求 |
|---|
| Python | 3.8 及以上 |
| MySQL | 5.7 及以上 |
| 操作系统 | Windows / macOS / Linux |
| 浏览器 | Chrome / Edge / Firefox(推荐 Chrome) |
2.2 Python 依赖
fastapi==0.104.1
uvicorn==0.24.0
jinja2==3.1.2
==.
==.
==.
python-jose==3.3.0
passlib==1.7.4
==.
==.
==.
==.
==.
python-multipart
0.0
6
pandas
2.1
4
numpy
1.25
2
[cryptography]
[bcrypt]
bcrypt
4.0
1
python-dotenv
1.0
0
pymysql
1.1
0
aiofiles
23.2
1
pyyaml
6.0
1
2.3 项目演示
三、安装与部署
3.1 安装步骤
cd code
pip install -r requirements.txt
mysql -u root -p123456 -e "CREATE DATABASE IF NOT EXISTS design_337_ridehailing CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
python run.py
3.2 数据库配置
数据库连接信息在 config.yaml 中配置:
project:
db_name: design_337_ridehailing
db_host: localhost
db_port: 3306
db_user: root
db_password: '123456'
port: 8337
users — 用户表(含管理员默认账户)
dataset_data — 数据集表(字段根据 config.yaml 动态生成)
3.3 默认账户
| 角色 | 用户名 | 密码 | 说明 |
|---|
| 管理员 | admin | admin123 | 系统自动创建,拥有全部权限 |
3.4 访问地址
四、项目结构
code/
├── main.py
├── database.py
├── config.yaml
├── run.py
├── requirements.txt
├── data/
│ └── 杭州市网约车营运数据信息 20260202.csv
├── static/
│ ├── css/
│ │ ├── style.css
│ │ ├── bootstrap.min.css
│ │ └── bootstrap-icons.css
│ ├── js/
│ │ ├── echarts.min.js
│ │ └── bootstrap.bundle.min.js
│ ├── fonts/
│ │ └── bootstrap-icons.woff2
│ └── data/
│ └── hangzhou.json
├── templates/
│ ├── base.html
│ ├── index.html
│ ├── login.html
│ ├── register.html
│ ├── profile.html
│ ├── edit_profile.html
│ ├── change_password.html
│ ├── dashboard.html
│ ├── overview.html
│ ├── price_analysis.html
│ ├── trip_analysis.html
│ ├── time_trends.html
│ ├── platform_comparison.html
│ ├── area_analysis.html
│ ├── correlations.html
│ ├── data_manage.html
│ ├── data_manage_edit.html
│ └── admin/
│ ├── dashboard.html
│ └── users.html
└── shared/
├── __init__.py
├── analysis_core.py
├── crawler_core.py
└── predictor_core.py
五、数据说明
5.1 数据集概览
数据文件:data/杭州市网约车营运数据信息 20260202.csv
- 原始记录数:100,000 条
- 清洗后记录数:约 98,485 条(过滤了 1970 年异常时间戳记录)
- 数据时间范围:2020 年 11 月 ~ 2020 年 12 月
- 数据来源:杭州市网约车营运监管数据
5.2 字段说明
| 字段名(英文) | 字段名(中文) | 类型 | 说明 |
|---|
| bill_status | 账单状态 | 分类 | 0=已取消,1=进行中,2=已完成 |
| company_id | 平台公司 | 分类 | 网约车平台标识(如 didi, caocao, T3) |
| area_code | 区域编码 | 分类 | 行政区划代码(如 330102=上城区) |
| payment_status | 支付状态 | 分类 | 0=未支付,1=已支付,3=已退款 |
| price | 订单价格 | 数值 | 单位:元,范围 0~2674 |
| actual_price | 实际计价 | 数值 | 单位:元 |
| real_price | 实际支付 | 数值 | 单位:元 |
| suitable_price | 合适价格 | 数值 | 单位:元 |
| drive_time | 行驶时间 | 数值 | 单位:秒,范围 0~74025 |
| drive_distance | 行驶里程 | 数值 | 单位:公里,范围 0~319 |
| other_terms | 其他条款 | 数值 | 范围 0~90 |
| pickup_lng / pickup_lat | 约车经纬度 | 数值 | 上车点坐标 |
| dest_lng / dest_lat | 目的地经纬度 | 数值 | 下车点坐标 |
| booking_time | 约车时间 | 文本 | 下单时间(datetime 格式) |
| waiting_time | 上车时间 | 文本 | 乘客上车时间 |
| arrival_time | 到达时间 | 文本 | 到达目的地时间 |
| payment_time | 支付时间 | 文本 | 完成支付时间 |
| match_time | 订单匹配时间 | 文本 | 司乘匹配时间 |
| departure_place | 出发地点 | 文本 | 上车地点名称 |
| pickup_place | 约车地点 | 文本 | 约车地点名称 |
| vehicle_model | 车辆型号 | 文本 | 车辆型号代码 |
| service_type | 服务类别 | 文本 | 服务类别代码 |
| order_id | 订单编号 | 文本 | 唯一订单标识 |
| risk_type | 危险类型 | 文本 | 风险标记 |
5.3 平台名称映射
| 平台代码 | 中文名称 | 平台代码 | 中文名称 |
|---|
| didi | 滴滴出行 | didihxz | 花小猪打车 |
| T3 | T3 出行 | caocao | 曹操出行 |
| xiangdao | 享道出行 | shouyue | 首汽约车 |
| xiehua | 携华出行 | wanshun | 万顺叫车 |
| shenzhou | 神州专车 | hhyc | 呼呼约车 |
| jike | 及刻出行 | leili | 磊力出行 |
| yicheng | 亿程出行 | TJHT | 天津华通 |
| tuotuo | 妥妥 E 行 | weixing | 微星出行 |
| lvcheng | 绿程出行 | tmcx | 天目出行 |
| yangguangchedao | 阳光车道 | zhongche | 中交出行 |
| wanglu | 网路出行 | dccx | 帝驰出行 |
| jishi | 即时出行 | aa | AA 出行 |
| tfcx | 同丰出行 | banma | 斑马快跑 |
5.4 区域编码映射
系统内置了浙江省全部 11 个地级市、上海市及安徽省黄山市的完整行政区划代码映射,共计 100+ 条区划码。主要区域包括:
- 杭州市(330100):上城区、下城区、江干区、拱墅区、西湖区、滨江区、萧山区、余杭区、富阳区、临安区、临平区、钱塘区、桐庐县、淳安县、建德市
- 宁波市(330200):海曙区、江北区、鄞州区等 11 个区县
- 温州市(330300):鹿城区、龙湾区、瓯海区等 11 个区县
- 其他城市:嘉兴、湖州、绍兴、金华、衢州、舟山、台州、丽水
- 跨省区域:上海市(徐汇区、青浦区等)、安徽省黄山市(屯溪区等)
六、功能模块详解
6.1 首页(/)
- 深色主题 Hero 卡片,展示系统名称与简介
- 数据概览统计(总订单数、完成率、平均价格、平台数、区域数)
- 注册/登录入口按钮
- 个性化欢迎语(显示用户名)
- Hero 卡片内嵌 5 项核心统计指标
- 4 张统计卡片(总订单、已完成、均价、均里程),带装饰图标和标签
- 7 个分析模块快捷入口(卡片式布局)
- 快捷操作区(管理员可见数据管理入口 + 可视化大屏入口)
- 右侧浮动装饰动画(数据分析主题图标)
6.2 数据分析模块
所有分析页面均通过 /analytics/{page_route} 路由统一入口,后端预计算数据后传入模板渲染。
6.2.1 运营概览(/analytics/overview)
- 4 项 KPI 指标卡:总订单数、已完成订单、平均价格、平均里程
- 账单状态分布:环形饼图(已取消/进行中/已完成)
- 支付状态分布:环形饼图(未支付/已支付/已退款)
- 各平台订单量 TOP10:水平条形图
- 各区县订单分布:水平条形图
6.2.2 价格分析(/analytics/price_analysis)
- 3 项统计卡:平均价格、最高价格、平均里程
- 价格分布直方图:展示价格区间分布
- 各平台平均价格对比:水平条形图
- 里程 - 价格散点图:探索里程与价格关系(限 2000 点)
6.2.3 行程分析(/analytics/trip_analysis)
- 3 项统计卡:平均里程、最大里程、平均行驶时间
- 里程分布直方图
- 里程 - 时间散点图
- 各平台平均里程对比
6.2.4 时间趋势(/analytics/time_trends)
- 2 项统计卡:数据跨度天数、日均订单量
- 各月订单量对比:柱状图
- 24 小时订单分布:柱状图(展示出行高峰时段)
- 星期订单分布:柱状图(周一至周日)
- 月份订单分布:柱状图
6.2.5 平台对比(/analytics/platform_comparison)
- 2 项统计卡:平台总数、订单量最多平台
- 各平台订单量:水平条形图(全量平台)
- 各平台平均价格对比
- 各平台平均里程对比
6.2.6 区域分析(/analytics/area_analysis)
- 2 项统计卡:覆盖区域数、订单最多区域
- 各区县订单量 TOP15:水平条形图
- 各区县平均价格:水平条形图(从高到低排列)
- 各区县平均里程:水平条形图(从高到低排列)
- 杭州市区域订单地图:基于 GeoJSON 的热力地图
6.2.7 关联分析(/analytics/correlations)
- 相关性热力图:分析 price、drive_distance、drive_time、actual_price、suitable_price 之间的相关性
- 里程 - 价格散点图
- 时间 - 价格散点图
6.3 可视化数据大屏(/dashboard)
独立全屏页面,深色主题(#0a0e1a),适合投屏展示:
- 顶部:系统标题 + 实时时钟
- 中上:6 个 KPI 指标卡(总订单量、完成率、平均价格、平均里程、平台数量、区域覆盖)
- 左列:各平台订单量 TOP10 + 平台均价对比(水平条形图)
- 中下:杭州市各区县订单分布地图(交互式热力地图,支持缩放拖拽)
- 右列:订单状态分布饼图 + 24 小时订单分布柱状图
- 基于阿里 DataV GeoJSON 数据
- 深色配色方案(#1e1b4b → #a5b4fc)
- 鼠标悬停高亮为橙色(#f59e0b)
- 支持缩放和拖拽(roam: true)
6.4 用户认证
6.4.1 登录页(/login)
- 独立页面设计(不使用侧边栏布局)
- 左右分栏:左侧深色品牌展示区 + 右侧登录表单
- 背景采用蓝 - 琥珀渐变光晕 + 点阵装饰
- 支持记住登录状态
6.4.2 注册页(/register)
- 与登录页同风格的独立页面
- 三段式表单:账户信息、个人信息、安全设置
- 注册后自动跳转登录页
6.4.3 个人中心
- 个人资料(/profile):展示用户信息(头像、用户名、角色、邮箱、手机、性别、年龄、部门、职位、简介)
- 编辑资料(/edit_profile):修改个人信息
- 修改密码(/change_password):需验证原密码
6.5 后台管理(仅管理员可见)
6.5.1 管理后台(/admin)
6.5.2 用户管理(/admin/users)
- 用户列表(用户名、邮箱、角色、状态、注册时间、最后登录)
- 操作:修改角色、启用/禁用账号、重置密码(默认 123456)、删除用户、新建用户
6.5.3 数据管理(/data_manage)
- 数据记录列表(分页显示,每页 20 条)
- 搜索功能
- 新增/编辑/删除单条记录
- CSV 批量导入:一键将 CSV 文件导入数据库(先清空再导入)
七、技术架构
7.1 后端架构
FastAPI (main.py, 780 行)
├── 配置加载(config.yaml)
├── 数据映射(AREA_CODE_MAP: 100+条,COMPANY_NAME_MAP: 26 条)
├── 路由层
│ ├── 首页路由 (/)
│ ├── 认证路由 (/login, /register, /logout, /profile, ...)
│ ├── 分析路由 (/analytics/{page_route})
│ ├── 大屏路由 (/dashboard)
│ ├── 数据管理路由 (/data_manage/*)
│ ├── 管理员路由 (/admin/*)
│ └── API 路由 (/api/overview)
├── 数据处理层
│ ├── _load_dataframe() — CSV 加载 + 列名映射 + 脏数据清洗
│ └── _precompute_analytics() — 各分析页面数据预计算
└── 辅助函数(认证、权限、表单解析)
Database (database.py, 387 行)
├── 自动建表(users + dataset_data)
├── 用户 CRUD(注册/登录/查询/修改/删除)
├── 数据集 CRUD(增删改查 + 分页)
└── CSV 导入(批量 200 条/批)
7.2 前端架构
模板引擎:Jinja2
├── base.html — 侧边栏布局(所有内页继承)
├── login/register.html — 独立页面(不继承 base)
└── dashboard.html — 独立全屏页面(不继承 base)
CSS 设计系统 (style.css, 1170+ 行)
├── 设计令牌(50+ CSS 变量)
├── 布局系统(侧边栏 248px + 顶部栏 56px)
├── 组件库(卡片、统计卡、表格、表单、按钮)
├── 首页组件(Hero 卡片、模块卡片、装饰动画)
├── 认证页面组件(分栏布局、渐变背景)
└── 响应式适配(768px 断点)
图表库:ECharts
├── 饼图/环形图(订单状态、支付状态、区域分布)
├── 柱状图(订单量、价格对比、时间分布)
├── 散点图(价格 - 里程、时间 - 价格)
├── 热力图(相关性矩阵)
└── 地图(杭州行政区划热力地图)
7.3 设计系统
| 设计属性 | 值 |
|---|
| 风格 | Data-Dense Dashboard |
| 主色 | Royal Blue #1E40AF |
| 强调色 | Amber #F59E0B |
| 侧边栏色 | #0F172A |
| 背景色 | #F1F5F9 |
| 卡片色 | #FFFFFF |
| 字体 | Inter(正文)+ JetBrains Mono(数据/代码) |
| 圆角 | 12px(默认)/ 16px(大号) |
| 大屏主色 | Indigo #6366f1 |
八、路由表
8.1 页面路由
| 路由 | 方法 | 说明 | 权限 |
|---|
| / | GET | 首页 | 公开 |
| /login | GET/POST | 登录 | 公开 |
| /register | GET/POST | 注册 | 公开 |
| /logout | GET | 退出登录 | 登录用户 |
| /profile | GET | 个人资料 | 登录用户 |
| /edit_profile | GET/POST | 编辑资料 | 登录用户 |
| /change_password | GET/POST | 修改密码 | 登录用户 |
| /analytics/overview | GET | 运营概览 | 登录用户 |
| /analytics/price_analysis | GET | 价格分析 | 登录用户 |
| /analytics/trip_analysis | GET | 行程分析 | 登录用户 |
| /analytics/time_trends | GET | 时间趋势 | 登录用户 |
| /analytics/platform_comparison | GET | 平台对比 | 登录用户 |
| /analytics/area_analysis | GET | 区域分析 | 登录用户 |
| /analytics/correlations | GET | 关联分析 | 登录用户 |
| /dashboard | GET | 可视化大屏 | 登录用户 |
| /data_manage | GET | 数据管理 | 管理员 |
| /data_manage/add | GET/POST | 新增记录 | 管理员 |
| /data_manage/edit/{id} | GET/POST | 编辑记录 | 管理员 |
| /data_manage/delete/{id} | POST | 删除记录 | 管理员 |
| /data_manage/import_csv | POST | CSV 导入 | 管理员 |
| /admin | GET | 管理后台 | 管理员 |
| /admin/users | GET | 用户管理 | 管理员 |
| /admin/users/{id}/role | POST | 修改角色 | 管理员 |
| /admin/users/{id}/status | POST | 修改状态 | 管理员 |
| /admin/users/{id}/reset_password | POST | 重置密码 | 管理员 |
| /admin/users/{id}/delete | POST | 删除用户 | 管理员 |
| /admin/users/create | POST | 创建用户 | 管理员 |
8.2 API 路由
| 路由 | 方法 | 说明 |
|---|
| /api/overview | GET | 返回概览统计 JSON |
九、数据库设计
9.1 用户表(users)
| 字段 | 类型 | 说明 |
|---|
| id | INT, PK, AUTO_INCREMENT | 用户 ID |
| username | VARCHAR(100), UNIQUE | 用户名 |
| email | VARCHAR(200), UNIQUE | 邮箱 |
| password_hash | VARCHAR(255) | bcrypt 加密密码 |
| role | VARCHAR(20) | 角色(user/admin) |
| status | VARCHAR(20) | 状态(active/disabled) |
| full_name | VARCHAR(100) | 姓名 |
| phone | VARCHAR(30) | 手机号 |
| gender | VARCHAR(20) | 性别 |
| age | INT | 年龄 |
| department | VARCHAR(100) | 部门 |
| title | VARCHAR(100) | 职位 |
| bio | TEXT | 个人简介 |
| last_login_at | DATETIME | 最后登录时间 |
| created_at | TIMESTAMP | 创建时间 |
9.2 数据集表(dataset_data)
根据 config.yaml 中的 features 配置动态生成,包含 26 个字段,对应原始 CSV 的所有列。每个字段类型根据配置自动映射为 DOUBLE(数值型)、VARCHAR(200)(分类型)或 TEXT(文本型)。
十、配置说明
10.1 config.yaml 结构
project:
id: '337'
name: 杭州市网约车营运数据可视化分析系统
stack: fastapi_bootstrap
port: 8337
db_name / db_host / db_port / db_user / db_password
file: 杭州市网约车营运数据信息 20260202.csv
features: [...]
modules:
auth: true
roles: [user, admin]
analytics: true
data_manage: true
dashboard: true
prediction: false
analysis_pages:
- route: overview
title: 运营概览
description: ...
columns: [bill_status, company_id, payment_status]
10.2 数据清洗规则
系统在 _load_dataframe() 中执行以下数据清洗:
- 列名映射:CSV 中文列名 → 英文字段名(通过 config.yaml features 的 csv_column 配置)
- 异常时间过滤:过滤 booking_time 年份 < 2000 的记录(约 1,515 条 1970-01 脏数据)
- 冗余列清理:移除
Unnamed: 26 列
十一、使用指南
11.1 普通用户使用流程
11.2 管理员使用流程
- 使用默认管理员账号登录(admin / admin123)
- 侧边栏「管理」区域可进入数据管理、后台管理、用户管理
- 数据管理页面可进行数据的增删改查和 CSV 批量导入
- 用户管理页面可管理所有用户的角色、状态、密码
11.3 CSV 数据导入
- 将 CSV 文件放入
data/ 目录
- 确保文件名与
config.yaml 中 dataset.file 一致
- 管理员进入「数据管理」页面,点击「导入 CSV」按钮
- 系统会清空现有数据后批量导入新数据
十二、注意事项
- 数据库:首次运行前需确保 MySQL 服务已启动并创建对应数据库
- 端口冲突:默认端口 8337,如被占用可在 config.yaml 中修改
- 数据文件:CSV 文件需放在
data/ 目录下,编码为 UTF-8 BOM
- 浏览器兼容:推荐使用 Chrome 或 Edge,ECharts 地图功能需要现代浏览器支持
- 密码安全:生产环境请修改默认管理员密码和 SESSION_SECRET_KEY
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online