Advertisement

数据挖掘概念汇总及数据预处理

阅读量:

数据挖掘简介

数据挖掘即是为在海量的数据中提取有价值的信息,在信息技术日新月异的今天每天产生的数据量正在呈爆发式增长可以说我们正处在一个大数据的时代面对如此规模庞大的数据传统的分析手段已经难以应对这就促使我们需要运用新型的技术工具从数据中挖掘出隐藏的知识

在实际应用层面数据挖掘领域有着广泛的实例例如商店里销售的商品间的关联分析这虽然听起来可能有些奇怪但确实在数据分析课程中是必讲的内容最著名的例子就是"啤酒尿布"现象这一现象虽后来被证实可能是经过加工的但这确实是一个引人入胜的例子在学习初期我曾有一个困惑明明面包牛奶之间的关联性更强为何我们更倾向于讨论啤酒与尿布之间的关系而不是面包牛奶之间的关系其实这恰恰凸显了数据挖掘的本质在于发现那些不易被察觉的知识而并非是我们生活中显而易见的事实

从另一个角度来看数据挖掘的发展离不开数据库技术可以说它正是数据库技术成熟与完善的一个重要组成部分其完整名称是数据库中的知识发现(Knowledge discovery in database KDD)这一过程通常包括以下几个步骤首先是对原始数据进行清洗整理然后通过一系列计算分析方法提取潜在的知识最后将这些知识以 humans 可接受的形式呈现出来

KDD 过程

@(图片来源:《数据分析导论》)
数据分析处理 将原始数据转换为适合分析的形式包括多个数据源的数据整合、清洗工作以及降维处理等内容。目前尚缺乏完善的自动化和工程化方法使得这一过程往往耗时耗力且难以完全自动化通常需要依赖大量的人工干预和经验判断以确保质量达标。
在实际应用中我们经常会遇到一系列典型问题例如特征维度过高等导致的维度灾难静态模型缺乏灵活性以及潜在的数据偏见等问题都需要我们通过不断探索找到更加科学合理的解决方案。

数据挖掘的目标

在数据挖掘领域中,有两个主要目标:分析预测。分析的过程旨在识别数据中的潜在模式或关联,并通过这些发现来理解数据的基本结构。例如之前讨论过的啤酒与尿布的例子,则属于分析这一过程的一个典型应用。而预测的目标则是基于其他属性值的变化来推断特定属性的具体取值。通过分析顾客的历史购买记录来预判他是否会对某种新产品感兴趣,则是一个典型的预测应用场景。

数据挖掘中的基本概念

最初第一个概念就是数据集 了, 也就是我们获取的数据. 其中, 数据集 被定义为一组相互关联的数据对象.

最初第一个概念就是数据集 了, 也就是我们拿到的数据. 其中, 数据集 被定义为一组相互关联的数据对象.

复制代码
    名字:李雷,性别:男,年龄:21,身高:170;
    名字:韩梅梅,性别:女,年龄:23,身高:160;
    名字:阿花,性别:女,年龄:20,身高:165;
    ...
    ...

这些信息可以被视为一个基本的数据集合。每个个体信息都可以视为一个数据对象,通常被称为记录、点或向量等其他形式的数据点。每个数据对象都包含一组特定的特征或特性,在数据分析中我们将其视为特征空间中的一个点或坐标位置。例如,在二维空间中我们可以用平面坐标来表示某个具体的数据点;如果扩展到更高维度的空间,则可以用高维向量来描述更为复杂的特征组合。以具体实例为例,则可将其表示为{李雷, 男性, 21岁, 170厘米}这样具体的坐标位置信息。这些描述方法都非常直观且便于理解

数据预处理

那么我们重点阐述一下数据预处理的部分吧,在机器学习领域有一个广为人知的说法:" Garbage in, garbage out. " 也就是说只有当输入的数据质量较高时才能确保模型输出的结果具有较高的可信度。值得注意的是,在实际应用中需要特别关注数据的质量问题因为这直接关系到模型输出结果的准确性。基于本人有限的经验分享一些见解暂时不介绍过多编程问题以后再慢慢整理如果会使用Python或R来处理数据相信实现清洗这些方法会相对容易一些。

1. 为什么要清洗数据?

此问题已在前面提及。我们收集的数据来源是什么?可能源自网络爬虫抓取的信息?也可能直接来自于数据库存储?通过API接口获取的数据?拿到数据后?其中通常会遇到诸多格式混乱与不规范的问题?比如字段错位或字段无序等情况?这时需要我们对这些数据进行清洗工作?

数据格式

如图所示即是我们预期的数据格式遵循标准矩阵结构每行对应一个数据记录而每列则对应一个属性字段不仅方便导入编程语言而且能直接参与数据分析过程。这是一个以Excel格式呈现的数据表格此外我们还经常处理JSON、CSV以及XML等多种数据文件类型。

2. 一些关于整洁数据的小建议

以下是基于给定规则对原文的改写

3. 读取数据

这部分省略了;采用熟悉使用的编程语言进行开发就足够了。需要注意的是关于数据文件编码的问题,请注意以下几点:例如,在读取文件时我就遇到了类似问题:

复制代码
    UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 23: illegal multibyte sequence

归根结底是由于解码错误而导致的问题。通常情况下,默认使用的文件编码为UTF-8,在这种情况下需要对文件进行适当设置以避免类似问题的发生。

复制代码
    open("filename",'w',encoding="utf8")
    
    #encoding is the name of the encoding used to decode or encode the    file. This should only be used in text mode. The default encoding is    platform dependent, but any encoding supported by Python can be    passed.  See the codecs module for the list of supported encodings.
4. 常见的组织数据集的方法
  1. 筛选不符合条件的数值:首先需要按照一定的规则对数据进行排序,并剔除那些不符合特定条件(如超出变量范围)的数值或其他无效数据(如标记为N/A)。
  2. 验证与汇总字段信息:在处理过程中会对每个字段进行逐一验证与汇总统计信息。具体来说就是先判断字段类型是否为字符串格式;如果发现字段为空或者存在缺失值,则会标记为null;对于数值型字段则需要计算基本统计指标(如总数、平均数等)以辅助后续分析。
  3. 生成新的字段:对于某些复杂场景下原始数据可能无法直接满足需求,在这种情况下可以通过设计新的字段来进行特征工程处理。
  4. 整合不同表中的记录:当需要将多个独立的数据源整合到同一分析框架中时,则可以通过匹配主键(如ID)来进行记录配对与拼接操作。
5. 数据中常见问题

其实现在数据清洗工作是一个耗时费力的过程, 目前尚未找到系统化的处理流程. 主要还是要靠人工核查来判断(这里存在表述不明确的问题= =)。但现实情况是, 有时清洗数据所需的时间甚至超过了进行实验的时间.

1. 数据存在缺失
- 当部分数据存在某些属性值缺失的情况时:
- 如果某一具体属性的缺失率较低(例如一万条数据中仅有10条该属性为空),则可考虑直接删除这10条数据记录。
- 如果某一具体属性的缺失率较高(例如在一个公司网点分布的数据集中,“邮编”这一字段有9000多条记录为空),则该字段缺乏实际参考价值并应予以删除。
- 对于少数缺省但可通过其他字段信息合理推断出完整信息的具体情况(例如基于身份证号可推算出生日期;基于经纬度范围可推断城市级别等),则可采用相应的替代填充方式。
- 对于部分特殊场景下的缺省值填充问题(例如以"0"、“null"、“未知"等占位符填充;又或者以特定业务逻辑指定的具体替代值填充),则需结合实际情况综合判断其适用性是否有利于后续的数据分析工作。
- 对于可以通过已有字段信息合理估算出数值的具体情况(例如按时间序列排序的数据集可用均值或中位数进行填补),则可采用相应的统计估算方式来补充缺省信息。
- 对于涉及较为复杂的统计学或机器学习模型构建场景(如贝叶斯模型和回归分析等),也可采用更为先进的算法来进行缺省值的补充计算。
- 当某一项具体指标对整体数据分析结果无显著影响时,则无需特别处理。

2. 重复
必须解决这个问题。在实际操作中会遇到一些情况:例如,在某些数据分析场景中存在大量冗余数据(即重复数据),这些数据通常是没有价值的,并且需要用查重工具进行识别并去除冗余项;然而,在特定领域如主题模型中还存在另一种情况:即在主题模型中进行词频统计分析时会遇到的问题——此时绝对不能去除重复项,并且对于具有相同词干的词语也需要采取相应的处理措施以避免影响后续分析结果的质量。

3. 噪声
大多数算法对于异常值都有较高的敏感度。
比如KNN算法在这方面表现尤为突出。
鉴别异常值的方法多种多样,在这些方法中,
其中一种直观且有效的方式就是通过可视化来识别。
举个例子来说,

离群点

数据集中的部分放大以后是这样的:

数据集中点

然而,在高维空间中直接呈现数据非常困难,并且这些属性通常不具备这种直观的表现形式。

箱形图

除此之外,在处理异常数据时通常会采取以下几种方式:
1. 当异常数据较少且容易识别时,则可以选择去除这些数据
2. 对于那些对异常数据不敏感的数据分析算法,则无需进行任何处理
3. 为了减少因缺失数据造成的损失,在这种情况下通常会采用均值填补法
4. 如果发现某一组数据明显存在错误并且能够被纠正(例如已知某个建筑的具体经纬度坐标),则建议进行人工修正

4. 不一致
这里不一致的原因包括不同属性值之间、同属性单位以及数据类型上的不一致等多方面因素。
大多数情况下这些问题可以通过批量处理的方式来解决。例如,在数据类型转换时对字符串进行规范化处理方面存在较多问题。对于城市与邮编相关的案例,则可通过对应地区的邮编列表进行修正。

5. 维度较高

6. 其他补充
  1. 不同领域有一些不同的预处理标准
  2. 字符串标准化的一些方法:
  • convert all text to lowercase as much as possible
  • split the text into sections based on spaces or other symbols
  • remove unnecessary spaces, punctuation marks, underscores, etc.
  • extract substrings from the text
  • string processing can be done using existing methods such as Python's strip() function to automatically remove leading and trailing whitespace and newlines. Additionally, regular expressions can be utilized for more complex string manipulations. For example, Wiki Text Processing in gensim handles preprocessing of Wikipedia texts
    Here is the tutorial on regular expressions: Regular Expressions Tutorial
  1. 数据类型转换:将字符串类型的变量转换为整数或其他类型的其他形式。
  2. 数据处理包括对连续变量的离散化和二元化操作,并将这些操作转化为分类变量或多组二元变量。
  3. 某些数值型特征同样需要进行归一化或标准化处理以确保一致性。

熟悉 R 语言的朋友可以去看一下 Coursera 上的这个教程,链接见参考第一条,不是很长,但是实例很丰富。
另外这里还有一篇挺好玩的文章,是用 Python 的 pandas 库来做一些 Excel 中的常用操作:http://pbpython.com/excel-pandas-comp.html
参考:https://www.coursera.org/learn/data-cleaning
http://www.cnblogs.com/charlotte77/p/5606926.html
https://en.wikipedia.org/wiki/Dimensionality_reduction
《数据挖掘导论》

全部评论 (0)

还没有任何评论哟~