数据预处理及数据准备
提到数据预处理,首先不得不考虑到pandas库,链接pandas
数据准备前置知识
数据准备(data preparation) 包括数据清理及数据变形,真实世界的数据是什么样子的?为什么数据清理和数据变形是数据处理流程的不可缺少的一部分呢?
进行数据处理,我们离不开一个重要的库:pandas
以及数据可视化库:matplotlib
pandas常用命令如下:
import pandas as pd
df=pd.read_csv('filename')#读取csv文件,并用df表示
df.to_csv('filename')#写入csv文件
df_1=pd.read_excel('filename')#读取excel文件
df_1.to_excel('filename')#写入excel文件
from sqlalchemy import create_engine
engine=create_engine('sqlite://foo.db')
df_2=pd.read_sql_table('tablename',engine)
df_2.to_sql('tablename',engine)#写入sql数据库
data=[a,b]
df=pd.DataFrame(data=data,columns=['name','age'])#构造 DataFrame数据格式
df.columns
df.info()
df.shape
df[df.name=='a']#筛选
df['age'].sum()
cumsum()
min()
max()
mean()
median()
matplotlib 常用命令如下
import matplot.pyplot as plt
plt.plot(x)
plt.show()
plt.scatter(x,y)
plt.show()
plt.hist(y,bin= )
plt.show()
plt.figure(figsize=)
plt.subplot(1,2,1)
plt.plot(z)
plt.title('')
机器学习库:
Scikit Learn
数据处理步骤
清洗,变形(Cleaning/Transformation)
整合(integration)
模型化和可视化(modeling/visualization)
其中,数据清洗的难点主要在于缺失值、外点、噪声和不一致数据(如数值2和low对应,不好判别)
数据变形的主要方法有归一化、聚集和离散
归一化:将数值转化成公共范围内的比列而不会扭曲差异
离散化:字如其意,将连续数值离散化
数据预处理实战
二、使用步骤
1.读入数据
import pandas as pd
# readinf the data
df = pd.read_csv("CombinedCyclePowerPlantDirty.csv")
# two samples,打印前两条信息
print("data samples")
print(df.head(2))
# columns and types
print("columns types")
print(df.dtypes)
print("Full Info")
print(df.info())#打印数据信息,数据格式等
df["AP"].hist()#或者plt.hist(df.['AP'])
plt.title("AP")
plt.show()
创建一个关于所有变量的分散矩阵
df = pd.read_csv("CombinedCyclePowerPlantDirty.csv")
# scatter matrix
pd.plotting.scatter_matrix(df)
看变量与变量之间的相关关系
print("AP")
df.AP.hist()
plt.show()
print("min ", df.AP.min())
print("max ", df.AP.max())
print("mean ", df.AP.mean())
df = df[df.AP > 0]
df = df[df.AP < 100000]
每一列的数据画图,并且筛选数据
import pandas as pd
import matplotlib.pyplot as plt
df.AT = df.AT.apply(lambda x: x.replace("o","0"))
df.AT = df.AT.apply(float)
df.AT.hist()
替换掉不合格的数据
# PE AT
plt.scatter(df.AT,df.PE)
plt.title("PE, vs AT")
plt.show()
# PE V
plt.scatter(df.V,df.PE)
plt.title("PE, vs V")
plt.show()
比较值
datasets = {}
for name in df.TCN.unique():
datasets[name] = df[df.TCN == name]
plt.scatter(datasets[name].AT, datasets[name].PE, label=name)
plt.legend()
plt.show()
# Daniel Smithson had his data in F
def corrector(row):
if row["TCN"] == "Daniel Smithson":
return (row["AT"]-32)*5/9
else:
return row["AT"]
df.AT = df.apply(corrector, axis=1)
datasets = {}
for name in df.TCN.unique():
datasets[name] = df[df.TCN == name]
plt.scatter(datasets[name].AT, datasets[name].PE, label=name)
plt.legend()
plt.show()
按子集比较数据集之间的关系
from sklearn.ensemble import IsolationForest
clf = IsolationForest(
behaviour='new',
max_samples=100,
random_state=1,
contamination=0.01)
clf.fit(df[['AP', 'RH']])
df["anomaly"] = clf.predict(df[['AP', 'RH']])
color = ["r" if data==-1 else "b" for data in df["anomaly"]]
plt.scatter(df.AT,df.PE,c=color)
plt.show()
plt.scatter(df.V,df.PE,c=color)
plt.show()
pd.plotting.scatter_matrix(df,c=df.anomaly)
plt.legend()
plt.show()
# filter and show again
pd.plotting.scatter_matrix(df[df.anomaly!=-1])
plt.show()
用离群森林去除外点、异常值