系列文章目录
机器学习(一) -- 概述
机器学习(二) -- 数据预处理(1-3)
未完待续……
目录
系列文章目录
前言
一、概述
二、数据获取
三、数据分布与趋势探查
1、散点图
2、折线图
3、频率分布直方表、图
4、柱状图
5、饼图
6、数据的统计信息
7、***复杂折线图
8、***分段绘图
9、***帕累托图(Pareto chart)
机器学习(二) -- 数据预处理(2)
机器学习(二) -- 数据预处理(3)
前言
tips:这里只是总结,不是教程哈。本章开始会用到numpy,pandas以及matplotlib,这些就不在这讲了哈。
“***”开头的是给好奇心重的宝宝看的,其实不太重要可以跳过。
此处以下所有内容均为暂定,因为我还没找到一个好的,让小白(我自己)也能容易理解(更系统、嗯应该是宏观)的讲解顺序与方式。
第一文主要简述了一下机器学习大致有哪些东西(当然远远不止这些),对大体框架有了一定了解。接着我们根据机器学习的流程一步步来学习吧,掐掉其他不太用得上我们的步骤,精练起来就4步(数据预处理,特征工程,训练模型,模型评估),其中训练模型则是我们的重头戏,基本上所有算法也都是这一步,so,这个最后写,先把其他三个讲了,然后,在结合这三步来进行算法的学习,兴许会好点(个人拙见)。
一、概述
还是先拿出咱们的老朋友,机器学习的流程图。
咱们这主要将数据预处理,而要进行机器学习首先需要数据,然后才能对数据进行预处理。
实际一点讲:数据清理、数据集成、数据变换、数据规约都是数据预处理的主要步骤,但是这四个没有严格意义上的先后顺序,在实际应用时并非全部会被使用(可能一个也不用,比如后面我们直接调用官方的iris包,但在实际自己获得的数据集中就会有各种各样的问题,视情况而定)
二、数据获取
获取数据途径多种多样,(括号内为废话:按理来讲,当今世界数据就是财富,一般而言别人的数据是不可能透露给你的,如果你和我一样还是个学生,可能可以从老师那里拿到数据),我们学习一般使用的是公开的数据集,如下为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、频率分布直方表、图
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、数据的统计信息
7、***复杂折线图
8、***分段绘图
9、***帕累托图(Pareto chart)
欲知后事如何,且看:机器学习(二) -- 数据预处理(2)