数据从源头提取出来后,通常还不能直接使用。它可能杂乱、不一致,或者结构不适合分析或加载到最终目的地。这时就需要数据转换了。它是对原始数据进行清洗、重构和丰富化的过程,以提升其质量和可用性。可以把它想象成将原油提炼成汽油;原材料虽然有价值,但需要加工才能真正发挥作用。转换是 ETL(提取、转换、加载)和 ELT(提取、加载、转换)过程中的“T”,尽管其位置有所不同。
为什么要转换数据?
数据转换的主要目的是:
- 提高数据质量: 纠正错误、处理缺失信息并消除不一致。高质量数据有助于进行更可靠的分析和构建更可信的应用。
- 确保一致性: 标准化格式、单位和命名规范,尤其是在合并来自多个源的数据时。如果一个系统记录摄氏温度,另一个记录华氏温度,转换可以确保它们使用相同的度量衡。
- 为目的地准备: 重塑数据以符合目标数据库、数据仓库或分析工具的模式或要求。
- 提升数据价值: 从现有数据中派生新信息或聚合数据,以生成更有意义的洞察。
常见转换操作
让我们看看在数据转换时经常遇到的一些基本操作。
数据清洗
原始数据通常不完善。清洗旨在修正这些不完善之处:
- 处理缺失值: 决定当数据缺失时如何处理。选项包括完全删除该记录、用默认值(如0、“未知”或平均值)填充空缺,或使用更高级的估算技术。最佳方法取决于具体情况和缺失数据的量。
- 纠正错误: 修正不准确之处,例如拼写错误(“New Yoork”修正为“New York”)、不一致的表示(“USA”与“United States”),或不可能的值(年龄 = 200)。
- 删除重复项: 识别并消除出现多次的记录,因为重复数据可能扭曲分析和报告。
示例:清洗客户数据
设想一下原始客户数据如下:
| 姓名 |
城市 |
国家 |
注册日期 |
| Alice |
New York |
USA |
2023-01-15 |
| Bob |
London |
UK |
NULL |
| Charlie |
Paris |
France |
2023/03/10 |
| Alice |
New York |
USA |
2023-01-15 |
| David |
Los Angeles |
U.S.A. |
2023-04-01 |
清洗步骤可能包括:
- 删除重复的“Alice”记录。
- 决定如何处理Bob缺失的注册日期(可能删除记录或填充默认值)。
- 标准化国家格式(例如,将“U.S.A.”改为“USA”)。
数据格式化和结构化
这涉及改变数据的形态或类型:
- 更改数据类型: 将数据从一种类型转换为另一种类型,例如将包含数字的文本字段(“123”)转换为实际的整数(123),或确保日期采用标准格式(例如,YYYY-MM-DD)。
- 标准化单位: 将度量单位转换为一致的单位,例如将重量从磅转换为千克,或使用汇率将货币转换为单一类型。
- 重构: 修改数据的布局。这可能包括拆分列(例如,将全名拆分为姓和名)或组合列。可能需要更复杂的重构,如透视(将行转换为列)或逆透视(将列转换为行),以便为特定的分析工具准备数据。
示例:格式化销售数据
原始销售数据:
| 产品ID |
销售金额 (美元) |
销售日期 |
| P101 |
"50.25" |
05/10/2023 |
| P203 |
"120.00" |
05/11/2023 |
格式化可能包括:
- 将“销售金额 (美元)”从文本(字符串)转换为数字类型(小数或浮点数)。
- 将“销售日期”标准化为“YYYY-MM-DD”格式(例如,“2023-05-10”)。
数据缩减与丰富
有时你需要更少的数据,有时需要更多的数据:
- 筛选: 移除与分析无关的行(例如,只保留过去一年的销售记录)。
- 投影(选择列): 只保留必要的列,舍弃其他列,以简化数据集或保护隐私。
- 派生新信息: 根据现有列创建新列。例如,从“出生日期”列计算“年龄”,或从“收入”和“成本”列计算“利润”。
- 连接/合并: 根据共同字段合并来自不同源的数据。例如,使用“客户ID”将客户数据与销售数据连接起来,以查看购买历史和客户人口统计信息。
数据聚合
聚合涉及汇总数据以提供更高级别的视图:
- 计算汇总统计: 计算总和(sum)、平均值(avg)、计数(counts)、最小值(min)或最大值(max),通常按特定属性分组。
- 分组: 将聚合函数应用于数据中的特定组。例如,计算每个区域的总销售额或每个客户细分的平均订单价值。
示例:聚合销售数据
给定格式化的销售数据:
| 区域 |
产品 |
销售额 |
| North |
A |
100 |
| North |
B |
150 |
| South |
A |
200 |
| North |
A |
50 |
| South |
B |
120 |
按区域聚合总销售额将得到:
| 区域 |
总销售额 |
| North |
300 |
| South |
320 |
这些基本操作构成了大多数数据转换的组成部分。它们可以按顺序组合,将原始、杂乱的数据转换为干净、一致且结构化的格式,以供加载和分析。
数据管道中应用的一系列典型转换操作。
在数据库或数据仓库中工作时,这些转换通常通过SQL查询实现,或者使用像Python这样的编程语言及其库,如Pandas,或者使用专门的数据处理框架,如Apache Spark,我们稍后会提到。具体的工具和复杂程度取决于数据量、所需的转换以及您采用的是ETL还是ELT模式。