资源库-数据挖掘技术与应用 实验一:数据预处理

 

【实验名称】

 数据挖掘之数据预处理

【实验目的】

熟悉数据挖掘数据预处理流程。

基于给定的数据集(csv)文件,完成下列数据处理。

1、判断第一列(Id)是否有缺失值:如果有,则补全。

2、判断是否有重复记录:如果有,则删除至唯一。

3、计算成绩平均值 ,作为新一列加入原数据库框中。

4、寻找平均分最高的纪录。

5、统计每个科目大于等于60分的人数。

【实验内容】

  1. 程序清单
import pandas as pd
import numpy as np

# 读入文件,存放在字典data里
data = pd.read_csv("D:\\Desktop\\data1.csv")

# 填入Id列空缺的值
for i in range(1,len(data)):
    if pd.isnull(data['Id'][i]):
        data['Id'][i]=i+1

# Id属性列去重,保留重复时第一个值,默认将原来的东西覆盖
data.drop_duplicates(subset=['Id'],keep='first',inplace=True)

# 如果字典内有表格是NaN,把他替换为0
for (name,value) in data.items():
    for i in range(1,len(data[name])): #对于name列的所有单元格
        if pd.isnull(data[name][i]):
            data[name][i]=0

# 为数据增加一个字段Average, 默认赋值为对每一行第1列(Id是第0列)以后所有数据取平均值,对行执行这个操作
# 关于axis:Keep in mind that axis=1 in mean(axis=1) is used to calculate the mean across each row.
# If you used axis=0 instead, the mean would be calculated across each column.
data = data.assign(Average = np.mean(data.iloc[:, 1:], axis=1))
# print(data)

# 将每一行Average的值的精度缩小到16位浮点数
data['Average'] = data['Average'].astype("float16")

# 按照 Average降序排序,覆盖以前的东西
data.sort_values("Average",ascending=False,inplace=True)
print(data)

# 降序排序后越靠前的行值就越大。data.iloc[x,y]代表data字典内第x行第y列(第y个属性)
# 这里的意思是在整个data范围内从第一个(降序,最大的)开始搜,搜到不对的了就停下
for i in range(len(data)):
    if data.iloc[i, -1] != data.iloc[0,-1]:
        break
    else:
        print(data.iloc[i,:])

# range(1,4)实际上就是1,2,3,对应语文数学英语三个列,cnt用户计数其中大于60的学生个数
for i in range(1,4):
    cnt = 0
    for j in range(len(data)):
        if data.iloc[j,i]>=60:
            cnt += 1
    print(cnt)
# 将我们处理完的data输出
data.to_csv("E:\\private\\实验报告\\数据挖掘\\230905-1\\data1.csv")
2.截图:

【实验体会】

我从这次实验中学到了:用pandas库读取csv文件作为一个python数据对象,与将其逆向至一个csv文件,用pd.isnull()方法判断是否为空值;用DataFrame对象自带的drop_duplicates()对一列数据去重,为数据通过assign的方式添加属性列并指定初始值。更改数据类型,对数据排序。以及通过iloc方法通过下标的形式切分数据表。

收获良多、感触颇丰!

以下是原始的data1.csv表:

IdChineseMathEnglish
1667057
2677159
3687260
4707362
5717463
6727564
7737565
8737667
9747768
10757769
11767870
12767871
13777972
14787973
15787974
16787975
17797975
18797976
19797977
20797977
21797978
797978
23797879
24797879
25797779
797779
27787679
28787679
29777579
307479
31767379
32757279
33747178
737078
35736977
36726877
37716776
38706676
39686575
40676374
676374
42656172
43645971
44625870
45625870
46605568
585467
48575266
49565165
50544963

以下是处理完的data1.csv表:

IdChineseMathEnglishAverage
2179797878.7
2479787978.7
2379787978.7
2279797878.7
1979797778.3
2579777978.3
2079797778.3
2679777978.3
1879797678
1779797577.7
2778767977.7
2878767977.7
1678797577.3
1578797477
2977757977
1478797376.7
1377797276
3176737976
3275727975.3
1276787175
1176787074.7
3374717874.3
3473707873.7
1075776973.7
3573697773
974776873
3672687772.3
873766772
3771677671.3
773756571
3870667670.7
672756470.3
3968657569.3
571746369.3
470736268.3
4067637468
4167637468
368726066.7
4265617266
267715965.7
4364597164.7
166705764.3
4462587063.34
4562587063.34
4660556861
4758546759.66
4857526658.34
4956516557.34
5054496355.34
300747951
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值