赞
踩
↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习
,不错过
Datawhale干货
作者:陈锴,中山大学,Datawhale成员
最近有很多读者留言,希望能有一个完整的数据分析项目练手,这几天收集了组织成员们的推荐。其中泰坦尼克号生存预测作为最经典的启蒙数据分析项目,对于初学者来说是应该是最合适的了,后面将分享更多进阶的数据分析项目。如果已经有基础了,推荐:
1.开源项目《动手学数据分析》:
https://github.com/datawhalechina/hands-on-data-analysis
https://mp.weixin.qq.com/s/-fzQIlZRig0hqSm7GeI_Bw
全文如下:
本文结合泰坦尼克号生存预测,从1.数据探索(数据可视化),2.数据预处理,3.模型训练,4.模型调参这四个步骤进行了完整的梳理:
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy92STluWWU5NGZzR3J6SVRicUdpYm83WEZ2cXpvMXE3eThpYmljaFRpY2ZObDZsRk5nbDdpYjF1TGRSdUFpYWcxWEM2bTlJZzlVeFliQWNTZlpyZTFjSUV0NDVjZy82NDA?x-oss-
process=image/format,png)
首先我们导入我们的训练数据和测试数据:
数据集包含train.csv和test.csv两个文件,在 Datawhale 公众号回复 数据集,可获取打包链接,也可以直接在kaggle官网上下载。
train_data = pd.read_csv("input/train.csv", index_col=0)
test_data = pd.read_csv("input/test.csv", index_col=0)
train_data.head()
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy92STluWWU5NGZzRnFwM1pON2ptM05ydEpxZUpycTBuTXRiSHhzZVpJa3dXcG5vR242WFl0VkpvQ0dvUktOWTMwaWJVcnM4WWJNTzJuSHRFcjZDUDBoSlEvNjQw?x-oss-
process=image/format,png)
train_data.describe()
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy92STluWWU5NGZzRnFwM1pON2ptM05ydEpxZUpycTBuTUYwYk9LbkdGd2FRZks3VXJFMlJ0enhXaEJtZ0V1RlVpY1hDbjY1Q0lsbWFLS1VtbEFrOW5NMEEvNjQw?x-oss-
process=image/format,png)
通过describe()函数我们可以简单地看出哪些是数值型数据哪些是字符型数据,对于字符型数据我们当然要转换成数值型数据来处理,比如可以转换成0-1编码的数值型,但需要注意的是,对于一些数值型数据却未必就不需要进一步的处理了,比如Pclass特征,从名字我们就可以看出这是标识仓位等级的特征,取值范围为[1,
2, 3],这个特征我们不应该简单地当作一个数值型数据放进分类模型中直接跑,应该把它转变为one-
hot编码,标识乘客不同的仓位,这一步我们将在数据预处理步骤完成。
我们再看看数据中值为null的数据,这是我们后面需要进一步处理的:
train_data.isnull().sum().sort_values(ascending=False).head(4)
显示结果为:
> Cabin 687 > Age 177 > Embarked 2 > Fare 0 > dtype: int64 > [/code] ## 1.2 数据可视化 为了这篇文章看起来内容多一点(误),我们可以画多点图来展示数据信息,想直接进行数据预处理的读者可以跳过这部分,这部分内容大多来自Kaggle官网的一篇notebook。 ### 1.2.1 性别与生存率 首先我们应该还记得电影里感人的“女士优先”策略: ```code sns.barplot(x="Sex", y="Survived", data=train_data)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy92STluWWU5NGZzRnFwM1pON2ptM05ydEpxZUpycTBuTWRwNGJsOHlacjA0Q01XaWJ2MVEyMHQzczBkOWljNExpYlc3bkNMV2FHb0V3cUZpYkpZME1TRDJWdHcvNjQw?x-oss-
process=image/format,png) 这里我们可以看出女性的生存率远大于男性,这也很符合电影的情节。
我们还可以猜测不同仓位的乘客应有不同的获救率:
#draw a bar plot of survival by Pclass
sns.barplot(x="Pclass", y="Survived", data=train)
#print percentage of people by Pclass that survived
print("Percentage of Pclass = 1 who survived:", train["Survived"][train["Pclass"] == 1].value_counts(normalize = True)[1]*100)
print("Percentage of Pclass = 2 who survived:", train["Survived"][train["Pclass"] == 2].value_counts(normalize = True)[1]*100)
print("Percentage of Pclass = 3 who survived:", train["Survived"][train["Pclass"] == 3].value_counts(normalize = True)[1]*100)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy92STluWWU5NGZzRnFwM1pON2ptM05ydEpxZUpycTBuTUVNYklvV3hhZHR5a2JpY2NhZWliOFNGSXlaZmEwYksyMzQzMHZEM2ZRUGFZWGJCajV6R3U3ZDZ3LzY0MA?x-oss-
process=image/format,png)
Percentage of Pclass = 1 who survived: 62.96296296296296
Percentage of Pclass = 2 who survived: 47.28260869565217
Percentage of Pclass = 3 who survived: 24.236252545824847
数据结果还是很现实的,贵的仓位自然有更高的生存率 ,不然我花这冤枉钱干嘛,生死面前不是人人平等。
As predicted, people with higher socioeconomic class had a higher rate of
survival. (62.9% vs. 47.3% v
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。