Courses
随着数据体量、类型与速度的不断增长,专注于构建高质量、良好结构化的数据集比以往任何时候都更加关键,因为这将直接影响洞察的准确性以及各行业决策的有效性。
组织不当或存在缺陷的数据会导致误导性的结论,造成时间、金钱与资源的损失。这正是数据整备(data wrangling)发挥作用的地方——它是一项关键流程,将原始、非结构化数据转换为干净、有序、可供分析的格式。
数据整备包含一系列步骤,以确保数据准确、可靠,并能贴合当前分析的具体需求。掌握数据整备,您就能释放数据的全部潜力,将其转化为可执行的洞察,助力明智决策并最终走向成功。
什么是数据整备?
数据整备是将原始数据转化为更易用格式的过程。这包括清洗、构建与丰富数据,使其为分析做好准备。
想象您刚拿到一个庞大的数据集——它很凌乱,存在缺失值、不一致以及无关信息。数据整备就像一套工具,帮助您整理这些数据,确保其有序且一致。
数据整备对于确保数据高质量且结构良好至关重要,而这对准确的数据分析至关关键。干净、结构化的数据是后续数据工作流程的基础——无论是构建机器学习模型、生成可视化,还是进行统计分析。
高质量数据可降低分析中的错误与偏差风险,从而得到更可靠的洞察。理解数据整备的重要性至关关键,因为它将直接影响基于这些数据所做决策的有效性。
整备不佳的数据会导致错误结论,并在现实应用中造成严重后果。因此,掌握数据整备对任何重视数据驱动决策的人来说都至关重要。
数据整备主要包括 5 个步骤:
- 发现(Discovery): 探索并理解数据,识别其来源、结构和潜在问题。
- 数据清洗(Data Cleaning): 纠正错误、处理缺失值并移除无关信息,以确保数据质量。
- 数据转换(Data Transformation): 对数据进行结构化、规范化与丰富,使之符合分析需求。
- 数据验证(Data Validation): 通过自动化检查数据的准确性与一致性,确保其可靠。
- 数据发布(Data Publishing): 以可供分析的格式导出已清洗与验证的数据,通常通过仪表盘与报告,或用于后续流程。

数据整备流程 - 使用 Napkin.ai 创建
数据整备的步骤与技术
我们已经概述了数据整备的五个步骤,下面分别展开说明:
发现
数据整备中的发现(discovery)步骤就像在拼图之前先观察全貌。它涉及检查数据集以明确您所面对的内容,包括了解数据类型、来源以及其结构方式。
正如您可能会按颜色或边缘形状分类拼图块一样,发现环节有助于对数据进行分类并识别模式,为后续工作奠定基础。
但发现同样在于识别潜在问题——就像拼图中缺失的碎片或不匹配的颜色。
在此步骤中,您需要识别数据中的各种问题,例如不一致、缺失值或异常模式。通过尽早发现这些挑战,您可以在后续数据整备步骤中制定应对方案,确保更顺畅地获得干净、可用的数据集。
数据清洗
数据清洗是对数据集进行细化,以确保其准确可靠。
这一过程包括处理诸如纠正错误、处理缺失值、修复不一致等问题。例如,如果数据集中存在同一人员或交易的重复记录,数据清洗将移除这些重复,避免结果偏斜。
此外,如果发现某些条目格式不一致,如电话号码格式各异,则需要将其标准化为统一格式。目标是提升数据的整体质量与完整性,使其能够支持准确且有意义的分析。
数据转换
数据转换是对数据集进行修改与增强,使之更契合分析需求的过程。该步骤包括对数据进行结构化,如重塑为所需格式,或将多个来源的数据合并为一致的结构。
数据规范化同样关键,即将取值调整到共同的尺度或格式,例如将所有货币值统一为同一货币,或标准化计量单位。
此外,数据转换还包括通过新增变量或整合外部数据源来丰富数据集,以提供更多背景或洞察。例如,您可以基于现有数据计算新指标,或从其它数据库追加信息,以呈现更完整的图景。
数据转换的目标是以更有利于深入分析的方式准备数据,提升其可用性与相关性。
数据验证
数据验证通过系统化检查与自动化流程来确保数据集的准确性与可靠性。这一步对于确认数据既正确又一致至关重要。
在数据验证过程中,您会执行多种检查来发现差异,例如与已知基准进行比对,或依据预定义的规则与约束进行校验。自动化流程可能包括运行脚本以标记异常或不一致,确保数据符合预期的格式与取值范围。
数据验证的目标是在数据用于分析前发现问题,防止错误影响结果。通过严格核验数据的准确性与可靠性,您能确保从数据中获得的洞察值得信赖。
数据发布
数据发布是数据整备流程的最后一步,即将清洗并结构化的数据提供给分析与决策使用。此步骤涉及为数据传播做好准备,通常通过创建仪表盘、报告或交互式可视化,使相关方能够便捷理解与使用。
在数据发布阶段,您可能会搭建数据管道或接口,使用户能够查询并与数据交互,确保以符合其需求的格式提供数据。
目标是从数据中提供清晰、可执行的洞察,支撑明智决策,并促进组织内的成果沟通。通过有效发布数据,您可确保数据整备的辛勤工作转化为有意义且切实可行的成果。
数据整备 vs 数据清洗
“数据整备”与“数据清洗”这两个术语常被互换使用,但它们指向数据准备过程中的不同方面。二者均是分析前的关键步骤,但目的与涉及的任务不同。了解两者的区别有助于厘清其角色,并确保数据准备的每个环节都得到有效处理。
数据整备(Data Wrangling)是一个全面过程,旨在将原始数据转化为适合分析的格式。它涵盖多个阶段,包括获取数据、结构化、清洗与验证。数据整备的目标是为来自多元来源的数据做好分析准备并产出洞察。该过程确保数据有序、准确,并随时可用于深入分析。
数据清洗(Data Cleaning),则是数据整备中的一个特定子集。它专注于通过处理与纠正错误和不一致来提升数据质量。这包括移除重复记录、纠正拼写错误、处理缺失值以及标准化数据格式。尽管数据清洗是数据整备中至关重要的一环,但它只是更广泛流程中的一步。
简而言之,数据整备是为分析准备数据的总体框架,包含处理数据准备各方面的多个步骤;数据清洗是该框架中不可或缺的组成部分,专门致力于提升数据的准确性与一致性。

数据整备 vs 数据清洗:数据整备侧重于结构化与验证数据,而数据清洗侧重确保可用的干净与高质量数据。图片由 napkin.ai 生成
数据整备工具
数据整备的方法多种多样,可以使用 Excel 或 Alteryx 等基础图形界面工具,也可以使用 R 与 Python 等语言进行编码。我们将在此探讨几种选择。
基础工具
对于简单的数据整备任务,诸如Microsoft Excel与 Google 表格这样的电子表格常常是不二之选。这些工具易于获取且界面熟悉,适合进行排序、筛选与基础数据清洗等任务。对于较小的数据集或刚开始学习数据整备的人而言,电子表格尤其实用。
借助内置函数与公式,用户无需太多技术背景即可快速完成计算与数据操作。
编程语言
对于更复杂的数据处理与自动化,Python 与 R 等编程语言被广泛使用。Python 具备强大的库,如Pandas、NumPy 与 OpenRefine,擅长处理大型数据集与复杂的数据转换。
R 则拥有如dplyr 与tidyr 等包,因其强大的数据分析能力而在统计与学术界广受青睐。两种语言都具有高度灵活性,允许用户编写自定义工作流并自动化重复性任务,非常适合处理更复杂的数据整备需求的数据从业者。

我们的Pandas 数据整备速查表可帮助您掌握诸多基础要点
专用软件
专用软件工具专为简化数据整备流程而设计,提供用于处理复杂数据任务的高级功能。这些工具为需要强大且易用解决方案的用户而设,不必进行大量编码即可完成数据清洗、结构化与准备。
Alteryx 是该领域的领先工具,以直观的拖放界面著称,用户可轻松清洗、混合并转换来自多个来源的数据。它内置多种数据处理工具,可便捷执行筛选、连接与聚合等任务。
云端的Alteryx Designer Cloud进一步增强了这些能力,提供可扩展、可协作的数据整备平台。该方案支持团队跨环境高效协作,实时处理大型数据集与复杂工作流。无论本地部署还是云端使用,Alteryx 都能确保数据得到准确准备并可用于洞察分析。
一体化平台
对于需要端到端解决方案的综合性数据项目,常使用 KNIME、Apache NiFi 与 Microsoft Power BI 等一体化平台。这些平台不仅支持数据整备,还在同一环境中提供数据集成、分析与可视化的工具。
例如,KNIME 以模块化、基于节点的界面闻名,用户可通过可视化方式构建复杂工作流。Apache NiFi 擅长管理与自动化系统间数据流,而 Power BI 将数据准备与强大的可视化能力相结合。对于需要无缝完成数据准备、分析与共享的项目,这些平台提供了整体化的数据驱动决策方案。
使用 Python 进行数据整备
在用Python 进行数据整备时有许多选择。其中两个主要包是Pandas 与NumPy。这两个包提供强大工具,使用户能轻松对数据集执行关键的数据整备技术。
大量数据处理发生在 Python 中,因此掌握这些包对任何数据从业者都至关重要。尽管技术众多,但一些关键技能包括进行高层次数据清洗(如删除空值)、合并数据集以及处理缺失值。
数据清洗
在许多情况下,数据在被使用前需要先在 Python 中进行清洗。这可能涉及移除字符串的尾随空格、删除空值或纠正数据类型等操作。
每个数据集都不同,需求也不尽相同,因此请先探索您的数据集,判断是否需要额外清洗。练习多种技术与编码技能,是学习在 Python 中清洗数据的有效途径。
清洗字符串时,常见问题之一是前后空格。这会在按长度、位置或匹配解析字符串时产生问题。最佳做法是对系列使用 str.strip() 方法。
# Example utilizes a pandas series
# If working with a dataframe, call the series using df[col] syntax
s = pd.Series(['1. Ant. ', '2. Bee!\n', '3. Cat?\t', np.nan, 10, True])
# It is important to include the .str or else the method will not work
s.str.strip()
在 Pandas 中删除空值很容易。我们将在后文讨论如何填充空值。您只需使用 dropna() 方法。该方法提供可选参数,允许您指定删除行/列的确切条件,但默认行为是删除任意包含空值的行。
# For any dataframe
df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
"toy": [np.nan, 'Batmobile', 'Bullwhip'],
"born": [pd.NaT, pd.Timestamp("1940-04-25"), pd.NaT]}
df.dropna()
.astype() 方法允许用户更改系列的数据类型,但纠正数据类型略显棘手,因为您必须确保 Pandas 系列中的每个值都符合该数据类型。
例如,将对象类型的系列转换为整数,意味着您知道每个值都是整数。如果有任意一个值不是整数,方法就会报错。您可以选择强制转换(将无效值设为空),但更值得的是调查为何某些值无法被转换。
合并数据集
在 Pandas 中合并 DataFrame 类似于 SQL 的连接(join)。Pandas 的 merge() 默认执行内连接(inner join)。不过,它会在空值上也进行连接,因此需要小心。执行合并需要使用特定的键。您可以基于多列甚至索引进行连接。
# Create two dataframes
df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],
'value': [1, 2, 3, 5]})
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
'value': [5, 6, 7, 8]})
# merge the df1 DataFrame to the df2 DataFrame using the columns key and rkey as keys
df1.merge(df2, left_on='lkey', right_on='rkey')
上述代码会基于各自 lkey 与 rkey 列中的匹配键合并两个 DataFrame。不匹配的值将被丢弃,最终仅保留匹配值。当然,您也可以更改合并行为,选择左/右/外连接。这是一个强大的工具,帮助数据科学家整合来自不同数据源的各类数据集。
处理缺失值
在处理缺失值时,具体方法会因业务场景而异。谈及缺失值时,我们必须思考其缺失原因。如果值因技术错误而缺失,或许应先修复技术问题再分析数据,并尽力恢复历史数据。
有时我们可以利用其余数据,直接忽略该缺失值。若历史数据很重要但无法恢复,就必须填补缺失。下面讨论如何填充缺失信息。
填充数据的主要方法是使用 Pandas 的 fillna()。对于字符串值,该方法可用于填补空值,例如:df.fillna(value='missing'),这也许已足够。该方法的妙处在于可灵活组合。将 Pandas 的 fillna() 与多种 NumPy 方法(如 mean()、median())及 lambda 函数结合,可用数学方式填补缺失值。
或者,还可以使用 Pandas 的 interpolate() 等方法,如果数据有序(如时间序列),便可通过算法填补缺口。目标是尽可能准确地填充,使其反映真实数据。
使用 SQL 进行数据整备
在 SQL 中执行数据整备是一种高效的处理方式,尤其当您的 SQL 数据库在云端时。这可减少本地机器的处理量以及网络的数据出入量。
SQL 中数据整备的重点是通过恰当的数据抽取、转换与加载来限制流经管道的数据范围。常见做法包括过滤数据、与参考表连接以及执行聚合。
过滤数据
在 SQL 中过滤表的主要方式是使用 WHERE 子句。它的用法相对直接,却极为强大。条件既可以是简单的相等判断、相似字符串匹配,也可以利用子查询。您还可以用 AND 与 OR 组合多个条件!
基于简单场景(如查找某列的特定值)的过滤示例如下:
SELECT *
FROM sample_table
WHERE sample_col = 23
使用更复杂的语句,如 LIKE 或 IN,可增强 WHERE 子句的灵活性。例如,以下查询借助 % 通配符查找名字以 J 开头的人,同时其姓氏需 IN 指定列表。
SELECT *
FROM sample_table
WHERE name LIKE ‘J%’ /* looks for people whose name starts with J */
AND last_name IN (‘Smith’, ‘Rockefeller’, ‘Williams’) /* Looks for people whose last name is in this list */
最后,使用子查询可进一步提升过滤的灵活性,它可以基于另一张表的结果。一个常见例子是,在特定时间点之后查找一组客户 ID。
SELECT *
FROM sample_table
WHERE customer_id IN (SELECT id FROM reference_table WHERE date >= ‘2024-01-01’)
结合这些技术,您就能确保输入数据正是所需,并尽量缩小数据集规模。一个额外强大的应用是利用过滤去重,从而完成清洗。更高级的技术包括对聚合使用 HAVING 过滤,以及结合窗口函数的 QUALIFY 语句。
连接表
进行表连接可帮助我们获取数据集中所需的额外信息。SQL 提供多种连接,如 INNER、OUTER、LEFT 与 RIGHT。通过 INNER 与 OUTER 连接,我们决定保留哪些数据:INNER 只保留两侧均匹配的数据,而 OUTER 则可保留不匹配的数据,具体取决于连接方向(左或右)。
LEFT 连接保留左表数据,RIGHT 连接保留右表数据。您可将 LEFT/RIGHT 与 INNER/OUTER 组合使用,此外还有特殊的 FULL OUTER JOIN,可将两表所有数据连接起来。
示例连接如下:
SELECT *
FROM a
LEFT OUTER JOIN
b
WHERE a.id = b.id
上述语句中,表 a 在左(先写),表 b 在右(后写)。LEFT OUTER JOIN 表示在 a.id = b.id 的条件下连接 a 与 b,但若无匹配,仍保留表 a 的所有数据。连接是引入必要附加数据的强大工具。
聚合
我们在 SQL 中用于数据整备的最后一个工具是 GROUP BY 子句来执行聚合。这有助于简化数据,并在将数据进一步传递到管道前进行一定的预处理。聚合是计算汇总统计的有力手段。以下示例展示了按客户 ID 汇总销售额:
SELECT
Customer_ID,
SUM(sales)
FROM sample_table
GROUP BY Customer_ID
常见的聚合函数包括 SUM、MEAN、MAX 与 MIN,可帮助我们快速理解数据。善用聚合能简化进入管道的数据。
实践示例与用例
本节将涵盖数据整备技术的一些实用示例与用例。我们将重点关注:数据标准化、合并数据源与文本处理。
数据标准化
将数据标准化为相同单位非常重要。如果同一指标使用不同单位或不同货币,可能会给分析带来问题。
下面我们用 SQL 演示一个将不同货币转换为美元(USD)的简单示例。假设我们有两张表:表 1 为 sales,包含不同地区的产品销售;表 2 为 currency_exchange,包含各地区在不同日期的汇率。转换示例如下:
SELECT
a.sale_id,
a.region,
CASE WHEN region <> ‘US’
THEN a.sale_price * b.exchange_rate
ELSE a.sale_price
END AS sale_price
FROM sales AS a
LEFT OUTER JOIN
currency_exchange AS b
WHERE a.region = b.region
该查询从 sales 表中选取 sale_id 与 region,并基于地区与参考表 currency_exchange 连接以获取汇率。通常还会涉及日期,以便获取当天的汇率。
文本处理
数据整备的一大部分是为机器学习模型准备数据。近年来,许多模型聚焦于自然语言处理,其前置任务之一是基于文本数据的情感分析。
关键步骤在于对文本进行规范化与去除标点。由于标点与大小写可能不会为模型提供重要语义,通常优先进行规范化处理。
为此,我们将使用基础的 Python 包与 re 包。下面示例展示如何移除标点、统一小写并修剪空白。
# import regex
import re
# input string
test_string = " Python 3.0, released in 2008, was a major revision of the language that is not completely backward compatible and much Python 2 code does not run unmodified on Python 3. With Python 2's end-of-life, only Python 3.6.x[30] and later are supported, with older versions still supporting e.g. Windows 7 (and old installers not restricted to 64-bit Windows)."
# remove whitespaces
no_space_string = test_string.strip()
# convert to lower case
lower_string = no_space_string .lower()
# remove numbers
no_number_string = re.sub(r'\d+','',lower_string)
print(no_number_string)
上述代码段为移除空白、统一为小写与删除数字/非字母字符提供了良好基础。
结语
数据整备是为机器学习模型与分析准备数据的关键环节。Python 中的 pandas 与 numpy 等众多工具,以及 SQL 的 WHERE 与 GROUP BY 等子句,都能帮助我们完成数据准备。
掌握这些技术对每位立志成为数据专业人士的人都至关重要。若您想更深入了解数据整备主题,建议参考以下资源:
数据整备常见问答
数据整备的目的是什么?
数据整备的主要目的是确保为机器学习模型与分析提供格式正确的数据。为达成这一目标,我们会清洗、处理、纠正格式,并对数据进行筛选/变换。
数据整备常用的关键工具有哪些?
常见的数据整备工具包括 Alteryx、R、Python 与 SQL。它们各有优缺点,适用于不同的数据整备需求。
我们如何以更高级的方式使用 SQL 进行数据整备?
通过使用窗口函数与高级聚合等方式,我们可以生成更全面的数据评估,例如滚动均值与排序(rank)。
学习 Alteryx 或 R 进行数据整备是否值得?
视您的行业与组织而定,您或许值得拓展技能至 R,以应对更传统的数据整备任务;或学习 Alteryx,以采用更现代的图形界面驱动方式。
在 Python 中进行数据整备需要掌握哪些关键包?
关键包包括 pandas、numpy、re(正则表达式)以及许多内置 Python 模块。聚焦理解您的数据需求,将决定您需要哪些包与方法。