20230709_数据分析_Python实现平均学位绩点计算_针对HNUST

🆘如有侵权,请联系删除;如有写得不对的地方,请帮忙指出;如您有更好的想法、建议和资源分享,欢迎找我交流!

🥰前言

  • 教务网系统不能导出所有人的平均学位绩点,让我一直很苦恼,在大一学Python的时候就想写个代码来计算整个专业的平均学位绩点,这次终于开干了!

  • 不是很智能化,针对HNUST教务网导出的成绩单,写的较简单,纯个人行为,勿喷哈哈哈

  • 主题:数据分析-Python实现平均学位绩点计算

🏅教程

  • 工具:Pycharm

  • 使用:打开Pycharm,新建一个项目,安装pandas、openpyxl包,直接在控制台pip一下即可,具体代码见文章下文。

  • 文件数据:

    • 基础文件需要是HNUST教务处导出的成绩单,然后要将非学位课程的列删除,把非“学号、姓名、学位课程”的列删除,属于统计数据的行也要删除,大体最后表格的数据形式形如下图:【如果读者表格数据形式不同,代码需要自行改改】

    QQ图片20230709223624.png

    • 表格文件与代码要在同一个目录下。
  • 结果:

    • 计算出每个人的平均学位绩点
    • 导出成Excel,数据是按平均学位绩点降序排序
      QQ图片20230709225332.png

🪄代码

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值