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