后发习得数据 机器学习_机器学习第一步,查看数据和数据基本清理

a2acd4bc94b4c98b144d112849170d13.png

今天,我们来讲讲机器学习的第一步——

查看数据和做数据基本清理

为了讲清楚,学院君决定找个数据集为例!

泰坦尼克号

- Titanic -

如果我们需要对一个数据进行机器学习,查看数据是第一个步骤,全方位查看数据并且对数据进行描述性统计分析可以有利于大家充分理解这个数据的性质,从而为建模定下良好的基础。

914433a9c5b4e805b1e06ccd240d3f34.gif

~下面来嗦一嗦几个必经步骤~

准备工作

首先我们会用到的包

Pandas, Numpy, Matplotlib

Pandas是基于NumPy的一个数据分析包,它提供了大量能使我们快速便捷地处理数据的函数和方法,例如求和用到的sum(),求均值用到的mean()等。此外,Pandas中的Series,Time- Series,DataFrame等数据结构也使得我们能够边界地进行数据分析。

Numpy是Python的一个扩展程序库,支持大量的维度数组与矩阵运算。同时,它也针对数组运算提供了大量运行速度非常快的数学函数库,包括:1. 一个强大的N维数组对象Array;2. 比较成熟的广播函数库;3. 用于整合C/C++和Fortran代码的工具包;4. 实用的线性代数、傅里叶变换和随机数生成函数。

Matplotlib是一个便捷的2D绘图库,我们仅需要几行代码,便可以作出具有出版质量级别的直方图,功率谱,条形图,错误图,散点图等图形。

我们会用到的环境:Jupyter notebook

Jupyter Notebook 是一款开源的 Web 应用程序,可让我们创建并共享代码和文档。

它提供了一个环境,它可以用来记录代码,运行代码,查看结果,可视化数据并在查看输出结果。这些特性使它成为一款便捷的数据科学工具,可以用于数据清理,统计建模,构建和训练机器学习模型,可视化数据以及许多其他用途。主要是它看起来也非常美观呀~!

把从网站下好的训练集和测试集数据导入进Python环境中,并分别赋值为train_df, test_df;然后分别查看训练集和测试集的数据维度。

这里学院君准备了三个包以及导入数据和jupyter notebook的cheatsheet,欢迎大家回复“速查“领取, 都是非常非常好的学习资料哦!

502065222ad051701f456ca60c4690f3.png 代码如下 502065222ad051701f456ca60c4690f3.png

84f6504f68c417786cfc50f542257b49.png

01

观察数据

查看数据步骤依次如下

依次查看训练集和测试集数据的表头名称,也就能发现泰坦尼克号数据集里的这些主要变量名称啦!

c252da99880505495f91f192801d3cb8.png

然后再输入head函数,则可以直接调出数据集前五行的表单;

6ecde35da4ffa7d566408ca3c1f01653.png 8918c0f0f5b299e7bae2f7c8af47ce40.png

于是我们发现,泰坦尼克号的变量包括

Passagerid:乘客的ID,每个乘客都是不同的。

Survived:乘客最后能否存活下来。

Pclass:客舱的等级,分为123。1为最高等级。

Name:乘客名字,其中可以看到会有称呼,小姐、先生等等,接下来会用到名字上的称呼。

Sex:性别,分为男性、女性。

Age:年龄,可以看到有Nan,表示这个数据是缺失的,缺失数据在机器学习中是经常需要应对的问题,即数据经常不是完整的,所以要对缺失的数据进行填充等等。

SibSp:每一位乘客兄弟姐妹和伴侣的数量,可以看到一般都是0和1比较多。

Parch:每一位乘客孩子或父母的数量。

Ticket:船票的号码,没有具体的意义在其中,只是像ID一样。

Fare:票的价格,在不同地方登上泰坦尼克号、舱位不同,价位也会不同。

Cabin:不同舱位,也可以看到有缺失数据。

Embarked:乘客从哪几个港口登上泰坦尼克号,有三个不同港口,之后也会对这一数据进行利用。

c455941528d87e2f2a7425b83801a5ee.gif

说到变量,变量分为两种,一种是分类变量,一种是数字变量;

分类变量是用来说明事物类别的,其取值是分类数据,例如“性别”就是一个分类变量,其取值为“男”或“女”。

数字变量是用来说明事物的数字特征的,其取值是数值型数据,例如“年龄”就是一个数字变量,它可以取不同的数值。

Info函数可以帮我们查看变量的基本类型,并且能直观反映出来缺失值的情况;

879c70e9390854965978da3a8827c30d.png

我们在输入这个函数之后,得出来的结果:

4d573ad975e6da32de6ab57e59678a71.png

我们可以发现,完整的数据是有891行,其中年龄、舱位、登船城市有明显缺失值。

接下来我们再用新的函数看一下三种变量都缺失了多少:

708b98f0f58557d0462370a371c325cc.png bedabc4c55440ba8466885f258b4f953.png

在开始清理缺失值前,让我们先来对数据做一个描述性统计分析吧!

02

描述性统计分析

描述性统计分析简而言之,就是对数据的各种特征进行描述。

一个数据集里最常见的特征呢,其实就是我们所有中国学生初高中都会学习到的平均数、中位数、众数(想不起来的回去翻课本!)。

在处理数据集中,我们还有其他的特征需要重点观察(听好了,拿起小本本认真记):极差、四分位距、标准差、方差

这些概念能帮我们搞明白数据的分布情况,集中程度和离散程度,因此先对数据进行描述性统计分析十分关键呢!

功能强大的python里,我们仅仅用一个函数就可以计算出描述性统计的数个重要指标,例如每一个数字变量的平均数、标准差、极差、分位数等等重要统计概念。

cb5fc24c1ee876d75120d08351e3a307.png

当我们对数据有了一些统计上的基本认知以后,可以简单地画几个图来帮忙更加直观的了解数据。

048c7124d8c055ed26db43c0de1258d4.gif

学院君注:数据可视化在数据分析工作中是至关重要的一步,能反映你的数据情况,也能帮你更直观地表达思想,我们做了如下两个图:

1. 绘制年龄分布直方图

横轴为年龄,纵轴为人数

8e89f67bc181586ba91dd54c9519d484.png b0fc150ad88c1c0536165e705820afb9.png

2.绘制各年龄层性别分布直方图

横轴为年龄,纵轴为人数

8cde7bbccb90d102a6283f75386b4c8e.png 1ee2ab27f65119b8348278f7804fab25.png

从上面的两个直方图,我们就可以更清晰地看出每个年龄层有多少人,男女比例如何。从图中可知岁数在20~40岁的乘客是最多的,而其中男性又多于女性。

03

清理缺失值

在之前的代码操作中,我们已经看到Cabin这个变量的缺失值是最多的;年龄、舱位、登船城市有明显缺失值,但我们将会选用年龄和舱位两个变量进行填补,暂且认为登船城市不会对生还结果有明显影响,所以不作为主要建模变量。

缺失值是处理数据必须要经历的一个步骤,因为现实生活中你不会拿到的不会是完美数据,而有的重要变量恰恰缺失值很多,如果不处理,将会对建模和分析产生很大影响啦。

类似登船城市这种不重要且缺失严重的变量,可以考虑删掉;

针对数值型变量;我们可以选择用这个变量的平均数来填补;如果是泰坦尼克号数据集里年龄这种非数值型变量,则应该使用众数来填补(这里犯迷糊的小朋友要好好思考一下平均数和众数的概念区别了哦!)

不过这次学院君要采取两种不一样的方法来处理年龄和舱位的缺失值:

对于年龄数据,我们采用比较高级的方法进行填充,这样得到的数据也更加精准。我们先看一下每一个年龄层次对应着多少的人:

4475414d62dbcb6b1b4deb0aaffd430c.png

这里使用的是value_counts(),如果在括号内加上normalize = true,就不再是原来的数字而是百分比,相当于是相应年龄段的数量除以总数。在接下来会用到百分比。因为这里有177个缺失的数据,我们就以每个年龄段具体比例来进行填充。这样得到的年龄的结构的分布就会和原来的几乎是一样的。

有了这个比例后先要找到missing age的位置,使用isnull function:

d2d26bff58483e63da612f93bfc68e6c.png

可以看到False指非空数据,True指数据是缺失的。得到缺失的Age的坐标后,可以使用numpy function进行填充:

9531b3837b97056bb8cc1c6738dcc5c7.png

首先找到位置:

loc指location;

missing_age指从横向来看,‘Age’指列;

如果打印出来,即对177个数据进行填充。

其次看填充的方法:

填充的方法用到了np.random.choice:

random.choice指要进行一些随机的选择。

进行随机选择时,有三个东西要进行定义

第一个就是index,就是指上方s的index。

其次len就是指长度,即为177对,也就是要填充177个数据,len及括号内内容也可以改为177,效果相同。

最后p是指概率,每个里面要填充的概率,而s.value是刚刚有的一些value。

ba8bc17b85971d1984ffc1d59f2e9fc8.gif

这样,我们就可以按照已有年龄数据的分布情况将缺失数据填充完整了。

对于舱位变量,由于完整的数据一共有891行,舱位数据缺失了接近700个,接近总数值的80%,在这种情况下基本可以确定不能使用这种数据,因为数据缺失太多,进行人工填充很容易产生很大误差或其他情况。因此,我们将Ticket和Carbin变量删掉。

26ebfd3e4f3e5e760ab556480d82d8a0.png c8f3d7d6c8dab3ac0d27ac27204e3ccb.png

今天的讲解又告一段落啦→

过年后会继续给大家复盘有关机器学习的内容,想要了解的同学们请多多捧个人场,路过点个好看叭!

啊,也比忘了上一期趣味介绍——机器学习模型的超“皮”版趣味介绍

以下课程报名未截止,欢迎继续上车

带你去赌城凑热闹,看CES2019---用机器人的手触及未来

猪梦成真 | 你的新年愿望,学院帮你来实现!

Data Science助力传统科研,1V1专属导师带你解锁学术新方向

这1%的稀缺人才,正在用大数据破译生命的秘密

SCI论文冲击计划:这一次,用大数据扼住霾的喉咙

新课预报

新年活动即将上架,敬请期待!

53d5f369ac965cd1c015217b1bbde9ce.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值