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

系列文章目录

机器学习(一) -- 概述

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

机器学习(三) -- 特征工程(1-2)

未完待续……


目录

系列文章目录

前言

一、概述

二、数据获取

三、数据分布与趋势探查

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、频率分布直方表、图

好,现在我们想了解每个销售端的数据分布情况,就可以画频率分布直方图。
我们需要一步一步计算(这也就是喜欢用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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/315495.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

普中STM32-PZ6806L开发板(HAL库函数实现-PWM呼吸灯)

简介 实现PWM呼吸灯。 主芯片 STM32F103ZET6呼吸灯引脚 : PC7电路原理图 LED8 电路图 LED8 与 主芯片连接图 其他知识 公式 PWM周期公式: Tpwm ( (ARR 1) * (PSC 1) ) / Tclk Tclk为定时器的输入时钟频率 Tout则为定时器溢出时间 ARR为计数周期 PSC为预分频器的值…

数据结构OJ实验14-哈希查找

A. DS哈希查找—线性探测再散列 题目描述 定义哈希函数为H(key) key%11&#xff0c;输入表长&#xff08;大于、等于11&#xff09;。输入关键字集合&#xff0c;用线性探测再散列构建哈希表&#xff0c;并查找给定关键字。 输入 测试次数t 每组测试数据为&#xff1a; …

Python序列之字典

系列文章目录 Python序列之列表Python序列之元组Python序列之字典&#xff08;本篇文章&#xff09;Python序列之集合 Python序列之字典 系列文章目录前言一、字典是什么&#xff1f;二、字典的操作1.创建&#xff08;1&#xff09;通过{}、dict()创建&#xff08;2&#xff0…

Django HttpResponse 响应对象

目录 一、概述二、测试三、属性和方法四、解读 request 参数 一、概述 所谓 HttpRequest 响应就是服务器返回给客户端的数据&#xff0c;HttpRequest 由程序员自己创建&#xff0c;一般他们通过两种方式来创建。 不使用模板&#xff0c;直接调用 HttpResponse()&#xff0c;返…

安装 Node.js、npm

安装 nodejs 安装Node.js的最简单的方法是通过软件包管理器。 Node.js官网&#xff1a;https://nodejs.org/en/download/ cd /usr/local/src/wget -c https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.xz xz -d node-v18.16.0-linux-x64.tar.xz tar -xf node…

【ArcGIS微课1000例】0085:甘肃省白银市平川区4.9级地震震中位置图件制作

据中国地震台网正式测定,12月31日22时27分在甘肃白银市平川区发生4.9级地震,震源深度10公里,震中位于北纬36.74度,东经105.00度。 文章目录 一、白银市行政区划图1. 县级行政区2. 乡镇行政区二、4.9级地震图件制作1. 震中位置2. 影像图3. 震中三维地形一、白银市行政区划图…

Redis 与 Spring: 解决序列化异常的探索之旅

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Java 19的未来:新特性、性能优化和更多

目录 前言 新特性的引入 1. 模式匹配的扩展 2. 增强的模式匹配异常处理 3. 基于记录的反射 4. 引入静态方法的接口 性能优化 1. 垃圾收集器的改进 2. 即时编译器的增强 3. 并行处理的改进 Java编程的前景展望 1. 更多的应用场景 2. 更强的生态系统 3.…

Groovy面向对象的使用及元编程方法的调用和拦截

文章目录 面向对象1 类的定义和对象的定义2 对象的属性值3 方法的定义和调用4 接口5 trait的使用6 元编程方法的调用和拦截 面向对象 1 类的定义和对象的定义 ​ 在groovy中新建一个Student的类&#xff0c;选择Groovy class。 ​ Student类的代码内容如下&#xff0c;在这个…

Spring见解 1

1.Spring概述 1.1.Spring介绍 ​ Spring是轻量级Java EE应用开源框架&#xff08;官网&#xff1a; http://spring.io/ &#xff09;&#xff0c;它由Rod Johnson创为了解决企业级编程开发的复杂性而创建 1.2.简化应用开发体现在哪些方面&#xff1f; IOC 解决传统Web开发中…

qt图像绘制QPainter

QPainter 以下是一些常用的 Qt::PenStyle 枚举值&#xff1a; Qt::NoPen&#xff1a;无线条。Qt::SolidLine&#xff1a;实线。Qt::DashLine&#xff1a;虚线&#xff0c;由短划线组成。Qt::DotLine&#xff1a;点线&#xff0c;由点组成。Qt::DashDotLine&#xff1a;点划线&…

ALSA学习(5)——ASoC架构中的Machine

参考博客&#xff1a;https://blog.csdn.net/DroidPhone/article/details/7231605 &#xff08;以下内容皆为原博客转载&#xff09; 文章目录 一、注册Platform Device二、注册Platform Driver三、初始化入口soc_probe() 一、注册Platform Device ASoC把声卡注册为Platform …