高中信息技术教学案例:用Pandas轻松处理学生成绩表
共 3432字,需浏览 7分钟
·
2026-06-08 18:03
一、项目背景
- 课程名称:高中信息技术·数据与数据分析
- 授课对象:高中二年级学生
- 先修知识:学生已掌握Python基础语法(变量、列表、循环),了解Excel表格的基本操作,但尚未接触过Pandas库。
二、我的角色
- 课程主讲教师、教学设计者
三、核心挑战
在日常教学中,我发现学生在处理真实成绩数据时常遇到以下痛点:
- 数据混乱:原始成绩表常有缺失值、重复值、格式不统一(如“85分”和“85”混写)。
- 计算繁琐:手工计算总分、平均分、排名耗时费力,容易出错。
- 分析困难:想快速了解班级整体情况(最高分、最低分、及格率、优秀率)需要大量公式。
- 可视化门槛高:Excel图表操作步骤多,学生容易迷失在菜单中。
四、我的教学方案与实施过程
我设计了一套“真实场景驱动 + 代码逐步讲解 + 可视化成图”的教学流程。
第一步:场景引入,激发兴趣(5分钟)
我会向学生展示一份真实的班级月考成绩表(脱敏处理),包含“姓名”、“学号”、“语文”、“数学”、“英语”等字段,并提问:
“假设你是班主任,现在需要快速知道:谁的总分最高?数学的平均分是多少?哪些同学不及格?如何一眼看出各科成绩的分布?手工用Excel做可能要花一节课,今天我们用几行Python代码搞定。”
通过这个真实任务,学生立刻理解了Pandas的实际价值。
第二步:环境搭建与数据加载(5分钟)
教学重点:让学生学会导入Pandas并读取数据。
# 导入Pandas库(通常使用别名pd)
import pandas as pd
# 读取Excel文件(假设文件名为“成绩表.xlsx”)
df = pd.read_excel('成绩表.xlsx')
# 查看数据的前5行,确保读取成功
print(df.head())
讲解要点:
- pd 是Pandas的常用别名,约定俗成。
- read_excel() 是最常用的函数之一,也可以读取CSV(read_csv())。
- head() 能快速预览数据,避免一次性打印所有行。
第三步:数据清洗,处理脏数据(10分钟)
原始数据往往不完美,我逐步演示如何处理常见问题。
1. 查看数据基本信息
# 查看数据形状(几行几列)
print(df.shape)
# 查看每列的数据类型和非空值数量
print(df.info())
# 统计缺失值
print(df.isnull().sum())
2. 处理缺失值(例如某同学缺考)
# 方法一:删除含有缺失值的行(简单粗暴)
df_clean = df.dropna()
# 方法二:用0填充缺失值(适合缺考记为0分)
df_filled = df.fillna(0)
# 方法三:用该列的平均值填充(更合理,但需要先计算平均值)
mean_score = df['数学'].mean()
df['数学'] = df['数学'].fillna(mean_score)
3. 处理重复值
# 删除完全重复的行
df = df.drop_duplicates()
4. 统一数据格式
例如“语文”列中既有85又有85分,需要用字符串处理函数统一清洗,此处简要说明。
讲解要点:数据清洗是数据分析中最耗时但最重要的步骤,“脏数据进,脏数据出”。我会强调真实性原则。
第四步:数据计算与分析(15分钟)
清洗完毕后,开始核心分析。
1. 计算每位学生的总分和平均分
# 提取需要计算的科目列(假设科目列为'语文','数学','英语')
subjects = ['语文', '数学', '英语']
# 计算总分(axis=1表示按行计算)
df['总分'] = df[subjects].sum(axis=1)
# 计算平均分(保留1位小数)
df['平均分'] = df[subjects].mean(axis=1).round(1)
2. 查看描述性统计
# 快速生成各科的成绩统计(最大值、最小值、平均值、标准差等)
print(df[subjects].describe())
3. 计算及格率和优秀率(假设满分100,60分及格,80分优秀)
# 定义函数
def pass_rate(series):
return (series >= 60).sum() / len(series)
def excellent_rate(series):
return (series >= 80).sum() / len(series)
# 应用函数
pass_rates = df[subjects].apply(pass_rate)
excellent_rates = df[subjects].apply(excellent_rate)
print("各科及格率:\n", pass_rates)
print("各科优秀率:\n", excellent_rates)
4. 排名
# 按总分降序排名,并添加排名列
df['排名'] = df['总分'].rank(ascending=False, method='min').astype(int)
# 按排名排序显示
df_sorted = df.sort_values('排名')
print(df_sorted[['姓名', '总分', '排名']])
第五步:数据可视化,让结果一目了然(10分钟)
使用Matplotlib库(常与Pandas搭配)绘制简单图表。
import matplotlib.pyplot as plt
# 设置中文字体(解决显示问题)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘制各科平均分柱状图
avg_scores = df[subjects].mean()
avg_scores.plot(kind='bar')
plt.title('各科平均分对比')
plt.ylabel('分数')
plt.show()
# 绘制某科成绩的分布直方图
df['数学'].plot(kind='hist', bins=10, edgecolor='black')
plt.title('数学成绩分布直方图')
plt.xlabel('分数')
plt.ylabel('人数')
plt.show()
讲解要点:
- 可视化让抽象数据变得直观,能快速发现异常值或分布特征。
- 学生可以自行修改图表样式,培养审美与表达能力。
第六步:综合练习与拓展(5分钟)
布置课堂练习,让学生尝试:
- 找出各科最高分对应的学生姓名。
- 筛选出总分在前10名的学生。
- 绘制总分分布箱线图(boxplot),观察整体水平。
代码提示:
# 找出数学最高分的学生
max_math = df[df['数学'] == df['数学'].max()]
print(max_math[['姓名', '数学']])
# 筛选总分前10名
top10 = df.nlargest(10, '总分')
print(top10[['姓名', '总分']])
五、教学成果与反思
- 学生反馈:通过对比手工Excel操作与Pandas代码,学生普遍认为Pandas处理批量数据效率极高,尤其是对重复性任务(如每次月考都要算总分排名)非常有吸引力。约80%的学生能独立完成从读取数据到生成总分、排名、图表的完整流程。
- 我的思考:真实数据驱动:使用真实的成绩表(而非捏造的数据)极大提升了学生的参与感,他们觉得学的东西“有用”。循序渐进:先演示完整流程,再讲解细节,避免一开始陷入语法泥潭。注重可读性:引导学生写出有注释、变量命名清晰的代码,培养良好习惯。错误处理:学生在运行代码时常见“文件路径找不到”、“列名写错”等错误,我借此讲解了Python的报错信息如何阅读,锻炼了调试能力。
通过这个案例,我认为自己具备以下与AI数据标注相关的核心能力:
- 数据敏感性与清洗能力:能够系统化地发现并处理数据中的异常(缺失、重复、格式不一致)。
- 逻辑拆解与任务分解能力:将一个复杂的分析需求(如“计算及格率”)拆解为可执行的步骤(定义函数、应用函数)。
- 技术文档化能力:能够清晰记录操作过程,便于他人复现。
- 教学与沟通能力:将技术概念(如DataFrame、Series)用生活化语言解释,帮助零基础者理解。
这些能力与AI数据标注中的数据校验、规则制定、结果评估等任务高度契合。我相信自己能胜任需要严谨数据处理能力和清晰逻辑表达的相关工作。
