基于Python的各类企业排行数据可视化分析系统 — 技术文档

一、项目概述

1.1 项目简介

本系统是一个面向企业排行榜数据的可视化分析平台,整合了胡润百富榜中国民营企业500强福布斯全球2000强三大权威企业排名数据源,提供多维度的数据查询、统计分析和可视化展示功能。

系统支持从2022年至2025年共4个年度的数据,涵盖691+条胡润品牌数据、760+条民营企业数据、169+条福布斯全球企业数据,并通过40+个API接口和50+个ECharts图表实现丰富的交互式可视化分析。

1.2 核心功能

功能模块 说明
数据概览首页 三大排行榜综合统计卡片 + 9个概览图表
胡润百富榜分析 按年份/行业筛选,5个图表 + 分页数据表
民营企业500强分析 按年份/省份筛选,5个图表 + 分页数据表
福布斯全球2000强分析 按年份/国家/行业三维筛选,7个图表 + 分页数据表
中国地图 省级企业分布热力图 + 柱状图
世界地图 国家企业分布地图 + 行业玫瑰图 + 散点图
数据分析仪表盘 20个ECharts图表的综合看板
全屏可视化大屏 适配大屏展示的独立页面,60秒自动刷新
用户认证系统 注册/登录/JWT鉴权/个人中心/修改密码

1.3 数据覆盖范围

排行榜 年份 记录数 数据维度
胡润百富榜 2022/2023/2024/2025 592条 排名、姓名、财富(元)、公司、行业
民营企业500强 2023/2024/2025 810条 排名、企业名、省份、营收(万元)
福布斯全球2000 2024/2025 169条 排名、企业名、国家、行业、营收、利润、资产、市值(十亿美元)

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

二、技术栈

2.1 后端技术

技术 版本 用途
Python 3.10+ 主开发语言
FastAPI 0.104+ Web框架,提供RESTful API和页面路由
Uvicorn 0.24+ ASGI服务器,支持热重载
SQLAlchemy 2.0+ ORM框架,数据库模型定义和查询
PyMySQL 1.1+ MySQL数据库驱动
Pydantic 2.5+ 数据验证和序列化(Schemas)
python-jose 3.3+ JWT令牌生成和验证
passlib[bcrypt] 1.7+ 密码哈希(BCrypt算法)

2.2 前端技术

技术 版本 用途
Jinja2 3.1+ HTML模板引擎(FastAPI内置)
Bootstrap 5.3.2 响应式UI框架(栅格、组件、工具类)
Bootstrap Icons 1.11.3 图标库(300+图标)
ECharts 5.5.0 数据可视化图表库(40+图表实例)
Google Fonts 字体加载(Cormorant Garamond、DM Sans、JetBrains Mono)

2.3 数据库

技术 说明
MySQL 8.0+ 关系型数据库
数据库名 design_119_company
字符集 utf8mb4(支持中文和特殊字符)
连接串 mysql+pymysql://root:123456@localhost:3306/design_119_company?charset=utf8mb4

2.4 数据采集工具

工具 用途
Firecrawl 网页抓取和结构化数据提取
Pandas CSV/Excel数据文件读取
openpyxl Excel文件解析引擎

三、系统架构

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 <token>
                                                    │
                                            FastAPI API Route
                                                    │
                                            SQLAlchemy查询MySQL
                                                    │
                                            返回JSON ──→ ECharts渲染图表

四、数据库设计

4.1 数据模型

users — 用户表
字段 类型 约束 说明
id INTEGER PK, AUTO_INCREMENT 用户ID
username VARCHAR(50) UNIQUE, NOT NULL 用户名
password VARCHAR(255) NOT NULL BCrypt哈希密码
email VARCHAR(100) NULLABLE 邮箱
created_at DATETIME DEFAULT NOW() 注册时间
hurun_brand — 胡润品牌榜
字段 类型 约束 说明
id INTEGER PK, AUTO_INCREMENT 记录ID
year INTEGER NOT NULL 年份
ranking INTEGER 排名
brand_name VARCHAR(100) 品牌/个人名称
brand_value NUMERIC(15,2) 品牌价值(元)
parent_company VARCHAR(200) 母公司
industry VARCHAR(100) 行业
private_enterprise — 民营企业500强
字段 类型 约束 说明
id INTEGER PK, AUTO_INCREMENT 记录ID
year INTEGER NOT NULL 年份
ranking INTEGER 排名
company_name VARCHAR(200) 企业名称
province VARCHAR(50) 省份
revenue NUMERIC(15,2) 营收(万元)
forbes_global — 福布斯全球2000强
字段 类型 约束 说明
id INTEGER PK, AUTO_INCREMENT 记录ID
year INTEGER NOT NULL 年份
ranking INTEGER 排名
company_name VARCHAR(200) 企业名称
country VARCHAR(100) 国家
industry VARCHAR(100) 行业
revenue NUMERIC(15,2) 营收(十亿美元)
profit NUMERIC(15,2) 利润(十亿美元)
assets NUMERIC(15,2) 总资产(十亿美元)
market_value NUMERIC(15,2) 市值(十亿美元)

4.2 数据量统计

2022 2023 2024 2025 合计
hurun_brand 100 340 102 50 592
private_enterprise 260 500 50 810
forbes_global 119 50 169

五、API接口文档

5.1 认证接口 /auth

方法 路径 说明 认证
POST /auth/register 用户注册
POST /auth/login 用户登录,返回JWT
GET /auth/me 获取当前用户信息
PUT /auth/password 修改密码

登录响应示例:

{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "token_type": "bearer",
    "user": {"id": 1, "username": "admin", "email": null}
}

5.2 胡润榜接口 /api/hurun

方法 路径 参数 说明
GET /list year, industry, page, size 分页查询,支持年份和行业筛选
GET /years 获取可用年份列表
GET /industries year 获取行业列表
GET /stats/industry year 行业分布统计(数量+总价值)
GET /stats/top year, limit 品牌价值Top N(去重)

5.3 民营企业接口 /api/private

方法 路径 参数 说明
GET /list year, province, page, size 分页查询,支持年份和省份筛选
GET /years 获取可用年份列表
GET /provinces year 获取省份列表(标准化短名)
GET /stats/province year 省份分布统计(数量+总营收)
GET /stats/top year, limit 营收Top N(去重)

5.4 福布斯接口 /api/forbes

方法 路径 参数 说明
GET /list year, country, industry, page, size 分页查询,三维筛选
GET /years 获取可用年份列表
GET /countries year 获取国家列表
GET /industries year 获取行业列表
GET /stats/country year 国家分布统计
GET /stats/industry year 行业分布统计
GET /stats/top year, limit 营收Top N(中英文去重)

5.5 分析接口 /api/analysis (17个)

方法 路径 说明
GET /overview 三大排行榜综合概览(总记录数、年均值、极值)
GET /industry-comparison 胡润 vs 福布斯行业对比
GET /province-map 省份企业分布(数量+营收)
GET /country-map 国家企业分布(数量+营收)
GET /hurun/year-trend 胡润年度趋势(数量、总值、均值)
GET /private/year-trend 民营企业年度趋势
GET /forbes/year-trend 福布斯年度趋势
GET /revenue-distribution 民营企业营收分布(8个区间)
GET /forbes/profit-ranking 福布斯利润排名
GET /forbes/assets-ranking 福布斯资产排名
GET /hurun/parent-company 胡润母公司品牌统计Top 15
GET /private/top-revenue-by-province 省份营收排名Top 15
GET /forbes/country-industry 国家×行业交叉统计
GET /cross-rank/industry 跨排行榜行业分析
GET /yoy/growth 三大排行榜同比增长率
GET /forbes/profit-margin 福布斯利润率排名
GET /forbes/market-value-dist 福布斯市值分布
GET /kpis 仪表盘KPI指标
GET /forbes/industry-country-heatmap 行业×国家热力矩阵

六、前端页面详解

6.1 页面路由

路径 页面 认证 说明
/ 首页 数据概览,4个统计卡片+9个图表
/login 登录 JWT登录表单
/register 注册 用户注册表单
/profile 个人中心 用户信息+修改密码
/hurun 胡润分析 5图表+筛选+分页表
/private 民营分析 5图表+筛选+分页表
/forbes 福布斯分析 7图表+三维筛选+分页表
/map-china 中国地图 ECharts地图+热力图
/map-world 全球地图 ECharts世界地图+玫瑰图
/dashboard 仪表盘 20个图表综合看板
/screen 全屏大屏 独立大屏展示,60秒自动刷新

6.2 图表类型统计

图表类型 使用场景 数量
饼图/环形图 行业分布、省份分布、国家分布 8
柱状图(竖向) 省份统计、行业统计、年度趋势 12
柱状图(横向) Top N排名(品牌价值/营收) 10
折线图 年度趋势、同比增长 4
散点图 营收vs利润、品牌价值分布 3
雷达图 母公司品牌对比、企业综合指标 2
树图 跨排行榜行业分析 1
漏斗图 营收分布区间 1
热力图 行业×国家矩阵 1
仪表盘 KPI指标展示 3
地图 中国省份/全球国家分布 2
组合图(柱+线) 年度趋势双轴展示 2
合计 49

6.3 ECharts图表类型清单

本系统使用了以下12种ECharts图表类型:

  1. pie — 饼图/环形图 (行业、省份、国家分布)
  2. bar — 柱状图 (统计、排名、趋势)
  3. line — 折线图 (趋势、增长率)
  4. scatter — 散点图 (相关性分析)
  5. radar — 雷达图 (多维对比)
  6. treemap — 树图 (层级分布)
  7. funnel — 漏斗图 (区间分布)
  8. heatmap — 热力图 (交叉矩阵)
  9. gauge — 仪表盘 (KPI)
  10. map — 地图 (地理分布)
  11. bar+line — 组合图 (双轴展示)
  12. roseType — 南丁格尔玫瑰图 (面积等比)

七、核心功能实现

7.1 JWT认证机制

注册流程:
  用户提交 ──→ POST /auth/register
              ├── 校验用户名唯一性
              ├── BCrypt哈希密码
              └── 写入users表

登录流程:
  用户提交 ──→ POST /auth/login
              ├── 查询用户名
              ├── BCrypt验证密码
              ├── 生成JWT(sub=username, exp=60min)
              └── 返回 {token, user}

鉴权流程:
  API请求 ──→ Authorization: Bearer <token>
              ├── 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 数据采集方案

数据源 采集方式 工具
胡润百富榜2025 PDF抓取+人工校正 Firecrawl + sxhhy.com
福布斯202000 2025 开源数据集 Kaggle
民营企业500强2025 新浪财经Top 10 + 2024数据增长推算 Sina Finance
胡润2022/2023 硬编码数据导入 Python脚本
民营企业2023/2024 CSV/Excel导入 Pandas

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图表统一使用金色渐变和深色配色:

  • 15色调色板 chartColors
  • 金色渐变工具 getGoldGradient()
  • 暗色悬浮提示框 chartTooltipStyle

八、安装与运行

8.1 环境要求

  • Python 3.10+
  • MySQL 8.0+
  • Node.js (可选,用于前端开发)

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, 民营2023
python import_scraped_data.py   # 胡润2024, 福布斯2024
python 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
图表1 胡润行业分布饼图 /api/hurun/stats/industry
图表2 民营省份分布饼图 /api/private/stats/province
图表3 福布斯国家分布饼图 /api/forbes/stats/country
图表4 胡润Top 10品牌价值 /api/hurun/stats/top
图表5 民营Top 10营收 /api/private/stats/top
图表6 省份排名柱状图 /api/analysis/private/top-revenue-by-province
图表7 营收分布柱状图 /api/analysis/revenue-distribution
图表8 福布斯Top 10营收 /api/forbes/stats/top
图表9 胡润年度趋势(柱+线) /api/analysis/hurun/year-trend

9.2 胡润百富榜 (/hurun)

区域 内容
筛选栏 年份下拉、行业下拉、筛选/重置按钮
图表1 行业分布饼图
图表2 行业品牌价值柱状图
图表3 Top 20品牌价值横向柱状图
图表4 母公司雷达图
图表5 品牌价值散点图
数据表 排名、品牌名、母公司、行业、品牌价值(20条/页)

9.3 民营企业500强 (/private)

区域 内容
筛选栏 年份下拉、省份下拉、筛选/重置按钮
图表1 省份分布饼图
图表2 省份企业数量柱状图
图表3 Top 20营收横向柱状图
图表4 省份总营收折线图
图表5 营收散点图
数据表 排名、企业名、省份、营收(20条/页)

9.4 福布斯全球2000强 (/forbes)

区域 内容
筛选栏 年份、国家、行业三个下拉,筛选/重置按钮
图表1 国家分布饼图
图表2 行业分布饼图
图表3 国家企业数量柱状图
图表4 行业营收柱状图
图表5 Top 20营收横向柱状图
图表6 营收 vs 利润散点图
图表7 Top 5企业综合雷达图
数据表 排名、企业名、国家、行业、营收、利润、资产、市值(20条/页)

9.5 中国地图 (/map-china)

区域 内容
筛选栏 年份下拉
地图 省级热力图(企业数量)
图表1 各省企业数量柱状图
图表2 各省营收总额柱状图

9.6 全球地图 (/map-world)

区域 内容
筛选栏 年份下拉
地图 世界地图(国家企业数量)
图表1 各国企业数量柱状图
图表2 各国营收总额柱状图
图表3 行业分布玫瑰图
图表4 营收 vs 利润散点图

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” 的奢华暗黑主题:

  • 背景: 近黑色 (#06060b),多层渐变叠加
  • 强调色: 暖金色 (#c9a84c),用于标题、边框、高亮
  • 文字: 暖白色 (#f0ece2) 层级分明
  • 卡片: 深灰 (#151520),带金色阴影光晕
  • 特效: 胶片颗粒纹理、浮动粒子、入场动画

10.2 字体方案

用途 字体 说明
标题/展示 Cormorant Garamond 衬线体,高端感
正文/导航 DM Sans 无衬线体,现代感
数据/代码 JetBrains Mono 等宽体,精确感

10.3 响应式断点

断点 宽度 布局
桌面 ≥992px 侧边栏展开,双列图表
平板 768-991px 侧边栏折叠,单列图表
手机 <768px 侧边栏隐藏,全宽布局

十一、安全设计

11.1 认证安全

  • 密码使用 BCrypt 算法哈希存储,不可逆
  • JWT令牌使用 HS256 签名,有效期60分钟
  • 前端通过 localStorage 存储token,页面加载时验证

11.2 页面保护

  • 非公开页面(除首页、登录、注册外)均需JWT认证
  • 前端 checkAuth() 在页面加载第一时间检查token
  • 无token时立即重定向到登录页,不渲染页面内容

11.3 API保护

  • 数据API(如 /api/hurun/list)当前为开放访问
  • 认证API(如 /auth/me)通过 get_current_user 依赖注入验证

十二、扩展能力

12.1 数据扩展

系统支持通过编写Python导入脚本增加新年度数据:

# 示例: 导入新年度数据
from app.models import HurunBrand
from decimal import Decimal

record = HurunBrand(
    year=2026,
    ranking=1,
    brand_name="某品牌",
    brand_value=Decimal("10000000000"),
    parent_company="某公司",
    industry="某行业"
)
db.add(record)
db.commit()

12.2 图表扩展

新增图表只需在对应HTML模板中:

  1. 添加 <div id="new-chart" class="chart-container"></div>
  2. 在JS中初始化ECharts实例并调用API

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()

更多推荐