数据挖掘实战 —— 泰坦尼克号

  • 一、数据指导
  • 二、数据源
  • 三、理解数据
    • 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属性

  1. 简单粗暴方法:
# 取 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()

  1. 深入方法: 在姓名属性中,我们可以发现 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

数据挖掘实战 —— 泰坦尼克号相关推荐

  1. SAS数据挖掘实战篇【六】

    SAS数据挖掘实战篇[六] 6.3  决策树 决策树主要用来描述将数据划分为不同组的规则.第一条规则首先将整个数据集划分为不同大小的 子集,然后将另外的规则应用在子数据集中,数据集不同相应的规则也不同 ...

  2. 【机器学习】数据挖掘实战:金融贷款分类模型和时间序列分析

    今天给大家带来一个企业级数据挖掘实战项目,金融贷款分类模型和时间序列分析,文章较长,建议收藏! 如果本文对你有所帮助,记得文末点赞和在看,也可分享给你需要的朋友- 项目背景 银行和其他金融贷款机构经常 ...

  3. SAS数据挖掘实战篇【五】

    SAS数据挖掘实战篇[五] SAS--预测模型 6.1 测模型介绍 预测型(Prediction)是指由历史的和当前的数据产生的并能推测未来数据趋势的知识.这类知识可以被认为是以时 间为关键属性的关联 ...

  4. R语言数据挖掘实战系列(4)

    R语言数据挖掘实战系列(4)--数据预处理 数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定的挖掘技术或工具.数据预处理的主要内容包括数据清洗.数据集成.数据变换和数据规约. 一. ...

  5. 【数据挖掘实战】——航空公司客户价值分析(K-Means聚类案例)

    目录 一.背景和挖掘目标 1.RFM模型缺点分析 2.原始数据情况 3.挖掘目标 二.分析方法与过程 1.初步分析:提出适用航空公司的LRFMC模型 2.总体流程 第一步:数据抽取 第二步:探索性分析 ...

  6. 数据挖掘实战—家用热水器用户行为分析与事件识别

    文章目录 引言 一.数据探索分析 1.数据质量分析 1.1缺失值分析 1.2 异常值分析 1.3 重复数据分析 2.数据特征分析 2.1 分布分析 三.数据预处理 1.数据归约之属性归约 2.数据归约 ...

  7. 数据挖掘实战—商品零售购物篮分析

    文章目录 引言 一.数据探索性分析 1.数据质量分析 1.1 缺失值分析 1.2 异常值分析 1.3 重复数据分析 2.数据特征分析 2.1 描述性统计分析 2.2 分布分析 2.2.1 商品热销情况 ...

  8. 数据分析与数据挖掘实战案例本地房价预测(716):

    数据分析与数据挖掘实战案例(7/16): 2022 年首届钉钉杯大学生大数据挑战赛练习题目 练习题 A:二手房房价分析与预测 要点: 1.机器学习 2.数据挖掘 3.数据清洗.分析.pyeahcrs可 ...

  9. 数据挖掘实战—餐饮行业的数据挖掘之挖掘建模

    文章目录 引言 一.分类与预测 1.常用的分类与预测算法 2. 回归分析 3.决策树 4.人工神经网络 二.聚类分析 1.常用的聚类分析算法 2.K-Means聚类算法 2.1 算法过程 2.2 数据 ...

  10. 数据挖掘实战:个人信贷违约预测

    大家好,我是东哥.本次分享一个数据挖掘实战项目:个人信贷违约预测,此项目对于想要学习信贷风控模型的同学非常有帮助,本文首发于公众号:Python数据科学,作者云朵君. 一.个人征信预测模型 1.项目背 ...

最新文章

  1. switch语句中在case块里声明变量会遇到提示“Expected expression before...的问题
  2. poladuo network 轻松解决Windows系统棘手问题
  3. 如何在微信中增加附件?
  4. python中fit内参数的类型_Python fit
  5. 第八章 流量复制/AB测试/协程
  6. mysql 优化rand_mysql优化--巧用rand(),with rollup,help__update2014.1.13
  7. Java TCP/UDP编程
  8. 卧式储罐液位体积计算公式excel_2020晋中化工防腐储罐订做欢迎来电-环保设备...
  9. Hadoop学习笔记一:单节点安装
  10. 升级 Node.js 版本遇到的 co 和 pm2 问题解析
  11. 南昌大学c语言程序设计,南昌大学C语言程序设计试卷C语言2.doc
  12. 37 | 个人成长:学习安全,哪些资源我必须要知道?
  13. 理解泰勒中值定理1的证明过程的两个影响理解的简单隐含推导
  14. 微信朋友圈python广告演员_Python制作微信好友背景墙教程(附完整代码)
  15. 鸿蒙操作系统游戏模式,鸿蒙OS 2.0采用鸿蒙和Android 10双架构,游戏性能比EMUI11表现好...
  16. RACI 职责分配矩阵 模型使用详解及案例分析
  17. 将Liunx装入移动硬盘,实现即插即用
  18. android 手柄助手,新游手柄助手app
  19. zookeeper集群启动时配置异常 myid file is missing
  20. 关于texpad编译后无法找到目录的.toc文件

热门文章

  1. 决策树实现手写体识别
  2. x,y直角坐标系转经纬度WGS-84坐标系
  3. mean shift segmentation matlab,Mean Shift图像分割算法的并行化
  4. 基于PHP+MySQL企业工资管理系统的设计与实现(含论文
  5. 计算机丢失d3dx934,d3dx9_34.dll
  6. 用python证明采样定理_这一切都从指数函数开始(4)——采样定理
  7. 数据安全分类分级剖析
  8. Java面试智力题逻辑题汇总2021
  9. DevExpress去除多国语言包
  10. 网络互联课程设计(校园网和企业网)