基于Python的各类企业排行数据可视化分析系统 — 技术文档
一、项目概述
1.1 项目简介
本系统是一个面向企业排行榜数据的可视化分析平台,整合了胡润百富榜、中国民营企业500强、福布斯全球2000强三大权威企业排名数据源,提供多维度的数据查询、统计分析和可视化展示功能。
系统支持从2022年至2025年共4个年度的数据,涵盖691+条胡润品牌数据、760+条民营企业数据、169+条福布斯全球企业数据,并通过40+个API接口和50+个ECharts图表实现丰富的交互式可视化分析。
1.2 核心功能
| |
|---|
| |
| |
| |
| 按年份/国家/行业三维筛选,7个图表 + 分页数据表 |
| |
| |
| |
| |
| |
1.3 数据覆盖范围
| | | |
|---|
| | | |
| | | |
| | | 排名、企业名、国家、行业、营收、利润、资产、市值(十亿美元) |


























二、技术栈
2.1 后端技术
| | |
|---|
| Python | | |
| FastAPI | | |
| Uvicorn | | |
| SQLAlchemy | | |
| PyMySQL | | |
| Pydantic | | |
| python-jose | | |
| passlib[bcrypt] | | |
2.2 前端技术
| | |
|---|
| Jinja2 | | |
| Bootstrap | | |
| Bootstrap Icons | | |
| ECharts | | |
| Google Fonts | | 字体加载(Cormorant Garamond、DM Sans、JetBrains Mono) |
2.3 数据库
| |
|---|
| MySQL | |
| 数据库名 | design_119_company |
| 字符集 | utf8mb4 |
| 连接串 | mysql+pymysql://root:123456@localhost:3306/design_119_company?charset=utf8mb4 |
2.4 数据采集工具
三、系统架构
3.1 整体架构
┌──────────────────────────────────────────────────────────┐│ 浏览器 (Client) ││ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││ │ 首页概览 │ │ 排行分析 │ │ 地图可视化│ │ 大屏展示 │ ││ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ ││ │ │ │ │ ││ └──────────────┴──────────────┴──────────────┘ ││ │ AJAX / fetch │└─────────────────────────┼──────────────────────────────────┘ │ HTTP (JSON)┌─────────────────────────┼──────────────────────────────────┐│ FastAPI Server ││ ┌──────────┐ ┌───────────────────────────────────────┐ ││ │ Page │ │ API Routers │ ││ │ Routes │ │ /auth /api/hurun /api/private │ ││ │ (Jinja2) │ │ /api/forbes /api/analysis │ ││ └──────────┘ └───────────────────┬───────────────────┘ ││ │ ││ ┌──────────────────────────────────┴──────────────────┐ ││ │ SQLAlchemy ORM │ ││ │ Models: User, HurunBrand, PrivateEnterprise, │ ││ │ ForbesGlobal │ ││ └──────────────────────────┬──────────────────────────┘ │└─────────────────────────────┼──────────────────────────────┘ │┌─────────────────────────────┼──────────────────────────────┐│ MySQL Database ││ design_119_company ││ ┌────────┐ ┌──────────────┐ ┌────────────────┐ ││ │ users │ │hurun_brand │ │private_enterprise│ ││ └────────┘ └──────────────┘ └────────────────┘ ││ ┌────────────┐ ││ │forbes_global│ ││ └────────────┘ │└────────────────────────────────────────────────────────────┘
3.2 目录结构
119-基于Python的各类企业排行数据可视化分析系统/├── code/│ ├── app/│ │ ├── __init__.py│ │ ├── main.py # FastAPI应用入口,路由注册│ │ ├── config.py # 配置常量(DB连接、JWT密钥)│ │ ├── database.py # SQLAlchemy引擎和会话工厂│ │ ├── models.py # ORM模型定义(4张表)│ │ ├── schemas.py # Pydantic请求/响应模型│ │ ├── routers/│ │ │ ├── auth.py # 认证路由(注册/登录/鉴权)│ │ │ ├── hurun.py # 胡润榜数据API│ │ │ ├── private.py # 民营企业数据API│ │ │ ├── forbes.py # 福布斯数据API│ │ │ └── analysis.py # 跨排行榜分析API(17个接口)│ │ ├── services/│ │ │ ├── crawler.py # Firecrawl网页爬虫│ │ │ └── data_loader.py # CSV/Excel批量导入│ │ └── static/│ │ └── css/│ │ └── style.css # 全局样式(Luxury Dark主题)│ ├── templates/│ │ ├── base.html # 基础布局模板(侧边栏+顶栏)│ │ ├── index.html # 首页数据概览│ │ ├── login.html # 登录页│ │ ├── register.html # 注册页│ │ ├── profile.html # 个人中心│ │ ├── hurun.html # 胡润百富榜分析│ │ ├── private.html # 民营企业500强分析│ │ ├── forbes.html # 福布斯全球2000强分析│ │ ├── map_china.html # 中国地图│ │ ├── map_world.html # 全球地图│ │ ├── dashboard.html # 数据分析仪表盘(20图表)│ │ └── screen.html # 全屏可视化大屏│ ├── run.py # 启动脚本(uvicorn)│ ├── import_scraped2.py # 数据导入: 胡润2022/2023, 民营2023│ ├── import_scraped_data.py # 数据导入: 胡润2024, 福布斯2024│ ├── import_2025_data.py # 数据导入: 2025年三大榜单│ ├── scraped_data.py # 原始数据定义(硬编码)│ └── import_data.py # 通用数据导入工具└── 技术文档.md # 本文档
3.3 请求处理流程
用户访问页面 ──→ FastAPI Page Route ──→ Jinja2渲染HTML ──→ 浏览器 │ JS加载后 │ checkAuth()验证token │ ┌───────────┴───────────┐ │ │ 有token且有效 无token或无效 │ │ 加载数据(ECharts) 跳转到 /login │ fetch('/api/...') │ Authorization: Bearer │ FastAPI API Route │ SQLAlchemy查询MySQL │ 返回JSON ──→ ECharts渲染图表
四、数据库设计
4.1 数据模型
users — 用户表
hurun_brand — 胡润品牌榜
private_enterprise — 民营企业500强
forbes_global — 福布斯全球2000强
4.2 数据量统计
五、API接口文档
5.1 认证接口 /auth
| | | |
|---|
| /auth/register | | |
| /auth/login | | |
| /auth/me | | |
| /auth/password | | |
登录响应示例:
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "bearer", "user": {"id": 1, "username": "admin", "email": null}}
5.2 胡润榜接口 /api/hurun
| | | |
|---|
| /list | year, industry, page, size | |
| /years | | |
| /industries | | |
| /stats/industry | | |
| /stats/top | | |
5.3 民营企业接口 /api/private
| | | |
|---|
| /list | year, province, page, size | |
| /years | | |
| /provinces | | |
| /stats/province | | |
| /stats/top | | |
5.4 福布斯接口 /api/forbes
| | | |
|---|
| /list | year, country, industry, page, size | |
| /years | | |
| /countries | | |
| /industries | | |
| /stats/country | | |
| /stats/industry | | |
| /stats/top | | |
5.5 分析接口 /api/analysis (17个)
| | |
|---|
| /overview | |
| /industry-comparison | |
| /province-map | |
| /country-map | |
| /hurun/year-trend | |
| /private/year-trend | |
| /forbes/year-trend | |
| /revenue-distribution | |
| /forbes/profit-ranking | |
| /forbes/assets-ranking | |
| /hurun/parent-company | |
| /private/top-revenue-by-province | |
| /forbes/country-industry | |
| /cross-rank/industry | |
| /yoy/growth | |
| /forbes/profit-margin | |
| /forbes/market-value-dist | |
| /kpis | |
| /forbes/industry-country-heatmap | |
六、前端页面详解
6.1 页面路由
| | | |
|---|
/ | | | |
/login | | | |
/register | | | |
/profile | | | |
/hurun | | | |
/private | | | |
/forbes | | | |
/map-china | | | |
/map-world | | | |
/dashboard | | | |
/screen | | | |
6.2 图表类型统计
6.3 ECharts图表类型清单
本系统使用了以下12种ECharts图表类型:
- pie
- bar
- line
- scatter
- radar
- treemap
- funnel
- heatmap
- gauge
- map
- bar+line
- roseType
七、核心功能实现
7.1 JWT认证机制
注册流程: 用户提交 ──→ POST /auth/register ├── 校验用户名唯一性 ├── BCrypt哈希密码 └── 写入users表登录流程: 用户提交 ──→ POST /auth/login ├── 查询用户名 ├── BCrypt验证密码 ├── 生成JWT(sub=username, exp=60min) └── 返回 {token, user}鉴权流程: API请求 ──→ Authorization: Bearer ├── jwt.decode(token, SECRET_KEY, HS256) ├── 查询users表获取用户 └── 注入到路由参数
前端Token管理:
- 登录成功后存储到
localStorage.setItem('token', token) - 页面加载时
checkAuth() 检查token,无token跳转 /login - API请求通过
getAuthHeaders() 自动附加 Authorization 头
7.2 省份名称标准化
民营企业数据中省份名称存在"北京市"和"北京"两种格式,系统统一标准化为短名:
PROVINCE_SHORT = { '北京市': '北京', '天津市': '天津', '河北省': '河北', '山西省': '山西', '内蒙古自治区': '内蒙古', ...}def norm_province(name): return PROVINCE_SHORT.get(name, name.rstrip('省市'))
7.3 福布斯中英文去重
福布斯数据中同一企业可能以中文和英文两种名称存在,系统通过映射表去重:
CN_TO_EN = { '中国石油': 'PetroChina', '阿里巴巴': 'Alibaba Group', '中国银行': 'Bank of China', '腾讯': 'Tencent Holdings', ...}
查询时先SQL过滤中文名,再内存合并中英文记录。
7.4 数据采集方案
7.5 图表主题系统
系统采用"奢华暗黑"(Luxury Dark)主题,CSS变量定义:
:root { --bg-primary: #06060b; /* 页面背景(近黑) */ --bg-card: #151520; /* 卡片背景(深灰) */ --accent-primary: #c9a84c; /* 主色调(暖金) */ --text-primary: #f0ece2; /* 主文字(暖白) */ --font-display: 'Cormorant Garamond'; /* 标题字体 */ --font-body: 'DM Sans'; /* 正文字体 */ --font-mono: 'JetBrains Mono'; /* 等宽字体 */}
ECharts图表统一使用金色渐变和深色配色:
- 暗色悬浮提示框
chartTooltipStyle
八、安装与运行
8.1 环境要求
8.2 安装步骤
# 1. 克隆项目cd "119-基于Python的各类企业排行数据可视化分析系统/code"# 2. 安装依赖pip install fastapi uvicorn sqlalchemy pymysql pydantic python-jose[cryptography] passlib[bcrypt] pandas openpyxl# 3. 创建MySQL数据库mysql -u root -p -e "CREATE DATABASE design_119_company CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"# 4. 修改数据库配置 (如需)# 编辑 app/config.py 中的 DB_USER, DB_PASSWORD, DB_HOST 等# 5. 导入数据python import_scraped2.py # 胡润2022/2023, 民营2023python import_scraped_data.py # 胡润2024, 福布斯2024python import_2025_data.py # 2025年三大榜单# 6. 启动服务python run.py
8.3 访问地址
http://127.0.0.1:8000 # 首页http://127.0.0.1:8000/login # 登录页http://127.0.0.1:8000/docs # Swagger API文档
九、页面功能清单
9.1 首页 (/)
| | |
|---|
| | /api/analysis/overview |
| | /api/hurun/stats/industry |
| | /api/private/stats/province |
| | /api/forbes/stats/country |
| | /api/hurun/stats/top |
| | /api/private/stats/top |
| | /api/analysis/private/top-revenue-by-province |
| | /api/analysis/revenue-distribution |
| | /api/forbes/stats/top |
| | /api/analysis/hurun/year-trend |
9.2 胡润百富榜 (/hurun)
| |
|---|
| |
| |
| |
| |
| |
| |
| 排名、品牌名、母公司、行业、品牌价值(20条/页) |
9.3 民营企业500强 (/private)
9.4 福布斯全球2000强 (/forbes)
| |
|---|
| |
| |
| |
| |
| |
| |
| |
| |
| 排名、企业名、国家、行业、营收、利润、资产、市值(20条/页) |
9.5 中国地图 (/map-china)
9.6 全球地图 (/map-world)
9.7 数据分析仪表盘 (/dashboard)
8个KPI卡片 + 20个ECharts图表,覆盖所有分析维度。包含:饼图、柱状图、折线图、散点图、雷达图、树图、漏斗图、热力图、仪表盘、组合图共10种图表类型。
9.8 全屏大屏 (/screen)
独立页面(不继承base.html),适配大屏投影。6个KPI指标 + 6个图表,60秒自动刷新,带浮动粒子动画背景。
十、UI设计规范
10.1 设计语言
系统采用 “Bloomberg Terminal × Art Deco × Cinematic” 的奢华暗黑主题:
- 背景
- 强调色: 暖金色 (
#c9a84c),用于标题、边框、高亮 - 文字
- 卡片
- 特效
10.2 字体方案
10.3 响应式断点
十一、安全设计
11.1 认证安全
- 前端通过
localStorage 存储token,页面加载时验证
11.2 页面保护
- 前端
checkAuth() 在页面加载第一时间检查token
11.3 API保护
- 数据API(如
/api/hurun/list)当前为开放访问 - 认证API(如
/auth/me)通过 get_current_user 依赖注入验证
十二、扩展能力
12.1 数据扩展
系统支持通过编写Python导入脚本增加新年度数据:
# 示例: 导入新年度数据from app.models import HurunBrandfrom decimal import Decimalrecord = HurunBrand( year=2026, ranking=1, brand_name="某品牌", brand_value=Decimal("10000000000"), parent_company="某公司", industry="某行业")db.add(record)db.commit()
12.2 图表扩展
新增图表只需在对应HTML模板中:
- 添加
<div id="new-chart" class="chart-container"></div>
12.3 API扩展
新增API端点遵循现有模式:
@router.get("/new-endpoint")def new_endpoint(year: int = None, db: Session = Depends(get_db)): query = db.query(Model) if year: query = query.filter(Model.year == year) return query.all()