作为数据工程师你真正需要的数学

发布: (2026年1月31日 GMT+8 11:00)
11 分钟阅读
原文: Dev.to

Source: Dev.to

(请提供需要翻译的正文内容,我才能为您完成简体中文翻译。)

Introduction

让我们直面显而易见的问题。

“要成为数据工程师,我必须擅长数学吗?”

我听学生和转行者问过这个问题上百次。答案可能会让你惊讶:

你需要的数学比想象的少——但绝不是零。

数据工程不是数据科学。你不会推导梯度下降公式或证明统计定理。但你每天都会遇到数学概念,往往甚至没有意识到。

本文将准确说明你需要掌握的内容——让你成为更好的工程师的实用数学,而不需要学术上的繁重负担。

直截了当地说,关键在于:

ConceptHow Often You’ll Use It
Set TheoryDaily
Boolean LogicDaily
Basic StatisticsWeekly
Aggregations & ArithmeticDaily
Probability BasicsOccasionally
Linear AlgebraRarely
CalculusAlmost never

如果你在学校里对高级数学感到吃力,不要因此止步。大多数数据工程的数学在你看到实际应用后会变得直观。

集合论

你编写的每个 SQL 查询都是集合论的实际运用。如果你理解集合,就能理解 SQL。这就是它的根本所在。

集合是由不同元素组成的集合。

Set A = {1, 2, 3, 4, 5}
Set B = {4, 5, 6, 7, 8}

这些直接映射到 SQL:

集合操作SQL 等价结果
并集UNIONA B 中的所有元素
交集INNER JOINA 和 B 包含的元素
差集EXCEPT / LEFT JOINA 中 但不在 B 的元素
笛卡尔积CROSS JOINA 和 B 的所有组合

示例查询

-- 并集:合并两个集合
SELECT customer_id FROM online_orders
UNION
SELECT customer_id FROM store_orders;

-- 交集:查找共同元素
SELECT a.customer_id
FROM online_orders a
INNER JOIN store_orders b ON a.customer_id = b.customer_id;

-- 差集:查找仅在第一个集合中的元素
SELECT customer_id FROM online_orders
EXCEPT
SELECT customer_id FROM store_orders;

将连接可视化为维恩图会大有帮助:

  • INNER JOIN – 仅重叠部分
  • LEFT JOIN – 左侧全部加上重叠部分
  • RIGHT JOIN – 右侧全部加上重叠部分
  • FULL OUTER JOIN – 所有内容

如果你掌握了集合论,SQL 就会变得直观。

Source:

布尔逻辑

每个 WHERE 子句、IF 语句和 CASE 表达式都是布尔逻辑。

运算符含义示例
AND必须同时为真status = 'active' AND age > 18
OR至少有一个为真country = 'US' OR country = 'CA'
NOT取反条件NOT status = 'deleted'

真值表概览

表达式结果
TRUE AND NULLNULL
FALSE AND NULLFALSE
TRUE OR NULLTRUE
FALSE OR NULLNULL
NOT NULLNULL
NULL = NULLNULL(而非 TRUE

提示: WHERE column = NULL 永远不起作用。请使用 WHERE column IS NULL

德·摩根定律

  • NOT (A AND B) = (NOT A) OR (NOT B)
  • NOT (A OR B) = (NOT A) AND (NOT B)

实际示例

-- 两条语句等价
WHERE NOT (status = 'active' AND region = 'EU')
WHERE status != 'active' OR region != 'EU'

理解德·摩根定律有助于调试那些未按预期工作的过滤条件。

描述性统计

您不需要统计学学位,但必须了解几种描述性度量。

指标它告诉你什么SQL
均值平均值AVG(column)
中位数中间值取决于数据库(例如 PERCENTILE_CONT(0.5)
众数出现频率最高的值GROUP BY … ORDER BY COUNT(*) DESC LIMIT 1
极差最大值 – 最小值MAX(col) - MIN(col)
方差数据的离散程度VAR(column)
标准差以原始单位表示的离散程度STDDEV(column)

何时使用哪种指标

  • 均值 – 一般的平均值,但对异常值敏感。
  • 中位数 – 对偏斜分布更合适(例如工资、价格)。
  • 众数 – 最适用于分类数据。

示例

如果工资为 {50k, 55k, 60k, 65k, 500k}

统计量解释
均值146k误导(异常值把它拉高)
中位数60k更能代表典型工资

百分位数(PostgreSQL 示例)

SELECT 
    PERCENTILE_CONT(0.5)  WITHIN GROUP (ORDER BY response_time) AS median,
    PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY response_time) AS p99
FROM api_logs;

P25、P50(中位数)、P75 和 P99 等百分位数在性能指标中很常见。

聚合

您将不断编写聚合函数。要熟记它们。

函数目的
COUNT行数
SUM值的总和
AVG平均值
MIN最小值
MAX最大值
COUNT(DISTINCT)唯一值

分组

GROUP BY 将您的数据划分为集合,然后对每个集合应用聚合。

SELECT 
    region,
    COUNT(*)               AS order_count,
    SUM(amount)            AS total_revenue,
    AVG(amount)            AS avg_order_value
FROM orders
GROUP BY region;

可以这样理解: “对每个地区,计算这些指标。”

窗口函数

窗口函数允许您在保留单行记录的同时进行聚合。

SELECT 
    order_id,
    customer_id,
    amount,
    SUM(amount) OVER (PARTITION BY customer_id) AS customer_total,
    AVG(amount) OVER (PARTITION BY customer_id) AS customer_avg
FROM orders;

PARTITION BY 再次体现集合论——您正在定义子集。

概率基础

您不需要深入的概率理论,但掌握一些基础概念会有帮助。

ConceptDefinition
Probability事件发生的可能性,范围从 0 到 1
Independent Events一个事件不影响另一个事件
Conditional Probability在已知其他事件发生的前提下的概率

典型的数据工程应用:

  • 数据质量检查:“有多少比例的记录存在缺失值?”
  • 抽样:“这个样本是否具有代表性?”
  • A/B 测试:“这个结果是否具有统计显著性?”

示例:列中 NULL 值的概率

SELECT 
    COUNT(*)                                            AS total_rows,
    SUM(CASE WHEN email IS NULL THEN 1 ELSE 0 END)       AS null_count,
    ROUND(
        SUM(CASE WHEN email IS NULL THEN 1 ELSE 0 END)::decimal 
        / COUNT(*), 4
    )                                                   AS null_probability
FROM customers;

数值类型及其陷阱

了解数字的存储方式可以避免代价高昂的错误。

类型用例注意事项
INTEGER计数、ID超出上限会溢出
FLOAT科学数据精度误差

这就是你作为一名合格数据工程师所需的实用数学。掌握这些概念后,你会发现 SQL 和数据管道不再那么令人生畏。

DECIMAL

金钱,精确数值
更慢,需要更多存储

-- This might not equal 0.3
SELECT 0.1 + 0.2;
-- Result: 0.30000000000000004

对于金融数据,始终使用 DECIMAL

-- Integer division truncates
SELECT 5 / 2;          -- Returns 2, not 2.5

-- Cast to get decimals
SELECT 5::decimal / 2; -- Returns 2.5

我经常使用的模式

-- 1️⃣ Category percentages
SELECT 
    category,
    COUNT(*) AS count,
    ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 2) AS percentage
FROM products
GROUP BY category;
-- 2️⃣ Year‑over‑year growth
SELECT 
    year,
    revenue,
    LAG(revenue) OVER (ORDER BY year) AS prev_year,
    ROUND(
        100.0 * (revenue - LAG(revenue) OVER (ORDER BY year))
        / LAG(revenue) OVER (ORDER BY year), 2
    ) AS yoy_growth
FROM annual_revenue;
-- 3️⃣ Running total
SELECT 
    date,
    amount,
    SUM(amount) OVER (ORDER BY date) AS running_total
FROM transactions;
-- 4️⃣ 7‑day moving average
SELECT 
    date,
    value,
    AVG(value) OVER (
        ORDER BY date 
        ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
    ) AS seven_day_avg
FROM daily_metrics;

作为数据工程师,你可以降级

主题为什么可以跳过
微积分留给数据科学家
线性代数只在机器学习工程中需要
高级统计超出描述性统计,非必需
证明与定理你在构建,而不是证明

如果以后转向机器学习工程,请重新审视这些内容。对于核心数据工程而言,它们并非必需。

学习数据工程数学的最佳方式 – 通过 SQL

  1. 选取公开数据集 – Kaggle 上有很多。
  2. 提出问题 – “按地区划分的订单中位值是多少?”
  3. 编写查询 – 运用上述概念。
  4. 验证结果 – 它们是否合乎逻辑?

当数学与真实问题相结合时,就会变得直观。

必掌握的核心概念

  • 集合论 – 理解它,SQL 就变得有意义。
  • 布尔逻辑 – 每个过滤条件都依赖它。
  • 描述性统计 – 均值、中位数、百分位数。
  • 聚合 – 你的日常工具。
  • 精度 – 了解你的数据类型。

你不必热爱数学。只需要对它保持足够的尊重,以确保基础正确。理论只能带你走这么远。

接下来是什么?

在下一篇文章中我们将把所有内容串联起来:

  • 构建你的第一个数据管道——从概念到可运行代码
  • 数据工程揭秘:它是什么以及为何重要
  • 管道、ETL 与数据仓库:数据工程的基因
  • 行业工具:驱动现代数据工程的力量
  • 作为数据工程师真正需要的数学(此处)
  • 构建你的第一个管道:从概念到执行
  • 规划你的路径:加速学习的课程与资源

觉得有帮助吗? 对这些概念的应用有疑问吗?请在评论区留言。

Back to Blog

相关文章

阅读更多 »