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

news2024/11/25 7:09:02

系列文章目录

机器学习(一) -- 概述

机器学习(二) -- 数据预处理(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、频率分布直方表、图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Weblogic安全漫谈(一)

前言 frohoff在2015年初发现commons-collections的反序列化利用链并发布了ysoserial工具[1]。9个月后&#xff0c;breenmachine对众多知名Java中间件的利用文章[2]使Java反序列化漏洞变得广为人知&#xff0c;Weblogic中首当其冲的就是大家多少都有点耳熟的T3协议反序列化。本…

算法训练营Day34(贪心算法)

1005.K次取反后最大化的数组和 1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 秒了 class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);// -4 -3 -2 -1 5//-2 -2 0 2 5int last -1;for(int i 0;i<…

VS Code 远程连接云机器训练配置

VS Code 远程连接云机器 Visual Studio Code&#xff08;以下简称 VS Code&#xff09;是一个由微软开发的代码编辑器。VS Code 支持代码补全、代码片段、代码重构、Git 版本控制等功能。 安装 VSCode步骤简单且网上有很多教程&#xff0c;这里不过多重复了。 VS Code 现已支…

如何使用批量重命名技巧:将文件名称中文翻译成英文

在日常生活和工作中&#xff0c;经常要处理大量的文件&#xff0c;其中很多文件的名称是中文的。有时&#xff0c;要更好地与国际接轨或是满足特定的需求&#xff0c;要将这些中文文件名称翻译成英文。一个一个手动翻译不仅效率低下&#xff0c;而且容易出错。此时&#xff0c;…

深度学习|10.2 边缘检测示例 10.3 更多边缘检测

文章目录 如何在编程中实现卷积运算使用卷积实现边缘检测结果矩阵的元素正负性质的意义水平分类器如何构造卷积运算使用的矩阵 原矩阵通过一个过滤器&#xff08;filter&#xff09;/核心&#xff08;kernel&#xff09;来生成一个新的矩阵。 如何在编程中实现卷积运算 使用卷积…

如何基于 ESP32-S3 和 ESP32-H2 产品构建 WiFi +Thread 边界路由器?

参考文档&#xff1a; Building the images for ESP Thread Border Router and CLI device and forming a Thread network with the devices 硬件准备&#xff1a; ESP32-S3-DevKitC-1ESP32-H2-DevKitM-1 软件准备&#xff1a; esp-idf/ examples/ openthread/ ot_rcp&#x…

AD教程 (二十二) Class、设计参数、规则的创建

AD教程 (二十二) Class、设计参数、规则的创建 CLASS 对于我们的板子需要去区分电源和信号按N&#xff0c;点击隐藏连接&#xff0c;全部&#xff0c;显示飞线&#xff0c;哪一些线是电源走线&#xff0c;哪一些线是信号传输走线&#xff0c;需要我们进行区分&#xff0c;这就…

MAC电脑安装java开发工具

一、安装brew 1.1、官网地址 链接 1.2、更新地址 二、安装 java brew install openjdk11 三、安装gradle Gradle安装与配置教程 - 知乎 四、GIT 4.1、GIT安装 brew install git 4.2、rsa ssh-keygen -t rsa -C "jhestarbucks.com" 五、自动搭建一个springBoot…

idea中java maven程序打JAR包的方式

JAR包是一种文件格式&#xff0c;用于将Java类、资源和元数据打包到一个文件中。它通常用于将Java库、应用程序或模块分发给其他开发人员或部署到不同的环境中。JAR包可以包含许多不同类型的文件&#xff0c;包括.class文件&#xff08;编译后的Java类&#xff09;、.java文件&…

【计算机毕业设计】SSM电器商城系统

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,销售统计,商品类目管理,用户管理,商品管理,订单管理,公告管理,留言管理等功能。 用户角色包含以下功能&#xff1a; 浏…

OpenCV-Python(22):直方图反向投影

引言 直方图反向投影是一种基于图像颜色分布的图像处理技术&#xff0c;它通过计算图像中不同区域的颜色直方图&#xff0c;并将其与目标区域的直方图进行比较&#xff0c;从而实现目标的识别和分割。本文将介绍直方图反向投影的原理和应用&#xff0c;并探讨其在计算机视觉任务…

服务器被入侵后如何查询连接IP以及防护措施

目前越来越多的服务器被入侵&#xff0c;以及攻击事件频频的发生&#xff0c;像数据被窃取&#xff0c;数据库被篡改&#xff0c;网站被强制跳转到恶意网站上&#xff0c;网站在百度的快照被劫持等等的攻击症状层出不穷&#xff0c;在这些问题中&#xff0c;如何有效、准确地追…

Java学习苦旅(十七)——栈和队列

本篇博客将详细讲解Java中的栈和队列。 文章目录 栈概念Java中Stack常用方法代码实现 队列概念队列常用方法对比QueueDeque 代码实现Queue 结尾 栈 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一…

Codeium在IDEA里的3个坑

转载自Codeium在IDEA里的3个坑&#xff1a;无法log in&#xff0c;downloading language server和中文乱码_downloading codeium language server...-CSDN博客文章浏览阅读1.7w次&#xff0c;点赞26次&#xff0c;收藏47次。Codeium安装IDEA插件的3个常见坑_downloading codeiu…

基于ssm鲜花销售管理系统

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;项目介绍 随着科学技术的飞速发展…

【Linux常用指令】用户管理

文章目录 Linux系统目录结构Linux用户和用户组用户管理概述用户账号和用户组用户概念用户组概念 Linux用户和组的关系 Linux用户管理添加用户 useradd选项修改用户 usermod用户账号口令管理passwd删除用户 userdel Linux用户组管理添加新组groupadd修改群组groupmod删除群组gro…

2024史上最全的 iOS 各种测试工具集锦!

引言&#xff1a; 随着移动互联网的兴起&#xff0c;APP 测试的越来越被重视&#xff01;Android 系统因为自己的开源性&#xff0c;测试工具和测试方法比较广为流传&#xff0c;但是 iOS 系统的私密性&#xff0c;导致很多测试的执行都有点麻烦。 为了帮助大家更好的执行 iO…

Sectigo和Certum的区别

为了保护用户在互联网的隐私&#xff0c;网站使用SSL数字证书为http明文传输协议加上安全套接层&#xff0c;对网站传输数据加密。Sectigo和Certum是正规的CA认证机构&#xff0c;它们颁发的SSL证书经过市场认证&#xff0c;已经兼容大多数浏览器以及终端&#xff0c;今天就随S…

【MATLAB】【数字信号处理】线性卷积和抽样定理

已知有限长序列&#xff1a;xk1,2,1,1,0,-3, hk[1,-1,1] , 计算离散卷积和ykxk*h(k) 。 程序如下&#xff1a; function [t,x] My_conv(x1,x2,t1,t2,dt) %文件名与函数名对应 %自写的卷积函数 x conv(x1,x2)*dt; t0 t1(1) t2(1); L length(x1) length(x2)-2; t t0:dt…

提取ROS bag文件中LiDAR点云数据为pcd格式

这段代码是用于从ROS bag文件中提取LiDAR点云数据并保存为PCD格式的。 1. 命令行 rosrun pcl_ros bag_to_pcd 2022-04-21-21-02-29.bag /rslidar_points_32 lidar_points_80_lines 详细解释如下: 1. rosrun pcl_ros bag_to_pcd 这是运行一个ROS节点bag_to_pcd,它来自pcl_r…