文本过滤
当想找一些包含具体值的数据的时候,需要用到文本过滤。
针对Object Title进行过滤,点击文本过滤器:
查看Title中有多少与美国有关的数据;
在文本过滤框输入USA,可以看到有935条匹配。
还可以查看其他格式的数据,比如:输入(空格)USA(空格)看到匹配的记录有95条
正则表达式匹配
- 通过前面的实验可以看出,取值都是USA,却有不同的写法,这可能是因为数据录入问题,但这种情况不利于数据处理和统计
- 使用正则表达式,可以匹配所有相关的数据
- \b用来匹配边界,防止一个单词的中间出现USA也被匹配成功
- ?用来表示前面的字符出现0次或1次,所以. ?用来表示可以出现或不出现
- 正则表达式为: \bU. ?S. ?A\b
常用转换
●移除首尾空白:在数据清洗时,移除文本首尾的空格会提高数据质量
●收起连续空白:在进行数据输入的时候,有时候会键入很多空格
●反转义HTML字符:从网页上采集下来的数据会包含HTML字符
●首字母大写、全大写、全小写
●数字化、日期化、文本化
移除匹配的行
实际中会将不符合要求的数据删除,比如没有ID的数据记录
删除没有ID的数据
移除重复的数据
●选择复数归类后,将所有具有副本的数据和副本数据都标记为True
●我们不能进行直接删除,否则会将原数据也删掉
●排序→相同空白填充→按空白归类→删除匹配的行
排序
相同空白填充
按空白归类
删除匹配的行
多值数据处理
●现实中我们常会遇到一个问题,就是一个单元格中有多 个值,比如记录客户的信息,包括姓名、电话和地址
●当一个客户有两个地址和两个电话时,该如何记录,有三种方式:
- 只添加一条信息,这是最简单的处理方式,只登记客户的一个地址和一个电话,但是这样就损失一半的信息
- 在客户登记表中登记为两行,这样信息就完整保留。会存在一个问题, 系统或者管理员会当做同姓名的两个人
- 在一行中登记所有的信息,可以把这个单元格当做一个信封, 这个信封是只属于某个人的
OpenRefine提供分离多值单元格的接口:
输入竖线进行分割:
在分离后的界面中,在展示方式处选择记录:
将展示方式切换为行,可以看到行数远多于之前:
在多值化处理后,再次进行文本归类,可以看到类别的种类:
按数量进行排序,查看每一个类别的数量:
聚类处理
在Categoreis右上角点击簇集
●点击簇集后,OpenRefine运行聚类算法
●将拼写相近的类别聚集为个类别,并在后面给出建议的类名
●如果认为聚类结果都正确可以选择全选,也可以根据实际的需求进行勾选
●当然,并不是所有的聚类结果都正确,比如下图是另外一个数据集的聚类结果,算法将Shirts和T-shirts认为是相同的类,但是事实上这是不同的类别
●仔细检查OpenRefine聚类的结果, 并根据实际进行勾选
聚类结束后,可以合并多值单元格:
聚类方法
●关键词碰接:通过keying函数,将相似的关键词归为-类
●比如AB C,AB C,ABC都为归为同一类,因为它们里面都有ABC
●就近原则:通过两类的距离进行归类