Kaggle泰坦尼克之灾

逻辑回归应用之泰坦尼克之灾
背景
训练和测试数据是一些乘客的个人信息以及存活状况,要尝试根据它生成合适的模型并预测其他人的存活状况 。
1. 数据总览
train.csv和test.csv分别为训练集和测试集,.csv为对应答案
得到这些后,对这些数据读入和简单分析一下
df = pd.read_csv("train.csv")print(df.head())df.info()print(df.describe())
简单分析可以得出Age、Cabin、、Fare几个特征存在缺失值,大概0.的人最后获救了,2/3等舱的人数比1等舱要多,平均乘客年龄大概是29.7岁
数据初步分析
先看下每个属性与的关系
```pythonfig = plt.figure()fig.set(alpha=0.2) # 设定图标透明度plt.subplot2grid((2,3),(0,1))#把几个小图放在一个大图里面df.Pclass.value_counts().plot(kind="bar") # 柱状图 plt.ylabel(u"人数")plt.title(u"乘客等级分布")plt.subplot2grid((2,3),(0,0)) df.Survived.value_counts().plot(kind='bar')plt.title(u'获救情况(1为获救)')plt.ylabel(u'人数')plt.subplot2grid((2,3),(0,2))plt.scatter(df.Survived, df.Age)plt.ylabel(u"年龄")plt.grid(b=True, which='major', axis='y') # 绘制网格线plt.title(u"按年龄看获救分布 (1为获救)")plt.subplot2grid((2,3),(1,0), colspan=2)df.Age[df.Pclass == 1].plot(kind='kde')df.Age[df.Pclass == 2].plot(kind='kde')df.Age[df.Pclass == 3].plot(kind='kde')plt.xlabel(u"年龄")plt.ylabel(u"密度") plt.title(u"各等级的乘客年龄分布")plt.subplot2grid((2,3),(1,2))df.Embarked.value_counts().plot(kind='bar')plt.title(u"各登船口岸上船人数")plt.ylabel(u"人数")plt.show()

从图中我们可以得到一些信息:
1:超过一半的人没有获救
2:获救者在3等仓的人数比较多
3:从年龄分布可以看出,遇难和获救的乘客年龄分布都比较离散,跨度大
4:三个不同舱的乘客年龄总体趋势大致相同,其中20岁左右的乘客主要集中再二三等舱,一等舱中40岁左右的最多
5:s港上船的人数最多
我们可以通过这些数据假设获救可能和舱位等级有关系,可能和年龄有关系,也可能和登港的港口有关系…
先看一下各乘客等级的获救情况
fig = plt.figure()fig.set(alpha=0.2)Survived_0 = df.Pclass[df.Survived == 0].value_counts()Survived_1 = df.Pclass[df.Survived == 1].value_counts()df = pd.DataFrame({u'未获救':Survived_0, u'获救':Survived_1})df.plot(kind='bar', stacked=True)plt.title(u'不同等级乘客获救情况')plt.xlabel(u'乘客等级')plt.ylabel(u'人数')plt.show()
从图中可以看出,等级为1的乘客,获救的概率最大,并且随着等级的递减,获救的概率也是递减!所以,乘客等级这必然是一个影响乘获救的重要特征
查看各性别的获救情况
fig = plt.figure()fig.set(alpha=0.2)Survived_0 = df.Survived[df.Sex == 'male'].value_counts()Survived_1 = df.Survived[df.Sex == 'female'].value_counts()df = pd.DataFrame({u'男性':Survived_0, u'女性':Survived_1})df.plot(kind='bar', stacked=True)plt.title(u'不同性别乘客获救情况')plt.xlabel(u'获救与否')plt.ylabel(u'人数')plt.show()
从上图可以很明显的发现女性的获救概率远远大于男性,果然女士优先执行的是真的
查看各登船港口的获救情况
其中C港口最高,Q次之,S港口最低,应该也可以作为影响生还的一个因素
查看携带家人数量不同的获救情况
fig = plt.figure(figsize=(10,15))fig.set(alpha=0.2)Survived_0 = df.SibSp[df.Survived == 0].value_counts()Survived_1 = df.SibSp[df.Survived == 1].value_counts()df = pd.DataFrame({u'未获救':Survived_0, u'获救':Survived_1})df.plot(kind='bar', stacked=True)plt.title(u'携带不同家人数量的乘客获救情况')plt.xlabel(u'携带家人数量')plt.ylabel(u'人数')plt.show()