摘要:目前高校考试成绩的分析,主要是借助于 Excel 等对学生的成绩进行简单的统计,但在数据量较大时,在Excel中的操作就有些过于繁琐。这里以一个虚拟的班级的Java考試成绩为例,使用当前热门的数据分析语言Python,并且综合运用了Python的第三方库pandas和matplotlib进行数据可视化分析,实现学生数据的读入、数据统计、排序、分组以及图形输出平均成绩、不及格人数等之外,还将分析出班级学生知识点掌握情况。期望能为教师调整教学安排与教学方法提供参考,从而提升教学质量。
关键词:Python;Pandas;Matplotlib
1前言
在当前这个信息时代,因为计算机强大的数据处理能力和网络迅捷便利的传播方式,学生成绩信息的管理、统计和分析已经非常方便。成绩是各大学校教育教学环节中的一项重要指标,是学生学习效果、学习态度的主要体现。对考试成绩的分析,能够使学校检测出最近一段时间之内学生的学习情况,学习态度,还能很大程度的反映出教师的教学质量、治学态度和其教学方法的科学性,以及学校对学生教学管理水平。在对考试成绩进行数据分析和评价后,充分发挥它的反馈作用,以此加强教学管理,改进教学方法,提高教学质量。同时也能够指导考试的命题工作,提高考试检测质量,还能够加强学校的题库建设。
2 Python及开发环境简介
2.1 Python简介
Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python主要运用于科学计算和统计、人工智能、桌面界面开发、软件开发、后端开发、网络爬虫等等方面。Python设计上的风格是清晰划一的,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。Python语言的优点有很多,程序员们选择使用它作为开发语言大多是因为其简单易学、免费开源、还有着许多功能强大第三方库。
2.2开发环境PyCharm Community Edtion(社区版)
PyCharm是一个由JetBrains打造的 Python 集成开发环境,也是使用Python语言的编程人员最常用的一款Python IDE。PyCharm分为社区版、专业版和教育版,教育版适合教学使用,专业版功能最全的收费版,社区版就是专业版的阉割版本,但解决一般问题已经足够,且是免费的,本案例就是使用的社区版。PyCharm在拥有调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制这些一般集成开发环境就拥有的功能的同时,它还提供了很多很好的功能用于Django(一种基于Python的Web开发框架)开发,而且大多数Python的第三方库可以在PyCharm中直接下载,非常便利。
3 学生成绩分析的设计与实现
3.1数据导入
数据导入是程序设计的开始,有了数据才能进行处理。本程序需要处理的数据信息是学生的成绩信息,这些成绩信息是由老师在学生考试过后整理得到。得出成绩后,将成绩按照学号,姓名,性别,成绩的顺序依次输入到cjb.xlsx表格文件中保存。将表格移动到程序所在的目录下,在程序中即可使用pandas库中的读取函数之一的read_excel读入数据。主要代码如下所示。
import pandas as pd
data = pd.read_excel(rcjb.xlsx)
print(data)
执行后,得到的数据如下图3.1所示:
3.2 成绩处理
3.2.1 基本统计
DataFrame.describe()是pandas中一个能对数据进行快速统计的方法,用它可以完成对数据的人数、平均分、最高分、最低分,百分位数值的统计。代码如下:
print(data['成绩'].describe())
如果只想要单独得到平均分或最低分、最高分等数据,只需将代码最后的describe()变成mean()或min()、max()即可。
得到的数据如下下图3.2所示:
通过图像,我们可以得到该班级有10人参加考试,班级平均分为77分,较为良好;最高分90,最低分65,在后续教学中需要对65分的同学进行辅导帮助;成绩标准差为7.93,较为平稳,说明该班级学生总体差距不是很大。
3.2.2 成绩排序
DataFrame.sort_value()是pandas中的排序方法,使用它既可以根据列数据,也可根据行数据排序。本案例中自然是根据学生成绩进行排序,降序排序代码如下:
total=data.sort_values(by='成绩',ascending=False)
若想要成绩升序排序,只需要把代码中ascending=False改为ascending=True即可。
得到的数据如下图3.3所示:
通过排序输出后,我们得到班级第一名为“杨晨辉”同学,班级择优时可以优先考虑;其中,85分以上的优秀同学有两名,可以鼓励他们参加相关大赛,开拓自己视野。
3.2.3 分组统计
DataFrame.groupby()是pandas中的分组方法。本案例中是以学生性别进行的分组,代码如下:
sexdata=data[data['性别']=='男']
group=sexdata.groupby(by='性别').mean()['成绩']
print(group)
女生的分组同理,将代码中的“男”改成“女”即可,如果还想要最高分等其他数据,那么把代码中的mean()改为max()或其他即可。
执行后就能分别得男生、女生的平均成绩信息,结果如下图3.4、图3.5所示:
通过图像,我们得到女生的平均成绩比男生高,说明女生在本科目的学习能力比男生强或女生的学习态度大多比男生端正,需要适当督促该班级男生的学习,多让他们在课后进行交流促进。
3.3 学生成绩的图形输出
条形图中,横轴上的数据是一个独立且具体的数据,它们之间是有空隙的,本案例中的条形图的横轴就是用来表示知识点这个具体数据名称,而直方图中,横轴上的数据是连续的,是一个范围,它们中间不存在空隙,因此我用它的横轴来表示各分数段;条形图是用条形的高度表示频数的大小,案例中的条形图的高度只有0和1,用来表示掌握与否,而直方图是用长方形的面积表示频数,也就是人数。
3.3.1直方图(学生成绩分布)
直方图是数值数据分布精确的图形表示。直方图一般用横轴表示数据类型,纵轴表示分布情况。本案例用横轴表示成绩分数分布,用纵轴表示人数分布。代码如下:
plt.hist(data[‘成绩‘],5)
plt.show()
输出图像如下图3.6所示:
从这个图中可以得到,65~70分之间的有2人,70~75分之间有1人,75~80之间有3人,80~85之间有2人,85~90之间有2人,该班级学生成绩分布较为均匀,其中75分以上成绩良好的学生居多数,鼓励他们继续保持,在后续的课题讲解中也可以尝试发散讲解,拓展该班学生的知识面。
3.3.2条形图(学生知识点掌握情况)
有时在图像输出之前,有些数据可能从原始材料中不能直接获得,这时就需要对数据进行预处理,通过处理得到自己想要的信息后再通过图像输出。本案例中,需要通过图像输出的是本班级学生知识点的掌握情况,而一般老师通过学生试卷只能得到學生的每题得分情况,这时就需要对数据进行预处理。将每题的知识点列出来,得分超过知识点总分60%的记为1,表示基本掌握;得分没有超过知识点总分的60%的记为0,每个学生的掌握情况处理完成后,再进行班级学生成绩的处理,将班级学生知识点得分情况记为1的人数超过班级总人数60%的再次记为1,表示班级基本掌握本知识点;如果没有超过60%,则记为0,表示班级没有掌握本知识点。这些数据都处理完成后,就可以通过Matplotlib进行图像输出了。图像输出的代码如下:
font=FontProperties(fname=r'C:\Windows\Fonts\simkai.ttf',size=12)
points=['类','包','接口','数组']
con=['1','1','0','1']
plt.bar(range(len(points)),con)
plt.xticks(range(len(points)),points,FontProperties=font)
plt.show()
当然,如果想要了解更多知识点的掌握情况,只需要在知识点后面再次添加即可。
输出图像如下图3.7所示:
从此图中,我们可以得到本班级学生对“接口”知识点的掌握不够好,老师可以以此来制定下一步的教学计划,对该班级学生在此知识点上进行详细讲解、加深训练以此加强本班学生对于该知识点的掌握。
4结语
Python发展接近三十年,如今已经确实成为了编程语言中的“红人”。很多程序员都在使用Python,因为Python涉及范围广泛,从数据处理到人工智能,从Web解析到网络空间,从人机交互到艺术设计,门类众多且容易上手,学会了Python,可以大幅提高IT人的自身竞争力。随着时代的发展越来越快,市场需求越来越大,Python的应用也越来越广泛。在如今这个大数据的信息化时代,计算机技术和网络技术的发展一天比一天迅速,而这些技术的快速发展便是来自于大众对其的需求愈来愈高,对其的依赖性越来越大。因此,为了不被这个时代淘汰,开发者们也需要不断的学习,不断地突破自我。
参考文献:
[1]刘雨珂,王平.基于Python+Pandas+Matplotlib的学生成绩数据统计与图形输出实现[J].福建电脑,2017(11).
[2]高红兵.基于Pandas大学生考试成绩分析[J].内江科技.2017(12)。
[3]王媛.基于Python的学生综合成绩分析程序设计[J].信息与电脑(理论版),2019(11):99-101.
作者简介:仇烈伟(1997,9-),男,汉族,四川省安岳县,学生,本科,荆楚理工学院,研究方向:数字媒体技术方向