最终报告见文末资源链接
1.导入包,设置显示
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
%matplotlib inline
2.读取2019年期末成绩数据
data1 = pd.read_excel('2019期末.xls',skip=0)
data1.rename(columns={
'现在班级':'班级'},inplace=True)
data1.drop(['考号','座号','考室','学籍号','考场','学籍班级'],axis=1,inplace=True)
data1['班级'] = data1['班级'].astype('str')
data1.head()
班级 | 姓名 | 语文 | 数学 | 外语 | 政治 | 历史 | 地理 | 生物 | 总分 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 2.1 | 蒋博文 | 126.0 | 126.0 | 128.0 | 91.0 | 82.0 | 98.0 | 84.0 | 735.0 |
1 | 2.2 | 刘悦 | 111.0 | 135.0 | 115.0 | 75.0 | 80.0 | 96.0 | 16.0 | 628.0 |
2 | 2.4 | 秦浩 | 108.0 | 116.0 | 102.0 | 64.0 | 78.0 | 75.0 | 53.0 | 596.0 |
3 | 2.1 | 曹月婷 | 107.0 | 133.0 | 113.0 | 83.0 | 73.0 | 96.0 | 60.0 | 665.0 |
4 | 2.4 | 刘金红 | 112.0 | 126.0 | 123.0 | 74.0 | 42.0 | 38.0 | 34.0 | 549.0 |
3.读取2020年月考成绩数据
data2 = pd.read_excel('2020月考.xlsx',skip=1)
data2.rename(columns={
'班级名称':'班级'},inplace=True)
data2.drop(['考号','座位号','考室','级名'],axis=1,inplace=True)
data2['班级'] = data2['班级'].astype('str')
data2.head()
班级 | 姓名 | 语文 | 数学 | 外语 | 物理 | 总分 | |
---|---|---|---|---|---|---|---|
0 | 2.4 | 陈泳奇 | 126 | 125 | 145.5 | 90 | 486.5 |
1 | 2.1 | 蒋博文 | 126 | 118 | 140.0 | 95 | 479.0 |
2 | 2.4 | 刘鑫 | 131 | 121 | 133.0 | 94 | 479.0 |
3 | 2.2 | 徐睿 | 130 | 113 | 138.5 | 91 | 472.5 |
4 | 2.6 | 刘威 | 124 | 122 | 130.0 | 97 | 473.0 |
4.读取2021年期末数据
data3 = pd.read_excel('2021期末.xlsx',sheet_name='成绩录入')
data3.rename(columns={
'班级名称':'班级'},inplace=True)
data3.drop(['年级','考号','化学','座位号','考室','班名次','级名次'],axis=1,inplace=True)
data3['班级'] = data3['班级'].astype('str')
data3.head()
班级 | 姓名 | 语文 | 数学 | 外语 | 物理 | 生物 | 政治 | 历史 | 地理 | 总分 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2.5 | 袁奇 | 81 | 74 | 54.5 | 61 | 47 | 64 | 60 | 39 | 480.5 |
1 | 2.1 | 何明娅 | 87 | 45 | 50.0 | 31 | 55 | 59 | 46 | 48 | 421.0 |
2 | 2.6 | 叶鑫 | 97 | 126 | 104.0 | 93 | 79 | 64 | 61 | 69 | 693.0 |
3 | 2.4 | 龙咏婷 | 101 | 91 | 118.0 | 78 | 79 | 66 | 62 | 64 | 659.0 |
4 | 2.2 | 张琬琪 | 84 | 87 | 42.5 | 19 | 43 | 56 | 30 | 39 | 400.5 |
5.按班级,求各科和总成绩平均
total_avg1 = data1.groupby('班级',as_index = False).agg({
'总分':np.mean,'语文':np.mean,'数学':np.mean,'外语':np.mean,'政治':np.mean,'历史':np.mean,'地理':np.mean,'生物':np.mean})
total_avg1
班级 | 总分 | 语文 | 数学 | 外语 | 政治 | 历史 | 地理 | 生物 | |
---|---|---|---|---|---|---|---|---|---|
0 | 2.1 | 466.230159 | 102.338710 | 96.112903 | 72.452381 | 72.306452 | 45.451613 | 54.000000 | 29.919355 |
1 | 2.2 | 463.311475 | 99.918033 | 92.131148 | 72.065574 | 68.262295 | 46.229508 | 55.377049 | 29.327869 |
2 | 2.3 | 492.482759 | 103.931034 | 87.155172 | 87.241379 | 65.982759 | 51.155172 | 61.862069 | 35.155172 |
3 | 2.4 | 471.983607 | 104.442623 | 87.442623 | 85.426230 | 63.786885 | 52.000000 | 46.819672 | 32.065574 |
4 | 2.5 | 462.800000 | 98.133333 | 94.566667 | 79.216667 | 62.766667 | 50.233333 | 46.633333 | 31.250000 |
5 | 2.6 | 415.983871 | 96.564516 | 88.870968 | 63.580645 | 57.000000 | 42.354839 | 38.225806 | 29.387097 |
total_avg2 = data2.groupby('班级',as_index = False).agg({
'语文':np.mean,'数学':np.mean,'外语':np.mean,'物理':np.mean})
# total_avg2['班级'] = total_avg2['班级'].astype('str')
total_avg3 = data3.groupby('班级',as_index = False).agg({
'总分':np.mean,'语文':np.mean,'数学':np.mean,'外语':np.mean,'物理':np.mean,'政治':np.mean,'历史':np.mean,'地理':np.mean,'生物':np.mean})
6.对平均分进行排序
total_avg3.sort_values(by=['总分'