基于 Python 的杭州市网约车营运数据可视化分析系统
本项目是一个基于 Python 的杭州市网约车营运数据可视化分析系统,采用 FastAPI 后端、Bootstrap 5 前端及 ECharts 图表库,配合 MySQL 数据库存储。系统提供价格、行程、时间、平台、区域、关联等七大分析模块,以及全屏数据大屏和后台管理功能。数据来源于 2020 年 11 月至 12 月的杭州市网约车订单,经清洗后约 9.8 万条。支持用户注册登录、权限控制、数据 CRUD 及 CSV 批量导入。

本项目是一个基于 Python 的杭州市网约车营运数据可视化分析系统,采用 FastAPI 后端、Bootstrap 5 前端及 ECharts 图表库,配合 MySQL 数据库存储。系统提供价格、行程、时间、平台、区域、关联等七大分析模块,以及全屏数据大屏和后台管理功能。数据来源于 2020 年 11 月至 12 月的杭州市网约车订单,经清洗后约 9.8 万条。支持用户注册登录、权限控制、数据 CRUD 及 CSV 批量导入。

本系统是一个基于 Python 的网约车营运数据可视化分析平台,针对杭州市(含富阳区等各区县)的网约车订单数据,提供多维度的数据分析与可视化展示功能。系统涵盖价格分析、行程分析、时间趋势、平台对比、区域分析、关联分析共 7 大分析模块,并配备全屏可视化数据大屏和完整的后台管理功能。
| 项目属性 | 说明 |
|---|---|
| 项目名称 | 杭州市网约车营运数据可视化分析系统 |
| 项目编号 | 337 |
| 技术栈 | FastAPI + Bootstrap 5 + ECharts + MySQL |
| 运行端口 | 8337 |
| 数据规模 | 100,000 条订单记录(清洗后约 98,485 条) |
| 数据时段 | 2020 年 11 月 ~ 2020 年 12 月 |
| 覆盖平台 | 26 家网约车运营平台 |
| 覆盖区域 | 杭州市为主,涉及上海、安徽等跨省订单 |
| 环境 | 版本要求 |
|---|---|
| Python | 3.8 及以上 |
| MySQL | 5.7 及以上 |
| 操作系统 | Windows / macOS / Linux |
| 浏览器 | Chrome / Edge / Firefox(推荐 Chrome) |
fastapi==0.104.1 # Web 框架
uvicorn==0.24.0 # ASGI 服务器
jinja2==3.1.2 # 模板引擎
python-multipart==0.0.6 # 表单解析
pandas==2.1.4 # 数据分析
numpy==1.25.2 # 数值计算
python-jose[cryptography]==3.3.0 # JWT
passlib[bcrypt]==1.7.4 # 密码加密
bcrypt==4.0.1 # bcrypt 算法
python-dotenv==1.0.0 # 环境变量
pymysql==1.1.0 # MySQL 驱动
aiofiles==23.2.1 # 异步文件
pyyaml==6.0.1 # YAML 配置解析
(此处省略图片展示)
# 1. 进入项目目录
cd code
# 2. 安装 Python 依赖
pip install -r requirements.txt
# 3. 配置 MySQL 数据库
# 确保 MySQL 服务已启动,创建数据库:
mysql -u root -p123456 -e "CREATE DATABASE IF NOT EXISTS design_337_ridehailing CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
# 4. 启动项目
python run.py
数据库连接信息在 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 动态生成)| 角色 | 用户名 | 密码 | 说明 |
|---|---|---|---|
| 管理员 | admin | admin123 | 系统自动创建,拥有全部权限 |
普通用户可通过注册页面自行注册。
启动成功后,在浏览器中访问:
http://localhost:8337
code/
├── main.py # 主程序(路由、数据处理、所有页面逻辑)
├── database.py # 数据库操作层(MySQL CRUD、用户管理、CSV 导入)
├── config.yaml # 项目配置文件(数据库、数据集字段、分析页面定义)
├── run.py # 启动脚本(依赖检查 + uvicorn 启动)
├── requirements.txt # Python 依赖清单
├── data/
│ └── 杭州市网约车营运数据信息 20260202.csv # 原始数据集(100,000 条)
├── static/
│ ├── css/
│ │ ├── style.css # 自定义样式(设计系统,1170+ 行)
│ │ ├── bootstrap.min.css # Bootstrap 5 框架
│ │ └── bootstrap-icons.css # Bootstrap Icons(精简版)
│ ├── js/
│ │ ├── echarts.min.js # ECharts 图表库
│ │ └── bootstrap.bundle.min.js # Bootstrap JS
│ ├── fonts/
│ │ └── bootstrap-icons.woff2 # 图标字体
│ └── data/
│ └── hangzhou.json # 杭州市行政区划 GeoJSON(地图数据)
├── 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
数据文件:data/杭州市网约车营运数据信息 20260202.csv
| 字段名(英文) | 字段名(中文) | 类型 | 说明 |
|---|---|---|---|
| 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 | 危险类型 | 文本 | 风险标记 |
系统内置了 26 家网约车平台的中文名称映射:
| 平台代码 | 中文名称 | 平台代码 | 中文名称 |
|---|---|---|---|
| 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 | 斑马快跑 |
系统内置了浙江省全部 11 个地级市、上海市及安徽省黄山市的完整行政区划代码映射,共计 100+ 条区划码。主要区域包括:
首页为系统入口,根据用户登录状态展示不同内容:
未登录用户:
已登录用户:
所有分析页面均通过 /analytics/{page_route} 路由统一入口,后端预计算数据后传入模板渲染。
展示系统整体运营数据:
订单价格维度的深入分析:
行驶里程和时间维度分析:
按时间维度分析订单趋势:
各网约车平台运营指标对比:
不同行政区域的订单分布与运营特征:
数值特征间的相关性分析:
独立全屏页面,深色主题(#0a0e1a),适合投屏展示:
布局结构(三列网格):
地图特性:
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 条/批)
模板引擎:Jinja2
├── base.html — 侧边栏布局(所有内页继承)
├── login/register.html — 独立页面(不继承 base)
└── dashboard.html — 独立全屏页面(不继承 base)
CSS 设计系统 (style.css, 1170+ 行)
├── 设计令牌(50+ CSS 变量)
├── 布局系统(侧边栏 248px + 顶部栏 56px)
├── 组件库(卡片、统计卡、表格、表单、按钮)
├── 首页组件(Hero 卡片、模块卡片、装饰动画)
├── 认证页面组件(分栏布局、渐变背景)
└── 响应式适配(768px 断点)
图表库:ECharts
├── 饼图/环形图(订单状态、支付状态、区域分布)
├── 柱状图(订单量、价格对比、时间分布)
├── 散点图(价格 - 里程、时间 - 价格)
├── 热力图(相关性矩阵)
└── 地图(杭州行政区划热力地图)
| 设计属性 | 值 |
|---|---|
| 风格 | Data-Dense Dashboard |
| 主色 | Royal Blue #1E40AF |
| 强调色 | Amber #F59E0B |
| 侧边栏色 | #0F172A |
| 背景色 | #F1F5F9 |
| 卡片色 | #FFFFFF |
| 字体 | Inter(正文)+ JetBrains Mono(数据/代码) |
| 圆角 | 12px(默认)/ 16px(大号) |
| 大屏主色 | Indigo #6366f1 |
| 路由 | 方法 | 说明 | 权限 |
|---|---|---|---|
| / | 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 |
| 路由 | 方法 | 说明 |
|---|---|---|
| /api/overview | GET | 返回概览统计 JSON |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT, PK, AUTO_INCREMENT | 用户 ID |
| username | VARCHAR(100), UNIQUE | 用户名 |
| 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 | 创建时间 |
根据 config.yaml 中的 features 配置动态生成,包含 26 个字段,对应原始 CSV 的所有列。每个字段类型根据配置自动映射为 DOUBLE(数值型)、VARCHAR(200)(分类型)或 TEXT(文本型)。
project:
# 项目基本配置
id: '337'
name: 杭州市网约车营运数据可视化分析系统
stack: fastapi_bootstrap
port: 8337
# 数据库连接
db_name / db_host / db_port / db_user / db_password
# 数据集配置
file: 杭州市网约车营运数据信息 20260202.csv
features: [...] # 26 个字段定义(key, label, csv_column, type, options/range)
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]
系统在 _load_dataframe() 中执行以下数据清洗:
Unnamed: 26 列data/ 目录config.yaml 中 dataset.file 一致data/ 目录下,编码为 UTF-8 BOM
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
| POST |
| 重置密码 |
| 管理员 |
| /admin/users/{id}/delete | POST | 删除用户 | 管理员 |
| /admin/users/create | POST | 创建用户 | 管理员 |