泰坦尼克號生存預測(二)-- 特徵分析
阿新 • • 發佈:2019-02-02
5. 特徵再分析
對處理過的資料再分析
train[['Survived','Pclass','Sex','Age_level','Fare_log','Embarked','Familysize','isAlone','Has_Cabin','Title']].groupby('Survived',as_index=False).mean()
Survived | Pclass | Sex | Age_level | Fare_log | Embarked | Familysize | isAlone | Has_Cabin | Title | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 2.531876 | 0.852459 | 2.653916 | 1.652095 | 1.307832 | 1.883424 | 0.681239 | 0.123862 | 4.500911 |
1 | 1 | 1.950292 | 0.318713 | 2.587719 | 2.198830 | 1.447368 | 1.938596 | 0.476608 | 0.397661 | 2.786550 |
由上述資料可知:
1) Pclass船票等級1、2級生存率相對較高(Survived=1),而3、4級生存率較低;
2) Sex性別女(Sex=0)生存率比男性(Sex=1)生存率高;
3) Age_level年齡小的生存率相對較高;
4) Fare_log消費高的有更高的生存率;
5) isAlone(1)獨自一人上船比有家人陪同(0)的生存率低;
6) Has_Cabin擁有船艙生存率更高.
6. 相關性分析-多變數分析
a. 直方圖和資料透視表
f, (axis1,axis2) = plt.subplots(1,2,figsize=(18,6)) sns.barplot(x='Embarked',y='Survived',hue='Sex',data=train,ax=axis1) sns.barplot(x='Age_level',y='Survived',hue='Sex',data=train,ax=axis2)
發現:
1)性別對生存率影響非常明顯,女性(Sex=0)普遍比男性有更高的生存率;
2)年齡(50+)的女性和14歲以下的小孩(age_level=1)有更高的生存率;
3)不同於其他組別的男性低生存率,14歲以下的男童生存率較高;
4)啟用新的一類特徵:年輕男孩“boy”
雙因子結合分析:
for dataset in full_data:
dataset['Embarked_gender']=0
dataset.loc[(dataset['Embarked']==1)&(dataset['Sex']==0),'Embarked_gender']=1
dataset.loc[(dataset['Embarked']==2)&(dataset['Sex']==0),'Embarked_gender']=2
dataset.loc[(dataset['Embarked']==3)&(dataset['Sex']==0),'Embarked_gender']=3
dataset.loc[(dataset['Embarked']==1)&(dataset['Sex']==1),'Embarked_gender']=4
dataset.loc[(dataset['Embarked']==2)&(dataset['Sex']==1),'Embarked_gender']=5
dataset.loc[(dataset['Embarked']==3)&(dataset['Sex']==1),'Embarked_gender']=6
train[['Embarked_gender','Survived']].groupby('Embarked_gender',as_index=False).mean().sort_values(by='Survived',ascending=False)
Embarked_gender | Survived | |
---|---|---|
1 | 2 | 0.876712 |
2 | 3 | 0.750000 |
0 | 1 | 0.692683 |
4 | 5 | 0.305263 |
3 | 4 | 0.174603 |
5 | 6 | 0.073171 |
資料透視表:
train_pivot = pd.pivot_table(train, index=['Familysize','Pclass'], columns='Sex',values='Survived',aggfunc=np.mean,margins=True)
def get_color(val):
color = 'red' if val <0.4 else 'black'
return 'color:%s'%color
train_pivot = train_pivot.style.applymap(get_color)
# 繪製多個同坐標軸圖形
grid = sns.FacetGrid(train,row = 'Pclass',col='Survived',size=2,aspect=3)
grid.map(plt.hist, 'Age_level')
grid.add_legend()
由以上分析可知:
1)Familysize為1,2的男性存活率均低於0.4;
2)獨自一人且船票等級為2和3的乘客存活率低於0.4;
3)一等船票年齡在14~40之間的乘客存活的人數較多;
4)3等船票年齡在14~30之間的乘客去世的人數最多。
f,(axis1,axis2,axis3)=plt.subplots(1,3,figsize=(18,8))
sns.violinplot(x='Pclass',y='Fare_log',hue='Survived',data=train,ax=axis1)
axis1.set_title('Pclass vs Fare Survival comparison')
sns.violinplot(x='Pclass',y='Age_level',hue='Survived',data=train,ax=axis2)
axis2.set_title('Pclass vs Age_level Survival comparison')
sns.violinplot(x='Pclass',y='Familysize',hue='Survived',data=train,ax=axis3)
axis3.set_title('Pclass vs Familysize Survival comparison')
f, axis = plt.subplots(2,3,figsize=(18,8))
sns.barplot(x='Embarked',y='Survived',data=train,ax=axis[0,0])
sns.barplot(x='Pclass',y='Survived',data=train,ax=axis[0,1],order=[1,2,3])
sns.barplot(x='Deck',y='Survived',data=train,ax=axis[0,2],order=[0,1,2])
sns.pointplot(x='Fare_log',y='Survived',data=train,ax=axis[1,0])
sns.pointplot(x='Age_level',y='Survived',data=train,ax=axis[1,1])
sns.pointplot(x='Familysize',y='Survived',data=train,ax=axis[1,2])
b. 去掉無關特徵
drop_elements = ['PassengerId','Name','Age', 'Ticket','Fare','Cabin', 'isAlone', 'boy']
train=train.drop(drop_elements,axis=1)
test=test.drop(drop_elements,axis=1)
皮爾遜相關性熱力圖
colormap = plt.cm.RdBu
plt.figure(figsize=(14,12))
plt.title('Pearson Correlation of Features',y=1.05,size=15)
sns.heatmap(train.astype(float).corr(),linewidth=0.1,vmax=1.0,square=True,cmap=colormap,linecolor='white',annot=True)
相關性在0.5~0.7之間的通常認為有中度偏強的相關性
g = sns.pairplot(train[['Survived','Pclass','Sex','Age_level','Fare_log','Familysize','Title']],hue='Survived',palette='seismic',size=1.2,diag_kind='kde',diag_kws=dict(shade=True),plot_kws=dict(s=10))
# 隱去X軸刻度標籤
g.set(xticklabels=[])
以上pairplot的散點圖可以看見雙因子對存活率的影響:例如同行家庭成員較少同時船票等級為1等2等時全是紅色散點,說明這兩個因素同時存在時存活率較高。
下一篇將著重於模型預測~