杭州市网约车营运数据可视化分析系统

一、项目概述

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          # 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 配置解析

2.3 项目演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


三、安装与部署

3.1 安装步骤

# 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

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 访问地址

启动成功后,在浏览器中访问:

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

五、数据说明

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 平台名称映射

系统内置了 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 斑马快跑

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  # 数据库连接

dataset:          # 数据集配置
  file: 杭州市网约车营运数据信息20260202.csv  # 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:   # 7 个分析页面定义
  - route: overview
    title: 运营概览
    description: ...
    columns: [bill_status, company_id, payment_status]
  ...

10.2 数据清洗规则

系统在 _load_dataframe() 中执行以下数据清洗:

  1. 列名映射:CSV 中文列名 → 英文字段名(通过 config.yaml features 的 csv_column 配置)
  2. 异常时间过滤:过滤 booking_time 年份 < 2000 的记录(约 1,515 条 1970-01 脏数据)
  3. 冗余列清理:移除 Unnamed: 26

十一、使用指南

11.1 普通用户使用流程

  1. 访问 http://localhost:8337 ,点击「免费注册」创建账户
  2. 使用注册的账号密码登录系统
  3. 在首页查看数据概览和统计卡片
  4. 点击分析模块卡片进入各维度分析页面
  5. 侧边栏「可视化大屏」可打开全屏数据展示

11.2 管理员使用流程

  1. 使用默认管理员账号登录(admin / admin123)
  2. 侧边栏「管理」区域可进入数据管理、后台管理、用户管理
  3. 数据管理页面可进行数据的增删改查和 CSV 批量导入
  4. 用户管理页面可管理所有用户的角色、状态、密码

11.3 CSV 数据导入

  1. 将 CSV 文件放入 data/ 目录
  2. 确保文件名与 config.yamldataset.file 一致
  3. 管理员进入「数据管理」页面,点击「导入 CSV」按钮
  4. 系统会清空现有数据后批量导入新数据

十二、注意事项

  1. 数据库:首次运行前需确保 MySQL 服务已启动并创建对应数据库
  2. 端口冲突:默认端口 8337,如被占用可在 config.yaml 中修改
  3. 数据文件:CSV 文件需放在 data/ 目录下,编码为 UTF-8 BOM
  4. 浏览器兼容:推荐使用 Chrome 或 Edge,ECharts 地图功能需要现代浏览器支持
  5. 密码安全:生产环境请修改默认管理员密码和 SESSION_SECRET_KEY
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐