数据预处理
Data cleaning
数据缺失填充(固定值、均值、上下数据)
import pandas as pd
a = pd.read_csv('path', index_col='Date')
# print(a) 文件缺失值在读取a中显示NaN
# a.isnull() 缺失为true
a.dropna(how='all') # how整行(列)为null时才删除 默认删除单个元素为空的行
a.fillna(a.mean(), inplace=True) # inplace是否更改原始的数据 均值填充
a.fillna(method='ffill') # 上一个非缺失值fill f下一个填充 主义数据位置是否在第一行或者最后
数据异常
import pandas as pd
a = pd.read_csv('path', index_col='Date')
# print(a) 文件缺失值在读取a中显示NaN
# a.isnull() 缺失为true
a.dropna(how='all') # how整行(列)为null时才删除 默认删除单个元素为空的行
a.fillna(a.mean(), inplace=True) # inplace是否更改原始的数据 均值填充
# a.fillna(method='ffill') # 上一个非缺失值fill f下一个填充 主义数据位置是否在第一行或者最后
a.describe() # 集中对数据的行列个概率参数进行计算(average、std、min、mid、count、max)
# a.loc['index'] = [data] 加入异常数据
# a.iloc[:, 0:4] a.drop['',axis=1].boxplot() 异常检测的公式可以自己实现或者修改
a[abs(a-a.mean()) > 3*a.std()].dropna(how='all') # 3sigma原则
Data integration
Data transformation
常用方式:规范化、连续属性二值化、特征二值化
规范化的常用方法:最值规范、z-zero规范化、小数定规范化
import pandas as pd
from sklearn.datasets import load_boston
boston = datasets.load_boston()
boston.feature_names
boston.target # 必要的声明(Flankly speaking I'don't know that's why)
boston_df = pd.DataFrame(boston.data[:, 4:7]) # 切片处理
boston_df.columns = boston.feature_names[4:7]
# min-max :x'= (x-min)/(max-min) 个人感觉类似归一化 通过比列大小体现数据的差异
from sklearn import preprocessing
preprocessing.minmax_scale(boston_df)
# z-zero:x'=(x-average(x))/std
b = (boston_df-boston_df.mean())/boston_df.std() # 自定义
preprocessing.scale(boston_df)
# 小数定标规范化
c = boston_df/10**np.ceil(np.log10(boston_df.abs().max())) # ceil取整
import pandas as pd
boston = datasets.load_boston()
pd.cut(boston.AGE, 5, labels=range(5)) # 等宽法(区间分割)
pd.qcut(boston.AGE, 5, labels=range(5)) # 等频法(数据数量分割)
# 特征二值化(多分类问题转换成二分类问题)
from sklearn.preprocessing import Binarizer
X = boston.target.reshape(-1, 1) # data矩阵的转置
Binarizer(threshold=20.0).fit_transform(X)
Data exploration
from sklearn import datasets
iris = datasets.load_iris()
import pandas as pd
iris_df = pd.DataFrame(iris.data)
# print(iris.data)
iris_df.columns = iris.feature_names
# print(iris_df.columns)
iris_df['target'] = iris.target
iris_df.target.astype(float)
# print(iris_df.target)
iris_df.iloc[:, 0]
import matplotlib.pyplot as plt
plt.hist(iris_df.iloc[:, 0], 30, color='g') # 等宽分箱
plt.show()
import scipy
c = scipy.stats.normaltest(iris_df.iloc[:, 0]) #数据分布可能多种情况用相应的函数进行验证即可
# NormaltestResult(statistic=5.735584236235733, pvalue=0.05682424941067306)
print(c)
iris_df.target.value_counts().plot(kind='pie')
统计量分析:均值、中位数、标准差、四分位距(体现数据的变异程度)
iris_df.iloc[:, 0].mean()
iris_df.iloc[:, 0].median()
iris_df.iloc[:, 0].std()
iris_df.iloc[:, 0].quantile()
iris_df.iloc[:, 0].quantile([0.75]).loc[0.75] - iris_df.iloc[:, 0].quantile([0.25, 0.75]).loc[0.25]
#四合一
iris_df.iloc[:, 0].describe()