阅读背景:

特征工程和数据预处理常用工具和方法

来源:互联网 
import pandas as pd

train_data = pd.read_csv("train.csv")

train_data.shape   #应该是给了property
(891, 12)

train_data.describe()

train_data["Age"].fillna(value=train_data["Age"].mean())

ter
from sklearn.preprocessing import Imputer

class
help(Imputer)   #这是个class

 #axis=0指定填充列,1指定填充行,初始化imputer类
imp = Imputer(missing_values='NaN',strategy='mean',axis=0) #axis=0指定填充列,1指定填充行,初始化imputer类

e = 
age = imp.fit_transform(train_data[["Age"]].values)  #fit_transform 两个步骤,fit读取数据计算,transform完成填充。如果只要拟合就用fit。

train_data.loc[:,"Age"] = train_data["Age"].fillna(value=train_data["Age"].mean()) #[x,y] x行,y列。:代表所有。把右边填充好的赋值给左边。

train_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            891 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

操作
#常见的工程操作

#数值型
#数值型

##幅度变换

)
#取对数 
import numpy as np
log_age = train_data["Age"].apply(lambda x: np.log(x))  #Applies function along input axis of DataFrame.DataFrame.apply(func, axis=0)

#最大最小值缩放  公式:xnorm = (x - xmin)/(xmax - xmin)  归一化
from sklearn.preprocessing import MinMaxScaler
mm_scaler = MinMaxScaler()
fare_mm = mm_scaler.fit_transform(train_data[["Fare"]])

#标准化缩放 standardscaler   xstand = (x - u)/σ  u平均值 σ标准差
from sklearn.preprocessing import StandardScaler
sds = StandardScaler()
fare_sds = sds.fit_transform(train_data[["Fare"]])

#1.统计值
max_age = train_data["Age"].max()
min_age = train_data["Age"].min()

#分位数  
age_quarter_1 = train_data["Age"].quantile(0.25)

age_quarter_1
22.0

eatures
#高次特征和交叉特征
from sklearn.preprocessing import PolynomialFeatures
​

pnf = PolynomialFeatures(degree = 2) #degree 多项式的阶数,一般默认是2。
age_pnf = pnf.fit_transform(train_data[["SibSp","Parch"]])

 六列
age_pnf   #[1,a,b,a^2,a*b,b^] 六列
array([[ 1.,  1.,  0.,  1.,  0.,  0.],
       [ 1.,  1.,  0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  0.],
       ..., 
       [ 1.,  1.,  2.,  1.,  2.,  4.],
       [ 1.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  0.]])

#离散化,分箱,分桶。把值平均分配。cut和qcut
#cut 等距切分,1-100岁等距切分4分就是0-25是一个箱,26-50是一个。然后年龄落入哪个箱就划分进去。
train_data.loc[:,"Fare_cut"] = pd.cut(train_data["Fare"],5)  #五个分割成四个区间。

train_data.head()
PassengerId	Survived	Pclass	Name	Sex	Age	SibSp	Parch	Ticket	Fare	Cabin	Embarked	Fare_cut
0	1	0	3	Braund, Mr. Owen Harris	male	22.0	1	0	A/5 21171	7.2500	NaN	S	(-0.512, 102.466]
1	2	1	1	Cumings, Mrs. John Bradley (Florence Briggs Th...	female	38.0	1	0	PC 17599	71.2833	C85	C	(-0.512, 102.466]
2	3	1	3	Heikkinen, Miss. Laina	female	26.0	0	0	STON/O2. 3101282	7.9250	NaN	S	(-0.512, 102.466]
3	4	1	1	Futrelle, Mrs. Jacques Heath (Lily May Peel)	female	35.0	1	0	113803	53.1000	C123	S	(-0.512, 102.466]
4	5	0	3	Allen, Mr. William Henry	male	35.0	0	0	373450	8.0500	NaN	S	(-0.512, 102.466]

train_data["Fare_cut"].unique()
[(-0.512, 102.466], (204.932, 307.398], (102.466, 204.932], (409.863, 512.329]]
Categories (4, object): [(-0.512, 102.466] < (102.466, 204.932] < (204.932, 307.398] < (409.863, 512.329]]

,5
#等频切分 qcut 按照频率去切分,让每个区间中的数目一样,频率一样。
train_data.loc[:,"Fare_qcut"] = pd.qcut(train_data["Fare"],5)
​

train_data["Fare_qcut"].unique()
[[0, 7.854], (39.688, 512.329], (7.854, 10.5], (10.5, 21.679], (21.679, 39.688]]
Categories (5, object): [[0, 7.854] < (7.854, 10.5] < (10.5, 21.679] < (21.679, 39.688] < (39.688, 512.329]]

#one hot encoding 独热向量编码  但是会稀释样本特征,造成数据量增大
embarked_ohe = pd.get_dummies(train_data[['Embarked']])

embarked_ohe.head()
C	Q	S
0	0	0	1
1	1	0	0
2	0	0	1
3	0	0	1
4	0	0	1

fareqcut_ohe = pd.get_dummies(train_data["Fare_qcut"])

fareqcut_ohe.head()
[0, 7.854]	(7.854, 10.5]	(10.5, 21.679]	(21.679, 39.688]	(39.688, 512.329]
0	1	0	0	0	0
1	0	0	0	0	1
2	0	1	0	0	0
3	0	0	0	0	1
4	0	1	0	0	0

 对日期处理
#时间型的特征处理 对日期处理

car_sales = pd.read_csv("")
import pandas as pd

train_data = pd.read_csv("



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: