一 数据清洗及特征处理
原始数据通常有缺失值及异常点等,因此需要先进行清洗才能使用。
任务一:缺失值观察
任务二:对缺失值进行处理
df.fillna({'Age':0})
df # 本身是没有变的
df.loc[df['Age'].isnull(),'Age'] = 0 # Age哪一行是空就补哪一行的Age为0
df.isnull().sum()
重复值观察与处理
任务一:查看重复值
表示没有重复值
任务二:对重复值进行处理
特征观察与处理
我们对特征进行一下观察,可以把特征大概分为两大类:
数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征,一般可以直接用于模型训练。
文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征,往往需要转化成数值型才能用于建模分析。
任务一:对年龄进行分箱处理
pandas.cut
分箱的好处是可以处理个别异常值。
#将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
#将连续变量Age划分为(0,5] (5,15] (15,30] (30,50] (50,80]五个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],right= False, labels = [1,2,3,4,5])
#将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
df1['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],duplicates = 'drop',labels = [1,2,3,4])
任务二:对文本变量进行转换
#将类别文本转换为one-hot编码
for feat in ["Age", "Embarked"]:
x = pd.get_dummies(df[feat], prefix=feat)
df = pd.concat([df, x], axis=1)
#concat 合成
知识点:
One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
实现方式:手动One Hot编码,sklearn,keras。
#从纯文本Name特征里提取出Titles的特征
pandas.Series.str.extract
df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False)
此处复习正则表达式