泰坦尼克预测

实验操作

(1)数据处理:我删除了’pclass’,‘embarked’,'deck’这三个个与存活率无关的特征,添加了一列值为1方便后续我对于死亡,存活人数的进行不同分组统计人数

标题热力图,票价分别与存活率的柱状图,乘客所处不同船舱等级的存活率,男女乘客位于不同船舱等级,男女乘客位于不同船舱等级的死亡人数分布,不同登港口乘客位于船舱等级存活情况,人群分组存活人数生成柱状图,代码如下

# ****导入数据集

# In[ ]:


import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
#%matplotlib inline
data=pd.read_csv('titanic.csv',index_col=0)


# ****数据初步处理

# In[ ]:


data=data.drop(['pclass','embarked','deck'],axis=1)
data['num'] = 1


# ****饼图

# In[ ]:


Survived=data['survived'].value_counts()
sur_rate=Survived/Survived.sum()
plt.figure(dpi=80)
plt.pie(sur_rate,explode=(0.1,0),labels=['survive','die'],autopct='%.0f%%')
plt.legend()
plt.show()


# 相关系数热力图

# In[ ]:


plt.figure(dpi=80)
sns.set()
mat=data.corr(method='pearson')
sns.heatmap(data=mat,cmap='Blues',annot=True)
plt.title('heatmap')
plt.xticks(fontsize=12,rotation=45,horizontalalignment='right')
plt.yticks(fontsize=12)
plt.show()


# ****可视化票价分别与存活率

# In[ ]:


plt.figure(dpi=100)
data['fare_cut']=pd.cut(data.fare,bins=np.arange(0,300,30))
sns.barplot(x='fare_cut',y=data.survived,
    estimator=lambda x: np.sum(x) / len(x), data=data)
plt.show()


# ****乘客所处不同船舱等级的存活率

# In[ ]:


data2=data.groupby([data['class'],data['survived']]).sum().reset_index()
print(data2)
no=[]
yes=[]
for index,row in data2.iterrows():
    if row['survived'] == 0:
        no.append(row['num'])
    elif row['survived'] == 1:
        yes.append(row['num'])
sns.set_style('whitegrid')
plt.figure(figsize=(6,6),dpi=80)
plt.bar(['First','Second','Third'],no,label='die')
plt.bar(['First','Second','Third'],yes,bottom=no,label='survive')
plt.legend()
plt.show()

不同年龄阶段的死亡分布情况等可视化图像展示

# ****不同登港口乘客位于船舱等级

# In[ ]:


facet4= sns.FacetGrid(data, col='class', row='embark_town')
facet4.map(sns.countplot, 'survived')
plt.show()


# ****男女乘客位于不同船舱等级

# In[ ]:


plt.figure(dpi=80)
facet1= sns.FacetGrid(data, col='class', row='sex')
facet1.map(sns.countplot, 'survived')
plt.show()


# ****死亡人数中男女乘客,位于不同船舱等级,年龄分布

# In[ ]:


data3=data.groupby(data['alive'])
#print(data3.get_group("no"))
facet_die_1=sns.FacetGrid(data3.get_group('no'),col='class')
facet_die_1.map(plt.scatter,'sex','age')
plt.show()


# 

# ****人群分组存活人数生成柱状图

# In[ ]:


data4=data.groupby([data['who'],data['survived']]).sum().reset_index()
print(data4)
sns.set_style('whitegrid')
plt.figure(figsize=(6,6),dpi=80)
sns.barplot(x='survived',y='num',hue='who',data=data4)
plt.show()


# ****可视化人群分组在不同船舱等级的柱状图

# In[ ]:


data5=data.groupby([data['alive'],data['who'],data['class']]).sum().reset_index()
print(data5)
sns.barplot(x='class',y='num',hue='who',data=data5)
plt.show()


# ****可视化死亡人群中不同人群分组位于不同船舱等级的散点图并创建了多图表

# In[ ]:


facet_die=sns.FacetGrid(data3.get_group('no'),col='class')
facet_die.map(plt.scatter,'who','age')
plt.show()

# ****可视化出不同年龄阶段的死亡分布情况,柱状图,KDE图表

# In[ ]:


sns.set_style('whitegrid')
plt.figure(figsize=(6,6),dpi=80)
data['age_cut']=pd.cut(data.age,bins=np.arange(0,90,10))
sns.barplot(x='age_cut',y=data.survived,estimator=lambda x: np.sum(x) / len(x), data=data)


# In[ ]:


g=sns.FacetGrid(data,hue='survived',aspect=3)
g.map(sns.kdeplot,'age',shade=True)
g.set(xlim=(0,100))
g.add_legend()
plt.show()


# ********结伴同行与否与存活情况的柱状图

# In[ ]:


facet2= sns.FacetGrid(data, col='sex', row='alone')
facet2.map(sns.countplot, 'alive')
plt.show()


# In[ ]:


data6=data.groupby([data['alive'],data['alone'],data['sex']]).sum().reset_index()
die_alone=data6.values[0:2,8].tolist()
die_together=data6.values[2:4,8].tolist()
live_alone=data6.values[4:6,8].tolist()
live_together=data6.values[6:,8].tolist()
print(type(die_alone))
print(die_alone,die_together,live_alone,live_together)
data_new=pd.DataFrame({'Groups':['Die_alone'] * len(die_alone)+['die_together'] * len(die_together)
                       +['Live_alone'] * len(live_alone)+['Live_together'] * len(live_together),
                      'Number':die_alone+die_together+live_alone+live_together})
sns.boxplot('Groups','Number',data=data_new)
sns.violinplot('Groups','Number',data=data_new,split=True)
plt.show()
sns.boxplot('Groups','Number',data=data_new)
plt.show()


# In[ ]:


sns.violinplot(x='alone',y='age',hue='alive',data=data,split=True)


实验总结

本次事故中男性乘客多余女性乘客(2)船舱等级Third上死亡人数是最多的,男性群体中也显示船舱等级与存活率之间存在明显关联,在Third等级中男性死亡人数远多于女性(3)在man,women,child人群分组中,女性和孩子的存活率均高于男性,女性的生还率最高(4)乘客年龄与生还乘客之间的关系并不明显,但是孩子的生还率比较大,但年龄大的老人存活率低,中年人死亡率高(5)独自旅行的乘客存活率明显高于结伴旅行的乘客(6)票价的升高存活率也会随之上升,与船舱等级First(高票价)存活率高,Third(低票价)死亡率最高,说明票价与等级对于存活率的影响是是一致的。(7)登船港口中Southampton乘客大部分选择了票价低的Third,导致了该群体的死亡率高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值