学生成绩分析之成绩的预处理 python3 pandas 学生成绩汇总到一张表

    在进行数据分析之前,会有许多的成绩表,格式也颇为混乱,为了研究方便,可以将学生成绩统一到一张表上。我们用的学生各个时期的数据表格式如下图:

学生成绩分析之成绩的预处理 python3 pandas 学生成绩汇总到一张表_第1张图片

且有许多的这样的表格,以便分析:

学生成绩分析之成绩的预处理 python3 pandas 学生成绩汇总到一张表_第2张图片

    

而原始的学生成绩表如下:(excel文件,扩展名为xls,且不带宏,免得后期处理麻烦)

学生成绩分析之成绩的预处理 python3 pandas 学生成绩汇总到一张表_第3张图片

      将各个成绩的xls文件,加到这个原始表中,且要将成绩为0的行删掉,这样的目的是减少无效数据的干扰,另一种处理方式是取平均值,这里因为主要是针对个体数据进行分析,所以还是删掉。需要用到的库:numpy,pandas,xlwt,xlrd等。代码及解释如下:

# -*- coding: utf-8 -*-
import os
import pandas as pd
excelPath = '15李蕾成绩'   #构建所有文件路径,所有原始成绩文件均在这里
theTablePath = '成绩测试李蕾15入学.xls'        #数据总表模板文件,所有数据都往这里添加
name = '姓名'                     #以姓名为唯一标识(索引),这里其实最好是用学号,因为学号唯一,姓名可能不唯一

def toAll(bigPath,smallPath,name):

    aTable = pd.DataFrame(pd.read_excel(bigPath))   #将数据总表模板 加载
    bTable = pd.DataFrame(pd.read_excel(smallPath,sheet_name=0)) #将要加入的小表格加载
    if name in bTable.columns:    #如果存在姓名列,再加入,因为mac下有可能有.DS文件
        print('存在列 姓名')
        result = pd.merge(aTable, bTable, on=[name], how='left')   #按着姓名对应的方式 将小表 加入 总表,但以总表为准
        result.dropna(axis=0, how='any', inplace=True) #值为0则删除行 axis=1则是删除列,any是只要有空值就删除,而all则是全部为空再删除,True是在原数据集上操作,False是返回新的数据集
        result.to_excel(theTablePath)      #将新的pandas数据集,返回为待分析的Excel文件
        print(aTable.shape)    #用于监控是否正常加入
        print(result.shape)

    return

for filename in os.listdir(excelPath): #读取文件名称
    targetPath = excelPath + '/'+ filename #构造文件夹内每一个文件的绝对路径,mac下是/,win下注意是\
    print(targetPath)
    toAll(theTablePath,targetPath,name) #执行合并命令


        执行命令之后,最终得到的数据集,如下图所示:

学生成绩分析之成绩的预处理 python3 pandas 学生成绩汇总到一张表_第4张图片

        


        接下来,首先要明确现在主流的成绩分析方法,并归纳总结。然后指出其不科学或不实用不合理的地方,并加以分析。最后发表改进的分析方法,并阐明原理,和分析结果。将两种分析方法进行对比(表格),并阐明新的分析方法的合理性,最终得出翻转课堂对于学生成绩影响的结论。

你可能感兴趣的:(Python)