泰坦尼克数据表python分析_Python数据分析入门-泰坦尼克案例(一)

本文通过Python使用pandas、numpy、matplotlib等库对泰坦尼克数据进行分析,包括数据预处理、描述统计和初步探索性分析。结果显示,女性和头等舱乘客的幸存率较高,年龄、性别、舱位与幸存率显著相关,而登船港口也影响了幸存概率。
摘要由CSDN通过智能技术生成

本文以经典的泰坦尼克数据,熟悉掌握基本的Python数据分析,以及可视化步骤。

工具:jupyter notebook

所需模块:pandas,numpy,matplotlib,seaborn,sklearn

数据文件:链接:迅雷云盘 提取码:MOGD

导入库

# 数据分析

import pandas as pd

import numpy as np

# 绘图

import matplotlib.pyplot as plt

from matplotlib import style

import seaborn as sns

获取数据

# 导入数据

test_df = pd.read_csv("test.csv")

train_df = pd.read_csv("train.csv")

数据分析

# 查看训练集数据信息

train_df.info()

训练集数据结果:

RangeIndex: 891 entries, 0 to 890

Data columns (total 12 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 PassengerId 891 non-null int64

1 Survived 891 non-null int64

2 Pclass 891 non-null int64

3 Name 891 non-null object

4 Sex 891 non-null object

5 Age 714 non-null float64

6 SibSp 891 non-null int64

7 Parch 891 non-null int64

8 Ticket 891 non-null object

9 Fare 891 non-null float64

10 Cabin 204 non-null object

11 Embarked 889 non-null object

dtypes: float64(2), int64(5), object(5)

memory usage: 83.7+ KB

泰坦尼克训练集数据共计891条信息,包括:survival: 是否存活

PassengerId: 乘客ID

pclass: 舱位,1为头等舱

sex: 性别

Age: 年龄

sibsp: 兄弟姐妹/配偶数量

parch: 父母/小孩数量

ticket: 船票号码

fare: 船票费用

cabin: 客舱号码

embarked: 登船港口

部分数据存在缺失

查询数据集的前10行:

# 查看训练集数据

train_df.head(10)

获取描述统计信息:

# 查看描述统计

train_df.describe()

描述统计结果:

PassengerId SurvivedPclass Age SibSp Parch Fare

count 891.000000 891.000000891.000000714.000000891.000000891.000000891.000000

mean 446.000000 0.3838382.30864229.6991180.5230080.38159432.204208

std 257.353842 0.4865920.83607114.5264971.1027430.80605749.693429

min 1.000000 0.0000001.0000000.4200000.0000000.0000000.000000

25% 223.500000 0.0000002.00000020.1250000.0000000.0000007.910400

50% 446.000000 0.0000003.00000028.0000000.0000000.00000014.454200

75% 668.500000 1.0000003.00000038.0000001.0000000.00000031.000000

max 891.000000 1.0000003.00000080.0000008.0000006.000000512.329200

从数据集信息以及描述统计结果来看,泰坦尼克乘客幸存率为38.38%,年龄段从0.4至80岁,"Age", "Cabin","Embarked"字段存在缺失值,后面会对缺失值进行处理。

# 查看缺失值,降序排列

total = train_df.isnull().sum().sort_values(ascending = False)

percent_1 = train_df.isnull().sum()/train_df.isnull().count()*100

percent_2 = (round(percent_1,1)).sort_values(ascending = False)

missing_data = pd.concat([total, percent_2],axis = 1, keys = ["total","%"])

# concat合并数据集

missing_data.head()

显示缺失值数量及占比:

total %

Cabin 68777.1

Age 17719.9

Embarked 20.2

Fare 00.0

Ticket 00.0

进行数据分析要做一些预处理。首先,需要把多个特征转换成数字特征,这样机器学习算法才能处理它们。其次,这些特征处于不同的范围,需要转换成大致相同的范围内。最后需要处理包含缺失值(NaN =不是数字)的特征。

可以通过查看列名确定特征

# 查看列名

train_df.columns.values

主要特征包括:

array(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',

'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype=object)

其中包括11个特征,以及1个目标值('Survived')

那么,哪些特征可以导致高幸存率?

1. 年龄(Age)和性别(Sex)

# 创建1行2列,大小为10X4 的画布

fig, axes = plt.subplots(nrows =1 ,ncols = 2 ,figsize =(10,4))

#也可以fig, axes = plt.subplots(1,2 ,figsize =(10,4))

# 选取数据

women = train_df[train_df["Sex"]=="female"]

men = train_df[train_df["Sex"]=="male"]

# 在画布第1列绘制男性幸存与否直方图

ax = sns.distplot(men[men["Survived"]==1].Age.dropna(),

#color="g",#可以自定义颜色

bins=18, label = "Survived", ax = axes[0], kde =False)

ax = sns.distplot(men[men["Survived"]==0].Age.dropna(),

bins=40, label = "Not_survived", ax = axes[0], kde =False)

# 添加图例和标题

ax.legend()

ax.set_title("Male")

# 在画布第2列绘制女性幸存与否直方图

_ax = sns.distplot(women[women["Survived"]==1].Age.dropna(),

#color="g",

bins=18, label = "Survived", ax = axes[1], kde =False)

_ax = sns.distplot(women[women["Survived"]==0].Age.dropna(),

bins=40, label = "Not_survived", ax = axes[1], kde =False)

# 添加图例和标题

_ax.legend()

_ax.set_title("Female")

# 保存图片

#fig.savefig("./picture/age_and_sex.png",dpi = 120)

结果展示:

女性的幸存率明显高于男性。对男性而言,18至30岁有较高的幸存率,而女性在14至40岁有较高的幸存率。5至18岁的男性存活率明显低于同年龄段的女性,另外无论男女,婴儿的幸存率都很高。

2. 登船港口(Embarked),舱位(Pclass)与性别(Sex)

# facetgrid 对数据集根据col,row 实例化facegrid类,生成对象

FacetGrid = sns.FacetGrid(train_df, col="Embarked",

# row = "Embarked"则图片纵向排列,

height=4.5, #高度

aspect=1.2 #长宽比

)

FacetGrid.map(sns.pointplot, "Pclass", "Survived", "Sex",

palette=None, #调色板

order=None,

hue_order=None

)

# 添加图例

FacetGrid.add_legend()

结果展示:

不同登船港口,乘客幸存率不同,且与性别有明显的关系。其中,S港和Q港的女性幸存率高与男性,C港口正相反;同时也可以看出,舱位(Pclas)也与幸存率相关。

3. 舱位(Pclass)

# 绘制各仓位的幸存率

fig,axes = plt.subplots(1,2,figsize =(10,4))

sns.barplot(x = "Pclass", y = "Survived", data = train_df, ax=axes[0],

palette="Set2",#调色板

capsize=0.05, #横线宽度

errwidth= 1.2, #误差线宽度

errcolor="0.1",#误差线颜色透明度,1为白色

#alpha = 0.8 #透明度

)

sns.barplot(x = "Pclass", y = "Survived", hue = "Sex", data = train_df, ax=axes[1],

capsize=0.05, #横线宽度

errwidth= 1.2, #误差线宽度

errcolor="0.1",#误差线颜色透明度,1为白色

alpha = 0.6 #透明度

)

结果展示:

明显可以看出,舱位等级越高,乘客幸存率也越高,头等舱的幸存率是三等舱的两倍还要多。(金钱可以提高生存率 #狗头 )并且舱位间的性别幸存差异也非常明显。

# 不同舱位下,各年龄的幸存与否人数

grid = sns.FacetGrid(train_df, row = "Survived", col = "Pclass",

height = 3 ,aspect = 1.2)

grid.map(plt.hist, "Age", bins = 20, alpha = 0.6)

grid.add_legend()

结果展示:

可以看个各舱位幸存的人数,头等舱幸存人数最多,而三等舱的遇难人数最多。

4. 亲属(SibSp,Parch)

将SibSp-兄弟姐妹、配偶和 Parch-父母、小孩 合并成一个因素--亲属

# 将SibSp-兄弟姐妹、配偶和 Parch-父母、小孩 合并成一个因素, 亲属

data = [train_df, test_df]

# 添加relatives列

for dataset in data:

dataset["relatives"] = dataset["SibSp"] + dataset["Parch"]

dataset.loc[dataset["relatives"] > 0, "not_alone"] = 0

dataset.loc[dataset["relatives"] == 0, "not_alone"] = 1

dataset["not_alone"] = dataset["not_alone"].astype(int)

train_df["not_alone"].value_counts()

有无亲属:

1 537

0 354

Name: not_alone, dtype: int64

axes = sns.factorplot("relatives","Survived",

data=train_df, aspect = 2.5, )

结果展示:

axes = sns.catplot("relatives", "Survived", data = train_df, aspect = 2)

亲属的数量为1-3个时,有较高的幸存率,低于1个或者高于3个幸存率下降,亲属数量为6个时除外。

本篇结束,下篇将展示特征进行数值化处理的过程与结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值