(100天2小时第二十二天)实例分析:泰坦尼克号数据分析

 

案例分析:

利用pandas来做一个实际案例分析。背景:船要沉了,我们根据各种影响因素,判断什么因素对船上成员的存活率影响较大。

先下载训练集名为train.csv,把该文件与程序文件放在同一个文件夹下。

1.导包:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

2.导入文件

f=pd.read_csv('train.csv')
print(df)
print(df.shape)
print(df.head(5))

读入数据:

pd.read_csv('train.csv')

或df=pd.read_table('train.csv',sep=",")使用pd_read.table(),需要指定是什么样分隔符的文本文件。用sep=””来指定。

     PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0              1         0       3  ...   7.2500   NaN         S
1              2         1       1  ...  71.2833   C85         C
2              3         1       3  ...   7.9250   NaN         S
3              4         1       1  ...  53.1000  C123         S
4              5         0       3  ...   8.0500   NaN         S
..           ...       ...     ...  ...      ...   ...       ...
886          887         0       2  ...  13.0000   NaN         S
887          888         1       1  ...  30.0000   B42         S
888          889         0       3  ...  23.4500   NaN         S
889          890         1       1  ...  30.0000  C148         C
890          891         0       3  ...   7.7500   NaN         Q

[891 rows x 12 columns]
(891, 12)
   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S

[5 rows x 12 columns]

我们可以看到,这个文件有891行,12列。所以我们可以不用把它全部打开看,只看它前5行暂时就够了。把前5行的列全部展示出来如下:

我们可以看到,每个成员具有12个属性,比如Survived这个属性,只有0和1两个值,0代表死亡,1代表存活。Pclass代表乘客的船舱等级。

3.计算所有的空值

print(df.isnull().sum())
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64

发现Cabin有687个空值。

观察各成员属性:一般来说,Name,Sex等属性应该是String属性 但在python里,会自动默认为 object 属性

print(df.dtypes)
PassengerId      int64
Survived         int64
Pclass           int64
Name            object
Sex             object
Age            float64
SibSp            int64
Parch            int64
Ticket          object
Fare           float64
Cabin           object
Embarked        object
dtype: object

4.我们读数据是为了判断有多少人活了下来,我们可以直接读取Survived这个属性的值

print(df.Survived.value_counts())
0    549
1    342
Name: Survived, dtype: int64

 死亡人数549,存活人数342.

 我们用柱状图表示存活和死亡人数

plt.figure(figsize = (10,5)) # 创建画布
plt.subplot(121) # 添加第一个子图
sns.countplot(x='Survived',data=df)
plt.title('Survived count')
plt.show()

     

5.用value_counts ()这个函数还可以读取属性的值,我们来看下不同舱位的人分别有多少

print(df.Pclass.value_counts())
3    491
1    216
2    184
Name: Pclass, dtype: int64

共有3个舱,1代表高等舱,3代表低等舱。

6.我们在用isnull()读取空值的时候,会发现Cabin这个属性有687个空值,有687个成员没有这个属性,那么这个属性相对其他属性价值小,我们可以把它删除。

df1=df.drop('Cabin',axis=1)
print(df1.head(5))
  PassengerId  Survived  Pclass  \
0            1         0       3   
1            2         1       1   
2            3         1       3   
3            4         1       1   
4            5         0       3   

                                                Name     Sex   Age  SibSp  \
0                            Braund, Mr. Owen Harris    male  22.0      1   
1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   
2                             Heikkinen, Miss. Laina  female  26.0      0   
3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   
4                           Allen, Mr. William Henry    male  35.0      0   

   Parch            Ticket     Fare Embarked  
0      0         A/5 21171   7.2500        S  
1      0          PC 17599  71.2833        C  
2      0  STON/O2. 3101282   7.9250        S  
3      0            113803  53.1000        S  
4      0            373450   8.0500        S  

 等同于下图

 我们会发现Cabin这个属性已经没有了。

7.我们再观察之前输出的空值,Age这个属性,存在177个空值。意味着这个文件里并没有把所有的成员年龄都记录上,我们可以删除也可以补上。我们这个属性选择补上。

df1['Age']=df1['Age'].fillna(20)
print(df1.isnull().sum())
PassengerId    0
Survived       0
Pclass         0
Name           0
Sex            0
Age            0
SibSp          0
Parch          0
Ticket         0
Fare           0
Embarked       2
dtype: int64

8.现在就只剩下Embarked这个属性还有两个空值。我们可以将这两个带有空值的成员也直接删除。

df2=df1[df1['Embarked'].notnull()]
print(df2.isnull().sum())
PassengerId    0
Survived       0
Pclass         0
Name           0
Sex            0
Age            0
SibSp          0
Parch          0
Ticket         0
Fare           0
Embarked       0
dtype: int64

看一个目前的成员数:

print(df2.shape)
(889, 11)

原来891个成员,现在889,删除了两个。

9.刚才我们是对特定的某一个属性进行查看的,我们也可以对多个属性一起看

print(df1.loc[10:14,['Name','Sex','Survived']])
                                   Name     Sex  Survived
10       Sandstrom, Miss. Marguerite Rut  female         1
11              Bonnell, Miss. Elizabeth  female         1
12        Saundercock, Mr. William Henry    male         0
13           Andersson, Mr. Anders Johan    male         0
14  Vestrom, Miss. Hulda Amanda Adolfina  female         0

10.具体分析男女存活的人数,我们可以利用 pivot_table() 来建立表格

print(df2.pivot_table(values='PassengerId',index='Survived',columns='Sex',aggfunc='count'))
Sex       female  male
Survived              
0             81   468
1            231   109

通过这个表格我们可以看出,女性活下来231人,死去81人。相对男性存活率高多了。

11.那么继续分析活下来的人,选取Survived里面值为1的成员。

df4=df2.loc[df2['Survived']==1]
print(df4.shape)
(340, 11)

完成。

plt.figure(figsize= (10 ,5))
sns.barplot(data=df,x="Pclass",y="Survived",ci=None) # ci表示置信区间
plt.show()

   

最后判断两个属性是否相关,用corr()函数:

print(df['Survived'].corr(df['Pclass']))
-0.33848103596101475

可以看出,舱位的高低和存活率的关系:-0.338是负数,证明是负相关,也就是说,舱舱数,死亡概率也大。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值