Python系列第一节讲了python基本数据结构:
python系列第二节讲了python文件处理:
Python系列第三节讲了python函数:
本文是Python系列第四节,想从数据处理的角度简要介绍一些方法:无量纲化(数据规范化)
最大最小【0,1】归一化
标准化(也叫Z-score standardization,均值为0方差为1)(对列向量处理)
Normalizer,将同一行数 据的不同特征进行规范化,这样一个数据的不同特征具有相同的量纲
对定量特征二值化(对列向量处理)
对定性特征哑编码(对列向量处理)
缺失值处理
多项式变换(对行向量处理)
Box-Cox变换(对因变量处理)
接下来以 sklearn中的IRIS(鸢尾花)数据集来对特征处理功能进行说明:
from sklearn.datasets import load_iris
#导入IRIS数据集
iris = load_iris()
#特征矩阵
iris.data
#目标向量
iris.target
无量纲化(数据规范化)
from sklearn.preprocessing import StandardScaler
#标准化,返回值为标准化后的数据
StandardScaler().fit_transform(iris.data)
# --- 例子就是如下,他是对列也就是同一特征下进行缩放,而不是对一个数据的不同特征之间(行)进行缩放 --
from sklearn.preprocessing import StandardScaler
import numpy as np
data = np.array([[1,2],[3,4],[5,6]]).reshape(3,2)
print(data)
print (np.mean(data,axis=0)) #计算每一列均值
print (np.std(data,axis=0)) # 计算每一列标准差
#规范化处理
print(StandardScaler().fit_transform(data))
最大最小【0,1】归一化
# 最大最小【0,1】归一化
import numpy as np
import pandas as pd
#方法一
def autoNorm(dataSet):
norm_data=(dataSet-dataSet.min(axis=0))/(dataSet.max(axis=0)-dataSet.min(axis=0))
return norm_data
train_data=np.arange(16).reshape(4,4)
print(autoNorm(train_data))
#Python自带的【0,1】归一化
from sklearn import preprocessing
import numpy as np
# 初始化数据,每一行表示一个样本,每一列表示一个特征
x = np.array([[ 0., -3., 1.],
[ 3., 1., 2.],
[ 0., 1., -1.]])
# 将数据进行 [0,1] 规范化
min_max_scaler = preprocessing.MinMaxScaler()
minmax_x = min_max_scaler.fit_transform(x)
print (minmax_x)
标准化(也叫Z-score standardization,均值为0方差为1)(对列向量处理)
def autoNorm(dataSet):
norm_data=(dataSet-dataSet.mean(axis=0))/dataSet.std(axis=0)
return norm_data
train_data=np.arange(16).reshape(4,4)
print(autoNorm(train_data))
from sklearn import preprocessing
import numpy as np
# 初始化数据
x = np.array([[ 0., -3., 1.],
[ 3., 1., 2.],
[ 0., 1., -1.]])
# 将数据进行 Z-Score 规范化
scaled_x = preprocessing.scale(x)
print (scaled_x)
Normalizer,将同一行数 据的不同特征进行规范化,这样一个数据的不同特征具有相同的量纲
from sklearn.preprocessing import Normalizer
#归一化,返回值为归一化后的数据
Normalizer().fit_transform(iris.data)
from sklearn.preprocessing import Normalizer
import math
data = np.array([[1,2],[3,4],[5,6]]).reshape(3,2)
print(data)
print (data[0][0]/math.sqrt((data[0][0])**2 + (data[0][1])**2)) # 计算第一个元素L2正则化后的值
# 规范化
Normalizer().fit_transform(data)
对定量特征二值化(对列向量处理)
'''
定性与定量区别 定性:博主很胖,博主很瘦
定量:博主有80kg,博主有60kg
'''
from sklearn.preprocessing import Binarizer
#二值化,阈值设置为3,返回值为二值化后的数据 ;>3显示为1,否则为0
print(iris.data)
Binarizer(threshold=3).fit_transform(iris.data)
对定性特征哑编码(对列向量处理)
from sklearn.preprocessing import OneHotEncoder
#哑编码,对IRIS数据集的目标值,返回值为哑编码后的数据
print(OneHotEncoder().fit_transform(iris.target.reshape((-1,1))))
#
import numpy as np
import pandas as pd
data=pd.read_excel("C://Users//baihua//Desktop//1.xlsx")
data.head()
ori=pd.Categorical(data.朝向)
print(ori)
print(ori.codes)
缺失值处理
import numpy as np
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='mean', axis=0) # 使用特征的均值进行填充,其余还有 使用众数填充等,只需要把mean改成median即可
data = np.array([np.nan, 2, 6, np.nan, 7, 6]).reshape(3,2)
print(data)
print (imp.fit_transform(data))
多项式变换(对行向量处理)
'''
在多元回归分析中,当特征不满足线性,可以多特征进行多项式变换
'''
from sklearn.preprocessing import PolynomialFeatures
#多项式转换
#参数degree为度,默认值为2
PolynomialFeatures().fit_transform(iris.data)
from numpy import log1p
from sklearn.preprocessing import FunctionTransformer
#自定义转换函数为对数函数的数据变换
#第一个参数是单变元函数
FunctionTransformer(log1p).fit_transform(iris.data)
Box-Cox变换(对因变量处理)
'''
改变数据特征分布:特征变换(对列向量展开)对y进行box-cox变换
正态分布的偏度为0;
偏度为负,即负偏离(左偏离)
'''
import pandas as pd
test=pd.DataFrame({'A':[1,2,3,4],'B':[2,4,5,2]})
test.skew(axis=0)
test['c']=[4,5,6,7]
print(test)
test.skew(axis=0)
from scipy.stats import boxcox_normmax
from scipy.special import boxcox1p
lambda_2=boxcox_normmax(test.B)
print(lambda_2)
test.B=boxcox1p(test.B,lambda_2)
print(test)
print(test.skew(axis=0))
参考文献:
最后,欢迎关注我的【数据分析】专栏,这里已经汇聚了将近1000名爱好数据分析的小伙伴了,跟着他们一起学习吧!数据分析