[B3]泰坦尼克号数据分析

2023-11-27 03:00

本文主要是介绍[B3]泰坦尼克号数据分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是我做的第一个半完整的数据分析项目,里面包含数据获取,数据清洗,描述性统计,数据可视化,机器学习建模等内容。花了我两天时间,中间出了很多bug,而且原始数据也有问题,因此存在较多缺陷,还请各位大佬多多指教!
目录:
1.数据获取
2.数据预处理
3.描述性统计
4.变量分布统计
5.探索变量间的关系
6.特征处理
7.机器学习建模
8.模型准确性评估

第一步:数据获取
直接从互联网获取数据

import pandas as pd
#利用pandas的read_csv模块直接从互联网搜集泰坦尼克号乘客数据
titanic= pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')

观察前几行数据,可以发现数据种类各异。
第二步:数据预处理

#查看数据集的行列数
titanic.shape
#查看前3行数据
titanic.head(3)

在这里插入图片描述
第三步:汇总及描述性统计

#查看数据缺失值,数据类型等情况
titanic.info()

在这里插入图片描述
借以上输出,设计如下几个数据处理任务
(1)age这个数据列,只有633个,需要补完
(2)sex与pclass都是类别型的,需要转化为数值特征,用0/1替代

#首先补充age里的数据,使用平均数或者中位数都是对模型偏离造成最小影响的策略
titanic['age'].fillna(titanic['age'].mean(), inplace=True)#对补充完整的数据进行重新探查
titanic.info()

在这里插入图片描述
此时缺失值被我们补全

#统计每一列的均值。最大值,最小值,分位数等
titanic.describe(include='all')

在这里插入图片描述
以上输出可得知:约有34%的人获救了,乘客年龄平均31.1岁
第四步:变量分布统计

#1.获救情况分布,共1313位乘客,仅446人幸免遇难,占比34%
titanic['survived'].value_counts().plot(kind='bar',color='yellow',title='Rescue situation', rot=360)

在这里插入图片描述

#2.性别分布,共1313位乘客,男性乘客就有573位,占比43.64%
titanic['sex'].value_counts().plot(kind='bar',color='pink',title='Gender distrbution', rot=360)

在这里插入图片描述

#3.船舱分布,其中三等舱人数最多,一等舱人口次之
titanic['pclass'].value_counts().plot(kind='bar',color='green',title='GePclass distrbution', rot=360)

在这里插入图片描述

#接下来探索连续性变量age
#4.年龄分布,主要集中在20-40岁之间
titanic['age'].plot(kind='hist',color='pink',title='Age distrbution')

在这里插入图片描述
第五步:探索变量之间的关系
1.探索单个变量与survived的关系
由于地位高的人可能最先获得救助,表明age,sex与pclass可能是影响生存的关键因素

#首先通过分组和聚合两种机器学习函数来实现
titanic[['sex','survived']].groupby(['sex'], as_index=False).mean().sort_values(by='survived', ascending=False)

在这里插入图片描述

#也可以通过透视表的方式来实现
sex_pivot = titanic.pivot_table(index='sex',values='survived')
sex_pivot

在这里插入图片描述

import matplotlib.pyplot as plt
#构造sex与survived均值的条形图
sex_pivot.plot.bar(rot=360)

在这里插入图片描述
很显然女性的幸存比例明显高于男性
现在再来看pclass与survived的关系:

titanic[['pclass','survived']].groupby(['pclass'], as_index=False).mean().sort_values(by='survived', ascending=False)

在这里插入图片描述

class_pivot = titanic.pivot_table(index='pclass', values='survived')
class_pivot

在这里插入图片描述

class_pivot.plot.bar(rot=360)

在这里插入图片描述
可见,一等舱幸存比例的确最高,表现出地位不平等关系
2.探索多个变量与survived之间的关系

import seaborn as sns
g= sns.FacetGrid(titanic, col='survived')
g.map(plt.hist, 'age', bins=20)

在这里插入图片描述
首先探索年龄与获救人数的关系:
获救人群中20-40岁的占比最多;遇难人群中18-30的占比最多

grid=sns.FacetGrid(titanic, col='survived',row='pclass', height=2.2, aspect=1.6)
grid.map(plt.hist, 'age',alpha=0.5,bins=20)

在这里插入图片描述
#探索年龄,舱位与获救人数的关系:
#一等舱获救人数最多

grid=sns.FacetGrid(titanic,row='embarked', height=2.2, aspect=1.6)
grid.map(sns.pointplot,'pclass','survived',palette='deep',order=[1,2,3], hue_order=['male','female'])
grid.add_legend()

这里图没有加载出来,出了个bug
由图可以看出:一等舱中从港口Q和港口S登船的女性基本都获救了,从C口登船的男性获救比例很高
第六步:特征处理
1.头衔转换
由于name列表中有不同的称呼如Mr,Dr等,代表了不同地位,因此我们单独把这一属性摘出来列成一列

titanic['Title'] = titanic['name'].str.extract('([A-Za-z]+)\.', expand=False)
#交叉表
pd.crosstab(titanic['Title'],titanic['sex'])

在这里插入图片描述
由于数据存在缺陷无法进一步分析;跳到下一步
2.年龄转换
通过Series.descibe()查看age列的概况

titanic['age'].describe()

在这里插入图片描述
乘客年龄分布在0.16-71之间
由于年龄字段是一个连续变量,可以通过直方图查看其分布情况
使用布尔索引分别得到获救与未获救DataFrame

survived = titanic[titanic['survived']==1]
died = titanic[titanic['survived']==0]
#建立直方图查看不同年龄获救对比情况
survived['age'].plot.hist(alpha=0.5,color='red',bins=50)
died['age'].plot.hist(alpha=0.5,color='blue',bins=50)
plt.legend(['survived','died'])

在这里插入图片描述
可以看到幸存乘客年龄集中分布在30岁左右,遇难乘客也集中分布在这个年龄层次,当然不排除原始数据缺陷
接下来使用pandas.cut()函数将年龄字段进行分段,转换成类别变量:
先创建一个函数,使用pandas.fillna()方法用-0.5填充所有缺失值
将age变成六段
Missing, from -1 to 0
Infant,from 0 to 5
Child,from 5 to 12
Teenager, from 12 to 18
Young Aault,from 18 to 35
Adult, from 35 to 60
Senior, from 60 to 100

#定义年龄分段处理函数
def process_age(df, cut_points, label_names):df['age'] = df['age'].fillna(-0.5)df['age_categories'] = pd.cut(df['age'], cut_points, label_names)return dfcut_points = [-1,0,5,12,18,35,60,100]
label_names=['Missing','Infant','Child','Teenager','Young Aault','Adult','Senior']#在训练集上调用 process_age函数
titanic =process_age(titanic, cut_points, label_names)#查看分段后的年龄与生还的关系
pivot=titanic.pivot_table(index="age_categories", values='survived')
pivot.plot.bar(rot=360)
plt.show()

我这里又报错了,大佬们可以帮我看看啥原因
在这里插入图片描述
第八步:机器学习建模分析
1.分割训练数据
将训练集分成两个部分,20%的数据用来预测,80%的数据用来训练
通过sklearn中的model_selection.train_test_split()函数进行数据切割
包含两个参数,X指的是特征变量,y值得是目标变量,返回四个对象:train_X train_y test_X test_y

from sklearn.model_selection import train_test_split
#将要放入模型进行训练的特征变量:
columns = ['pclass_1', 'pclass_2', 'pclass_3', 'sex_female', 'sex_male','age_categories_Missing', 'age_categories_Infant', 'age_categories_Child','age_categories_Teenager', 'age_categories_Young Aault','age_categories_Adult', 'age_categories_Senior'
]
all_X =titanic[columns]#训练集的目标变量
all_y = titanic['survived']
train_X,test_X,train_y,test_y = train_test_split(all_X,all_y, test_size=0.20, random_state=0)

2.使用LogisticRegression建模

#导入sklearn里的LogisticRegression模型
from sklearn.linear_model import LogisticRegression
#创建LogisticRegression对象
lr = LogisticRegression()#使用LogisticRegression.fit()方法来训练模型
lr.fit(titanic[columns],titanic['survived'])

第九步:模型准确度评估

lr = LogisticRegression()
lr.fit(train_X,train_y)
predictions = lr.predict(test_X)
#使用metrics.accuracy_score()函数进行准确性评估
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(test_y,predictions)
print('The accuracy of LogisticRegression is:')

最后精确度应该在79%左右,说明模型预测还是比较准确的。

好了,今天的案例就给大家分享到这里了,做完一整个流程下来才发现自己要学习的东西太多了,希望以后能够不断进步,与君共勉!

这篇关于[B3]泰坦尼克号数据分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426905

相关文章

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

win7下安装Canopy(EPD) 及 Pandas进行python数据分析

先安装好canopy,具体安装版本看自己需要那种,我本来是打算安装win764位的,却发现下载总是出现错误,无奈只能下载了32位的! https://store.enthought.com/downloads/#default 安装好之后,参考如下连接,进行检验: 之后再根据下面提供的连接进行操作,一般是没问题的! http://jingyan.baidu.com/article/5d6

「大数据分析」图形可视化,如何选择大数据可视化图形?

​图形可视化技术,在大数据分析中,是一个非常重要的关键部分。我们前期通过数据获取,数据处理,数据分析,得出结果,这些过程都是比较抽象的。如果是非数据分析专业人员,很难清楚我们这些工作,到底做了些什么事情。即使是专业人员,在不清楚项目,不了解业务规则,不熟悉技术细节的情况下。要搞清楚我们的大数据分析,这一系列过程,也是比较困难的。 我们在数据处理和分析完成后,一般来说,都需要形成结论报告。怎样让大

结合Python与GUI实现比赛预测与游戏数据分析

在现代软件开发中,用户界面设计和数据处理紧密结合,以提升用户体验和功能性。本篇博客将基于Python代码和相关数据分析进行讨论,尤其是如何通过PyQt5等图形界面库实现交互式功能。同时,我们将探讨如何通过嵌入式预测模型为用户提供赛果预测服务。 本文的主要内容包括: 基于PyQt5的图形用户界面设计。结合数据进行比赛预测。文件处理和数据分析流程。 1. PyQt5 图形用户界面设计

使用AI大模型进行企业数据分析与决策支持

使用AI大模型进行企业数据分析与决策支持已成为现代企业管理的重要趋势。AI大模型凭借其强大的数据处理能力和智能分析功能,能够为企业提供精准、高效的数据分析服务,进而支持企业的决策过程。以下是使用AI大模型进行企业数据分析与决策支持的具体方式和优势: 一、AI大模型在数据分析中的应用 超级数据处理能力 海量数据处理:AI大模型能够同时处理海量数据,包括结构化数据、非结构化数据等,满足企业大规模

AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)

AIGC与数据分析融合,引领商业智能新变革(TOP企业实践) 前言AIGC与数据分析融合 前言 在当今数字化时代,数据已成为企业发展的核心资产,而如何从海量数据中挖掘出有价值的信息,成为了企业面临的重要挑战。随着人工智能技术的飞速发展,AIGC(人工智能生成内容)与数据分析的融合为企业提供了新的解决方案。 阿里巴巴作为全球领先的科技公司,一直致力于探索和应用前沿技术,以提升企业

技术培训 | 大数据分析处理与用户画像实践|预告

主题: 大数据分析处理与用户画像实践 时间: 5 月 11 日 20:00 —— 21:30 地点: QingCloud 技术分享群,文末有二维码。 讲师: 孔淼 诸葛io 创始人 & CEO 90 后连续创业者,曾任 37degree CTO ,在任 37degree CTO 期间,孔淼曾带领团队服务 CCTV 、海尔、聚美优品、宝马等知名企业,对大数据分析的技术与行业有深厚的理解

用ACF和PACF计算出一堆数据的周期个数以及周期时长,数据分析python

具体步骤 1使用ACF和PACF:可以通过查看ACF图中的周期性峰值,找到数据中的周期性。如果ACF图在某个滞后期处出现显著的正相关峰值,并且这种模式在多个滞后周期中重复出现,这就是周期性信号的特征。而PACF则可以帮助确定延迟的直接影响。 2找周期数和周期长度:周期的时长可以通过ACF中第一个显著的峰值(排除滞后期为0时的峰值)来确定,而周期的个数则可以通过分析整个序列中的周期性重复次数来估计

python 数据分析 高效的学习路径

一、数据分析师应该具备哪些技能 数据分析人才热度也是高居不下,一方面企业的数据量在大规模的增长,对于数据分析的需求与日俱增;另一方面,相比起其他的技术职位,数据分析师的候选者要少得多。 要明确学习的路径,最有效的方式就是看具体的职业、工作岗位对于技能的具体需求。 我们从拉勾上找了一些最具有代表性的数据分析师职位信息,来看看薪资不菲的数据分析师,到底需要哪些技能。 其实企业对数据

Tushare库:Python金融数据分析的利器

文章目录 Tushare库:Python金融数据分析的利器一、引言二、Tushare库的安装与基础应用1、安装Tushare2、基础用法1.1 导入Tushare库1.2 获取数据 三、深入应用:案例分析1、股票收益策略模拟1.1 数据获取与处理1.2 策略模拟 四、总结 Tushare库:Python金融数据分析的利器 一、引言 在金融数据分析领域,Python因其强大