数据分析系列 之python中数据探索与预处理

1 概述
1.1 数据探索
检查数据错误,了解数据分布特征和内在规律
1.2 数据预处理
数据清洗 Data cleaning
数据集成 Data integration
数据变换 Data transformation
数据规约 Data reduction

2 数据清洗
2.1 缺失值处理
删除
填充:固定值、均值、中位数、上下数据、插值函数、最可能的值(回归分析填充)
举例:DataFrame缺失值处理

x = pd.read_csv('A.csv',index_col='Date')
#检测空值
x.isnull()
#暴力处理,直接删除空数据,all代表全部为null才删除,默认是只要有空值就删除
x.dropna(how='all')
x.dropna()
#数据填充
x.fillna(x.mean(),inplace=True)
#上一个值填充
x.fillna(method='ffill')
#下一个值填充
x.fillna(method='bfill')

2.2 异常值处理
观察异常值:简单统计、绘图、基于密度聚类等方法
使用方法:describe()、boxplot()等
处理:同缺值填充、局部均值

x = pd.read_csv('A.csv',index_col='Date')
x.fillna(x.mean(),inplace=True)
#可使用一些方法观察
x.describe()
#绘制箱型图前删除不在一个数量级的数据
x.iloc[:,0:4]
#箱型图异常值判断:按照1/4位置距离判断
x.drop('Volume',axis=1).boxplot()
#自定义规则,3c原则,即数据在[u-3c,u+3c]之间,代表均值与标准差的关系
x[abs(x-x.mean())>3*x.std()].dropna(how='all')

3 数据变换
3.1 介绍
把数据变成合适的形式,常见方式有规范化、连续属性离散化和特征二值化
3.2 数据规范化(归一化)
常见方法:最小-最大规范化、z-score规范化、小数定标规范化

import pandas as pd
df=pd.DataFrame(A.data[:,3:6])
df.columns=A.feature_names[3:6]
#最小-最大规范化,支持矢量运算
(df-df.min())/(df.max()-df.min())

#使用sklearn中的preprocessing模块
from sklearn import preprocessing
preprocessing.minmax_scale(df)

#z-score规范化:结果=(数值-均值)/标准差,处理后数据的均值为0,标准差为1
(df-df.mean())/df.std()

#使用sklearn中的preprocessing模块
from sklearn import preprocessing
preprocessing.scale(df)

#小数定标规范化:常见落在[-1,1]区间,通过移动小数点的位数实现,移动位数取决于属性绝对值的最大值的位数
#ceil向上取整
import numpy as np
df/10**np.ceil(np.log10(df.abs().max()))

3.3 连续属性离散化
常见方法:分箱法(等宽法、等频法)、聚类

import pandas as pd
#等宽法,5个箱子,标签为0-4
pd.cut(df.AGE,5,label=range(5))
#等频法
pd.qcut(df.AGE,5,label=range(5))

3.4 特征二值化
将多分类问题—>二分类问题

#使用sklearn中的preprocessing模块
from sklearn import preprocessing
#转换维度
x=boston.target.reshape(-1,1)
Binarizer(threshold=20.0).fit_transform(x)

4 数据规约
4.1 介绍
缓解维数灾难,获得一个比原数据集小的多的规约表示
常用方法:
属性规约:向前选择、向后删除、决策树、PCA
数值规约:有参方法(回归等)、无参法(直方图、聚类、抽样等)
4.2 PCA

from sklearn.decomposition import PCA
x=preprocessing.scale(df)
#n_components保留的特征个数,mle为自动选择
pca=PCA(n_components=3)
pca.fit(x)
#返回:各个成分方差百分比即变量的方差贡献率
pca.explained_variance_ratio_

4.3 直方图
用分箱表示数据分布,每个箱子代表一个属性-频率对
与条形图有本质区别

import numpy as np
import matplotlib.pyplot as plt
data=np.random.randint(1,10,50)
#生成直方图,比如1出现5次,则y轴就是5
plt.hist(data)

#基于三个点把区间分成两个,一个是[1,5),另外一个是[5,9]
bins=np.linspace(data.min(),data.max(),3,endpoint=True)
#分成了两个箱子展示
plt.hist(data,bins=bins,rwidth=0.95,edgecolor='k')

4.4 抽样
随机抽样(放回和不放回)、聚类抽样和分层抽样

from sklearn import datasets
import pandas as pd
iris=datasets.load_iris()
iris_df=pd.DataFrame(iris.data)
iris_df.columns=iris.feature_names
#抽样函数,抽样个数、百分比
iris_df.sample(n=10)
iris_df.sample(frac=0.2)
#放回抽样
iris_df.sample(n=15,replace=True)

iris_df['target']=iris.target
#先选择属性为0,然后同随机抽样做法
A=iris_df[iris_df.target==0].sample(frac=0.2)
#先选择属性为2,然后同随机抽样做法
B=iris_df[iris_df.target==2].sample(frac=0.1)
#将A、B结果合并
A.append(B)

参考资料:
https://www.icourse163.org/learn/NJU-1001571005?tid=1463102441&from=study#/learn/content?type=detail&id=1240380190&cid=1261816421&replay=true 用python玩转数据

你可能感兴趣的:(数据分析,python,数据分析,数据清洗,数据变换,数据规约)