机器学习(二) -- 数据预处理(1)

系列文章目录及链接

上篇:机器学习(一) -- 概述-CSDN博客
下篇:机器学习(二) -- 数据预处理(2)
           机器学习(二) -- 数据预处理(3)


前言

tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看的,可自行跳过。文章内容被“文章内容”删除线标记的,也可以自行跳过。“!!!”一般需要特别注意或者容易出错的地方。

本系列文章是作者边学习边总结的,内容有不对的地方还请多多指正,同时本系列文章会不断完善,每篇文章不定时会有修改。

本章开始会用到numpy,pandas以及matplotlib,这些就不在这讲了哈。

第一文主要简述了一下机器学习大致有哪些东西(当然远远不止这些),对大体框架有了一定了解。接着我们根据机器学习的流程一步步来学习吧,掐掉其他不太用得上的步骤,精练起来就4步(数据预处理,特征工程,训练模型,模型评估),其中训练模型则是我们的重头戏,基本上所有算法也都是这一步,so,这个最后写,先把其他三个讲了,然后,在结合这三步来进行算法的学习,兴许会好点(个人拙见)。


一、概述

还是先拿出咱们的老朋友,机器学习的流程图。

咱们这主要将数据预处理,而要进行机器学习首先需要数据,然后才能对数据进行预处理。

实际一点讲:数据清理、数据集成、数据变换、数据规约都是数据预处理的主要步骤,但是这四个没有严格意义上的先后顺序,在实际应用时并非全部会被使用(可能一个也不用,比如后面我们直接调用官方的iris包,但在实际自己获得的数据集中就会有各种各样的问题,视情况而定)

 1、Scikit-learn安装

pip install sklearn 

检查是否安装好:

1.通过导入命令查看是否可以使用

import sklearn

2.pip list查看安装列表

(在终端和在IDE里面是一样的效果哈)

二、数据获取

获取数据途径多种多样,(括号内为废话:按理来讲,当今世界数据就是财富,一般而言别人的数据是不可能透露给你的,如果你和我一样还是个学生,可能可以从老师那里拿到数据),我们学习一般使用的是公开的数据集,如下为sklearn数据集(也是需要先安装sklearn库的哈)

(iris为例)(load*与fetch*的差别是,fetch还需要从网上下载,而load已经在datasets中了,也就是安装好sklearn就可以直接使用)

from sklearn.datasets import load_iris
iris = load_iris()

这样就获取到一个数据集了,但是我们还不知道这个数据集的其他性质。load*函数和feth*函数返回的数据类型是 datasets.base.Bunch,本质上是一个 dict,它的键值对可用通过对象的属性方式访问。(我用IDE的是Jupyter Notebook)

主要包含以下属性:

DESCR数据描述
feature_names特征名
target_names标签名
data特征数据数组
target标签数组
filename真实的文件地址
frame特殊返回值

1、DESCR

print(data.DESCR)  

从数据集描述中我们可以得到大量信息,150条数据,4个属性,分为3类等等

2、feature_names

print(iris.feature_names)

4个属性(特征)分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。

3、target_names

print(iris.target_names)

3种分类为三鸢尾、变色鸢尾、维吉尼亚鸢尾(好吧,这个不重要)

4、data

print(iris.data)

5、target

print(iris.target)

(刚好150条,你们快数数,坏笑QvQ)

6、***filename

导入的数据的绝对路径文件名

7、***frame

特殊返回值,其实用不到。

三、数据分布与趋势探查

想要查看数据分布,无疑通过数据可视化展示是最直观的,所以我们需要根据不同数据,分别绘制不同的图。

1、散点图

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=<deprecated parameter>, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

常用:
plt.scatter(x,y,s=area,c='r',marker='.',alpha=0.5)

x:横坐标,
y:纵坐标,
s:标记的面积。控制每个点大小的列表,
c:标记的颜色。
marker:标记样式,
alpha:数据点透明度,0-1之间
sale = pd.read_excel('./data/sale.xlsx')
sale = np.array(sale)

fig = plt.figure()
plt.scatter(np.arange(len(sale)),sale,c='r',marker='.')
plt.xlabel('第x个数')
plt.ylabel('销售量')
plt.title('销售量情况')
plt.show()

最常用的就是散点图了,一般的数据都可以用散点图画出来(高维的选其中某一个特征即可)。 

 通过散点图,就可以大致清楚其数据分布,(这里只是一列销售量的数据哈,如果把x看成日期,我就可以看到每天销售量的情况,这种通过折线图更好展示。所以看下面的折线图。)

2、折线图

plot其实超牛的,而且也是可以画散点图的,还有更多plot小妙招等你发现。

#单条线:
plot(x, y, [format_string], **kwargs)
 
#多条线
plot(x, y, [format_string], x2, y2, [format_string], ..., **kwargs)


x:横坐标,
y:纵坐标,
format_string:控制曲线的格式字串,由颜色,标记和线条样式组成

eg:plot(x, y,'r*-', **kwargs)
红色,星形数据点,直线


也可以不用简写
eg:plot(data,'o',ms=20,mfc=k,mec=r)
data:没看错,他可以直接把一个合适格式的数据直接传进去,不一定非要x、y
'o':圆形标记
ms:标记大小
mfc:内部颜色
mec:边框颜色

等等……
fig = plt.figure()
plt.plot(np.arange(len(sale)),sale,'ro-')
plt.xlabel('第x个数')
plt.ylabel('销售量')
plt.title('销售量情况')
plt.show()

3、频率分布直方表、图

好,现在我们想了解每个销售端的数据分布情况,就可以画频率分布直方图。

我们需要一步一步计算(这也就是喜欢用jupyter的原因,可以一步一步写容易找到自己那里有问题),

这里的思路是:

要先计算极差,然后根据极差和组距确定组数,再用np.linspace()对数据进行切片,也就是确定每组之间的“分割点”,最后确定最终组距。

也可以有其他思路:

比如先确定组数,在算组距。再比如觉得这个区间范围的数字不好看,想取整数,也是可以的……(等等。可自由发挥)

这个表呢,看个人,想要就绘制一个吧,但一般没必要。

好,上面一大堆讲完了,其他那是用画柱状图的方式来画直方图,可以直接使用hist能得到相似(不完全一样哈)效果。

plt.hist(data,num)

num:组数(分成几组)

# 还有些高级操作,但意义不大哈,用到时,我们再来看
plt.hist(sale,8)
plt.xlabel('分布区间')
plt.ylabel('频率')
plt.title('频率分布直方图')
plt.show()

4、柱状图

其实直方图就是柱状图(柱形图)的一种啦,所以和上面没啥本质差别。

plt.bar(x, y, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

x:
y:
width:柱子的宽度,默认0.8
bottom:柱子的基准高度,默认0
align:柱子在x轴上的对齐方式。字符串,取值范围为{'center', 'edge'},默认为'center'。
    'center':x位于柱子的中心位置。
    'edge':x位于柱子的左侧。如果想让x位于柱子右侧,需要同时设置负width 以及align='edge'。
# 绘制柱形图
fig = plt.figure()
plt.bar(greens.loc[:, '菜品名'], greens.loc[:, '盈利'])
plt.title('10种菜品盈利分布(柱形图)')
plt.xlabel('菜品名')
plt.ylabel('盈利/元')
plt.show()

5、饼图

饼图查看占比是更好用。

plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)

常用:
plt.pie(x, labels=None, colors=None, autopct=None)

x:
labels:每个饼块的标签。字符串列表。
colors:每个饼的颜色。
autopct:饼块内标签。
# 绘制饼图
fig = plt.figure()
plt.pie(greens.loc[:, '盈利'], labels = greens.loc[:, '菜品名'], autopct='%1.2f%%')
plt.title('10种菜品盈利分布(饼图)')
plt.show()

6、数据的统计信息

对于dataframe类型数据pd提供info()和describe(),可以回去数据的基本信息和统计信息。

info()可以看出来这个数据集具有91条数据,行为时间格式,从2014-04-01到2014-06-30。共一列数据即销售额(元),91个非空,这个函数后面数据清洗也会用到。

describe()包含的统计信息分别是:总数(count),平均值(mean),标准差(std),后5个位四分位数:最小值(min),下分位数(25%),中位数(50%),上分位数(75%),最大值(max),

还可以自己添加一些信息,如:

7、***复杂折线图

饼图查看占比是更好用。

8、***分段绘图

9、***帕累托图(Pareto chart)


旧梦可以重温,且看:机器学习(一) -- 概述
欲知后事如何,且看: 机器学习(二) -- 数据预处理(2)

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值