一、提出问题
泰坦尼克号是当时世界上体积最庞大、内部设施最豪华的客运轮船,有“永不沉没”的美誉 。然而不幸的是,在它的处女航中,泰坦尼克号便遭厄运。本文准备预测泰坦尼克号中乘客的生存概率。
二、理解数据
言归正传,首先登陆kaggle官网:
Titanic: Machine Learning from Disasterwww.kaggle.com该文中有项目的详细介绍,在这里可下载后面学习需要的数据:
![b92d332932fa4ed1e97adcecf88e16ae.png](https://i-blog.csdnimg.cn/blog_migrate/8c7f5b5b1484d745b1279320950eff1f.jpeg)
#导入处理数据包
![0dfee0ed25ae88b78925705d241d5885.png](https://i-blog.csdnimg.cn/blog_migrate/89ff050aa15a5b6a2327660d46de230d.png)
训练数据(train.csv,用于训练模型)总共891行×12列数据,含存活率Survived。
测试数据(test.csv,用于检验模型的准确性)总共418行×11列数据,较训练数据少了Survive
d列。
#合并数据集,方便同时对两个数据集进行清洗
![d8384daa0176f5b14b97425570363712.png](https://i-blog.csdnimg.cn/blog_migrate/52844358e3cae350fd3b5bb8cf452703.png)
数据中,各个英文指标含义如下:
![27d391c0b14cdaf83b88dbcabda6bc4b.png](https://i-blog.csdnimg.cn/blog_migrate/27008e9c0e175a5a7767fd9eb6564f40.jpeg)
print
![e85cf3b026fd74d224c86ca815d631ec.png](https://i-blog.csdnimg.cn/blog_migrate/29574e615cbcf34a2d552166abc9a4ea.png)
三、数据清洗
# 查看每一列的数据类型,和数据总数
![2934da06a5683f856d3007a5afeef220.png](https://i-blog.csdnimg.cn/blog_migrate/b991281c8f7ddfe2583d225ec38cfbab.jpeg)
我们发现数据总共有1309行。
其中数据类型列:年龄(Age)、船舱号(Cabin)里面有缺失数据:
(1)年龄(Age)里面数据总数是1046条,缺失了1309-1046=263条数据
(2)船票价格(Fare)里面数据总数是1308条,缺失了1条数据
字符串列:
(1)登船港口(Embarked)里面数据总数是1307,只缺失了2条数据,缺失比较少
(2)船舱号(Cabin)里面数据总数是295,缺失了1309-295=1014,缺失比较大
这为我们下一步数据清洗指明了方向,只有知道哪些数据缺失数据,我们才能有针对性的处理。
1、数据预处理
(1)缺失值处理
在前文理解数据阶段,我们发现数据总共有1309行。 其中数据类型列:年龄(Age)、船票价格(Fare)里面有缺失数据。 字符串列:登船港口(Embarked)、船舱号(Cabin)里面有缺失数据。
这为我们下一步数据清洗指明了方向。
缺失值如果是数值类型,用平均值取代(年龄、船票价格)
#年龄(Age)
![eb3bfb6e652bda8380f74c7f2afff644.png](https://i-blog.csdnimg.cn/blog_migrate/5a6bb3a576d79ba457a0bb04e567c437.jpeg)
缺失值如果是分类数据,用最常见的类别取代(登船港口、客舱等级)
#用最常见的登船港口S来取代
![1aeb6cb0163b4b90d504c9d36dec4319.png](https://i-blog.csdnimg.cn/blog_migrate/fcf79bde9f56214fa1c96fe6bcbdb577.jpeg)
#查看最终缺失值处理情况,记住生成情况(Survived)这里一列是我们的标签,用来做机器学习预测的,不需要处理这一列
![051f220f9d2cd4305285d5cdacd90c64.png](https://i-blog.csdnimg.cn/blog_migrate/42498ae55cdb74fb004670853170504b.jpeg)
2、特征提取
查看数据类型,分为3种数据类型:
(1)数值类型:
乘客编号(PassengerId),年龄(Age),船票价格(Fare),同代直系亲属人数(SibSp),不同代直系亲属人数(Parch)
(2)时间序列:无
(3)分类数据:
a、有直接类别的
乘客性别(Sex):男性male,女性female
登船港口(Embarked):出发地点S=英国南安普顿Southampton,途径地点1:C=法国 瑟堡市Cherbourg,出发地点2:Q=爱尔兰 昆士敦Queenstown
客舱等级(Pclass):1=1等舱,2=2等舱,3=3等舱
b、字符串类型:可能从这里面提取出特征来,也归到分类数据中
乘客姓名(Name)
客舱号(Cabin)
船票编号(Ticket)
性别处理
'''
![9aca42dec2309a4a8a72a3d0e20437a8.png](https://i-blog.csdnimg.cn/blog_migrate/85a13c90ddf4fc06211cb4f735c1595d.jpeg)
登船港口(Embarked)
'''
![8360717c357312f6c5ed4aaac72ddc56.png](https://i-blog.csdnimg.cn/blog_migrate/c230b6c222ba120860e1ab0c5255ff0e.jpeg)
客舱等级(Pclass)
'''
![8bdde89f9fcb11cd8ec0704a4838e47e.png](https://i-blog.csdnimg.cn/blog_migrate/06afd41034f371c83214503da577949c.jpeg)
(3)分类数据:字符串类型
字符串类型:可能从这里面提取出特征来,也归到分类数据中,这里数据有:乘客姓名(Name)、客舱号(Cabin)、船票编号(Ticket)
从姓名中提取头衔
'''
![f7ccc922f662089bc61a83cda13a3327.png](https://i-blog.csdnimg.cn/blog_migrate/eff587e6fdf278ac818ba0c49621a78c.png)
'''
![7675f86f864971a4e904244563059d04.png](https://i-blog.csdnimg.cn/blog_migrate/f2f768a53181d67309d4da857c2d4cf0.png)
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full
从客舱号中提取客舱类别
'''
![53e106da285c827ebd58f61a8adba1d5.png](https://i-blog.csdnimg.cn/blog_migrate/8d828ed8dfca0848572cfdee79680c14.png)
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full
建立家庭人数和家庭类别
#存放家庭信息
![2960b7092d8f090921abe4bf0c4ddcfd.png](https://i-blog.csdnimg.cn/blog_migrate/e376af9460b04e604a7a53a060d8c4a4.png)
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full
(1309, 33)
3、特征选择
相关系数法:计算各个特征的相关系数
#相关性矩阵
![c4112256247c81bb7c398fc3824de2f4.png](https://i-blog.csdnimg.cn/blog_migrate/be822f356372f16c8cf1eb3dc2f4aa98.jpeg)
![194263798cb4534e20adc9176f6e4fbf.png](https://i-blog.csdnimg.cn/blog_migrate/a0278e9781ca8f31bf93643ecd01113b.png)
根据各个特征与生成情况(Survived)的相关系数大小,我们选择了这几个特征作为模型的输入:头衔(前面所在的数据集titleDf)、客舱等级(pclassDf)、家庭大小(familyDf)、船票价格(Fare)、船舱号(cabinDf)、登船港口(embarkedDf)、性别(Sex)
#特征选择
(5,27)
四、数据建模
1、建立训练数据集和测试数据集
'''
![0c90422248be588728492ac5bbe92210.png](https://i-blog.csdnimg.cn/blog_migrate/3eb130cb1bbab358e9da28d21a360f14.png)
2、选择机器学习算法
本文采用逻辑回归法。
#第1步:导入算法
![385cf4fc9199c14e5fa9cd6aa336a267.png](https://i-blog.csdnimg.cn/blog_migrate/539f2cdac9680b08c603ab303bf7ce72.png)
# 分类问题,score得到的是模型的正确率
model.score(test_X , test_y )
0.84357541899441346
五、模型预测
#使用机器学习模型,对预测数据集中的生存情况进行预测
这样模型预测结果就输出到文件 titanic_pred.csv 中,可提交至Kaggle查看预测结果的准确率。
六、小结
1、解决问题前,先不急于动手,先想清楚问题的整体解决思路。
2、文中不尽详解之处,可对照《利用Python进行数据分析》第7章进行查看。
《利用Python进行数据分析·第2版》第1章 准备工作www.jianshu.com![17dacb82c971618b444d65fdc25551d1.png](https://i-blog.csdnimg.cn/blog_migrate/91642beb2b1b962a0e0f4dde9143708e.jpeg)
3、多思考,多复盘,多敲代码。