数据挖掘与分析——关联规则模型

一、预处理

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组同学较为不满意,可以询问该两组同学相关改善建议。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱桃小叮当

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值