1.numpy库
2.pandas库
3.sklearn库
为什么要清理数据?因为任何一组大量的数据之中,肯定存在空缺值、噪声数据,而数据清理的重点就是将这两种数据全部给清楚掉。
空缺值在大多数时候数据并不总是完整的,例如:数据库表中,很多条记录的对应字段没有相应值,比如销售表中的顾客收入。而引起空值的原因有很多:
-
设备异常;
-
与其他已有数据不一致而被删除;
-
因为误解而没有被输入的数据;
-
在输入时,有些数据应为得不到重视而没有被输入;
-
对数据的改变没有进行日志记载。
空值一般要经过推断而补上。
一般代码格式:
#查看缺失值
import numpy as np
import pandas as pd
# 打开文件
train = pd.read_csv('', na_values=['#NAME?']) #文件存放地址
total = train.isnull().sum().sort_values(ascending=False)
print(total)#输出缺失值在每列中的个数
percent =(train.isnull().sum()/train.isnull().count()).sort_values(ascending=False)
print(percent)#输出每列缺失值在总缺失值当中的百分比
#处理确实值
#一般分为三种方式去修改
#使用出现次数最多的值填补
train['Insulin'] = train['Insulin'].fillna(100)
#使用中位数填补
train['SkinThickness'] = train['SkinThickness'].fillna(train['SkinThickness'].median())
train['BloodPressure'] = train['BloodPressure'].fillna(train['BloodPressure'].median())
#使用平均数填补
train['BMI'] = train['BMI'].fillna(train['BMI'].mean())
train['Glucose'] = train['Glucose'].fillna(train['Glucose'].mean())
total_after_process = train.isnull().sum().sort_values(ascending=False)
print(total_after_process)#再次输出缺失值在每列中的个数
percent_after_process =(train.isnull().sum()/train.isnull().count()).sort_values(ascending=False)
print(percent_after_process)#输再次出每列缺失值在总缺失值当中的百分比
噪声处理
噪声的处理方式如下:
-
忽略元组:当类标号缺少时通常这么做(假定挖掘任务设计分类或描述),当每个属性缺少值的百分比变化很大时,它的效果非常差;
-
人工填写空缺值:工作量大,可行性低;
-
使用一个全局变量填充空缺值:比如使用 unknown 或 -∞;
-
使用属性的平均值填充空缺值;
-
使用与给定元组属同一类的所有样本的平均值;
-
使用最可能的值填充空缺值:使用像 Bayesian 公式或判定树这样的基于推断的方法。
噪声数据
噪声指一个测量变量中的随机错误或偏差。下列是一些引起不正确属性值的原因:
-
数据收集工具的问题;
-
数据输入错误;
-
数据传输错误;
-
技术限制;
-
命名规则的不一致。
-
重复记录;
-
不完整的数据;
-
不一致的数据。
-
规则:异常值剔除;
-
分箱(binning):首先排序数据,并将他们分到等深的箱中然后可以按箱的平均值平滑、按箱中值平滑、按箱的边界平滑等等;
-
聚类:监测并且去除孤立点;
-
计算机和人工检查结合:计算机检测可疑数据,然后对它们进行人工判断;
-
回归:通过让数据适应回归函数来平滑数据。
import matplotlib.pyplot as plt
#噪声数据观察
plt.scatter(x=train['Age'], y=train['Pregnancies']) #绘制散点图
plt.xlabel('Age')
plt.show()
plt.ylabel('Pregnancies')
题解:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def student():
train = pd.read_csv('Task1/diabetes_null.csv', na_values=['#NAME?'])
train['Insulin'] = train['Insulin'].fillna(100)
train['SkinThickness'] = train['SkinThickness'].fillna(train['SkinThickness'].median())
train['BloodPressure'] = train['BloodPressure'].fillna(train['BloodPressure'].median())
train['BMI'] = train['BMI'].fillna(train['BMI'].mean())
train['Glucose'] = train['Glucose'].fillna(train['Glucose'].mean())
#********* Begin *********#
train.sort_values(by='Age', ascending=False)[:1]
train = train.drop((train[train['Age'] >= 80]).index)
plt.figure(figsize=(10, 10))
plt.scatter(x=train['Age'], y=train['Pregnancies'])
plt.savefig("Task1/img/T1.png")
plt.show()
#********* End *********#
第二关 数据集成-海纳百川
数据集成
数据集成指将多个数据源中的数据整合到一个一致的存储中。模式集成指整合不同数据源中的元数据,实体识别问题:匹配来自不同数据源的现实世界的实体,比如: A.cust-id = B.customer_no。
我们需要检测并解决数据值的冲突。对现实世界中的同一实体,来自不同数据源的属性值可能是不同的。可能的原因:不同的数据表示或不同的度量等等。
冗余数据处理集成多个数据库时,经常会出现冗余数据:
-
同一属性在不同的数据库中会有不同的字段名;
-
一个属性可以由另外一个表导出,如“年薪”。
仔细将多个数据源中的数据集成起来,能够减少或避免结果数据中的冗余与不一致性,从而可以提高挖掘的速度和质量。
题解:
import numpy as np
import pandas as pd
def student():
#********* Begin *********#
train = pd.read_csv('Task2/diabetes_null.csv', na_values=['#NAME?'])
another_train = pd.read_csv('Task2/diabetes_zero.csv', na_values=['#NAME?'])
merge_data=pd.concat([train,another_train])
print(merge_data.shape)
#********* End *********#
第三关 数据变换-同源共流
数据变换
常见的数据变换包括:特征二值化、特征归一化、连续特征变化,定性特征哑编码等。
下面简单介绍常用的数据变换:
-
平滑:去除数据中的噪声 (分箱、聚类、回归)
-
聚集:汇总,数据立方体的构建
-
数据概化:沿概念分层向上汇总
-
规范化:将数据按比例缩放,使之落入一个小的特定区间。最小-最大规范化、
z-score
规范化、小数定标规范化 -
属性构造:通过现有属性构造新的属性,并添加到属性集中;以增加对高维数据的结构的理解和精确度
题解:
import numpy as np
import pandas as pd
from sklearn.preprocessing import normalize,MinMaxScaler
def student():
train = pd.read_csv('Task3/diabetes_null.csv', na_values=['#NAME?'])
train['Insulin'] = train['Insulin'].fillna(100)
train['SkinThickness'] = train['SkinThickness'].fillna(train['SkinThickness'].median())
train['BloodPressure'] = train['BloodPressure'].fillna(train['BloodPressure'].median())
train['BMI'] = train['BMI'].fillna(train['BMI'].mean())
train['Glucose'] = train['Glucose'].fillna(train['Glucose'].mean())
#********* Begin *********#
data_normalized=normalize(train,axis=0)
print("z-score规范化:\n",data_normalized)
data_scaler=MinMaxScaler()
data_scaled=data_scaler.fit_transform(train)
print("\n最小-最大规范化:\n",data_scaled)
#********* End *********#
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)