数据挖掘实战 —— 泰坦尼克号
数据挖掘实战 —— 泰坦尼克号
- 一、数据指导
- 二、数据源
- 三、理解数据
- 3.1 导包
- 3.2 读取数据
- 3.3 属性介绍
- 四、 填充缺失数据
- 4.1 处理age属性
- 五、分析描述数据
- 5.1 幸存比例
- 5.2 幸存男女比例
- 5.3 幸存年龄比例
- 5.4 身份地位幸存比例
- 5.5 家庭人数幸存比例
- 5.6 特征相关
一、数据指导
# 一、目的:根据已有数据预测未知旅客生死;
# 二、数据准备:数据获取,载入train.csv;
# 三、数据清洗:补齐或抛弃缺失值,数据类型变化;
# 四、数据分析:1 描述性分析:画图,直观分析;2 探索性分析,机器学习模型;
二、数据源
在kaggle上下载数据包:https://www.kaggle.com/c/titanic
把数据源下载下来。
三、理解数据
3.1 导包
import warnings
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsfrom IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all" # 显示所有结果
plt.style.use('fivethirtyeight') #制定画图风格
warnings.filterwarnings('ignore') #将警告过滤掉
plt.rcParams['font.sans-serif'] = ['SimHei']
%matplotlib inline
3.2 读取数据
data = pd.read_csv("D:/test/train.csv")
# data.head(3)
data.tail()
data.shape # train的条数有891条,有12个column
3.3 属性介绍
PassengerId: 乘客ID;
Survived: 是否幸存,0代表遇难,1代表还活着;
Pclass: 船舱等级:1 好,2 中等,3 低等;
Name: 姓名;
Sex: 性别;
Age: 年龄;
SibSp: 兄弟姐妹及配偶个数;
Parch:父母或子女个数;
Ticket: 乘客的船票号;
Fare: 乘客的船票价;
Cabin: 乘客所在的仓位(位置);
Embarked:乘客登船口岸。
# 查看数据的具体字段
data.info()
四、 填充缺失数据
# 统计缺失值
data.isnull().sum()
# 数据描述
data.describe()
我们发现,年龄的缺失值最多,因此我们要填充数据。
# .loc[:,:] 中括号里面逗号前面的表示行,逗号后面的表示列。
data1 = data.loc[:,['PassengerId','Survived','Pclass','Sex','Age','SibSp','Parch','Fare']]
data1.head()
4.1 处理age属性
- 简单粗暴方法:
# 取 age 的中位数填充数据方法
age_median = data1['Age'].median() # 中位数
print("中位数:",age_median)
# 空值使用bool值来查看(这里只是查看,False代表有值)
data1['Age'].isnull().head()# 将age的空值使用中位数代替
data1.loc[data1['Age'].isnull(),'Age'] = age_median
# 统计缺失值
data1.isnull().sum()
- 深入方法: 在姓名属性中,我们可以发现 Mr,Mrs 先生,女士的称谓,隐性的表现年龄。
data['Initial']=0
for i in data:data['Initial']=data.Name.str.extract('([A-Za-z]+)\.')
pd.crosstab(data.Initial,data.Sex) #用性别核对姓名首字母
pd.crosstab(data.Initial,data.Sex).T # 转置
# 转化为:Master、Miss、Mr、Mrs、Other 属性
data['Initial'].replace(['Mlle','Mme','Ms','Dr','Major','Lady','Countess','Jonkheer','Col','Rev','Capt','Sir','Don'],['Miss','Miss','Miss','Mr','Mr','Mrs','Mrs','Other','Other','Other','Mr','Mr','Mr'],inplace=True)
data.groupby('Initial')['Age'].mean() # 求平均# 统计缺失值
data.Age.isnull().sum()# 安装平均数值对age进行填充
data.loc[(data.Age.isnull())&(data.Initial=='Master'),'Age']=5
data.loc[(data.Age.isnull())&(data.Initial=='Miss'),'Age']=22
data.loc[(data.Age.isnull())&(data.Initial=='Mr'),'Age']=33
data.loc[(data.Age.isnull())&(data.Initial=='Mrs'),'Age']=36
data.loc[(data.Age.isnull())&(data.Initial=='Other'),'Age']=46
data.Age.isnull().any() # 显示填充后信息
data.Age.isnull().sum()
五、分析描述数据
5.1 幸存比例
f,ax = plt.subplots(1,2,figsize=(18,8))
Survived_count = data['Survived'].value_counts()sns.countplot('Survived',data=data,ax=ax[0])
ax[0].set_title('幸存比例条形图')
ax[0].set_xlabel('幸存')
ax[0].set_ylabel('数量')explode = [0,0.1]
plt.pie(Survived_count,explode=explode,autopct='%1.1f%%',shadow=True)
ax[1].set_title('幸存比例饼图')# plt.savefig(r"C:\Users\Desktop\幸存比例.png",dpi=400)
plt.show()
5.2 幸存男女比例
# 对性别进行分组,并计数幸存人数
data.groupby(['Sex','Survived'])['Survived'].count()
f,ax = plt.subplots(1,2,figsize=(18,8))
data['Sex'].value_counts().plot.pie(explode=[0,0.1],autopct='%1.1f%%',ax=ax[0],shadow=True)
ax[0].set_title('男女比例饼图')Sex_count = data['Sex'].value_counts()
sns.countplot('Sex',hue='Survived',data=data,ax=ax[1])
ax[1].set_title('男女幸存比例条形图')
ax[1].set_xlabel('男 女')
ax[1].set_ylabel('数 量')# plt.savefig(r"C:\Users\Desktop\男女比例幸存.png",dpi=500)
plt.show()
- 可以发现,在饼图男女比例大约是6.5:3.5,男性死亡人数远高于女性。
- 在条形图,男性死亡(蓝条)人数远高于生存(红条)人数;女性则是反过来。
5.3 幸存年龄比例
f,ax=plt.subplots(1,2,figsize=(20,10))
x1=list(range(0,85,5)) # 年龄间隔
data[data['Survived']==0].Age.plot.hist(ax=ax[0],bins=20,edgecolor='black',color='red')
ax[0].set_title('Survived= 0,死亡')
ax[0].set_xticks(x1)
ax[0].set_xlabel('年 龄')
ax[0].set_ylabel('数 量')data[data['Survived']==1].Age.plot.hist(ax=ax[1],bins=20,edgecolor='black',color='green')
ax[1].set_title('Survived= 1,幸存')
ax[1].set_xticks(x1)
ax[1].set_xlabel('年 龄')
ax[1].set_ylabel('数 量')
# plt.savefig(r"C:\Users\Desktop\年龄幸存图.png",dpi=500)
plt.show()
- 可以发现在25-40岁年龄段是死亡人数最多的,幼童和老人死亡较少,综上符合老人、妇女、儿童性命优先策略。
5.4 身份地位幸存比例
# 对船舱等级分组,并计数幸存人数
# 设船舱等级越高则身份地位越高
data.groupby(['Pclass','Survived'])['Survived'].count()
f,ax = plt.subplots(1,2,figsize=(18,8))
data['Pclass'].value_counts().plot.pie(explode=[0,0.05,0.05],autopct='%1.1f%%',ax=ax[0],shadow=True)
ax[0].set_title('船舱等级比例饼图')Pclass_count = data['Pclass'].value_counts()
sns.countplot('Pclass',hue='Survived',data=data,ax=ax[1])
ax[1].set_title('身份地位幸存比例条形图')
ax[1].set_xlabel('船舱等级==身份地位')
ax[1].set_ylabel('数 量')# plt.savefig(r"C:\Users\Desktop\身份地位幸存者图.png",dpi=500)
plt.show()
- 可以发现船舱等级越高,则幸存比例越大,隐性显示身份地位越高越受到重视,所以金钱和地位很重要。
# 船舱等级和性别对结果的影响
pd.crosstab([data.Sex,data.Survived],data.Pclass,margins=True)# 在船舱等级下的男女幸存比例
sns.factorplot('Pclass','Survived',hue='Sex',data=data)
plt.title("身份地位幸存者图")
plt.xlabel("船舱等级")
plt.ylabel("幸存比例")
# plt.savefig(r"C:\Users\Desktop\身份地位幸存者图.png",dpi=500)
plt.show()
可以很容易地推断,总体上来看,女性优先,且地位高的女性着重救援,例如,pclass1女性生存是95-96%,这是非常之高的幸存比例了。
5.5 家庭人数幸存比例
# sibsip 兄弟姐妹的数量
pd.crosstab([data.SibSp],data.Survived).Tf,ax=plt.subplots(1,2,figsize=(20,8))
sns.barplot('SibSp','Survived',data=data,ax=ax[0])
ax[0].set_title('家庭人数比例条形图')
ax[0].set_xlabel('家庭人数')
ax[0].set_ylabel('比 例')sns.factorplot('SibSp','Survived',data=data,ax=ax[1])
ax[1].set_title('家庭人数比例折线图')
ax[1].set_xlabel('家庭人数')
ax[1].set_ylabel('比 例')
plt.close(2)
# plt.savefig(r"C:\Users\Desktop\家庭人数比例图.png",dpi=500)
plt.show()
可以发现单身的约有35%的存活率,如果有兄弟姐妹的存活率会相应减少。但是令人惊讶的是,5-8名成员家庭的存活率为0%。这是什么原因呢?真是令人疑惑呢…
5.6 特征相关
sns.heatmap(data.corr(),annot=True,cmap='RdYlGn',linewidths=0.2) #data.corr()-->correlation matrix
fig=plt.gcf()
fig.set_size_inches(10,8)
# plt.savefig(r"C:\Users\Desktop\特征相关图.png",dpi=500)
plt.show()
参考来自
https://www.cnblogs.com/bigbigbird/p/12960460.html
数据挖掘实战 —— 泰坦尼克号相关推荐
- SAS数据挖掘实战篇【六】
SAS数据挖掘实战篇[六] 6.3 决策树 决策树主要用来描述将数据划分为不同组的规则.第一条规则首先将整个数据集划分为不同大小的 子集,然后将另外的规则应用在子数据集中,数据集不同相应的规则也不同 ...
- 【机器学习】数据挖掘实战:金融贷款分类模型和时间序列分析
今天给大家带来一个企业级数据挖掘实战项目,金融贷款分类模型和时间序列分析,文章较长,建议收藏! 如果本文对你有所帮助,记得文末点赞和在看,也可分享给你需要的朋友- 项目背景 银行和其他金融贷款机构经常 ...
- SAS数据挖掘实战篇【五】
SAS数据挖掘实战篇[五] SAS--预测模型 6.1 测模型介绍 预测型(Prediction)是指由历史的和当前的数据产生的并能推测未来数据趋势的知识.这类知识可以被认为是以时 间为关键属性的关联 ...
- R语言数据挖掘实战系列(4)
R语言数据挖掘实战系列(4)--数据预处理 数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定的挖掘技术或工具.数据预处理的主要内容包括数据清洗.数据集成.数据变换和数据规约. 一. ...
- 【数据挖掘实战】——航空公司客户价值分析(K-Means聚类案例)
目录 一.背景和挖掘目标 1.RFM模型缺点分析 2.原始数据情况 3.挖掘目标 二.分析方法与过程 1.初步分析:提出适用航空公司的LRFMC模型 2.总体流程 第一步:数据抽取 第二步:探索性分析 ...
- 数据挖掘实战—家用热水器用户行为分析与事件识别
文章目录 引言 一.数据探索分析 1.数据质量分析 1.1缺失值分析 1.2 异常值分析 1.3 重复数据分析 2.数据特征分析 2.1 分布分析 三.数据预处理 1.数据归约之属性归约 2.数据归约 ...
- 数据挖掘实战—商品零售购物篮分析
文章目录 引言 一.数据探索性分析 1.数据质量分析 1.1 缺失值分析 1.2 异常值分析 1.3 重复数据分析 2.数据特征分析 2.1 描述性统计分析 2.2 分布分析 2.2.1 商品热销情况 ...
- 数据分析与数据挖掘实战案例本地房价预测(716):
数据分析与数据挖掘实战案例(7/16): 2022 年首届钉钉杯大学生大数据挑战赛练习题目 练习题 A:二手房房价分析与预测 要点: 1.机器学习 2.数据挖掘 3.数据清洗.分析.pyeahcrs可 ...
- 数据挖掘实战—餐饮行业的数据挖掘之挖掘建模
文章目录 引言 一.分类与预测 1.常用的分类与预测算法 2. 回归分析 3.决策树 4.人工神经网络 二.聚类分析 1.常用的聚类分析算法 2.K-Means聚类算法 2.1 算法过程 2.2 数据 ...
- 数据挖掘实战:个人信贷违约预测
大家好,我是东哥.本次分享一个数据挖掘实战项目:个人信贷违约预测,此项目对于想要学习信贷风控模型的同学非常有帮助,本文首发于公众号:Python数据科学,作者云朵君. 一.个人征信预测模型 1.项目背 ...
最新文章
- switch语句中在case块里声明变量会遇到提示“Expected expression before...的问题
- poladuo network 轻松解决Windows系统棘手问题
- 如何在微信中增加附件?
- python中fit内参数的类型_Python fit
- 第八章 流量复制/AB测试/协程
- mysql 优化rand_mysql优化--巧用rand(),with rollup,help__update2014.1.13
- Java TCP/UDP编程
- 卧式储罐液位体积计算公式excel_2020晋中化工防腐储罐订做欢迎来电-环保设备...
- Hadoop学习笔记一:单节点安装
- 升级 Node.js 版本遇到的 co 和 pm2 问题解析
- 南昌大学c语言程序设计,南昌大学C语言程序设计试卷C语言2.doc
- 37 | 个人成长:学习安全,哪些资源我必须要知道?
- 理解泰勒中值定理1的证明过程的两个影响理解的简单隐含推导
- 微信朋友圈python广告演员_Python制作微信好友背景墙教程(附完整代码)
- 鸿蒙操作系统游戏模式,鸿蒙OS 2.0采用鸿蒙和Android 10双架构,游戏性能比EMUI11表现好...
- RACI 职责分配矩阵 模型使用详解及案例分析
- 将Liunx装入移动硬盘,实现即插即用
- android 手柄助手,新游手柄助手app
- zookeeper集群启动时配置异常 myid file is missing
- 关于texpad编译后无法找到目录的.toc文件