1、归一化数据
import numpy as np
x = np.random.randint(0,100,size=100)# 创建100个随机数
# 最值归一化(向量)# 最值归一化公式,映射到0,1之间
X1=(x - np.min(x)) / (np.max(x) - np.min(x))
# 最值归一化(矩阵)# 0~100范围内的50*2的矩阵
X = np.random.randint(0,100,(50,2))
X = np.array(X , dtype=float)
# 最值归一化公式,对于每一个维度(列方向)进行归一化。
# X[:,0]第一列,第一个特征
X[:,0] = (X[:,0] - np.min(X[:,0])) / (np.max(X[:,0]) - np.min(X[:,0]))
# X[:,1]第二列,第二个特征
X[:,1] = (X[:,1] - np.min(X[:,1])) / (np.max(X[:,1]) - np.min(X[:,1]))
# 如果有n个特征,可以写个循环:
for i in range(0,2):
X[:,i] = (X[:,i]-np.min(X[:,i])) / (np.max(X[:,i] - np.min(X[:,i])))
####--------均值方差归一化实现------------------
X2 = np.array(np.random.randint(0,100,(50,2)),dtype=float)
# 套用公式,对每一列做均值方差归一化
for i in range(0,2):
X2[:,i]=(X2[:,i]-np.mean(X2[:,i])) / np.std(X2[:,i])
2、数据预处理
####-----------缺失值处理----------
检测与处理缺失值
# 代码 5-17 利用isnull或notnull找到缺失值
print('detail每个特征缺失的数目为:\n',detail.isnull().sum())
print('detail每个特征非缺失的数目为:\n',detail.notnull().sum())
detail = detail.fillna(-99) #fillna 替换法是指用一个特定的值替换缺失值
np.unique() #对数据进行去重
3、二值化与分段
3.1等距离分箱
import pandas as pd
df = pd.DataFrame([[22,1],[13,1],[33,1],[52,0],[16,0],[42,1],[53,1],[39,1],[26,0],[66,0]],columns=['age','Y'])
df['age_bin_2'] = pd.cut(df['age'],3) #新增一列存储等距划分的分箱特征
display(df)
3.2等频率分箱
import pandas as pd
df = pd.DataFrame([[22,1],[13,1],[33,1],[52,0],[16,0],[42,1],[53,1],[39,1],[26,0],[66,0]],columns=['age','Y'])
df['age_bin_1'] = pd.qcut(df['age'],3) #新增一列存储等频划分的分箱特征
display(df)
4、编码与哑变量
import pandas as pd
import numpy as np
detail = pd.read_csv('h:/program-python/chapter5/detail.csv',encoding = 'gbk')
data=detail.loc[:,'dishes_name'] ##抽取部分数据做演示
#-------------------------------------------
print('哑变量处理前的数据为:\n',data)
print('哑变量处理后的数据为:\n',pd.get_dummies(data))
x = pd.get_dummies(data)
#---------------将数据的值域分成具有相同宽度的区间
price = pd.cut(detail['amounts'],5)
print('离散化后5条记录售价分布为:\n' ,price.value_counts())