一、简介使用 Python、Pandas、Streamlit、Plotly 实现简单学生成绩统计静态数据看板。 通过代码自动生成模拟学生成绩数据集完成数据清洗、指标统计、多类型图表可视化最终在浏览器中展示完整可视化看板二、工程结构l/ ├─ main.py # 主程序源码 └─ score_data.csv # 程序运行后自动生成的成绩数据集三、简单需求生成模拟学生成绩数据集导出 CSV 文件数据预处理去除空值、过滤分数异常数据核心指标卡片展示总人数、全体平均分、及格率、最高总分可视化图表柱状图各班平均分对比、饼图成绩等级占比、折线图各科平均分趋势展示原始学生成绩明细表格页面排版布局整合所有模块形成完整静态看板四、完整源码兼容旧版 Streamlit已移除 use_container_width# -*- coding: utf-8 -*- 数据可视化实验学生成绩统计看板 兼容低版本streamlit import streamlit as st import pandas as pd import plotly.express as px import numpy as np # 设置页面整体配置 st.set_page_config(page_title学生成绩统计看板, layoutwide) # 生成模拟学生成绩数据 np.random.seed(42) student_count 120 classes [一班, 二班, 三班, 四班] subjects [语文, 数学, 英语] data_list [] for i in range(student_count): cls np.random.choice(classes) chinese np.clip(np.random.normal(75, 12), 0, 100) math np.clip(np.random.normal(72, 15), 0, 100) english np.clip(np.random.normal(70, 13), 0, 100) total chinese math english avg total / 3 # 成绩等级划分 if avg 85: level 优秀 elif avg 70: level 良好 elif avg 60: level 及格 else: level 不及格 data_list.append({ 学号: fS{1001i}, 班级: cls, 语文: round(chinese,1), 数学: round(math,1), 英语: round(english,1), 总分: round(total,1), 平均分: round(avg,1), 等级: level }) df_raw pd.DataFrame(data_list) # 保存csv文件 df_raw.to_csv(score_data.csv, indexFalse, encodingutf-8-sig) # 数据预处理 df df_raw.copy() df df.dropna() df df[(df[语文].between(0,100)) (df[数学].between(0,100)) (df[英语].between(0,100))] # 页面标题 st.markdown(# 学生成绩统计数据看板) st.markdown(---) # ① 核心指标卡片区域 col1, col2, col3, col4 st.columns(4) total_student len(df) avg_score round(df[平均分].mean(),2) pass_count len(df[df[平均分]60]) pass_rate round(pass_count / total_student *100,2) max_total df[总分].max() with col1: st.metric(label总学生人数, valuef{total_student} 人) with col2: st.metric(label全体平均分, valuef{avg_score} 分) with col3: st.metric(label整体及格率, valuef{pass_rate} %) with col4: st.metric(label最高总分, valuef{max_total} 分) st.markdown(---) # ② 柱状图 饼图 col_left, col_right st.columns(2) class_avg df.groupby(班级)[平均分].mean().reset_index() fig_bar px.bar(class_avg, x班级, y平均分, title各班级平均分数对比, color班级, text_auto.2f) fig_bar.update_layout(height380) level_cnt df[等级].value_counts().reset_index() level_cnt.columns [等级,人数] fig_pie px.pie(level_cnt, values人数, names等级, title学生成绩等级占比分布, hole0.2) fig_pie.update_layout(height380) with col_left: st.plotly_chart(fig_bar, use_container_widthTrue) with col_right: st.plotly_chart(fig_pie, use_container_widthTrue) st.markdown(---) # ③ 各科平均分折线图 subject_mean pd.DataFrame({ 科目:[语文,数学,英语], 平均分:[df[语文].mean(), df[数学].mean(), df[英语].mean()] }) fig_line px.line(subject_mean, x科目, y平均分, markersTrue, title各科平均分数趋势, text平均分) fig_line.update_layout(height380) st.plotly_chart(fig_line, use_container_widthTrue) st.markdown(---) # ④ 明细数据表已删除use_container_width兼容旧版本 st.subheader(学生成绩明细数据表) st.dataframe(df) st.markdown(### 实验完成提示) st.text(f数据集已保存至 score_data.csv有效数据行数{len(df)})五、环境部署与运行步骤Windows Anaconda VSCode1. 准备工作在桌面新建项目文件夹 VSCode 打开该文件夹新建main.py粘贴代码保存。2. 打开 VSCode 内置终端安装依赖# 解决GBK编码问题 $env:PYTHONIOENCODINGutf-8 # 安装依赖包 pip install streamlit pandas plotly3. 启动看板streamlit run main.py终端输出Local URL例如: http://localhost:8501浏览器打开链接即可查看可视化看板注一定要终端输入streamlit run main.py命令启动六、效果展示指标卡片展示总人数、全体平均分、及格率、最高总分柱状图4 个班级平均分横向对比直观比较各班教学水平环形饼图优秀 / 良好 / 及格 / 不及格四个等级人数占比折线图语文、数学、英语三科平均分变化趋势明细表格展示全部学生学号、班级、各科分数、总分、平均分、等级原始数据程序自动生成score_data.csv成绩文件保存到项目目录七、分析数据层面利用 numpy 生成模拟样本pandas 完成数据清洗剔除空值和非法分数可视化层面Streamlit 快速搭建 Web 页面Plotly 生成交互式图表支持鼠标悬浮查看数值局限本版本为静态看板无筛选、联动、预警等功能八、可能的踩坑记录遇到的问题pip 安装时报 GBK 编码错误旧版 pip 在 Windows GBK 控制台遇到 emoji 字符报错通过设置环境变量PYTHONIOENCODINGutf-8并升级 pip 解决。st.dataframe 报参数 use_container_width 不存在低版本 Streamlit 不支持use_container_width参数删除该参数代码直接兼容旧环境。Streamlit 首次运行弹出邮箱输入 直接回车留空跳过不影响程序运行九、总结借助 Streamlit 快速开发 Web 数据看板无需前端 JS、HTML 知识仅使用 Python 就完成数据生成、清洗、多维度可视化。看板将学生成绩数据转化为直观图表能够快速定位班级、科目成绩情况