220-基于Python的诺贝尔奖数据可视化分析系统

220-基于Python的诺贝尔奖数据可视化分析系统

基于Python的诺贝尔奖数据可视化分析系统 — 技术文档

1. 项目概述

1.1 项目背景

诺贝尔奖自 1901 年首次颁发以来,已有超过百年的历史,涵盖物理学、化学、生理学或医学、文学、和平、经济学六大领域。本系统旨在通过数据可视化技术,对诺贝尔奖获奖数据进行多维度分析,帮助用户直观了解百年学术荣耀的数据规律。

1.2 项目目标

  • 提供完整的诺贝尔奖数据浏览与管理功能
  • 实现多维度数据可视化分析(年度趋势、地理分布、人口统计、交叉对比)
  • 支持全屏可视化大屏展示
  • 提供用户认证与角色权限管理(普通用户 + 管理员)
  • 支持数据的 CSV 导入/导出

1.3 技术选型

层次技术版本说明
后端框架FastAPI0.104.1高性能异步 Web 框架
模板引擎Jinja23.1.2服务端 HTML 模板渲染
前端框架Bootstrap5.x响应式 CSS 组件库
图表库ECharts5.x百度开源可视化图表库
图标库Bootstrap Icons精简版约 400 个常用图标
数据库MySQL5.7+关系型数据库
数据库驱动PyMySQL1.1.0Python MySQL 连接器
数据分析Pandas2.1.4数据处理与分析库
数值计算NumPy1.25.2科学计算库
密码加密Passlib + bcrypt1.7.4安全密码哈希
ASGI 服务器Uvicorn0.24.0异步 HTTP 服务器
配置管理PyYAML6.0.1YAML 配置文件解析

2. 系统架构

2.1 整体架构

系统采用 MVC(Model-View-Controller) 架构模式:

┌──────────────────────────────────────────────┐ │ 浏览器 (Browser) │ │ HTML + Bootstrap + ECharts │ └────────────────────┬─────────────────────────┘ │ HTTP ┌────────────────────▼─────────────────────────┐ │ FastAPI 路由层 (main.py) │ │ ┌─────────┐ ┌──────────┐ ┌───────────────┐ │ │ │ 认证路由 │ │ 分析路由 │ │ 管理/API 路由 │ │ │ └────┬────┘ └─────┬────┘ └──────┬────────┘ │ │ │ │ │ │ │ ┌────▼────────────▼──────────────▼────────┐ │ │ │ 业务逻辑 + Pandas 数据处理 │ │ │ └────────────────┬───────────────────────┘ │ └───────────────────┼──────────────────────────┘ │ ┌───────────────────▼──────────────────────────┐ │ 数据层 (database.py) │ │ ┌──────────────┐ ┌─────────────────────┐ │ │ │ 用户管理 │ │ 数据集管理 │ │ │ └──────────────┘ └─────────────────────┘ │ └───────────────────┬──────────────────────────┘ │ PyMySQL ┌───────────────────▼──────────────────────────┐ │ MySQL 数据库 │ │ design_220_nobel (users + dataset_data) │ └──────────────────────────────────────────────┘ 

2.2 目录结构

code/ ├── main.py # FastAPI 主路由文件(所有 Web 路由) ├── database.py # 数据库操作类(用户管理 + 数据管理) ├── config.yaml # 项目配置文件(数据库、字段、模块开关) ├── run.py # 项目启动脚本(依赖检查 + uvicorn 启动) ├── requirements.txt # Python 依赖列表 ├── data/ │ └── nobel.csv # 诺贝尔奖原始数据集 ├── static/ │ ├── css/ │ │ ├── bootstrap.min.css # Bootstrap 5 CSS │ │ ├── bootstrap-icons.css # Bootstrap Icons(精简版) │ │ ├── boxicons.min.css # Boxicons CSS │ │ └── style.css # 项目主题样式(金色主题) │ ├── js/ │ │ ├── bootstrap.bundle.min.js # Bootstrap JS │ │ └── echarts.min.js # ECharts 图表库 │ └── image/ │ └── index.png # 首页装饰图 └── templates/ ├── base.html # 基础模板(导航栏 + 页脚) ├── index.html # 首页 ├── login.html # 登录页 ├── register.html # 注册页 ├── profile.html # 个人资料页 ├── edit_profile.html # 编辑资料页 ├── change_password.html # 修改密码页 ├── analytics.html # 数据分析概览页 ├── award_overview.html # 获奖概览分析页 ├── geographic.html # 地理分布分析页 ├── demographics.html # 人口统计分析页 ├── correlations.html # 综合对比分析页 ├── dashboard.html # 全屏可视化大屏 ├── data_manage.html # 数据管理列表页 ├── data_manage_edit.html # 数据新增/编辑页 └── admin/ ├── dashboard.html # 管理控制台 └── users.html # 用户管理页 

2.3 模块划分

模块功能状态
auth用户认证(登录、注册、登出、密码管理)启用
analytics数据分析(4 个分析页面 + 概览)启用
data_manage数据管理(CRUD + CSV 导入/导出)启用
dashboard全屏可视化大屏启用
prediction机器学习预测未启用
model_evaluation模型评估未启用

2.4 演示图片

在这里插入图片描述


在这里插入图片描述



在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述



在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

3. 数据库设计

3.1 数据库信息

  • 数据库名称design_220_nobel
  • 字符集:utf8mb4
  • 存储引擎:InnoDB

3.2 表结构

3.2.1 用户表 users
字段名类型约束说明
idINTPRIMARY KEY, AUTO_INCREMENT用户唯一标识
usernameVARCHAR(100)UNIQUE, NOT NULL用户名(3-20字符)
emailVARCHAR(200)UNIQUE, NOT NULL邮箱地址
password_hashVARCHAR(255)NOT NULLbcrypt 加密后的密码哈希
roleVARCHAR(20)DEFAULT ‘user’角色:user / admin
statusVARCHAR(20)DEFAULT ‘active’状态:active / disabled
full_nameVARCHAR(100)DEFAULT ‘’姓名
phoneVARCHAR(30)DEFAULT ‘’手机号
genderVARCHAR(20)DEFAULT ‘’性别
ageINTNULL年龄
bioTEXTNULL个人简介
last_login_atDATETIMENULL最后登录时间
created_atTIMESTAMPDEFAULT CURRENT_TIMESTAMP注册时间
3.2.2 数据集表 dataset_data

该表字段根据 config.yaml 中的 features 配置动态生成:

字段名类型说明
idINT (AUTO_INCREMENT)记录唯一标识
awardyearDOUBLE获奖年份
categoryVARCHAR(200)奖项类别
nameTEXT获奖者姓名
genderVARCHAR(200)性别
birth_continentVARCHAR(200)出生洲
birth_countrynowVARCHAR(200)出生国家(现名)
prizeamountDOUBLE奖金金额(瑞典克朗)
prizeamountadjustedDOUBLE调整后奖金
motivationTEXT获奖理由
ind_or_orgVARCHAR(200)个人/组织
birth_dateTEXT出生日期
death_dateTEXT逝世日期
affiliation_1TEXT所属机构
portionVARCHAR(200)奖金份额(1, 1/2, 1/3, 1/4)
created_atTIMESTAMP记录创建时间
注意:MySQL 存储时字段名自动转为小写(如 awardYearawardyear)。

3.3 ER 关系

系统中 users 表和 dataset_data 表之间没有直接的外键关系。users 表管理系统用户,dataset_data 表存储诺贝尔奖数据记录。两张表通过权限控制逻辑关联——只有 admin 角色用户可以对 dataset_data 进行增删改操作。

3.4 默认数据

系统启动时自动创建默认管理员账户:

  • 用户名:admin
  • 密码:admin123
  • 角色:admin

4. 功能模块

4.1 用户认证模块

功能说明
  • 登录:用户名 + 密码认证,Session 存储登录状态
  • 注册:支持填写用户名、邮箱、密码、姓名、手机、性别、年龄、简介
  • 登出:清除 Session 后重定向到登录页
  • 修改密码:需验证原密码
  • 编辑资料:修改姓名、手机、性别、年龄、邮箱、简介
安全机制
  • 密码使用 bcrypt 算法加密存储
  • Session 中间件使用 secret key 签名
  • 服务端表单验证(用户名长度、邮箱格式、密码长度)
  • 账号禁用状态检查(status = disabled 的用户无法登录)

4.2 数据分析模块

4.2.1 分析概览页(analytics.html)
  • 4 个统计卡片:总记录数、年份跨度、奖项类别数、国家数
  • 2 个饼图:奖项类别分布、性别分布
  • 4 个导航卡片:快速进入各详细分析页面
4.2.2 获奖概览分析(award_overview.html)
  • 年度获奖人数趋势:折线图 + 面积填充 + 数据缩放
  • 奖项类别分布:环形饼图
  • 平均奖金金额趋势:折线图(调整后金额)
  • 各类别年度获奖趋势:堆叠面积图
4.2.3 地理分布分析(geographic.html)
  • 各国获奖人数 TOP30:横向柱状图
  • 各洲获奖分布:环形饼图
  • TOP10 国家各类别获奖对比:堆叠柱状图
4.2.4 人口统计分析(demographics.html)
  • 性别分布:环形饼图
  • 个人 vs 组织:环形饼图
  • 获奖年龄分布:柱状图(5 年一组)
  • 各类别平均获奖年龄:横向柱状图
  • 男女获奖者年度趋势:折线图 + 数据缩放
4.2.5 综合对比分析(correlations.html)
  • 各类别性别对比:分组柱状图
  • 各洲获奖类别对比:堆叠柱状图
  • 各年代获奖类别分布:堆叠柱状图
4.2.6 年份筛选功能

所有 4 个分析页面均支持年份区间筛选:

  • 页面顶部提供起始年份和结束年份两个下拉选择器
  • 选择后通过 URL 参数 ?year_start=1950&year_end=2000 传递
  • 后端 Pandas DataFrame 在生成图表数据前进行过滤
  • 默认不筛选,显示全部年份数据

4.3 可视化大屏模块

全屏展示核心数据指标和动态图表:

  • 顶部统计条:总记录数、年份范围、类别数、国家数
  • 奖项类别分布饼图
  • 性别分布饼图
  • 各洲分布饼图
  • 年度趋势折线图
  • 各国 TOP15 柱状图
  • 近期获奖者列表

4.4 数据管理模块

功能说明(仅管理员可用)
  • 数据列表:分页展示(每页 20 条),支持按姓名/类别/国家搜索
  • 新增数据:表单填写所有字段后插入数据库
  • 编辑数据:修改已有记录的任意字段
  • 删除数据:确认后删除单条记录
  • CSV 导入:将 data/nobel.csv 批量导入数据库(200 条/批)
  • CSV 导出:将数据库中所有记录导出为 CSV 文件下载

4.5 管理控制台模块

功能说明(仅管理员可用)
  • 统计概览:注册用户数、数据记录数、奖项类别数
  • 各年代获奖记录图表:ECharts 柱状图展示各年代数据量
  • 最近注册用户:最近 5 位注册用户列表(用户名、角色、注册时间)
  • 快捷操作:一键跳转到用户管理、数据管理、数据分析、可视化大屏
  • 系统信息:项目名称、技术栈、数据库名、端口号

4.6 用户管理模块

功能说明(仅管理员可用)
  • 创建用户:管理员可直接创建新用户并指定角色
  • 角色管理:下拉菜单切换用户角色(user / admin)
  • 状态管理:启用/禁用用户账号
  • 重置密码:将用户密码重置为默认值 123456
  • 删除用户:删除用户账号(不可删除自己)

5. API 路由表

5.1 页面路由

方法路径功能权限
GET/首页公开
GET/login登录页公开
POST/login登录提交公开
GET/register注册页公开
POST/register注册提交公开
GET/logout登出需登录
GET/profile个人资料需登录
GET/edit_profile编辑资料页需登录
POST/edit_profile编辑资料提交需登录
GET/change_password修改密码页需登录
POST/change_password修改密码提交需登录

5.2 数据分析路由

方法路径功能权限
GET/analytics数据分析概览公开
GET/analytics/award_overview获奖概览分析公开
GET/analytics/geographic地理分布分析公开
GET/analytics/demographics人口统计分析公开
GET/analytics/correlations综合对比分析公开
GET/dashboard全屏可视化大屏公开
分析页面支持可选参数 ?year_start=&year_end= 进行年份筛选。

5.3 数据管理路由

方法路径功能权限
GET/data_manage数据管理列表管理员
GET/data_manage/add新增数据页管理员
POST/data_manage/add新增数据提交管理员
GET/data_manage/edit/{id}编辑数据页管理员
POST/data_manage/edit/{id}编辑数据提交管理员
POST/data_manage/delete/{id}删除数据管理员
GET/data_manage/export_csv导出 CSV 文件管理员
POST/data_manage/import_csv从 CSV 导入数据管理员

5.4 管理员路由

方法路径功能权限
GET/admin管理控制台管理员
GET/admin/users用户管理管理员
POST/admin/users/create创建用户管理员
POST/admin/users/{id}/role修改用户角色管理员
POST/admin/users/{id}/status修改用户状态管理员
POST/admin/users/{id}/reset_password重置密码管理员
POST/admin/users/{id}/delete删除用户管理员

5.5 API 端点(JSON 响应)

方法路径功能权限
GET/api/overview数据概览(类别/国家/年度统计)公开
GET/api/map_data各国获奖人数(地图数据)公开

6. 页面说明

6.1 公开页面

页面模板文件说明
首页index.htmlHero 区域 + 核心功能介绍 + 数据概况统计(动态)
登录login.html左侧装饰面板 + 右侧登录表单
注册register.html左侧装饰面板 + 右侧多字段注册表单
分析概览analytics.html4 个统计卡片 + 2 个饼图 + 4 个导航卡片
获奖概览award_overview.html年份筛选器 + 4 个 ECharts 图表
地理分布geographic.html年份筛选器 + 3 个 ECharts 图表
人口统计demographics.html年份筛选器 + 5 个 ECharts 图表
综合对比correlations.html年份筛选器 + 3 个 ECharts 图表
可视化大屏dashboard.html深色主题全屏布局,核心指标 + 多图表

6.2 用户页面

页面模板文件说明
个人资料profile.html头像 + 用户信息表格 + 操作按钮
编辑资料edit_profile.html表单编辑个人信息
修改密码change_password.html原密码 + 新密码 + 确认密码

6.3 管理员页面

页面模板文件说明
管理控制台admin/dashboard.html统计卡片 + 年代图表 + 最近用户 + 快捷操作
用户管理admin/users.html创建用户表单 + 用户列表(角色/状态/操作)
数据管理data_manage.html搜索 + 导入/导出 + 数据表格 + 分页
数据编辑data_manage_edit.html动态表单(根据 config 字段自动生成)

7. 部署指南

7.1 环境要求

  • Python:3.8 及以上版本
  • MySQL:5.7 及以上版本
  • 操作系统:Windows / Linux / macOS

7.2 安装步骤

第一步:创建 MySQL 数据库

登录 MySQL 并执行以下命令:

CREATEDATABASEIFNOTEXISTS design_220_nobel CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci;
如果数据库用户和密码与默认配置不同,请修改 config.yaml 中的数据库连接信息。
第二步:安装 Python 依赖
cd code pip install -r requirements.txt 

依赖列表:

包名版本用途
fastapi0.104.1Web 框架
uvicorn0.24.0ASGI 服务器
jinja23.1.2模板引擎
python-multipart0.0.6表单数据解析
pandas2.1.4数据处理
numpy1.25.2数值计算
passlib[bcrypt]1.7.4密码加密
pymysql1.1.0MySQL 连接器
pyyaml6.0.1YAML 配置解析
aiofiles23.2.1异步文件处理
python-dotenv1.0.0环境变量加载
第三步:确认数据文件

确保 code/data/nobel.csv 文件存在。该文件是诺贝尔奖原始数据集,系统启动时会从此文件加载数据进行分析。

第四步:启动系统
cd code python run.py 

启动后控制台将输出:

================================================== 诺贝尔奖数据可视化分析系统 ================================================== ✓ 所有依赖已安装 ✓ 数据文件检查通过 ✓ 目录结构检查完成 启动系统... 访问地址: http://localhost:8000 按 Ctrl+C 停止服务 
第五步:初始化数据
  1. 打开浏览器访问 http://localhost:8000
  2. 使用默认管理员账号登录:admin / admin123
  3. 进入「数据管理」页面,点击「从CSV导入数据」按钮
  4. 等待导入完成,即可查看完整数据

7.3 访问地址

页面地址
首页http://localhost:8000
登录http://localhost:8000/login
数据分析http://localhost:8000/analytics
可视化大屏http://localhost:8000/dashboard
管理控制台http://localhost:8000/admin

8. 配置说明

配置文件为 config.yaml,各字段含义如下:

8.1 项目配置 project

project:id:'220'# 项目编号name: 诺贝尔奖数据可视化分析系统 # 项目名称(显示在导航栏和页面标题)name_en: nobel # 英文短名stack: fastapi_bootstrap # 技术栈标识db_name: design_220_nobel # MySQL 数据库名db_host: localhost # 数据库主机db_port:3306# 数据库端口db_user: root # 数据库用户名db_password:'123456'# 数据库密码port:8000# Web 服务端口theme_color:'#B8860B'# 主题色(金色)

8.2 数据集配置 dataset

dataset:file: nobel.csv # CSV 数据文件名(相对于 data/ 目录)target_column: category # 目标列(分类列)target_labels:# 目标值的中文映射Physics: 物理学 Chemistry: 化学 ...features:# 特征字段列表-key: awardYear # 字段键名(对应 CSV 列名)label: 获奖年份 # 中文标签(前端显示)type: numeric # 字段类型:numeric / categorical / text / binaryunit: 年 # 单位(可选)range:[1901,2025]# 取值范围(可选,numeric 类型)-key: category label: 奖项类别 type: categorical options:# 可选值列表(categorical 类型)- Physics - Chemistry ...

字段类型与数据库映射

字段类型数据库类型说明
numericDOUBLE数值型
categoricalVARCHAR(200)类别型(有限选项)
textTEXT文本型(长文本)
binaryINT二值型(0/1)

8.3 模块配置 modules

modules:auth:true# 用户认证模块roles:[user, admin]# 支持的角色列表prediction:false# 预测模块(未启用)analytics:true# 数据分析模块data_manage:true# 数据管理模块model_evaluation:false# 模型评估(未启用)dashboard:true# 可视化大屏模块

8.4 分析页面配置 analysis_pages

analysis_pages:-route: award_overview # URL 路由名title: 获奖概览 # 页面标题description:...# 页面描述columns:# 使用的数据列- awardYear - category - prizeAmount -route: geographic title: 地理分布分析 has_map:true# 是否包含地图columns:[birth_countryNow, birth_continent]...

附录

A. 主题色配色方案

系统使用金色(Nobel Gold)主题,完整调色板:

变量色值用途
–primary#AE7F0A主色
–primary-dark#B8860B主色深
–primary-darker#6E5006主色更深
–primary-light#DCA00D主色浅
–primary-lighter#FFC910主色更浅
–accent#F97316强调色(橙)
–success#059669成功色(绿)
–warning#D97706警告色(琥珀)
–danger#DC2626危险色(红)
–info#0891B2信息色(青)

B. ECharts 图表配色

所有分析页面统一使用以下配色数组:

var chartColors =['#B8860B','#DCA00D','#F97316','#059669','#0891B2','#DC2626'];

C. 默认账户

用户名密码角色
adminadmin123管理员

Read more

从零开始打造高性能数据结构——手把手教你实现环形缓冲

从零开始打造高性能数据结构——手把手教你实现环形缓冲

◆ 博主名称: 小此方-ZEEKLOG博客 大家好,欢迎来到小此方的博客。 ⭐️个人专栏:《C语言》_小此方的博客-ZEEKLOG博客 算法_小此方的博客-ZEEKLOG博客  ⭐️踏破千山志未空,拨开云雾见晴虹。 人生何必叹萧瑟,心在凌霄第一峰。 目录 一,普通队列的劣势 1. 空间浪费严重(“假溢出”问题) 2. 需要频繁移动元素(若避免浪费) 3. 扩容成本高 4. 无法解决“假溢出”导致的提前扩容 二,环形缓冲结构分析  1. “循环”取模实现指针回绕  2.“循环”,轮流入座而不是排长队 三,实现环形缓冲 1,MyCircularQueue(k): 构造器   1,结构体搭建   2,初始化 3,为什么选择k+1块空间而不是k块空间?

By Ne0inhk
【动态规划篇】专题(六):子序列问题——不连续的艺术

【动态规划篇】专题(六):子序列问题——不连续的艺术

文章目录 * LIS 模型及其衍生:回头看,全是风景 * 一、 前言:从 O(N) 到 O(N²) * 二、 最长递增子序列 (Medium) * 2.1 题目描述 * 2.2 核心思路:LIS 模型 * 2.3 代码实现 * 三、 摆动序列 (Medium) * 3.1 题目描述 * 3.2 状态定义:波峰与波谷 * 3.3 代码实现 * 四、 最长递增子序列的个数 (Medium) * 4.1 题目描述 * 4.2 双重状态 * 4.

By Ne0inhk
Python | 栅格数据Sen+MK长时间序列趋势分析+显著性检验保姆级教程

Python | 栅格数据Sen+MK长时间序列趋势分析+显著性检验保姆级教程

遥感代码星球的第002篇代码分享  今天给大家分享的是: Theil-Sen Median趋势分析 + Mann-Kendall显著性检验   基于遥感数据的植被碳水利用效率时空变化和归因分析[J].生态学报,2024,44(01):377-391.DOI:10.20103/j.stxb.202207232112. 在研究气候变化、环境变化、生态变化等领域时,如何准确分析时间序列数据的趋势是一个重要的课题。Theil-Sen Median趋势分析(简称Sen分析)和Mann-Kendall显著性检验(简称MK检验)是两种常用的非参数方法,它们在处理气候、环境、生态等领域的趋势分析中有着广泛的应用。本文将详细介绍这两种方法的基本原理,并探讨它们如何结合使用以提高趋势分析的准确性。同时结尾附完整代码及案例数据供大家学习使用。 01 原理及公式 1. Theil-Sen Median 趋势分析(Sen分析) Theil-Sen Median 趋势分析是一种稳健的非参数统计方法,适用于具有异常值或缺失值的时间序列数据。该方法通过计算数据的中位数斜率(即Sen斜率

By Ne0inhk
【数据结构和算法】面试必刷之随机链表复制:这三步让你彻底吃透 random 指针

【数据结构和算法】面试必刷之随机链表复制:这三步让你彻底吃透 random 指针

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人等方向学习者 ❄️个人专栏:《C语言》《【初阶】数据结构与算法》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、随即链表的复制 * 1.1 题目 * 1.2 算法原理 * 1.3 代码 * 总结与每日励志 前言 随机链表的复制是数据结构中的经典难题,核心难点在于复制节点的random指针——其指向的节点可能尚未创建,也可能指向链表中的任意节点。本文采用“原地拷贝+拆分”的最优思路,分三步拆解解题逻辑,结合代码实现与原理分析,清晰讲解如何高效解决该问题,帮助读者吃透random指针的处理技巧,掌握链表操作的核心思维。 一、随即链表的复制 1.1 题目 链接:随机链表的复制 1.2 算法原理

By Ne0inhk