泰坦尼克号生存率分析

1. 数据总览

Titanic 生存模型预测,其中包含了两组数据:train.csv 和 test.csv,分别为训练集合和测试集合。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
import time #导入事件模块
import warnings
warnings.filterwarnings('ignore')#不发出警告

2. 观察前几行源数据

train_data=pd.read_csv('train.csv')
test_data=pd.read_csv('test.csv')
train_data.head()


3. 绘制存活比例

sns.set_style('ticks')
plt.axis('equal')
train_data['Survived'].value_counts().plot.pie(autopct='%1.2f%%')


4. 结合性别和年龄数据,分析幸存下来的人群特征

① 年龄数据的分布情况

train_data_age = train_data[train_data['Age'].notnull()]plt.figure(figsize=(12,5))
plt.subplot(121)
train_data_age['Age'].hist(bins=70)
plt.xlabel('Age')
plt.ylabel('Num')plt.subplot(122)
train_data.boxplot(column='Age',showfliers=False)
print('总体年龄分布: 去掉缺失值后样本有714,平均年龄约为30岁,标准差14岁,最小年龄0.42,最大年龄80.')
train_data_age['Age'].describe()

总体年龄分布: 去掉缺失值后样本有714,平均年龄约为30岁,标准差14岁,最小年龄0.42,最大年龄80.

② 男性和女性存活情况

train_data[['Sex','Survived']].groupby(['Sex']).mean().plot.bar()
survive_sex = train_data.groupby(['Sex','Survived'])['Survived'].count()
print(survive_sex)print('女性存活率为%.2f%%,男性存活率为%.2f%%' % (survive_sex.loc['female',1]/survive_sex.loc['female'].sum()*100,survive_sex.loc['male',1]/survive_sex.loc['male'].sum()*100))



女性存活率较高

③ 年龄、船舱等级与存活率关系

fig,ax = plt.subplots(1,2, figsize = (18,8))sns.violinplot("Pclass","Age",hue="Survived",data=train_data_age,split=True,ax=ax[0])
ax[0].set_title('Pclass and Age vs Survived')
ax[0].set_yticks(range(0,110,10))
print('按照不同船舱等级划分 → 船舱等级越高,存活者年龄越大,船舱等级1存活年龄集中在20-40岁,船舱等级2/3中有较多低龄乘客存活')sns.violinplot("Sex","Age",hue="Survived",data=train_data_age,split=True,ax=ax[1])
ax[1].set_title('Sex and Age vs Survived')
ax[1].set_yticks(range(0,110,10))
print('按照性别划分 → 男性女性存活者年龄主要分布在20-40岁,且均有较多低龄乘客,其中女性存活更多')

按照不同船舱等级划分 → 船舱等级越高,存活者年龄越大,船舱等级1存活年龄集中在20-40岁,船舱等级2/3中有较多低龄乘客存活
按照性别划分 → 男性女性存活者年龄主要分布在20-40岁,且均有较多低龄乘客,其中女性存活更多


③ 老人和小孩存活情况

plt.figure(figsize=(18,4))
train_data_age['Age_int'] = train_data_age['Age'].astype(int)
average_age = train_data_age[["Age_int", "Survived"]].groupby(['Age_int'],as_index=False).mean()
sns.barplot(x='Age_int',y='Survived',data=average_age, palette = 'BuPu')
plt.grid(linestyle = '--',alpha = 0.5)
print('灾难中,老人和小孩存活率较高')

灾难中,老人和小孩存活率较高

5. 结合 SibSp、Parch字段,研究亲人多少与存活的关系
① 有无兄弟姐妹/父母子女和存活与否的关系
② 亲戚多少与存活与否的关系

# 有无兄弟姐妹/父母子女和存活与否的关系sibsp_df = train_data[train_data['SibSp'] != 0]
no_sibsp_df = train_data[train_data['SibSp'] == 0]
# 筛选出有无兄弟姐妹数据parch_df = train_data[train_data['Parch'] != 0]
no_parch_df = train_data[train_data['Parch'] == 0]
# 筛选出有无父母子女数据plt.figure(figsize=(12,3))
plt.subplot(141)
plt.axis('equal')
sibsp_df['Survived'].value_counts().plot.pie(labels=['No Survived','Survived'],autopct= '%1.1f%%',colormap = 'Blues')
plt.xlabel('sibsp')plt.subplot(142)
plt.axis('equal')
no_sibsp_df['Survived'].value_counts().plot.pie(labels=['No Survived','Survived'],autopct= '%1.1f%%',colormap = 'Blues')
plt.xlabel('no_sibsp')plt.subplot(143)
plt.axis('equal')
parch_df['Survived'].value_counts().plot.pie(labels=['No Survived', 'Survived'], autopct= '%1.1f%%',colormap = 'Reds')
plt.xlabel('parch')  plt.subplot(144)
plt.axis('equal')
no_parch_df['Survived'].value_counts().plot.pie(labels=['No Survived', 'Survived'], autopct = '%1.1f%%',colormap = 'Reds')
plt.xlabel('no_parch')print('有兄弟姐妹、父母子女的乘客存活率更大')

有兄弟姐妹、父母子女的乘客存活率更大

# 亲戚多少与存活与否的关系fig, ax=plt.subplots(1,2,figsize=(15,4))
train_data[['Parch','Survived']].groupby(['Parch']).mean().plot.bar(ax=ax[0])
ax[0].set_title('Parch and Survived')
train_data[['SibSp','Survived']].groupby(['SibSp']).mean().plot.bar(ax=ax[1])
ax[1].set_title('SibSp and Survived')
# 查看兄弟姐妹个数与存活率train_data['Family_Size'] = train_data['Parch'] + train_data['SibSp']+1
train_data[['Family_Size','Survived']].groupby(['Family_Size']).mean().plot.bar(figsize = (15,4))
# 查看父母子女个数与存活率print('若独自一人,那么其存活率比较低;但是如果亲友太多的话,存活率也会很低')

若独自一人,那么其存活率比较低;但是如果亲友太多的话,存活率也会很低。



6. 结合票的费用情况,研究票价和存活与否的关系

# 票价分布和存活与否的关系fig, ax=plt.subplots(1,2,figsize=(15,4))
train_data['Fare'].hist(bins=70, ax = ax[0])
train_data.boxplot(column='Fare', by='Pclass', showfliers=False,ax = ax[1])
# 查看票价分布情况fare_not_survived = train_data['Fare'][train_data['Survived'] == 0]
fare_survived = train_data['Fare'][train_data['Survived'] == 1]
# 基于票价,筛选出生存与否的数据
average_fare = pd.DataFrame([fare_not_survived.mean(),fare_survived.mean()])
std_fare = pd.DataFrame([fare_not_survived.std(),fare_survived.std()])
average_fare.plot(yerr=std_fare,kind='bar',legend=False,figsize = (15,4),grid = True)
# 查看票价与是否生还的关系print('生还者的平均票价要大于未生还者的平均票价')

生还者的平均票价要大于未生还者的平均票价


7. 利用KNN分类模型,对结果进行预测

① 模型训练字段:‘Survived’,‘Pclass’,‘Sex’,‘Age’,‘Fare’,‘Family_Size’

# 数据清洗,提取训练字段
knn_train = train_data[['Survived','Pclass','Sex','Age','Fare','Family_Size']].dropna()
knn_train['Sex'][knn_train['Sex'] == 'male'] = 1 #训练数据集中,性别改为数字表示 → 1代表男性,0代表女性
knn_train['Sex'][knn_train['Sex'] == 'female'] = 0test_data['Family_Size'] = test_data['Parch'] + test_data['SibSp']+1
knn_test = test_data[['Pclass','Sex','Age','Fare','Family_Size']].dropna()
knn_test['Sex'][knn_test['Sex'] == 'male'] = 1
knn_test['Sex'][knn_test['Sex'] == 'female'] = 0
print('清洗后训练集样本数据量为%i个' % len(knn_train))
knn_train.head()

清洗后训练集样本数据量为714个

print('清洗后测试集样本数据量为%i个' % len(knn_test))
knn_test.head()

清洗后测试集样本数据量为331个

# 模型预测test.csv样本数据的生还率from sklearn import neighbors
# 导入KNN分类模块knn = neighbors.KNeighborsClassifier()
knn.fit(knn_train[['Pclass','Sex','Age','Fare','Family_Size']], knn_train['Survived'])
# 构建模型knn_test['predict'] = knn.predict(knn_test)
pre_survived = knn_test[knn_test['predict'] == 1].reset_index()
del pre_survived['index']
# 预测存货情况print('finished!')pre_survived

泰坦尼克号生存率分析相关推荐

  1. 泰坦尼克号数据集_机器学习入门—泰坦尼克号生存率预测

    项目名称:泰坦尼克号生存率预测1.导入数据 这里使用kaggle kernel编写代码 数据下载地址为:https://www.kaggle.com/c/titanic 2.数据统计分析 通过desc ...

  2. 数据挖掘项目1:泰坦尼克号生存率预测

    泰坦尼克号生存率预测 数据来源:Kaggle数据竞赛 写这个博客的目的,之前自己做了几个数据挖掘的项目,现在整理一下,记录一下过程.也希望可以分享出来和大家交流交流. 项目的基本思路: 1.认识数据, ...

  3. 通俗易懂的泰坦尼克号生存分析(titanic)

    作者:离散梦 欢迎大家给出宝贵的建议! 泰坦尼克号数据分析 一.前言 主要目的是整理自己的思路.本文主要是关于泰坦尼克号生存率python分析,因为很多博客做这个项目都比较深入,感觉都比较高大上,我们 ...

  4. Kaggle 泰坦尼克号生存分析(数据概览和缺失值处理部分)

    Kaggle 泰坦尼克号生存分析 数据概览 #导入pandas库方便数据读取和预处理,导入os库方便修改工作路径 import os import pandas as pd #读取数据 os.chdi ...

  5. L:python的Pandas模块:实例练习(泰坦尼克号数据集分析,电影票房统计,股票基本面统计)

    实例练习 泰坦尼克号数据集分析 使用Seaborn库中包含的titanic数据集进行一些数据统计. Seaborn是一个图形库,Anaconda已包含此库.数据集参见: https://github. ...

  6. 基于简单模型KNN——泰坦尼克号获救分析

    数据来源:Kaggle数据集 → 共有1309名乘客数据,其中891是已知存活情况(train.csv),剩下418则是需要进行分析预测的(test.csv) 字段意义: PassengerId: 乘 ...

  7. 泰坦尼克号建模分析-你能活下来吗?

    你在泰坦尼克号上你能活下来吗? 泰坦尼克号的沉没是历史上最具影响力的海难之一,在1912年4月15日,泰坦尼克号的处女航中,与冰山相撞后沉没.在当时,船上没有足够的救生艇供所有人使用,导致2224名乘 ...

  8. 泰坦尼克号生存率预测(持续更新中,探索性数据分析...)

    import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt%matplot ...

  9. python 泰坦尼克号存活率分析

    对泰坦尼克号的数据 进行特征分析.数据清理.数据填充.处理分类特征.将连续特征转化为离散特征.合并特征.制作模型.模型预测 import pandas as pd import numpy as np ...

最新文章

  1. python中读写excel的扩展库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...
  2. 【java新】Optional pk 空指针
  3. 从Servlet传值给JSP页面
  4. 第十二讲 二阶非齐次线性ODE解的结构
  5. 聊聊高并发下库存加减那些事儿——“异步扣减库存”
  6. 最近公共祖先_leetcode No.236 二叉树的最近公共祖先
  7. Tabs Outliner(标签系统)
  8. 14-4 单任务版爬虫的架构
  9. cnnvd爬取漏洞信息
  10. Deeping Learning学习与感悟——《深度学习工程师》_4
  11. 最全常见算法工程师面试题目整理
  12. SQL基础系列(八)——排序、分组排序(RANK)
  13. 在word中公式太长,用公式编辑器怎样设置才能自动换行?
  14. 基于Python的豆果网食谱数据爬取及可视化分析系统
  15. 高校女生穿旗袍答辩!网友:导师说论文要是和旗袍一样漂亮就好了
  16. e3是合法浮点数吗_下列哪些是不合法的浮点数的选项是 123 2e4.2 .e5 -e3 .234 ......
  17. windows server 2008磁盘管理
  18. 基于最大熵Maxent-ArcGis地理分布预测教程
  19. c语言程序项目任务教程 杨东芳 答案,c语言项目化教程 c语言程序设计
  20. 实现Taro 项目拆分到多个分包(Taro和原生混合开发)

热门文章

  1. 2022前端工程师面试过程分享
  2. BigDecimal实现末尾去掉无用0
  3. ViTag :在线 WiFi 精细时间测量辅助多人环境中的视觉-运动身份关联
  4. Vue3教程:Vue3 开源商城项目重构计划正式启动!
  5. PR导入视频后变成绿色的解决方法
  6. 【网络攻防课实验】五:Nmap脚本引擎 (NSE) 的使用及脚本编写
  7. 教程篇(7.0) 07. FortiGate安全 证书的操作 ❀ Fortinet 网络安全专家 NSE 4
  8. JavaScript代码运行时间计算
  9. jquery.PrintArea.js 打印
  10. POJ 3077 Rounders G++