python柱状图、直方图和饼状图统计学生成绩 | 您所在的位置:网站首页 › 成绩分析excel柱状图 › python柱状图、直方图和饼状图统计学生成绩 |
Python的matplotlib库具有很强大的绘图功能,可以利用这个库函数来进行学生成绩统计。假如有一个班的某科学生成绩如表1所示,可以用柱状图、直方图和饼状图三种方式来进行统计分析。下边介绍一下操作步骤。 表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”。 表2 成绩表转化为csv格式 No.score2022100161202210026820221003742022100470202210055320221006662022100766202210087120221009672022101084202210117920221012732022101364202210149020221015812022101682202210177720221018512022101978202210207520221021692022102283202210235620221024732022102593202210266320221027802022102876202210298020221030742022103172202210328820221033622022103485202210358620221036582022103772202210387220221039702022104091 二、统计分析的方法在课程成绩情况统计分析时,可以选则柱状图、直方图和饼状图三种图形。 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=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() 四、实现效果(全文结束)
|
CopyRight 2018-2019 实验室设备网 版权所有 |