☰
data-scientist-roadmap 数据科学基础:从矩阵、SQL Join 到 ETL 与虚拟环境的 18 个必备知识点
2026/10/9 2:51:58 网站建设 项目流程
  • 教程

【免费下载链接】data-scientist-roadmap

Toturials coming with the "data science roadmap" picture.

项目地址:https://gitcode.com/gh_mirrors/da/data-scientist-roadmap
点击查看免费下载

本指南以>import numpy as np # 生成一个由 4 个各含 5 个随机数的列表组成的列表 list_of_lists = [] for i in range(4): list_of_lists.append(np.random.randint(low=0, high=100, size=5)) # 将 list_of_lists 转换为 numpy 矩阵 matrix = np.matrix(list_of_lists) print("Here is your matrix:\n{}\n".format(matrix)) # 加法:矩阵整体加 5 new_matrix = np.sum([matrix, 5]) print("Here is your matrix with addition +5:\n{}\n".format(new_matrix)) # 乘法:矩阵与自身逐元素相乘 new_matrix = np.multiply(matrix, matrix) print("Here is your matrix multiplied by itself:\n{}\n".format(new_matrix)) # 转置:行列互换 new_matrix = np.transpose(matrix) print("Here is your matrix transposed:\n{}\n".format(new_matrix))

运行该脚本(python 01_Fundamentals/1_fundamentals.py)即可直观看到:矩阵加 5 后每个元素都加 5;矩阵自乘后得到逐元素平方;转置后矩阵从 4×5 变为 5×4。这四种运算正是后续线性回归、SVM 等算法笔记(见 04_Machine-Learning/Algorithms/01. Linear Regression.ipynb)中向量化计算的基础。

2. 哈希函数、二叉树与 O(n) 复杂度

哈希函数(Hash Function)

哈希函数是将任意大小的数据映射为固定大小数据的函数。其最典型的应用是哈希表(hash table)数据结构——计算机软件中广泛用于快速查找的数据结构。哈希函数通过检测大文件中的重复记录来加速表或数据库的查找。在数据科学实践中,哈希的思想还常见于特征哈希(feature hashing)与布隆过滤器(Bloom filter)等场景。

二叉树(Binary Tree)

在计算机科学中,二叉树是每个节点最多拥有两个孩子(左孩子与右孩子)的树形数据结构。二叉搜索树、堆(heap)和各类平衡树(如 AVL 树、红黑树)都建立在这一基本结构之上。对于数据科学家而言,理解二叉树有助于掌握决策树(Decision Tree)等基于树结构的机器学习算法,仓库中 04_Supervised_Learning_Algorithms/04. Decision Trees.ipynb 即是其在监督学习中的直接应用。

大 O 记号(Big O Notation)

大 O 记号用于根据运行时间或空间需求随输入规模增长的情况对算法进行分类。例如遍历一个长度为 n 的数组是 O(n),二叉搜索树的查找平均为 O(log n),而嵌套循环常为 O(n²)。在解析数论中,大 O 记号还常用于表达一个算术函数与更易理解的近似之间的差异上界。对数据科学家而言,评估特征工程、聚类或排序算法的复杂度时,大 O 记号的思维方式必不可少。

3. 关系代数与数据库基础

定义

关系代数是一族具有良好基础语义(well-founded semantics)的代数,用于对关系数据库中存储的数据建模并定义对其的查询。它的主要应用是为关系数据库——尤其是以 SQL 为代表的查询语言——提供理论基石。文档第 4 节详述的各类 Join 运算,本质上就是关系代数中连接操作(join)在 SQL 中的具体实现。

自然连接(Natural Join)

在 SQL 中,两个表之间发生自然连接需要满足两个条件:

  • 两个表中至少有一列具有相同的列名;
  • 这两列必须具有相同的数据类型,常见类型包括:
    • CHAR(定长字符)
    • INT(整数)
    • FLOAT(浮点数值)
    • VARCHAR(可变长字符)

自然连接的两种等价写法(文档原文):

SELECT <COLUMNS> FROM <TABLE_1> NATURAL JOIN <TABLE_2> SELECT <COLUMNS> FROM <TABLE_1>, <TABLE_2> WHERE TABLE_1.ID = TABLE_2.ID

第一种直接使用NATURAL JOIN关键字,由数据库自动匹配同名同类型列;第二种是等价写法,在笛卡尔积结果上通过WHERE条件显式限定连接键,两者结果一致。

4. Inner / Outer / Cross / Theta 连接:五类 SQL Join 全解

INNER JOIN:仅保留匹配记录

INNER JOIN关键字选择两个表中都含有匹配值的记录,是使用频率最高的连接类型。

SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;

FULL OUTER JOIN:全外连接

FULL OUTER JOIN返回左表(table1)或右表(table2)任一存在匹配的所有记录。匹配不到的记录,另一侧字段以NULL填充。

SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

LEFT JOIN:左连接

LEFT JOIN返回左表(table1)的所有记录,以及右表(table2)中与之匹配的记录。右表没有匹配时,结果中右侧字段为NULL。

SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;

RIGHT JOIN:右连接

RIGHT JOIN返回右表(table2)的所有记录,以及左表(table1)中与之匹配的记录。左表没有匹配时,结果中左侧字段为NULL。

SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;

Cross Join 与 Theta Join

文档标题中的另外两类连接可作如下理解:

  • Cross Join(笛卡尔积):两表的每一行与另一表的每一行组合,结果行数为两表行数之积。上文自然连接的第二种写法(FROM TABLE_1, TABLE_2)在未加WHERE时即产生笛卡尔积。
  • Theta Join(θ 连接):在笛卡尔积基础上,以任意比较运算符(=,<,>,<=,>=,<>)作为连接条件的连接。INNER JOIN ... ON中ON后跟等值条件的等值连接(Equi-Join)是 θ 连接的特例。

5. CAP 定理:分布式数据存储的三选二困境

CAP 定理指出:分布式数据存储系统不可能同时提供以下三种保证中的两种以上:

  • 一致性(Consistency):每次读操作要么收到最新的写结果,要么返回错误;
  • 可用性(Availability):每个请求都会收到(非错误的)响应——但不保证响应包含最新写入;
  • 分区容忍性(Partition tolerance):即使节点之间发生任意数量的消息丢失(或延迟),系统仍能继续运行。

换言之,CAP 定理表明:在出现网络分区时,必须在一致性和可用性之间做出选择。同时需要注意:CAP 定理中定义的"一致性"与 ACID 数据库事务所保证的一致性有本质区别——前者关注的是多节点间数据的可见性,后者关注的是单个事务内的隔离与原子性。文档第 9 节的分片(Sharding)和第 10 节的 OLAP 都建立在分布式存储的前提之上,CAP 定理正是理解这些设计取舍的理论起点。

6. 表格数据(Tabular Data)与 CSV 格式

表格数据与关系型数据(如 SQL 数据库)相对,其核心特征为:

  • 一切内容都按列和行排列;
  • 每一行都具有相同数量的列(缺失值可用N/A代替);
  • 第一行通常是表头(header),用于描述每一列的内容;
  • 数据科学中最常用的表格数据格式是CSV:每一列都被一个定界字符(制表符、逗号等)包围,以将该列与相邻列区分开。

仓库示例:用 pandas 和 csv 读取制表符分隔数据

仓库 03_Programming/15_reading-csv.py 提供了两种读取 CSV 的完整实现,对应的数据文件 03_Programming/15_csv-example.csv 使用**制表符(\t)**作为分隔符:

Leaf Green Lemon Yellow Cherry Red Snow White

方式一:使用 pandas,指定delimiter="\t"读取为 DataFrame 并逐行访问:

import pandas data = pandas.read_csv("15_csv-example.csv", delimiter="\t") for index, row in data.iterrows(): print(f"{row['Name']}'s color is {row['Color']}")

方式二:使用标准库csv,以csv.reader配合相同分隔符逐行解析:

import csv with open("15_csv-example.csv", encoding="utf-8") as csv_file: read_csv_file = csv.reader(csv_file, delimiter="\t") for row in read_csv_file: print("'s color is ".join(row))

这个例子印证了文档的定义:CSV 的定界符并非只能是逗号,任何字符(此处是制表符)都可以作为列定界符,关键在于读取时必须显式指定delimiter。

7. 熵(Entropy):不确定性的度量

熵是不确定性的度量。高熵意味着数据具有高方差,因而包含大量信息和/或噪声。文档给出了直观的例子:

  • 常数函数(如对所有 x 都有 f(x) = 4)没有熵——完全可预测、信息量少、没有噪声、可以被极简地表示;
  • f(x) ≈ 4 具有一定熵;
  • f(x) 为随机数时因噪声而具有极高熵。

在机器学习中,熵是决策树与随机森林选择分裂特征的核心依据(信息增益即基于熵的下降),也是信息论与特征选择的基础概念。可对照仓库 05_Supervised_Learning_Algorithms/04. Decision Trees.ipynb 理解熵在树模型中的实际用途。

8. DataFrame 与 Series:表格数据的编程载体

  • DataFrame(数据帧):用于存储数据表,本质上是一组等长向量的列表。仓库 15_reading-csv.py 中pandas.read_csv返回的对象即 DataFrame。
  • Series(序列):按顺序排列的数据点序列,在 pandas 中对应单列数据。

两者共同构成 pandas 的两大核心数据结构:DataFrame 由多个 Series 按列组合而成,这也是"表格数据按行列排列"定义在代码层面的直接映射。

9. 分片(Sharding):水平扩展数据库

分片(Sharding)是水平(按行)数据库分区,与垂直(按列)分区(即规范化 Normalization)相对。

为什么要使用分片?

  1. 数据集庞大或吞吐量高的应用,可能超出单台服务器的容量;
  2. 应对增长有两种方式:垂直扩展(Vertical Scaling)与水平扩展(Horizontal Scaling);
  3. 垂直扩展:提升单台服务器的容量。但由于技术和经济限制,单台机器可能不足以支撑给定工作负载;
  4. 水平扩展:将数据集和负载分散到多台服务器,按需增加服务器以提升容量。单台机器的速度或容量可能不高,但每台机器只处理整体工作负载的一个子集,整体效率可能优于一台高速高容量服务器;其核心理念是借助分布式系统实现规模化,但随之而来的是分布式系统固有的复杂度权衡;许多数据库系统通过对数据集进行分片来提供水平扩展。

10. OLAP:多维分析查询

在线分析处理(Online Analytical Processing,OLAP)是一种在计算中快速回答多维分析(MDA)查询的方法。

  • OLAP 属于商业智能(business intelligence)的更广泛范畴,后者还包括关系数据库、报表编写和数据挖掘;
  • OLAP 的典型应用包括:销售与营销的商业报告、管理报告、业务流程管理(BPM)、预算与预测、财务报告等,并不断出现新应用场景(如农业);
  • "OLAP" 一词是对传统数据库术语在线事务处理(OLTP)的轻微修改而来。

结合文档第 11 节的多维数据模型(Multidimensional Data Model)可以理解:OLAP 围绕"维度-度量"的多维立方体组织数据,预聚合与快速切片是其在分析场景中的核心优势。

11. 多维数据模型(Multidimensional Data Model)

多维数据模型是 OLAP 的分析基础,通常以**数据立方体(data cube)**的形式组织:事实(fact)表存放度量值(如销售额),维度(dimension)表描述观察角度(如时间、地区、产品)。常见操作包括上卷(roll-up)、下钻(drill-down)、切片(slice)与切块(dice)。该模型使得"按多个维度快速汇总查询"成为可能,这正是 OLAP 快速回答多维分析查询的原因。

12. ETL:数据管道三步曲

ETL 是数据工程与数据仓库建设中最经典的流程,由三个阶段构成:

  • 抽取(Extract)
    • 从多个异构源系统中抽取数据;
    • 进行数据校验,确认拉取的数据在给定域中是否包含正确/预期的值。
  • 转换(Transform)
    • 抽取出的数据被送入管道(pipeline),在其上应用多个函数;
    • 这些函数旨在将数据转换为终端系统可接受的格式;
    • 涉及清洗数据以去除噪声、异常(anomalies)和冗余数据。
  • 加载(Load)
    • 将转换后的数据加载到最终目标系统中。

ETL 与文档第 14 节(JSON/XML)和第 15 节(NoSQL)紧密相关:转换阶段常涉及对 JSON、XML 等半结构化数据的解析与清洗,而加载目标既可能是关系型数据库,也可能是 NoSQL 存储。

13. 报表(Reporting)vs 商业智能(BI)vs 分析(Analytics)

三者的定位可以这样区分:

  • Reporting(报表):面向过去,将既定指标以固定格式(表格、图表)定期输出,回答"发生了什么";
  • Business Intelligence(商业智能):在报表之上提供多维查询、交互式仪表盘与探索能力,回答"为什么发生";
  • Analytics(分析):运用统计与机器学习方法(回归、聚类、预测建模)发现规律并预测未来,回答"将要发生什么 / 应该怎么做"。

三者层层递进,共同构成数据驱动决策的完整链条。

14. JSON 与 XML:两种主流半结构化数据格式

JSON:语言无关的数据格式

JSON 是一种语言无关的数据格式。文档给出了描述一个人的完整示例,包含字符串、布尔值、整数、嵌套对象、数组、空数组与null:

{ "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ {"type": "home", "number": "212 555-1234"}, {"type": "office", "number": "646 555-4567"}, {"type": "mobile", "number": "123 456-7890"} ], "children": [], "spouse": null }

XML:可读且机器可解析的标记语言

可扩展标记语言(XML)定义了将文档编码为人类可读且机器可读格式的一套规则。文档给出了一个植物目录示例:

<CATALOG> <PLANT> <COMMON>Bloodroot</COMMON> <BOTANICAL>Sanguinaria canadensis</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$2.44</PRICE> <AVAILABILITY>031599</AVAILABILITY> </PLANT> <PLANT> <COMMON>Columbine</COMMON> <BOTANICAL>Aquilegia canadensis</BOTANICAL> <ZONE>3</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$9.37</PRICE> <AVAILABILITY>030699</AVAILABILITY> </PLANT> <PLANT> <COMMON>Marsh Marigold</COMMON> <BOTANICAL>Caltha palustris</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Sunny</LIGHT> <PRICE>$6.81</PRICE> <AVAILABILITY>051799</AVAILABILITY> </PLANT> </CATALOG>

对比可见:JSON 以键值对和数组表达结构、更轻量;XML 以标签树表达结构、自带元数据描述能力。两者都是 ETL 转换阶段与 NoSQL 存储中常见的半结构化数据形态。

15. NoSQL:非关系型数据库

NoSQL 与关系型数据库相对,意为"Not Only SQL"(不仅仅是 SQL)。其特点是:数据非结构化,表之间没有键(key)的概念。

  • 任何类型的数据(JSON、CSV 等)都可以存入 NoSQL 数据库,无需事先设计复杂的关系模式;
  • 文档列举的常用 NoSQL 技术栈包括:Cassandra、MongoDB、Redis、Oracle NoSQL 等。

在实际选型中:MongoDB 等文档型数据库适合半结构化 JSON 数据;Redis 等键值型数据库适合缓存与高速读写;Cassandra 等列族型数据库适合大规模写入的分布式场景——它们正是 CAP 定理中不同取舍(一致性优先或可用性优先)的体现。

16. 正则表达式(Regex)实战

基本概念与应用场景

正则表达式(regular expressions,简称 regex)在计算机领域被广泛使用,可用于:

  • 文本替换(Text replacing);
  • 从文本中提取信息(如邮箱、电话号码);
  • 列出具有.txt扩展名的文件等。

文档推荐了两个在线实验工具:regexr.com(通用正则测试)与 pythonium.net/regex(Python 正则测试,内置正则可视化器)。

Python 中使用:从导入到三种核心操作

在 Python 中使用正则只需导入标准库re:

import re

仓库 16_regex.py 给出了替换、查找与匹配三个核心操作的完整示例:

import re # 取自 Python 模块 __re__ 的文本 text = "This module provides regular expression matching operations similar to those found in Perl." # 替换:将 "Perl" 替换为 "every languages" new_text = re.sub("Perl", "every languages", text) print(new_text) # 查找:找出文本中的所有大写字母 new_text = re.findall("[A-Z]", text) print(new_text) # 匹配:测试某个单词是否在文本中 new_text = re.match(".*regular.*", text) print(new_text)

逐行解读:

函数作用本例输出
re.sub(pattern, repl, string)用repl替换所有匹配pattern的子串"This module ... similar to those found in every languages."
re.findall("[A-Z]", text)返回所有匹配字符构成的列表['T', 'P'](文本中两个大写字母)
re.match(".*regular.*", text)从字符串开头匹配,返回匹配对象匹配对象(re.Match类型),可用.group()查看内容

注意re.match与re.search的区别:re.match只从字符串开头匹配,而re.search在整个字符串中搜索首次出现;.*中.匹配任意字符(默认不换行),*表示前面的字符出现零次或多次。若想提取邮箱、电话号码等具体信息,常与捕获组(...)配合使用。

17. 供应商全景(Vendor Landscape)

数据科学工具链存在丰富的供应商生态。按数据科学流程可以划分为几大类:

  • 数据处理与分析:如 pandas、NumPy、R 语言(仓库 02_Statistics/2_descriptive-statistics.py 与 03_Programming/4_r_basics.R 展示了 Python 与 R 两条技术路线);
  • 机器学习平台:scikit-learn、TensorFlow、PyTorch 等(仓库 04_Machine-Learning 目录下的算法笔记即依托这类工具);
  • 数据库与存储:关系型(SQL)与 NoSQL(Cassandra、MongoDB、Redis 等,见本文第 15 节);
  • 大数据与分布式:Hadoop、Spark 等(见仓库 07_Big-Data/README.md);
  • 数据可视化:matplotlib、Tableau 等(见仓库 06_Data-Visualization)。

该视角帮助初学者理解:不同环节可选用不同供应商的工具,关键在于组合成一条完整、可落地的数据科学工具链。

18. 环境搭建:Python 虚拟环境完整指南

什么是 Python 虚拟环境?

Python 虚拟环境是一个隔离的空间,可以在其中独立进行 Python 项目开发,与系统安装的 Python 互不干扰。这是大多数 Python 开发者使用的最重要工具之一。

为什么使用虚拟环境?

  • 避免依赖冲突(Avoids dependency conflicts);
  • 允许在多个项目中使用不同的依赖;
  • 保持系统 Python 干净且不被修改。

创建虚拟环境

虚拟环境通过执行venv模块创建。

Linux 下:

python3 -m venv myenv

Windows 下:

python -m venv myenv

这会在当前目录创建一个名为myenv的文件夹,其中包含该虚拟环境。文件夹名称可任意命名。

激活虚拟环境

Linux 下:

source myenv/bin/activate

Windows 下:

  • 命令提示符(cmd):
myenv\Scripts\activate
  • PowerShell:
myenv\Scripts\Activate.ps1

若遇到安全错误,先执行此命令:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

激活后即可在虚拟环境中用pip安装所需包。

退出与重新激活

  • 完成后,运行deactivate退出虚拟环境;
  • 之后想再次使用该环境时,进入项目文件夹并重复执行上述激活命令即可。

与仓库的关联:Poetry 管理依赖

在虚拟环境之上,本项目使用 Poetry 管理依赖:仓库 pyproject.toml 声明了 Python^3.10与开发依赖 black(代码格式化工具)。按照仓库根 README.md 的说明,安装 Poetry 后执行poetry install即可一次性创建环境并安装全部依赖——这相当于对"虚拟环境 + 依赖管理"的自动化封装,是上述手动流程在现代工程中的推荐演进。

总结

本文以 01_Fundamentals/README.md 为骨架,完整覆盖了数据科学入门的 18 类核心知识:矩阵运算(配合 1_fundamentals.py 源码验证)、哈希与二叉树、关系代数与五类 SQL Join、CAP 定理、表格数据与 CSV(配合 15_reading-csv.py 示例)、熵、DataFrame/Series、分片、OLAP 与多维模型、ETL、报表/BI/分析、JSON 与 XML、NoSQL、正则表达式(配合 16_regex.py 源码)、供应商全景与虚拟环境。每一部分既是独立可查的概念卡片,又能在仓库中找到对应的可运行示例,适合作为数据科学系统学习路线中的"第一章节"反复查阅与动手验证。

  • 教程

【免费下载链接】data-scientist-roadmap

Toturials coming with the "data science roadmap" picture.

项目地址:https://gitcode.com/gh_mirrors/da/data-scientist-roadmap
点击查看免费下载
上一篇:iOS上畅玩Minecraft Java版:PojavLauncher终极使用指南
下一篇:突破AI回复长度瓶颈:text-generation-webui长回复扩展性能优化指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询