什么是数据挖掘?数据挖掘指的是对现有的一些数据进行相应的处理和分析,最终得到数据与数据之间深层次关系的一种技术。例如在对超市货品进行摆放时,牛奶到底是和面包摆放在一起销量更高,还是和其他商品摆在一起销量更高。作者:韦玮;来源:Python爱好者社区

本文包含了五个知识点:

  1. 数据挖掘与机器学习技术简介
  2. Python数据预处理实战
  3. 常见分类算法介绍
  4. 对鸢尾花进行分类案例实战
  5. 类算法的选择思路与技巧

一、数据挖掘与机器学习技术简介

什么是数据挖掘?数据挖掘指的是对现有的一些数据进行相应的处理和分析,最终得到数据与数据之间深层次关系的一种技术。例如在对超市货品进行摆放时,牛奶到底是和面包摆放在一起销量更高,还是和其他商品摆在一起销量更高。数据挖掘技术就可以用于解决这类问题。具体来说,超市的货品摆放问题可以划分为关联分析类场景。

在日常生活中,数据挖掘技术应用的非常广泛。例如对于商户而言,常常需要对其客户的等级(svip、vip、普通客户等)进行划分,这时候可以将一部分客户数据作为训练数据,另一部分客户数据作为测试数据。然后将训练数据输入到模型中进行训练,在训练完成后,输入另一部分数据进行测试,最终实现客户等级的自动划分。其他类似的应用例子还有验证码识别、水果品质自动筛选等。

那么机器学习技术又是什么呢?一言以蔽之,凡是让机器通过我们所建立的模型和算法对数据之间的关系或者规则进行学习,最后供我们利用的技术都是机器学习技术。其实机器学习技术是一个交叉的学科,它可以大致分为两类:传统的机器学习技术与深度学习技术,其中深度学习技术包含了神经网络相关技术。在本次课程中,着重讲解的是传统的机器学习技术及各种算法。

由于机器学习技术和数据挖掘技术都是对数据之间的规律进行探索,所以人们通常将两者放在一起提及。而这两种技术在现实生活中也有着非常广阔的应用场景,其中经典的几类应用场景如下图所示:

1、分类:对客户等级进行划分、验证码识别、水果品质自动筛选等

机器学习和数据挖掘技术可以用于解决分类问题,如对客户等级进行划分、验证码识别、水果品质自动筛选等。

以验证码识别为例,现需要设计一种方案,用以识别由0到9的手写体数字组成的验证码。有一种解决思路是,先将一些出现的0到9的手写体数字划分为训练集,然后人工的对这个训练集进行划分,即将各个手写体映射到其对应的数字类别下面,在建立了这些映射关系之后,就可以通过分类算法建立相应的模型。这时候如果出现了一个新的数字手写体,该模型可以对该手写体代表的数字进行预测,即它到底属于哪个数字类别。例如该模型预测某手写体属于数字1的这个类别,就可以将该手写体自动识别为数字1。所以验证码识别问题实质上就是一个分类问题。

水果品质的自动筛选问题也是一个分类问题。水果的大小、颜色等特征也可以映射到对应的甜度类别下面,例如1这个类别可以代表甜,0这个类别代表不甜。在获得一些训练集的数据之后,同样可以通过分类算法建立模型,这时候如果出现一个新的水果,就可以通过它的大小、颜色等特征来自动的判断它到底是甜的还是不甜的。这样就实现了水果品质的自动筛选。

2、回归:对连续型数据进行预测、趋势预测等

除了分类之外,数据挖掘技术和机器学习技术还有一个非常经典的场景——回归。在前文提到的分类的场景,其类别的数量都有一定的限制。比如数字验证码识别场景中,包含了0到9的数字类别;再比如字母验证码识别场景中,包含了a到z的有限的类别。无论是数字类别还是字母类别,其类别数量都是有限的。

现在假设存在一些数据,在对其进行映射后,最好的结果没有落在某个0、1或者2的点上,而是连续的落在1.2、1.3、1.4...上面。而分类算法就无法解决这类问题,这时候就可以采用回归分析算法进行解决。在实际的应用中,回归分析算法可以实现对连续型数据进行预测和趋势预测等。

3、聚类:客户价值预测、商圈预测等

什么是聚类?在上文中提过,要想解决分类问题,必须要有历史数据(即人为建立的正确的训练数据)。倘若没有历史数据,而需要直接将某对象的特征划分到其对应的类别,分类算法和回归算法无法解决这个问题。这种时候有一种解决办法——聚类,聚类方法直接根据对象特征划分出对应的类别,它是不需要经过训练的,所以它是一种非监督的学习方法。

在什么时候能用到聚类?假如数据库中有一群客户的特征数据,现在需要根据这些客户的特征直接划分出客户的级别(如SVIP客户、VIP客户),这时候就可以使用聚类的模型去解决。另外在预测商圈的时候,也可以使用聚类的算法。

4、关联分析:超市货品摆放、个性化推荐等

关联分析是指对物品之间的关联性进行分析。例如,某超市内存放有大量的货品,现在需要分析出这些货品之间的关联性,如面包商品与牛奶商品之间的关联性的强弱程度,这时候可以采用关联分析算法,借助于用户的购买记录等信息,直接分析出这些商品之间的关联性。在了解了这些商品的关联性之后,就可以将之应用于超市的商品摆放,通过将关联性强的商品放在相近的位置上,可以有效提升该超市的商品销量。

此外,关联分析还可以用于个性化推荐技术。比如,借助于用户的浏览记录,分析各个网页之间存在的关联性,在用户浏览网页时,可以向其推送强关联的网页。例如,在分析了浏览记录数据后,发现网页A与网页C之间有很强的关联关系,那么在某个用户浏览网页A时,可以向他推送网页C,这样就实现了个性化推荐。

5、自然语言处理:文本相似度技术、聊天机器人等

除了上述的应用场景之外,数据挖掘和机器学习技术也可以用于自然语言处理和语音处理等等。例如对文本相似度的计算和聊天机器人。

二、Python数据预处理实战

在进行数据挖掘与机器学习之前,首先要做的一步是对已有数据进行预处理。倘若连初始数据都是不正确的,那么就无法保证最后的结果的正确性。只有对数据进行预处理,保证其准确性,才能保证最后结果的正确性。

数据预处理指的是对数据进行初步处理,把脏数据(即影响结果准确率的数据)处理掉,否则很容易影响最终的结果。常见的数据预处理方法如下图所示:

1、缺失值处理

缺失值是指在一组数据中,某行数据缺失的某个特征值。解决缺失值有两种方法,一是将该缺失值所在的这行数据删除掉,二是将这个缺失值补充一个正确的值。

2、异常值处理

异常值产生的原因往往是数据在采集时发生了错误,如在采集数字68时发生了错误,误将其采集成680。在处理异常值之前,自然需要先发现这些异常值数据,往往可以借助画图的方法来发现这些异常值数据。在对异常值数据处理完成之后,原始数据才会趋于正确,才能保证最终结果的准确性。

3、数据集成

相较于上文的缺失值处理和异常值处理,数据集成是一种较为简单的数据预处理方式。那么数据集成是什么?假设存在两组结构一样的数据A和数据B,且两组数据都已加载进入内存,这时候如果用户想将这两组数据合并为一组数据,可以直接使用Pandas对其进行合并,而这个合并的过程实际上就是数据的集成。

接下来以淘宝商品数据为例,介绍一下上文预处理的实战。

在进行数据预处理之前,首先需要从MySQL数据库中导入淘宝商品数据。在开启MySQL数据库之后,对其中的taob表进行查询,得到了如下的输出:

可以看到,taob表中有四个字段。其中title字段用于存储淘宝商品的名称;link字段存储淘宝商品的链接;price存储淘宝商品的价格;comment存储淘宝商品的评论数(一定程度上代表商品的销量)。

那么接下来如何将这些数据导入进来?首先通过pymysql连接数据库(如果出现乱码,则对pymysql的源码进行修改),连接成功后,将taob中的数据全部检索出来,然后借助pandas中的read_sql()方法便可以将数据导入到内存中。

read_sql()方法有两个参数,第一个参数是sql语句,第二个参数是MySQL数据库的连接信息。具体代码如下图:

1、缺失值处理实战

对缺失值进行处理可以采用数据清洗的方式。以上面的淘宝商品数据为例,某件商品的评论数可能为0,但是它的价格却不可能为0。然而实际上在数据库内存在一些price值为0的数据,之所以会出现这种情况,是因为对部分数据的价格属性没有爬到。

那么如何才能判断出这些数据出现了缺失值呢?可以通过以下的方法来进行判别:

首先对于之前的taob表调用data.describe()方法,会出现如下图所示的结果:

如何看懂这个统计结果?第一步要注意观察price和comment字段的count数据,如果两者不相等,说明一定有信息缺失;如果两者相等,则暂时无法看出是否有缺失情况。例如price的count为9616.0000,而comment的count为9615.0000,说明评论数据至少缺失了一条。

其他各个字段的含义分别为:mean代表平均数;std代表标准差;min代表最小值;max代表最大值。

那么如何对这些缺失数据进行处理?一种方法是删掉这些数据,还有一种方法是在缺失值处插入一个新值。第二种方法中的值可以是平均数或者中位数,而具体使用平均数还是中位数需要根据实际情况来决定。例如年龄这个数据(1到100岁),这类平稳、变化的级差不大的数据,一般插入平均数,而变化的间隔比较大的数据,一般插入中位数。

处理价格的缺失值的具体操作如下:

2、异常值处理实战

跟缺失值的处理过程类似,想要处理异常值,首先要发现异常值。而异常值的发现往往是通过画散点图的方法,因为相似的数据会在散点图中集中分布到一块区域,而异常的数据会分布到远离这块区域的地方。根据这个性质,可以很方便的找到数据中的异常值。具体操作如下图:

首先需要从数据中抽出价格数据和评论数据。通常的做法可以借助循环去抽取,但是这种方法太复杂,有一种简单的方法是这个数据框进行转置,这时候原先的列数据就变成了现在的行数据,可以很方便的获取价格数据和评论数据。接下来通过plot()方法绘制散点图,plot()方法第一个参数代表横坐标,第二个参数代表纵坐标,第三个参数代表图的类型,”o”代表散点图。最后通过show()方法将其展现出来,这样就可以直观的观测到离群点。这些离群点对数据的分析没有帮助,在实际操作中往往需要将这些离群点代表的数据删除或者转成正常的值。下图是绘制的散点图:

根据上图所示,将评论大于100000,价格大于1000的数据都处理掉,就可以达到处理异常值的效果。而具体的两种处理方法的实现过程如下:

第一种是改值法,将其改为中位数、平均数或者其他的值。具体操作如下图所示:

第二种是删除处理法,即直接删除这些异常数据,也是推荐使用的一种方法。具体操作如下图所示:

3、分布分析

分布分析是指对数据的分布状态进行分析,即观察其是线性分布还是正态分布。一般采用画直方图的方式来进行分布分析。直方图的绘制有以下几个步骤:计算极差、计算组距和绘制直方图。具体的操作如下图所示:

其中,借助arrange()方法来制定样式,arrange()方法第一个参数代表最小值,第二个参数代表最大值,第三个参数代表组距,接下来使用hist()方法来绘制直方图。

taob表中的淘宝商品价格直方图如下图所示,大致上符合正态分布:

taob表中的淘宝商品评论直方图如下图所示,大致上是递减的曲线:

4、词云图的绘制

有的时候常常需要根据一段文本信息来进行词云图的绘制,绘制的具体操作如下图:

实现的大致流程是:先使用cut()对文档进行切词,在切词完成之后,将这些词语整理为固定格式,然后根据所需的词云图的展现形式读取相应的图片(下图中的词云图是猫的形状),接着使用wc.WordCloud()进行词云图的转换,最后通过imshow()展现出相应的词云图。例如根据老九门.txt文档绘制的词云图效果如下图所示:

python数据挖掘与机器学习实战_Python数据挖掘与机器学习技术入门实战(1)相关推荐

  1. python数学建模基础教程_Python 3破冰人工智能 从入门到实战 大学生数学建模竞赛数学建模算法与应用教程 机器学习深度学...

    第 1章  从数学建模到人工智能1 1.1  数学建模  1 1.1.1  数学建模与人工智能  1 1.1.2  数学建模中的常见问题  4 1.2  人工智能下的数学  12 1.2.1  统计量 ...

  2. Python数据挖掘与机器学习技术入门实战

    摘要: 什么是数据挖掘?什么是机器学习?又如何进行Python数据预处理?本文将带领大家一同了解数据挖掘和机器学习技术,通过淘宝商品案例进行数据预处理实战,通过鸢尾花案例介绍各种分类算法. 课程主讲简 ...

  3. python数据挖掘需要的库_python数据挖掘需要学的内容

    1.Pandas库的操作 Panda是数据分析特别重要的一个库,我们要掌握以下三点: · pandas 分组计算; · pandas 索引与多重索引; 索引比较难,但是却是非常重要的 · pandas ...

  4. python中的json结构_python数据挖掘_Json结构分析

    json是一种轻量级的数据交换格式,也可以说是一种配置文件的格式 这种格式的文件是我们在数据处理经常会遇到的 python提供内置的模块json,只需要在使用前导入即可 你可以通过帮助函数查看json ...

  5. python 英语词频统计软件_Python数据挖掘——文本分析

    作者 | zhouyue65 来源 | 君泉计量 文本挖掘:从大量文本数据中抽取出有价值的知识,并且利用这些知识重新组织信息的过程. 一.语料库(Corpus) 语料库是我们要分析的所有文档的集合. ...

  6. python tkinter获取屏幕大小_Python开发GUI工具介绍,实战:将图片转化为素描画

    python开发GUI tkinter 也许有些人不知道这个模块,但如果你安装python后,使用过自带的IDLE,那么你就应该了解它.tkinter作为python自带的GUI模块,IDLE便是通过 ...

  7. python普通类实现接口_python实现头条项目接口自动化测试实战

    教程简介 python+reqeust库,轻松实现黑马头条项目接口自动化 讲解方式 课程内容条理清晰,目标明确,由浅入深,环环相扣.重点部分进行额外梳理和总结,更易理解和吸收. 课程亮点 1.接口测试 ...

  8. python微信小程序爬虫_Python爬取微信小程序实战(通用)

    背景介绍 最近遇到一个需求,大致就是要获取某个小程序上的数据.心想小程序本质上就是移动端加壳的浏览器,所以想到用Python去获取数据.在网上学习了一下如何实现后,记录一下我的实现过程以及所踩过的小坑 ...

  9. python gui编程 从入门到项目实战_python GUI编程 QT5开发项目实战

    目录:├─01-PyQT简介及优势├─02-PyQT5开发环境搭建├─03-PyQT5应该学什么├─04-PyQT5库结构├─05-PyQT5程序基本结构分析├─06-PyQT5-Pycharm活动模 ...

最新文章

  1. R语言ggplot2可视化:修改已经创建的ggplot2可视化对象进行自定义的修改、使用ggplot_build函数更改已经创建的可视化结果
  2. ns-3 NetAnim遇到了一个问题
  3. new date.gettime 与传入时间相差毫秒数不对_给女票解释为什么日本时间比中国时间快一个小时?...
  4. Java -- 注解 annotation
  5. mysql uncompress_如何在php中实现mysql compress()函数
  6. 大数据应用项目创新大赛_经济管理学院大数据应用创新大赛顺利举行
  7. java原生开发项目-快递e栈
  8. Kata: 从随机的三字符列表组中恢复秘密字符串
  9. 教你如何保存有妖气漫画
  10. 【五万字深度洞察】毒舌阿朱最看好的企业服务商
  11. Atiitt 知识图谱的艺术 艾提拉著 目录 1. 常见知识图谱的处理技术 1 2. 常用的公开知识图谱如DBpedia, Freebase, Yago,Openkg等 2 3. 构建知识图谱的方
  12. 爬取人民日报_辅导员专栏 | 琪人琪语:我们爬取了576篇人民日报的夜读文章,只为告诉你这些事...
  13. 变换元素transform和过渡元素transition混合使用
  14. html自定义弹窗,自定义弹窗为密文密码框(实现重新鉴别密码),一系列踩坑解决
  15. java电商商品搜索_Java生鲜电商平台-搜索模块的设计与架构
  16. 微信小程序(二)首页之搜索框
  17. FXS/FXO, BRI/PRI, IPPBX
  18. Ipad越狱注意事项
  19. 平台币继续拉升,短期仍看涨
  20. C/C++内存申请和释放(一)

热门文章

  1. 一文教你学会需求分析与管理
  2. javaScript学习笔记之运算符
  3. 【APICloud系列|14】xcode下载地址
  4. HFS远程命令执行漏洞复现
  5. mysql磁盘临时表清理_mysql 创建大量磁盘临时表
  6. vue.extend与vue.component的区别和联系
  7. JS加密算法简单分析
  8. CSS自定义消息提示
  9. cf1208G Polygons 欧拉函数
  10. VS2010中预处理器定义