【机器学习】泰坦尼克号- 2- 数据挖掘

连续变量对获救情况的影响

  • Age–> 连续值特征对结果的影响
print('Oldest Passenger was of:',data['Age'].max(),'Years')
print('Youngest Passenger was of:',data['Age'].min(),'Years')
print('Average Age on the ship:',data['Age'].mean(),'Years')

Oldest Passenger was of: 80.0 Years
Youngest Passenger was of: 0.42 Years
Average Age on the ship: 29.69911764705882 Years

f,ax=plt.subplots(1,2,figsize=(16,5))
sns.violinplot("Pclass","Age", hue="Survived", data=data,split=True,ax=ax[0])
ax[0].set_title('Pclass and Age vs Survived')
ax[0].set_yticks(range(0,110,10))
sns.violinplot("Sex","Age", hue="Survived", data=data,split=True,ax=ax[1])
ax[1].set_title('Sex and Age vs Survived')
ax[1].set_yticks(range(0,110,10))
plt.show()

在这里插入图片描述

结果:
1)10岁以下儿童的存活率随passenegers数量增加。

2)生存为20-50岁获救几率更高一些。

3)对男性来说,随着年龄的增长,存活率降低。

缺失值填充

  • 平均值
  • 经验值
  • 回归模型预测
  • 剔除掉

正如我们前面看到的,年龄特征有177个空值。为了替换这些缺失值,我们可以给它们分配数据集的平均年龄。

但问题是,有许多不同年龄的人。最好的办法是找到一个合适的年龄段!

我们可以检查名字特征。根据这个特征,我们可以看到名字有像先生或夫人这样的称呼,这样我们就可以把先生和夫人的平均值分配给各自的组。

for i in data:
    data['Initial']=data.Name.str.extract('([A-Za-z]+)\.') 
data

在这里插入图片描述

pd.crosstab(data.Initial,data.Sex).T.style.background_gradient(cmap='summer_r')

在这里插入图片描述

data['Initial'].replace(['Mlle','Mme','Ms','Dr','Major','Lady','Countess','Jonkheer','Col','Rev','Capt','Sir','Don'],['Miss','Miss','Miss','Mr','Mr','Mrs','Mrs','Other','Other','Other','Mr','Mr','Mr'],inplace=True)
ata.groupby('Initial')['Age'].mean()
Initial
Master     4.574167
Miss      21.860000
Mr        32.739609
Mrs       35.981818
Other     45.888889
Name: Age, dtype: float64
## 使用每组的均值来进行填充
data.loc[(data.Age.isnull())&(data.Initial=='Mr'),'Age']=33
data.loc[(data.Age.isnull())&(data.Initial=='Mrs'),'Age']=36
data.loc[(data.Age.isnull())&(data.Initial=='Master'),'Age']=5
data.loc[(data.Age.isnull())&(data.Initial=='Miss'),'Age']=22
data.loc[(data.Age.isnull())&(data.Initial=='Other'),'Age']=46
data.Age.isnull().any()

False
f,ax=plt.subplots(1,2,figsize=(20,10))
data[data['Survived']==0].Age.plot.hist(ax=ax[0],bins=20,edgecolor='black',color='cyan')
ax[0].set_title('Survived= 0')
x1=list(range(0,85,5))
ax[0].set_xticks(x1)
data[data['Survived']==1].Age.plot.hist(ax=ax[1],color='hotpink',bins=20,edgecolor='black')
ax[1].set_title('Survived= 1')
x2=list(range(0,85,5))
ax[1].set_xticks(x2)
plt.show()

在这里插入图片描述
观察:

1)幼儿(年龄在5岁以下)获救的还是蛮多的(妇女和儿童优先政策)。

2)最老的乘客得救了(80年)。

3)死亡人数最高的是30-40岁年龄组。

sns.factorplot('Pclass','Survived',col='Initial',data=data)
plt.show()

在这里插入图片描述

  • Embarked–> 登船地点
pd.crosstab([data.Embarked,data.Pclass],[data.Sex,data.Survived],margins=True).style.background_gradient(cmap='summer_r')

在这里插入图片描述

sns.factorplot('Embarked','Survived',data=data)
fig=plt.gcf()
fig.set_size_inches(5,3)
plt.show()

在这里插入图片描述
C港生存的可能性最高在0.55左右,而S的生存率最低。

f,ax=plt.subplots(2,2,figsize=(20,15))
sns.countplot('Embarked',data=data,ax=ax[0,0])
ax[0,0].set_title('No. Of Passengers Boarded')
sns.countplot('Embarked',hue='Sex',data=data,ax=ax[0,1])
ax[0,1].set_title('Male-Female Split for Embarked')
sns.countplot('Embarked',hue='Survived',data=data,ax=ax[1,0])
ax[1,0].set_title('Embarked vs Survived')
sns.countplot('Embarked',hue='Pclass',data=data,ax=ax[1,1])
ax[1,1].set_title('Embarked vs Pclass')
plt.subplots_adjust(wspace=0.2,hspace=0.5)
plt.show()

在这里插入图片描述
在这里插入图片描述
观察:

1)大部分人的船舱等级是3。

2)C的乘客看起来很幸运,他们中的一部分幸存下来。

3)S港口的富人蛮多的。仍然生存的机会很低。

4)港口Q几乎有95%的乘客都是穷人。

sns.factorplot('Pclass','Survived',hue='Sex',col='Embarked',data=data)
plt.show()

在这里插入图片描述

观察:

1)存活的几率几乎为1 在pclass1和pclass2中的女人。

2)pclass3 的乘客中男性和女性的生存率都是很偏低的。

3)端口Q很不幸,因为那里都是3等舱的乘客。

港口中也存在缺失值,在这里我用众数来进行填充了,因为S登船人最多呀

data['Embarked'].fillna('S',inplace=True)
data.Embarked.isnull().any()

False
  • sibsip -->兄弟姐妹的数量

这个特征表示一个人是独自一人还是与他的家人在一起。

pd.crosstab([data.SibSp],data.Survived).style.background_gradient(cmap='summer_r')

在这里插入图片描述

f,ax=plt.subplots(1,2,figsize=(20,8))
sns.barplot('SibSp','Survived',data=data,ax=ax[0])
ax[0].set_title('SibSp vs Survived')
sns.factorplot('SibSp','Survived',data=data,ax=ax[1])
ax[1].set_title('SibSp vs Survived')
plt.close(2)
plt.show()

在这里插入图片描述

pd.crosstab(data.SibSp,data.Pclass).style.background_gradient(cmap='summer_r')

在这里插入图片描述

观察:

barplot和factorplot表明,如果乘客是孤独的船上没有兄弟姐妹,他有34.5%的存活率。如果兄弟姐妹的数量增加,该图大致减少。这是有道理的。也就是说,如果我有一个家庭在船上,我会尽力拯救他们,而不是先救自己。但是令人惊讶的是,5-8名成员家庭的存活率为0%。原因可能是他们在pclass=3的船舱?

  • Parch --> 父母和孩子的数量
pd.crosstab(data.Parch,data.Pclass).style.background_gradient(cmap='summer_r')

在这里插入图片描述

f,ax=plt.subplots(1,2,figsize=(20,8))
sns.barplot('Parch','Survived',data=data,ax=ax[0])
ax[0].set_title('Parch vs Survived')
sns.factorplot('Parch','Survived',data=data,ax=ax[1])
ax[1].set_title('Parch vs Survived')
plt.close(2)
plt.show()

在这里插入图片描述

观察:

这里的结果也很相似。带着父母的乘客有更大的生存机会。然而,它随着数字的增加而减少。

在船上的家庭父母人数中有1-3个的人的生存机会是好的。独自一人也证明是致命的,当船上有4个父母时,生存的机会就会减少。

  • Fare–> 船票的价格
f,ax=plt.subplots(1,3,figsize=(20,8))
sns.distplot(data[data['Pclass']==1].Fare,ax=ax[0])
ax[0].set_title('Fares in Pclass 1')
sns.distplot(data[data['Pclass']==2].Fare,ax=ax[1])
ax[1].set_title('Fares in Pclass 2')
sns.distplot(data[data['Pclass']==3].Fare,ax=ax[2])
ax[2].set_title('Fares in Pclass 3')
plt.show()

在这里插入图片描述

概括地观察所有的特征:
性别:与男性相比,女性的生存机会很高。

Pclass:有,第一类乘客给你更好的生存机会的一个明显趋势。对于pclass3成活率很低。对于女性来说,从pclass1生存的机会几乎是。

年龄:小于5-10岁的儿童存活率高。年龄在15到35岁之间的乘客死亡很多。

港口:上来的仓位也有区别,死亡率也很大!

家庭:有1-2的兄弟姐妹、配偶或父母上1-3显示而不是独自一人或有一个大家庭旅行,你有更大的概率存活。

  • 特征之间的相关性

特征相关性的热度图

首先要注意的是,只有数值特征进行比较

正相关:如果特征A的增加导致特征b的增加,那么它们呈正相关。值1表示完全正相关。

负相关:如果特征A的增加导致特征b的减少,则呈负相关。值-1表示完全负相关。

sns.heatmap(data.corr(),annot=True,cmap='rainbow',linewidths=0.2) #data.corr()-->correlation matrix
fig=plt.gcf()
fig.set_size_inches(10,8)
plt.show()

在这里插入图片描述

现在让我们说两个特性是高度或完全相关的,所以一个增加导致另一个增加。这意味着两个特征都包含高度相似的信息,并且信息很少或没有变化。这样的特征对我们来说是没有价值的!

那么你认为我们应该同时使用它们吗?。在制作或训练模型时,我们应该尽量减少冗余特性,因为它减少了训练时间和许多优点。

现在,从上面的图,我们可以看到,特征不显著相关。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值