用python自动生成全校学生成绩报告

在高中阶段,学生考试成绩的分析是一个重要的而频繁的应用场景,快速、有效、精准的生成学生成绩的分析报告,是学情监控和开展个性化教学的前提。这个问题是基础性问题,实现的方法非常多,主要是基于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
一、全校成绩表的生成(虚构)

在开始之前,先生成我们的分析对象,学生成绩表,假设本次考试为理科班的摸底考试。学生成绩表包括:

  1. 基本信息,包括:学生姓名、学生年级、学生班级;

  2. 学生成绩,假设学生的成绩服从正态分布,生成的成绩包括如下科目:语文(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 各年级的最低分、最高分、平均分和中位数

为了直观的反映各年级的整体教学情况,在这里计算各年级的各科最高分、最低分、平均分和中位数。在这一部分用到的函数主要是.groupby和.agg。groupby可以按年级分组,.agg能够对各年级各分组应用各个函数(求最大值、最小值、平均值、中位数)进行计算。

subject_name = ['语文','数学','英语','物理',&#
  • 9
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,这是一个非常好的问题!为了生成每位学生成绩报告单,您可以按照以下步骤进行操作: 1. 首先,您需要使用Python编写一个程序来读取学生成绩文件。您可以使用Python内置的open()函数打开文件并读取文件内容。例如,您可以使用以下代码读取一个名为"grades.txt"的文件: ``` with open('grades.txt', 'r') as f: lines = f.readlines() ``` 这将打开文件并将每一行读取到一个列表中。 2. 接下来,您需要将每个学生成绩解析出来并将其存储在一个字典中。您可以按照以下格式为每个学生创建一个字典: ``` student = { 'name': 'John Doe', 'grades': [90, 85, 95, 80], 'average': 0.0, 'letter_grade': '' } ``` 在这个字典中,'name'键存储学生的姓名,'grades'键存储学生成绩,'average'键存储学生的平均分,'letter_grade'键存储学生的字母等级。 3. 在将每个学生成绩解析出来后,您可以使用Python的字符串格式化功能来生成每个学生成绩报告单。例如,您可以按照以下格式打印每个学生成绩报告单: ``` print('Name: {}\nAverage: {}\nLetter Grade: {}'.format(student['name'], student['average'], student['letter_grade'])) ``` 在这个示例中,您将使用字符串格式化来打印每个学生的姓名,平均分和字母等级。 4. 最后,您需要计算每个学生的平均分和字母等级。您可以使用Python的列表操作和条件语句来计算平均分和字母等级。例如,您可以按照以下方式计算平均分和字母等级: ``` average = sum(student['grades']) / len(student['grades']) student['average'] = average if average >= 90: student['letter_grade'] = 'A' elif average >= 80: student['letter_grade'] = 'B' elif average >= 70: student['letter_grade'] = 'C' elif average >= 60: student['letter_grade'] = 'D' else: student['letter_grade'] = 'F' ``` 在这个示例中,您将使用sum()函数和len()函数来计算平均分,并使用条件语句来计算字母等级。 希望这些步骤能够帮助您生成每位学生成绩报告单!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值