动手学数据分析-02 第二章(1)

本文通过泰坦尼克数据集实战,介绍了数据清洗过程,包括缺失值填充(如Age用平均值,Cabin为'Unknow',Embarked用众数),文本特征的编码(如LabelEncoder处理Sex、Cabin和Ticket),以及特征离散化(如年龄分箱)。
摘要由CSDN通过智能技术生成

内容说明

这门课程得主要目的是通过真实的数据,以实战的方式了解数据分析的流程和熟悉数据分析python的基本操作。知道了课程的目的之后,我们接下来我们要正式的开始数据分析的实战教学,完成kaggle上泰坦尼克的任务,实战数据分析全流程。 这里有两份资料: 教材《Python for Data Analysis》和 baidu.com & google.com(善用搜索引擎)
学习地址:
https://github.com/datawhalechina/hands-on-data-analysis

本次博客的内容主要是对数据进行数据清洗

补充缺失值

查看缺失值

df.isnull().sum()

out

PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64

可以看到,缺失值出现的列为Age,Cabin以及Embarked三列。其中Cabin的缺失值最多。

而对于缺失值的处理,我们有两张方式,一种是直接丢弃,另外一种是进行填充,由于出现缺失值的行数较多,我们试着对表格进行填充

将Cabin为Nan的地方填充为‘Unknow’,将Age通过分组赋平均值的方法进行赋值,然后Embarked进行众数填充。

df.Cabin=df.Cabin.fillna('Unknow')
df['Age']=df.groupby(['Survived','Pclass'])['Age'].transform(lambda x: x.fillna(x.mean()))
df['Embarked']=df['Embarked'].fillna('S')
df.isnull().sum()

out

PassengerId    0
Survived       0
Pclass         0
Name           0
Sex            0
Age            0
SibSp          0
Parch          0
Ticket         0
Fare           0
Cabin          0
Embarked       0
dtype: int64

特征观察与处理

我们对特征进行一下观察,可以把特征大概分为两大类:
数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征
文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征,数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。文本型特征往往需要转换成数值型特征才能用于建模分析。

对年龄进行分箱(离散化)处理

res=pd.cut(
    df.Age,
    bins=[0,5,15,30,50,80],
    right=False,
    labels=['[0,5)' ,'[5,15)','[15,30)', '[30,50)' ,'[50,80)']
)
res.value_counts()

out

[15,30)    446
[30,50)    293
[50,80)     73
[0,5)       40
[5,15)      38
Name: Age, dtype: int64

对文本变量进行转换

利用sklearn包中的labelencoder进行标签编码,将文本信息映射到整数域上

from sklearn.preprocessing import LabelEncoder
for feat in ['Sex','Cabin', 'Ticket']:
    lbl = LabelEncoder()  
    label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique())))
    df[feat + "_labelEncode"] = df[feat].map(label_dict)
    df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))

df.head()

out

PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkedCabin_labelEncodeTicket_labelEncodeSex_labelEncode
0103Braund, Mr. Owen Harris12210A/5 211717.25UnknowS1475231
1211Cumings, Mrs. John Bradley (Florence Briggs Thayer)03810PC 1759971.2833C85C815960
2313Heikkinen, Miss. Laina02600STON/O2. 31012827.925UnknowS1476690
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)0351011380353.1C123S55490
4503Allen, Mr. William Henry135003734508.05UnknowS1474721

从纯文本Name特征里提取出Titles的特征

利用正则表达式匹配出name中的titles特征

df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False)
df['Title']

out

0        Mr
1       Mrs
2      Miss
3       Mrs
4        Mr
       ... 
886     Rev
887    Miss
888    Miss
889      Mr
890      Mr
Name: Title, Length: 891, dtype: object

总结

对数据集进行了缺失值的处理,同时对文本数据进行了标签编码,同时提取了一列新数据titles。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值