大数据架构师必知必会系列:数据质量与数据清洗

作者:禅与计算机程序设计艺术

1.简介

概述

本文将从以下几个方面对数据质量与数据清洗做介绍和阐述:

  1. 数据收集的目的
  2. 数据质量保证的意义
  3. 数据清洗流程
  4. 数据清洗工具介绍及其特点
  5. 实例分析——用户画像数据清洗

数据收集的目的

数据的收集目的通常是为了生成有价值的信息,这些信息能够帮助我们发现一些我们没有预料到的事情或提供更好的决策支持。因此,在数据收集的过程中,需要对数据进行完整性、正确性、可靠性等因素进行验证,确保数据质量符合要求。那么如何通过有效的方式,对数据质量进行保证呢?这就需要了解数据质量保证相关的知识,包括数据采集目标、数据采集方法、数据质量控制措施、数据质量监控机制等。

数据质量保证的意义

数据质量保证(Data Quality Assurance)是数据安全管理的一项重要组成部分,它主要关注于维护数据质量、提升数据质量水平,防止数据遭到损坏、泄露和篡改等行为。数据质量保证可以分为两个层次:静态质量保证和动态质量保证。 静态质量保证即数据在存储时就已经得到了足够的保证,不再对数据进行任何修改,这样的数据质量是不可改变的。而动态质量保证是指按照数据生命周期来保障数据质量的高效率和可靠性,确保数据的准确性、完整性、一致性和时效性。 数据质量保证的意义主要体现在三个方面:

  • 保护数据安全:数据质量保证可以使得数据不受到非法侵害、滥用、泄露、篡改等安全风险的侵扰。如个人信息、客户信息、产品数据等。
  • 提高数据价值:数据质量保证可以帮助企业搜集到真实有效的信息,通过有效的数据分析,利用数据产生新的价值。
  • 促进业务发展:数据质量保证可以促进业务快速发展并实现持续增长。

数据清洗流程

数据清洗(Data Cleaning)是指对原始数据进行处理、转换、过滤,使其满足数据使用的需求和质量标准。数据清洗可以从多种角度出发,如结构化、半结构化、无结构化数据清洗等,也可根据不同阶段进行数据清洗工作。以下是数据清洗的一般流程:

  1. 数据收集:包括业务系统、第三方接口数据、日志文件等。
  2. 数据传输:由于网络环境、硬件设备性能限制等因素的影响,可能存在数据传输不畅,因此数据传输往往不符合要求。
  3. 数据保存:数据经过传输和存储后,可能存在信息丢失、错误、缺少、重复等问题,导致数据质量低下。
  4. 数据质量验证:数据清洗除了要进行常规的数据校验外,还应引入更多的指标评估数据质量。如唯一标识符匹配率、重复记录率、值域范围等。
  5. 数据清洗:数据清洗的目的是对原始数据进行必要的转换、过滤、删除等方式,去除或纠正数据的错误和异常,确保数据的质量符合要求。
  6. 数据整合:经过数据清洗之后,数据可能需要被重新整合,才能用于后续的数据处理和分析。

数据清洗工具介绍及其特点

数据清洗是指对原始数据进行处理、转换、过滤,使其满足数据使用的需求和质量标准。数据清洗工具可以根据不同的应用场景选择不同的工具进行数据清洗,如下表所示:

工具名称 适用场景 特点
SQL Server Integration Services (SSIS) 结构化数据清洗 可定制化、功能强大
Apache Hive 结构化数据清洗 速度快、适合大数据量处理
Hadoop MapReduce 分布式数据清洗 使用方便、可扩展性强
Talend Open Studio 半结构化/无结构化数据清洗 可视化界面、功能齐全
Data Wrangler Web数据清洗 简单易用、功能单一

实例分析——用户画像数据清洗

用户画像数据简介

“用户画像”是通过分析大量用户的历史记录、消费习惯、偏好、偏好倾向等信息,通过某种计算模型,将大量用户数据映射为每个用户的一个个标签或特征的过程。用户画像可以用于精准营销、广告投放、流量优化、分层推荐、实时风控、违约预警等,提高组织效能、增加业务转型的效率。

对于一般互联网公司来说,用户画像一般由“用户画像工程师”进行数据清洗。

例如,一般情况下,用户画像数据分为两种:“结构化”数据和“无结构化”数据。结构化数据是指按照一定的结构,比如,一个用户的姓名、年龄、地址、职业等,都有明确的定义;无结构化数据则相对复杂些,比如,用户的浏览、搜索习惯、评论、喜欢的内容等。

对于结构化数据来说,数据清洗一般采用SQL Server Integration Services (SSIS) 或Apache Hive等工具。其主要任务就是对各个字段的数据类型、有效性进行检查和修正,去除无效数据、删除重复数据、清洗异常数据、将时间戳转换成日期格式等。

对于无结构化数据来说,数据清洗一般采用Talend Open Studio或Data Wrangler等工具。其主要任务是将不同来源的数据进行汇总、合并、分类、标签化、去重、关联等,形成标准化的、易于使用的用户画像数据。其中,关联、去重和标签化非常重要。

示例:用户画像数据清洗

任务描述

一家大型电子商务网站的数据量非常大,每天都会产生海量的用户数据。其中,用户画像数据却比较杂乱且不规范,需要对其进行清洗。具体要求如下:

  • 删除所有职业为空值的记录,因为无法区分这些空值的用户是否真的不需要职业信息。
  • 将邮箱中的数字替换为@符号,方便后续分析。
  • 将性别中M表示男性,F表示女性,U表示未知,其他情况保留原值。
  • 将年龄大于120岁的记录统一标记为120岁以上。
  • 清理掉年龄小于18岁、注册时间早于2019年7月的记录。
  • 根据国家和地区来标记用户所在地区,并删除省市两级信息。
  • 将手机号码中间四位替换为星号(*),保护隐私。
  • 基于兴趣爱好、消费习惯等数据建立用户画像,对用户进行细粒度的标签化,包括“吃货”、“旅游爱好”、“网红”等。
  • 对商品购买、搜索、收藏等数据进行关联分析,分析用户喜欢什么样的商品、喜欢什么样的品牌、喜欢什么样的款式等。
  • 生成报告统计各个领域用户数量,并提前发布给相关人员。
解决方案
SSIS数据清洗

首先,我们可以使用SSIS导入用户画像数据,然后设置多个清洗规则来处理数据。

  1. 删除所有职业为空值的记录:由于职业为空值的用户无法区分是否真的不需要职业信息,所以这里我们可以直接删除该记录。使用筛选器功能可以根据职业字段的值是否为空来确定是否删除记录。

如果您熟悉SSIS的开发语言,也可以直接编写相应的脚本,然后在SSIS内置表达式功能中调用此脚本。

  1. 将邮箱中的数字替换为@符号:邮箱中包含数字形式的用户名,并且不规范,所以这里需要替换为@符号。使用脚本功能,可以在字段之间执行任意的字符串操作。
  1. 将性别中M表示男性,F表示女性,U表示未知:性别字段中可能会有M、m、男、男性等格式,这里可以使用脚本函数对各种格式进行统一。
  1. 将年龄大于120岁的记录统一标记为120岁以上:这里可以使用IF条件语句来判断年龄字段的值是否大于120岁,如果大于120岁,则将年龄值设置为120岁。
  1. 清理掉年龄小于18岁、注册时间早于2019年7月的记录:这里可以使用表达式来计算注册时间距离当前日期的时间差,并根据年龄大小进行筛选。
  1. 根据国家和地区来标记用户所在地区,并删除省市两级信息:这类信息可以从IP地址中提取出来,但是IP地址有时候会被加密,所以这里不能直接采用这种方式。建议可以考虑基于城市位置数据库构建的地理位置标签。
  1. 将手机号码中间四位替换为星号(*),保护隐私:手机号码最好只显示最后四位,但是如果不想暴露真实的隐私信息,可以将其替换为星号。
  1. 基于兴趣爱好、消费习惯等数据建立用户画像,对用户进行细粒度的标签化:这类标签可以采用观察者模式对用户的历史记录、搜索、喜欢、浏览等行为进行建模,然后生成不同的标签。这里不再举例。

  2. 对商品购买、搜索、收藏等数据进行关联分析,分析用户喜欢什么样的商品、喜欢什么样的品牌、喜欢什么样的款式等:这类关联分析可以通过使用机器学习的方法进行建模,但由于数据量较大,而且涉及许多隐私数据,所以这里暂时不举例。

  3. 生成报告统计各个领域用户数量:通过上面的步骤,我们已经对用户画像数据进行了清洗,接下来就可以生成报告统计各个领域用户数量了。

通过结果,我们可以发现,原有用户画像数据中有些用户的性别、职业信息都已清洗完毕,手机号码替换成了星号,邮箱中用户名使用了@符号。而新生成的用户画像数据,则可以对用户的消费习惯、兴趣爱好等进行详细的分析。
Apache Hive数据清洗

对于用户画像数据,一般采用Apache Hive作为数据仓库。Hive提供了丰富的SQL查询能力,可以轻松完成数据清洗工作。

  1. 删除所有职业为空值的记录:同样使用SELECT或DELETE语句即可完成删除。

    DELETE FROM user_profile WHERE job = '';
  2. 将邮箱中的数字替换为@符号:同样使用SCRIPT或TRANSFORM命令结合Python脚本,即可完成替换。

  3. 将性别中M表示男性,F表示女性,U表示未知:同样使用CASE WHEN...THEN...END或UDF函数来完成替换。

  4. 将年龄大于120岁的记录统一标记为120岁以上:同样使用CASE WHEN...THEN...END或UDF函数来完成标记。

  5. 清理掉年龄小于18岁、注册时间早于2019年7月的记录:同样使用WHERE子句来完成筛选。

  6. 根据国家和地区来标记用户所在地区,并删除省市两级信息:使用LZO压缩、CREATE EXTERNAL TABLE创建外部表,并使用SQl SELECT语句来完成查询。

  7. 将手机号码中间四位替换为星号(*),保护隐私:同样使用CASE WHEN...THEN...END或UDF函数来完成替换。

  8. 基于兴趣爱好、消费习惯等数据建立用户画像,对用户进行细粒度的标签化:这类标签可以使用基于内容的推荐算法来完成,但目前一般采用的人工标注的方法来完成。

  9. 对商品购买、搜索、收藏等数据进行关联分析,分析用户喜欢什么样的商品、喜欢什么样的品牌、喜欢什么样的款式等:这类分析可以使用基于协同过滤的方法来完成,但目前一般采用的人工标注的方法来完成。

  10. 生成报告统计各个领域用户数量:这类报告可以使用HQL或PL/SQL完成统计,但由于数据量较大,而且涉及许多隐私数据,所以这里暂时不举例。

猜你喜欢

转载自blog.csdn.net/universsky2015/article/details/133446379
今日推荐