在高中阶段,学生考试成绩的分析是一个重要的而频繁的应用场景,快速、有效、精准的生成学生成绩的分析报告,是学情监控和开展个性化教学的前提。这个问题是基础性问题,实现的方法非常多,主要是基于Excel。在这里用python的pandas做一遍,体会一下办公自动化的乐趣。这篇文章以高中学生的成绩分析为背景,使用pandas(是一个基于numpy的python的数据分析包)对学生成绩进行分析。本文分为如下部分:
1、全校成绩表的生成(虚构);
2、年级成绩分析;
3、班级成绩分析;
4、学科成绩分析;
5、总结与思考。
学生成绩分析是本文的场景,写这篇文章的目的是总结我参加华为云大数据挑战赛时对于pandas的学习体会,供大家参考,本文的源码地址:https://github.com/Fire2341/Learning_Summary。
在开始之前,导入numpy和pandas,按照习惯写成如下形式。如果没有这个模块,还是老规矩,使用pip install numpy和pip install pandas安装一下。
import numpy as np
import pandas as pd
一、全校成绩表的生成(虚构)
在开始之前,先生成我们的分析对象,学生成绩表,假设本次考试为理科班的摸底考试。学生成绩表包括:
基本信息,包括:学生姓名、学生年级、学生班级;
学生成绩,假设学生的成绩服从正态分布,生成的成绩包括如下科目:语文(150分)、数学(150分)、英语(150)、物理(100分)、化学(100分)、生物(100分),并计算总分。
生成的表格流程如下:先确定每个年级的班级数目,并随机生成各班人数(55-68人之间),由此计算得到全校人数。根据全校人数随机生成学生姓名,并在确定各科平均值和标准差后,根据正态分布规律随机生成各个学生的各科成绩,并计算每位学生的总分,以此获得一份总的成绩汇总表,主要代码如下。由于这部分代码较为冗长且不是主要部分,感兴趣的朋友可以点击源码查看。
class_name, student_num = generate_class() # 生成班级信息
all_num = students_sum(student_num) # 生成全校学生总数
student_name_group = generate_student_name(all_num) # 生成全校学生名字
student_info = init_table(class_name, student_num, student_name_group) # 将年级、班级、学生信息初始化到表格中
student_list = get_list(all_num, student_info) #生成成绩汇总表
student_list.to_excel('学生成绩表2.xlsx') # 保存成绩表
取数据表的前5个来看,还真像那么回事(所有名字和成绩数据均为python随机生成,如有雷同,纯属巧合)。在生成的成绩表中,一共有3个年级,其中高一26个班,高二27个班,高三个23班,各班学生人数介于55-68人之间,全校一共4619名学生。
为了展现pandas的相较于excel的优越性,在下面的分析中,各部分使用的代码尽量不超过5行。
二、年级分析
2.1 各年级的最低分、最高分、平均分和中位数
为了直观的反映各年级的整体教学情况,