🆘如有侵权,请联系删除;如有写得不对的地方,请帮忙指出;如您有更好的想法、建议和资源分享,欢迎找我交流!
🥰前言
-
教务网系统不能导出所有人的平均学位绩点,让我一直很苦恼,在大一学
Python
的时候就想写个代码来计算整个专业的平均学位绩点,这次终于开干了! -
不是很智能化,针对
HNUST
教务网导出的成绩单,写的较简单,纯个人行为,勿喷哈哈哈 -
主题:数据分析-Python实现平均学位绩点计算
🏅教程
-
工具:
Pycharm
-
使用:打开
Pycharm
,新建一个项目,安装pandas、openpyxl
包,直接在控制台pip
一下即可,具体代码见文章下文。 -
文件数据:
- 基础文件需要是
HNUST
教务处导出的成绩单,然后要将非学位课程的列删除,把非“学号、姓名、学位课程”的列删除,属于统计数据的行也要删除,大体最后表格的数据形式形如下图:【如果读者表格数据形式不同,代码需要自行改改】
- 表格文件与代码要在同一个目录下。
- 基础文件需要是
-
结果:
- 计算出每个人的平均学位绩点
- 导出成
Excel
,数据是按平均学位绩点降序排序
🪄代码
import pandas as pd
# 读取成绩单
df = pd.read_excel('大一上.xls')
rows_data = df.values.tolist()
# 定义函数 成绩转化成对应的学分
def grade_to_credit(grade):
if grade >= 90:
return 4.0
elif grade >= 85:
return 3.7
elif grade >= 82:
return 3.3
elif grade >= 78:
return 3.0
elif grade >= 75:
return 2.7
elif grade >= 71:
return 2.3
elif grade >= 66:
return 2.0
elif grade >= 62:
return 1.5
elif grade >= 60:
return 1.0
else:
return 0
# calculate your grade point
def cal_grade_point(total_credit, credit_list, grade_to_credit_data):
res_data = []
for item01 in grade_to_credit_data:
totol_personal_credit = 0
for index, item02 in enumerate(item01):
totol_personal_credit += item02 * credit_list[index]
personal_grade_point = totol_personal_credit / total_credit
res_data.append(round(personal_grade_point, 2))
return res_data
# 删去姓名学号,获取课程信息
title_data = df.values[0:1]
course_data = [item for sublist in title_data for item in sublist][2:]
# 获取每一门课所对应的学分,转化成浮点数
credit_list = []
total_credit = 0
for item in course_data:
cur = float(item.split(',')[3].split('学分')[1])
total_credit += cur
credit_list.append(cur)
# print(credit_list)
# 删去学号姓名,只要成绩,并转化成整数
all_data = df.values[1:]
grade_data = all_data[:, 2:].astype(int)
grade_to_credit_data = []
for item01 in grade_data:
new_item = []
for item02 in item01:
new_item02 = grade_to_credit(item02)
new_item.append(new_item02)
grade_to_credit_data.append(new_item)
# print(grade_to_credit_data)
# 得到平均学位绩点成绩
result_grade_point_data = cal_grade_point(total_credit, credit_list, grade_to_credit_data)
# print(result_grade_point_data)
# 得到包含个人信息的平均学位绩点成绩
result_data_personal = [[row[0], row[1]] for row in all_data if len(row) >= 2]
result_data = []
for index, item in enumerate(result_data_personal):
new_item = item
new_item.append(result_grade_point_data[index])
result_data.append(new_item)
# 打印结果
# for item in result_data:
# print(item)
# 导出Excel文件
res = pd.DataFrame(result_data, columns=["学号", "姓名", "平均学位绩点"])
# sort rules:先以绩点从高到低 相同情况下再以学号从低到高排序
res_sort = res.sort_values(by=['平均学位绩点', "学号"], ascending=[False, True])
res_sort.to_excel("result_平均学位绩点.xlsx", index=False)
😇体会
代码源于生活,有需求,就可以动手干干,终于可以分析自己的专业水平了,开心子。
💓致谢
- 感谢努力的自己和朋友们的支持。
完结于20230709