6.名称长度与存活率的关系
## 04.08 名称的长度对生存率的影响 fig,axis1=plt.subplots(1,1,figsize=(14,4)) train_data['Name_length']=train_data['Name'].apply(len) # 这里年龄出现小数,但是使用.astype(float).astype(int)也不行,会报错。直接使用.astype(int)也不行 name_length=train_data[['Name_length','Survived']].groupby(['Name_length'],as_index=False).mean() sns.barplot(x='Name_length',y='Survived',data=name_length) # 由图片知:总体来讲:名字越长的存活率越高,分界线是在35
7.亲属与存活率之间的关系
这里涉及到直系亲属以及旁系亲属
•Parch(直系亲友,这里就认为是父母与孩子)
•SibSp(旁系,这里就认为是兄弟姐妹)
## 04.09 兄弟姐妹与存活概率(涉及到家族) sibsp_df=train_data[train_data['SibSp']!=0] no_sibsp_df=train_data[train_data['SibSp']==0]
plt.figure(figsize=(10,5)) plt.subplot(121) sibsp_df['Survived'].value_counts().plot.pie(labels=['No Survived','Survived'],autopct='%1.1f%%') plt.xlabel('sibsp(有兄弟姐妹的)') plt.subplot(122) no_sibsp_df['Survived'].value_counts().plot.pie(labels=['No Survived','Survived'],autopct='%1.1f%%') plt.xlabel('no_sibsp(没有兄弟姐妹的)') plt.show()
## 04.10 父母子女与存活概率(涉及到家族) parch_df=train_data[train_data['Parch']!=0] no_parch_df=train_data[train_data['Parch']==0] plt.figure(figsize=(10,5)) plt.subplot(121) parch_df['Survived'].value_counts().plot.pie(labels=['No Survived','Survived'],autopct='%1.1f%%') plt.xlabel('parch(父母带小孩)') plt.subplot(122) no_parch_df['Survived'].value_counts().plot.pie(labels=['No Survived','Survived'],autopct='%1.1f%%') plt.xlabel('no_parch(父母与孩子没有在一起的)') plt.show()
## 04.10 父母子女与存活概率(涉及到家族) parch_df=train_data[train_data['Parch']!=0] no_parch_df=train_data[train_data['Parch']==0]
# 父子关系平均年龄与有无父子关系的比例、数量与存活率关系的比较 plt.figure(figsize=(16,12)) plt.rcParams.update({'font.family': "Microsoft YaHei"}) plt.subplot(2,3,1) parch_df['Survived'].value_counts().plot.pie(labels=['No Survived','Survived'],autopct='%1.1f%%') plt.xlabel('parch') plt.subplot(2,3,2) parch_df.groupby(['Survived'])['Age'].mean().plot.bar(color='orange',title='有父子关系年龄均值对比') # plt.xlabel('parch') plt.subplot(2,3,3) parch_df.groupby(['Survived'])['PassengerId'].count().plot.bar(color='brown',title='有父子关系数量') plt.xlabel('parch') plt.subplot(2,3,4) no_parch_df['Survived'].value_counts().plot.pie(labels=['No Survived','Survived'],autopct='%1.1f%%') plt.xlabel('no_parch') plt.subplot(2,3,5) no_parch_df.groupby(['Survived'])['Age'].mean().plot.bar(color='orange',title='无父子关系年龄均值对比') plt.xlabel('no_parch') plt.subplot(2,3,6) no_parch_df['Survived'].value_counts().plot.bar(color='brown',title='无父子关系数量') plt.xlabel('no_parch')
8.舱位类型与存活率之间的关系
Cabin
若为空,也就是没有保存舱位信息,则填充为U0
。这里可以推断出有舱位类型的存活率较高。对于乘客,我猜想如果是地位较高的人,他们的舱位信息应该能较好的保存。因为地位低的人可能出现逃票的情况,或者他们更不重视自己的船票号码(舱位信息),因此舱位信息保存率比较低。
# 04.11 舱位类型与存活率 train_data['Has_Cabin']=train_data['Cabin'].apply(lambda x:0 if x=='U0' else 1) train_data[['Has_Cabin','Survived']].groupby(['Has_Cabin']).mean().plot.bar()
9.对不同类型的船舱进行分析
主要目的:练习pd.dummies
和pd.factorize
的用法
# 04.12 对不同类型的船舱进行分析(涉及到变量转换)主要目的:练习pd.dummies和pd.factorize的用法 import numpy as np import re train_data['CabinLetter']=train_data['Cabin'].map(lambda x:re.compile("([a-zA-Z]+)").search(x).group()) # search()可以从任意一个文本里搜索匹配的字符串,即从任何位置里搜索到匹配的字符串 # 从compile()函数的定义中,可以看出返回的是一个匹配对象,它单独使用就没有任何意义,需要和findall(), search(), match()搭配使用。 train_data
# pd.get_dummies方法 # 使用矩阵的方法显示舱位号 pd.get_dummies(train_data['CabinLetter'])
train_data=train_data.join(pd.get_dummies(train_data['CabinLetter'])) # 将两张表进行合并附加 # 这样可以方便哑变量(虚拟变量)与不同数据进行关系之间的探讨 train_data
train_data[['CabinLetter','Survived']].groupby(['CabinLetter']).mean().plot.bar()
不同舱位与存活率之间的关系
10.出发港口与存活率之间的关系
# 04.13 出发港口与存活率之间的关系 sns.countplot('Embarked',hue='Survived',data=train_data) plt.title('Embarked and Survived')