一、预处理
1.打开csv打分表,并指出数据存在的问题,给出相应的解决方案;
打分表中,前五行数据为空白或不在统计范围内的数据,第六行数据为列名,因此需要从第七行开始进行存储。在列名中,存在许多同学所处分组、得分、提交标题和提交内容为空,还有一名同学专业和班级为空,因此在进行数据统计值分析前,需要把统计依照的列为空的项以及得分为空的项删除。
2.使用python从csv文件中提取数据,使用合适的数据结构进行保存,随后进行预处理;
# 将xlsx文件转化为csv文件
def xlsx_to_csv():
workbook = xlrd.open_workbook('C:/Users/admin/Desktop/数据挖掘/实验一/数据挖掘与分析-你说对就.xlsx')
table = workbook.sheet_by_index(0)
with codecs.open('数据挖掘与分析-你说对就.csv', 'w', encoding='gbk') as f:
write = csv.writer(f)
for row_num in range(table.nrows):
row_value = table.row_values(row_num)
write.writerow(row_value)
def loadDataSet():
xlsx_to_csv()
fp = open('数据挖掘与分析-你说对就.csv', 'r')
df = [line.strip().split(',') for line in fp.readlines()[6:]]
dataset = []
for d in df:
if len(d) > 9: # 不能出现过多空数据项
if d[8] != '' and d[9] != '':
dataset.append([d[8], d[9]])
return dataset
由于课程资料给的是xlsx文件,为了方便后续操作,编写xlsx_to_csv函数,将xlsx文件转为csv文件。随后编写loadDataset函数,通过判断分隔符“,”对数据进行分割,并从第七行数据开始获取,存放入dataframe,并创建事务集dataset,通过if语句判断每一行数据是否符合数据统计分析的要求,即相关数据是否为空,再将符合条件的数据append给dataset,最后得到的dataset就是参与数据统计的数据行的集合。
在将xlsx文件转为csv文件时,一开始使用的encoding是utf-8,转为csv之后用写字板打开,发现出现了大量乱码,网上查阅资料后将encoding换成了gbk,随后就没有乱码了。而在对数据进行选择时,一开始混淆了dataframe和list,并且没有理解如何判断dataframe的某一列是否为空,导致频频出现报错,最后通过for循环找到了每一行,再依次判断数据的可用性,符合要求则存入dataset。
3.针对各列评分属性,进行数据统计值分析,并说明和解释分析结果。
if __name__=='__main__':
dataSet = loadDataSet()
df = pd.DataFrame(dataSet, columns=["所处分组", "得分"])
df[['得分']] = df[['得分']].apply(pd.to_numeric)
df = df.groupby('所处分组')['得分'].mean().sort_values()
df.to_csv('你说对就队.csv')
print(df)
为了有效地进行数据统计值分析,通过调用loadDataset函数获取想要的列存入事务集dataSet,随后将dataSet存入dataframe便于之后的操作,同时根据loadDataset中获取的列为数据设置列名。然后,调用groupby函数来为数据根据设置的列名进行分组,再调用mean函数根据设置的列名对每一组取平均值。此处根据“所处分组”进行分组,求出每一组的得分均值。最后根据求出的均值进行排序,导出为csv文件并进行结果的打印。
调用groupby函数与mean函数时,是根据列名来进行的,而先前导出的dataSet并没有设置列名,因此需要在转为dataframe时设置列名,方便数据统计值分析。在尝试运行后发现存在报错,和同学交流探讨后发现是“得分”的数据类型为文本而非数值,无法对其求平均值,因此补充了一条df[['得分']].apply(pd.to_numeric)语句,将“得分”的数据类型转为数值,再运行就成功求出平均值了。
我分别根据所处分组、专业、院系这三项进行分组并求得分的平均值,并进行升序排列。从按“所处分组”进行分组的结果图中可以看出,第六组打分最高,为96分,第20组打分最低,为79分,分数跨度较大,但普遍打分在90分及以上。从按“专业”进行分组的结果图中可以看出,交通运输(汽车运用工程)(中美合作)这一专业的同学打分最高,为96分,而数据科学与大数据技术的同学打分最低,平均分约为90分,平均分都在90分以上。从按“院系”进行分组的结果图中可以看出,每个院系打分的平均分都在90分至94分之间。通过以上三组数据可以看出,大部分同学对该组的汇报认可度较高,仅有第20组和第3组同学较为不满意,可以询问该两组同学相关改善建议。