实验操作
(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,导致了该群体的死亡率高。