Python的matplotlib库具有很强大的绘图功能,可以利用这个库函数来进行学生成绩统计。假如有一个班的某科学生成绩如表1所示,可以用柱状图、直方图和饼状图三种方式来进行统计分析。下边介绍一下操作步骤。
学号 |
分数 |
20221001 |
61 |
20221002 |
68 |
20221003 |
74 |
20221004 |
70 |
20221005 |
53 |
20221006 |
66 |
20221007 |
66 |
20221008 |
71 |
20221009 |
67 |
20221010 |
84 |
20221011 |
79 |
20221012 |
73 |
20221013 |
64 |
20221014 |
90 |
20221015 |
81 |
20221016 |
82 |
20221017 |
77 |
20221018 |
51 |
20221019 |
78 |
20221020 |
75 |
20221021 |
69 |
20221022 |
83 |
20221023 |
56 |
20221024 |
73 |
20221025 |
93 |
20221026 |
63 |
20221027 |
80 |
20221028 |
76 |
20221029 |
80 |
20221030 |
74 |
20221031 |
72 |
20221032 |
88 |
20221033 |
62 |
20221034 |
85 |
20221035 |
86 |
20221036 |
58 |
20221037 |
72 |
20221038 |
72 |
20221039 |
70 |
20221040 |
91 |
目录
一、把成绩表转成csv格式
二、统计分析的方法
1、柱状图
2、直方图
3、饼状图
三、实现代码
四、实现效果
一、把成绩表转成csv格式
学号用字段“No.”表示,成绩用“score”,表格名称为“score”。
No. | score |
20221001 | 61 |
20221002 | 68 |
20221003 | 74 |
20221004 | 70 |
20221005 | 53 |
20221006 | 66 |
20221007 | 66 |
20221008 | 71 |
20221009 | 67 |
20221010 | 84 |
20221011 | 79 |
20221012 | 73 |
20221013 | 64 |
20221014 | 90 |
20221015 | 81 |
20221016 | 82 |
20221017 | 77 |
20221018 | 51 |
20221019 | 78 |
20221020 | 75 |
20221021 | 69 |
20221022 | 83 |
20221023 | 56 |
20221024 | 73 |
20221025 | 93 |
20221026 | 63 |
20221027 | 80 |
20221028 | 76 |
20221029 | 80 |
20221030 | 74 |
20221031 | 72 |
20221032 | 88 |
20221033 | 62 |
20221034 | 85 |
20221035 | 86 |
20221036 | 58 |
20221037 | 72 |
20221038 | 72 |
20221039 | 70 |
20221040 | 91 |
二、统计分析的方法
在课程成绩情况统计分析时,可以选则柱状图、直方图和饼状图三种图形。
1、柱状图
使用柱状图分析全班平均分数、最高分数和最低分数。
2、直方图
使用直方图和正态分布曲线分析全班成绩的正态分布情况。
3、饼状图
使用饼状图分析60分以下、60-70分、70-80分、80-90分和90分以上几个分数区间的人数所占比例。
三、实现代码
import pandas as pd # 引入panda工具集
import numpy as np # 引入numpy核心库
import matplotlib.pyplot as plt #引入matplotlib数据可视化库
#声明变量
a=0 #90分以上数量
b=0 #80-90分以上数量
c=0 #70-80分以上数量
d=0 #60-70分以上数量
e=0 #60分以下数量
score_max=0
score_min=100
score_avg=0
score_sum=0
# 正态分布的概率密度函数
# x 数据集中的某一具体测量值
# mu 数据集的平均值,反映测量值分布的集中趋势
# sigma 数据集的标准差,反映测量值分布的分散程度
def normfun(x, mu, sigma):
pdf = np.exp(-((x - mu) ** 2) / (2 * sigma ** 2)) / (sigma * np.sqrt(2 * np.pi))
return pdf
if __name__ == '__main__':
data = pd.read_csv('score.csv') # 载入分数数据文件
score = data['score'] # 获得分数数据集
student_no = data['No.'] # 获得学号数据集
mean = score.mean() # 获得分数数据集的平均值
std = score.std() # 获得分数数据集的标准差
#计算分数总和、各分数区间数量统计
for i in range(0,len(score)):
score0=int(score[i])
#print(student_no[i],score0)
score_sum=score_sum+score0 #计算分数之和,为求平均数做准备
#计算最大值
if score0>score_max:
score_max=score0
#计算最小值
if score0<score_min:
score_min=score0
if score0>=90: #统计90分以上数量
a=a+1
elif score0>=80: #统计80分以上数量
b=b+1
elif score0>=70: #统计70分以上数量
c=c+1
elif score0>=60: #统计60分以上数量
d=d+1
else: #统计60分以下数量
e=e+1
score_avg=score_sum/len(score) #平均分
scores=[a,b,c,d,e] #分数区间统计
# 柱形图柱形的宽度
bar_width = 0.3
# 设定X轴:前两个数字是x轴的起止范围,第三个数字表示步长,步长设定得越小,画出来的正态分布曲线越平滑
x = np.arange(0, 100, 1)
# 设定Y轴,正态分布函数
y = normfun(x, mean, std)
# 设定柱状图x轴、Y轴数组
x3 = np.arange(3)
y3 = np.array([score_avg,score_max,score_min])
# 绘制分数数据集的正态分布曲线和直方图(5分档)
plt.subplot(221)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('分数分布(5档)')
plt.plot(x, y)
plt.hist(score, bins=5, rwidth=0.9, density=True)
plt.xlabel('分数')
plt.ylabel('概率')
# 绘制分数数据集的正态分布曲线和直方图(10分档)
plt.subplot(222)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('分数分布(10档)')
plt.plot(x, y)
plt.hist(score, bins=10, rwidth=0.9, density=True)
plt.xlabel('分数')
plt.ylabel('概论')
# 绘制柱形图
plt.subplot(223)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('分数统计')
plt.bar(x3, y3, tick_label=['平均分', '最高分', '最低分'], width=bar_width)
# 绘制饼状图
plt.subplot(224)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('分数段饼图')
plt.pie(scores,labels=['90分以上','80-90分','70-80分','60-70分','60分以下'])
# 输出四幅图
plt.show()
四、实现效果
(全文结束)文章来源:https://www.toymoban.com/news/detail-502072.html
文章来源地址https://www.toymoban.com/news/detail-502072.html
到了这里,关于python柱状图、直方图和饼状图统计学生成绩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!