东大成贤资源库-数据挖掘技术与应用 实验一:数据预处理_熟悉数据挖掘数据预处理流程。 基于给定的数据集(csv)文件,完成下列数据处理。 1

62 阅读4分钟

基于给定的数据集(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

img img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化! 详情docs.qq.com/doc/DSmdCdUNwcEJDTXFK