2019-11-24

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())

你可能感兴趣的:(2019-11-24)