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