1.数据预处理
首先用Excel内部的VLOOKUP函数,将每位学生的成绩匹配。这里最好还是用身份证号或者学籍号进行匹配,一方面准确,不易出现重名、字符编码之类的问题,另一方面有利于保护学生数据隐私。
像一些学生因特殊原因没有成绩,一种处理方法是寻找类似变化的成绩进行替代,另一种是,如果缺失成绩过多,就将整行成绩去掉。可以考虑中间缺失值,用前后均值替代。值也可以考虑用之前的均值和之后均值的差,来填充这个差值,这个前后均值,可以考虑选取之前与缺失数据比较接近的程度的均值。使用相似样本的均值添补缺失值,或者考虑用机器学习的方法预测缺失值。但是如刚才所说,缺失成绩过多,则应删掉,也就是如果一共6项成绩,有4项缺失,则必须要删掉了。接下来,我们尝试用这样一种顺序来做相应数据的清洗:删除缺失过多的数据--对缺失数据进行填充--导出新的Excel。
1. 删除缺失过多的数据 2. 对缺失数据进行填充
import pandas as pd
tablePath = '1化学数据清洗.xls'
#导入测试的xls数据,并DataFrame化
originalData = pd.DataFrame(pd.read_excel(tablePath)) #导入excel数据,并转化为DataFrame格式
#print(originalData)
delDoneData = originalData.dropna(axis=0,thresh=5) #每行至少保留5个数据,也就是除了班级、姓名之外,还得有3个非空值数据,否则将删除整行
sortData = delDoneData.sort_values(by=['化学2'],ascending=False) #按第2列进行排序
sortData = sortData.reset_index(drop = True) #重置索引
print(sortData)
sortData = sortData.interpolate(method='akima') #用method= 改变参数,进行插值
print(sortData)
sortData.to_excel('1.xls')
Pandas 中的插值,通过 interpolate() 方法完成,默认为线性插值,即 method='linear'。除此之外,还有{‘linear’, ‘time’, ‘index’, ‘values’, ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘barycentric’, ‘krogh’, ‘polynomial’, ‘spline’, ‘piecewise_polynomial’, ‘from_derivatives’, ‘pchip’, ‘akima’}等插值方法可供选择。那么接下来,我们就对这些方法进行逐一比较。比较的数据,集中在几个典型的缺失数据上。
从图中可以看出,第一个系列,liner、pchip、akima方法得出的数据比较符合规律。第二个是liner、quadratic较为符合。注意图4,数据匹配过高,与后面几次数据的符合度较差,所以要进行手动修正。
这种插值方法,比较简单基础,也是比较符合实际,但是还是要根据学生具体的情况,来确定其合理的数值。
最后我们得到了数据清洗之后的成绩总表,用于使用Excel和各种方法进行导入并分析。
3. 观察数据特点
从图中、以及标准差可以看出,第一次的数据与后面各项数据偏差太大,所以后面分析的时候,可以考虑删除。
至此,数据的预处理到此为止。如果是用于建立模型,并使用得到的结果进行预测,最好还是删除所有空值及0的行,这样预测得到的结果可能更具有代表性。
参考资料:
参考资料:https://blog.csdn.net/lwgkzl/article/details/80948548
https://blog.csdn.net/oxuzhenyi/article/details/77971330
接下来要做的,是用Excel的各种图表分析工具,对这些数据进行逐类分析,力图从基础指标得到一些能够帮助学生确定自身努力方向的结果。