应用场景:
- 教育机构的学生成绩分析
-
教学质量评估
-
学习情况统计报告
-
数据可视化教学案例
- 介绍
这个脚本生成四个图表:直方图、箱线图、条形图和饼图,用于展示学生成绩数据
主要库它使用pandas、numpy、matplotlib和seaborn
如果没有库请在终端下载:
点击终端或者python软件包进行下载
# 安装pandaspip install pandas
# 安装numpypip install numpy
# 安装matplotlibpip install matplotlib
# 安装seabornpip install seaborn
步骤:
-
准备数据:创建一个包含姓名、分数和班级的DataFrame(数据框)
-
生成直方图:展示分数的分布,并带有KDE(核密度估计)
-
生成箱线图:按班级对比成绩,并标记平均值
-
生成条形图:按分数从高到低展示学生排名
-
生成饼图:展示成绩等级(不及格、及格、良好、优秀)的分布
第一步:模块导入
import pandas as pd #数据处理import numpy as np #数值计算import matplotlib.pyplot asplt #绘图库import seaborn as sns #统计可视化,基于matplotlibfrom matplotlib.backends,backdend_agg import FigureCanvasAgg #非交互式绘图from matplotlib.figuer import Figureimport matplotlib
#中文字体配置matplotlib,rcParams['font.`sans-serif'] = ['simHei','Arial Unicode_minus'] = False
设置中文字体,解决中文显示乱码问题
核心函数
def prepare_data(): data = { '姓名': ['张三', '李四', '王五', '老六', '小王', '小李', '小龙', '小七', '八八', '小八', '小张'], '分数': [65.5, 76.8, 73.6, 62.8, 57.7, 59.8, 90, 39.5, 88, 64.4, 73.7], '班级': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A'] } return pd.DataFrame(data)
创建包含11名学生成绩的测试数据集
直方图函数
def create_histogram(df): fig = Figure(figsize=(10, 6)) canvas = FigureCanvasAgg(fig) ax = fig.add_subplot(111)
sns.histplot(df['分数'].dropna(), bins=8, kde=True, ax=ax, color='skyblue')
-
使用
FigureCanvasAgg进行非交互式绘图(适合脚本生成) -
kde=True添加核密度估计曲线 -
8个分箱展示分数分布
3. 箱线图函
def create_boxplot(df): sns.boxplot(x='班级', y='分数', data=df, ax=ax, palette='Set2') # 添加平均值标记 class_a_mean = df[df['班级'] == 'A']['分数'].mean() class_b_mean = df[df['班级'] == 'B']['分数'].mean()
-
比较两个班级的成绩分布
-
红点标记平均值,便于直观比较
-
显示中位数、四分位数、异常值等统计信息
排名条形图函数
def create_ranking(df): sorted_df = df.dropna().sort_values('分数', ascending=False) palette = sns.color_palette("viridis", len(sorted_df))
-
按分数降序排列
-
使用viridis色彩映射,分数越高颜色越亮
-
在条形末端显示具体分数值
成绩等级饼图函数
def create_grade_distribution(df): bins = [0, 60, 70, 80, 100] labels = ['不及格', '及格', '良好', '优秀'] df['等级'] = pd.cut(df['分数'], bins=bins, labels=labels, right=False)
-
不及格:0-59分
-
及格:60-69分
-
良好:70-79分
-
优秀:80-100分
技术亮点
fig = Figure(figsize=(10, 6))canvas = FigureCanvasAgg(fig)
适合批量生成图片,不依赖图形界面
数据完整性处理
使用.dropna()避免空值影响分析
可视化最佳实践
-
适当的图表尺寸和布局
-
网格线提升可读性
-
颜色搭配协调
-
标签清晰明确