首页 > 编程语言 > 详细

利用python对Titanic进行数据

时间:2021-06-19 09:35:08      阅读:35      评论:0      收藏:0      [点我收藏+]

一.数据描述

1.1 数据加载

加载所需数据与所需的python库。

import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.graphics.api as smg
import patsy
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
from scipy import stats
import seaborn as sns

获取数据
train = pd.read_csv("D:/Titanic/train.csv")

1.2 数据解释

数据集中共有12个字段:

PassengerId:乘客编号,Survived:乘客是否存活,Pclass:乘客所在的船舱等级;Name:乘客姓名,Sex:乘客性别,Age:乘客年龄,SibSp:乘客的兄弟姐妹和配偶数量,

Parch:乘客的父母与子女数量,Ticket:票的编号,Fare:票价,Cabin:座位号,Embarked:乘客登船码头。

共有891位乘客的数据信息。其中277位乘客的年龄数据缺失,2位乘客的登船码头数据缺失,687位乘客的船舱数据缺失。

1.3导入数据

train.head()

技术分享图片

 

 

 

train.info()

<class ‘pandas.core.frame.DataFrame‘>
Int64Index: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId 891 non-null int64
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 90.5+ KB

1.4描述性统计

结果显示,

共有38.3%的乘客存活,乘客船舱等级的平均值介于2和3之间,大部分乘客等级较低。乘客年龄的平均值为29.7岁,最小值为0.42岁,最大值为80岁。

乘客的兄弟姐妹和配偶数目平均值为0.52,最小值为0,最大值为8个。乘客的父母和子女数目平均值为0.38,最小值为0,最大值为6个。乘客票价的

平均值为32,最小值为0,最大值为512,75%分位数为31,表明大部分乘客的消费能力较低。

train.describe()

 

技术分享图片

 

 

 二.提出问题

 

1.座位的等级是否影响存活率

2.票价是否影响存活率

3.存活率是否受登船港口影响

4.乘客的年龄是否影响存活率

5.性别是否会影响存活率

 

三.数据清洗与预处理

3.1缺失值处理

用年龄的均值填充年龄的缺失值,用出发港口的众数填补出发港口的缺失值。

实现代码如下:

train.Age.mean()

train.Age.fillna(29.7,inplace=True)

train.Embarked.fillna("S",inplace=True)

3.2数据分箱

将年龄数据分段为0-5岁、5-15岁、15-20岁、20-35岁、35-50岁、50-60岁、60-100岁7段。

将Parch变量分成数目为0、数目为1或2、数目为大于2三段。

将SibSp变量分成数目为0、数目为1或2、数目为大于2三段。

将Cabin变量分为缺失和没有缺失两段。

实现代码如下:

train.age=pd.cut(train.Age,[0,5,15,20,35,50,60,100])

pd.crosstab(train.age,train.Survived).plot(kind="bar")

<matplotlib.axes._subplots.AxesSubplot at 0x7674657e48>

技术分享图片

 

 

train.Parch[(train.Parch>0) & (train.Parch<=2)]=1
train.Parch[train.Parch>2]=2
train.SibSp[(train.SibSp>0) & (train.SibSp<=2)]=1
train.SibSp[train.SibSp>2]=2
train.Cabin[train.Cabin!="U"]="K"

 

D:\software\新建文件夹 (4)\lib\site-packages\ipykernel\__main__.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
if __name__ == ‘__main__‘:
D:\software\新建文件夹 (4)\lib\site-packages\ipykernel\__main__.py:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
from ipykernel import kernelapp as app
D:\software\新建文件夹 (4)\lib\site-packages\ipykernel\__main__.py:3: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
app.launch_new_instance()
D:\software\新建文件夹 (4)\lib\site-packages\ipykernel\__main__.py:4: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
D:\software\新建文件夹 (4)\lib\site-packages\ipykernel\__main__.py:5: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

 

 

 

 四.数据可视化

4.1座位的等级是否影响存活率

画出船舱等级与是否获救的交叉表与条形图,如下所示。

可以发现,第一等级的乘客获救的可能性更高,超过50%,第二等级的乘客获救可能性在50%左右,而第三等级的乘客获救可能性很低。

pd.crosstab(train["Pclass"],train["Survived"])

技术分享图片

 

 

pd.crosstab(train["Pclass"],train["Survived"]).plot(kind="bar")

<matplotlib.axes._subplots.AxesSubplot at 0x76741cbf98>

技术分享图片

 

 4.2票价是否影响存活率

画出乘客是否获救与票价的箱线图,如下所示。可以发现,总体而言,获救的乘客票价更高。

实现代码如下:

fig,ay = plt.subplots()
Fare1 = train.Fare[train.Survived == 1]
Fare0 = train.Fare[train.Survived == 0]
plt.boxplot((Fare1,Fare0),labels=(‘Survived‘,‘Not Survived‘))
ay.set_ylim([-10,150])
ay.set_title("Boxplot of Fare")

<matplotlib.text.Text at 0x76745e5470>

技术分享图片

 

 4.3存活率是否受登船港口的影响

画出登船港口与是否获救的交叉表与条形图,如下所示。可以发现,从Cherburge出发的乘客获救的人数比例更高。

pd.crosstab(train["Embarked"],train["Survived"])

技术分享图片

 

 

pd.crosstab(train["Embarked"],train["Survived"]).plot(kind="bar")

<matplotlib.axes._subplots.AxesSubplot at 0x767436f4e0>

技术分享图片

 

 4.4乘客的年龄是否会影响存活率

画出乘客是否获救与年龄的箱线图,如下所示。从箱线图上来看,两者关系并不明显。

fig,ay = plt.subplots()
Age1 = train.Age[train.Survived == 1].dropna()
Age0 = train.Age[train.Survived == 0].dropna()
plt.boxplot((Age1,Age0),labels=(‘Survived‘,‘Not Survived‘))
ay.set_ylim([-5,70])
ay.set_title("Boxplot of Age")

<matplotlib.text.Text at 0x7674557a20>

技术分享图片

 

 4.5性别是否会影响存活率

画出性别与是否获救的交叉表和条形图,如下所示。可以发现,女性获救的可能性更高,而男性获救的比例很低。

pd.crosstab(train["Sex"],train["Survived"])

技术分享图片

 

 

pd.crosstab(train["Sex"],train["Survived"]).plot(kind="bar")

<matplotlib.axes._subplots.AxesSubplot at 0x76714d0d68>

技术分享图片

 

 五.总结

1.座位的等级越高,票价越高,获得生存的可能性越高。

2.乘客的年龄对于存活率没什么影响。

3.性别对存活率有些影响,女士比男人更容易获救。

4.数据的可视化对于Titanic号的乘客的存活率研究更加直观。

利用python对Titanic进行数据

原文:https://www.cnblogs.com/zqc2021/p/14901697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!