news 2026/9/12 23:54:22

非关系型数据实战:从电子表格公式到 NoSQL 文档数据库(Data Science for Beginners 第 6 课)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
非关系型数据实战:从电子表格公式到 NoSQL 文档数据库(Data Science for Beginners 第 6 课)

非关系型数据实战:从电子表格公式到 NoSQL 文档数据库(Data Science for Beginners 第 6 课)

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

本篇文章是 Data-Science-For-Beginners 课程“Working with Data”模块的核心一课,系统讲解关系型数据库之外的两类数据载体:电子表格NoSQL 数据库。你将掌握工作簿/工作表/单元格的基本结构、公式与函数的用法,并在此基础上深入 NoSQL 的四大分类(键值、图、列族、文档),最终通过Azure Cosmos DB 模拟器完成从建库、导入 JSON 数据到编写 SQL 查询的完整本地实操。文中所有示例与数据文件均来自本仓库2-Working-With-Data/06-non-relational目录,可直接对照练习。

一、电子表格:最轻量的数据存储与分析工具

电子表格之所以成为数据存储和探索的流行工具,是因为它上手门槛低、启动成本小。本课示例以 Microsoft Excel 演示,但绝大多数电子表格软件(Google Sheets、WPS、LibreOffice Calc 等)的组件名称与操作步骤都大同小异。

1.1 核心概念:工作簿、工作表与单元格

一个电子表格文件(Spreadsheet)可以在计算机、移动设备或云文件系统上访问,软件本身可能是浏览器版,也可能需要安装为应用程序。在 Excel 中,这类文件被称为工作簿(Workbook),本课后续统一使用该术语。

一个工作簿包含一个或多个工作表(Worksheet),每个工作表通过**选项卡(Tab)**标识。工作表内部由矩形区域——**单元格(Cell)**组成,数据就存放在单元格中:

  • 单元格是行与列的交叉点,列用字母标识(A、B、C…),行用数字标识(1、2、3…);
  • 因此每个单元格有唯一的地址,例如第 3 行第 B 列记为B3
  • 部分表格会在前几行设置表头(Header),用来描述下方各列单元格中数据的含义。

本仓库中的示例文件 InventoryExample.xltm 是一个带格式的库存管理表,来自 Microsoft Templates,它包含三个工作表,选项卡分别名为“Inventory List”(库存清单)、“Inventory Pick List”(拣货清单)和“Bin Lookup”(货位查询)。其中 Inventory List 工作表的第 4 行是表头,描述对应列每个单元格的取值含义。

1.2 公式:让单元格之间产生依赖关系

很多时候,一个单元格的值依赖其他单元格计算而来。例如库存清单追踪了每件商品的成本,但如果想知道整个库存的总价值该怎么办?这时就需要公式(Formula)——公式对单元格数据执行运算。

在本例的库存清单中,Inventory Value(库存价值)列就使用了公式:用 QTY(数量)表头下的单元格乘以COST(成本)表头下的单元格,算出每件商品的价值。操作要点:

  • 双击或选中单元格即可看到其背后的公式
  • 公式一律以等号=开头,后面紧跟计算或运算表达式;
  • 例如某行第 D 列的价值公式形如=B5*C5(具体行列以实际文件为准),意为“数量 × 成本”。

1.3 函数:预定义的高效计算

要得到库存总价值,可以再写一个公式把 Inventory Value 列的所有值累加起来。手动逐个单元格相加虽然可行,但非常繁琐。Excel 为此提供了函数(Function)——执行计算的预定义公式

函数的使用有两个关键点:

  1. 函数需要参数(Arguments):参数是计算所需的值;
  2. 多参数必须按正确顺序列出:顺序错误可能导致计算结果不正确。

本例中使用的SUM函数,以 Inventory Value 列的取值作为参数,累加后把总额显示在第 3 行、第 B 列,即单元格B3,形如=SUM(D5:D20)(实际范围以文件为准)。这类函数化的计算方式正是后续数据分析(如 8 课的数据准备、9–13 课的数据可视化)中做聚合运算的思维起点。

二、NoSQL:非关系型数据的四种分类

NoSQL是“存储非关系型数据的不同方式”的总称,其含义可解读为“non-SQL”(非 SQL)、“non-relational”(非关系型)或 “not only SQL”(不仅仅是 SQL)”。NoSQL 数据库系统大体可分为四种类型。

2.1 键值数据库(Key-Value)

键值数据库以键值对形式存储数据:每个唯一键(Unique Key)是关联到某个值的唯一标识符。这些键值对通过**哈希表(Hash Table)**配合合适的哈希函数来组织存储,因此查找复杂度低、读写速度快,常用于缓存、会话管理等场景。典型实现如 Redis、Azure Cosmos DB 的键值 API。

2.2 图数据库(Graph)

图数据库用于描述数据之间的关系,表示为**节点(Node)边(Edge)**的集合:

  • 节点代表一个实体(Entity),即现实世界中存在的事物,例如一名学生或一张银行对账单;
  • 代表两个实体之间的关系;
  • 节点和边都可以携带属性(Properties),提供关于该节点/边的附加信息。

图数据库擅长处理社交网络、推荐系统等关系密集型场景。

2.3 列族数据库(Columnar)

列族(Columnar)数据存储与关系型结构类似,同样按行和列组织数据,但列被划分为若干“列族(Column Family)”:同一列族下的所有数据彼此相关,可以作为一个整体单元被检索或修改。典型实现如 Apache Cassandra、HBase,适合大规模、稀疏数据的场景。

2.4 文档数据库(Document)

文档数据存储在键值存储的概念之上做了扩展,由一系列**字段(Fields)对象值(Object Values)**构成——字段描述对象值的含义。文档数据库的每个文档类似一个 JSON 对象,可以嵌套结构,schema 灵活。这正是下一节将用 Azure Cosmos DB 模拟器动手实践的类型。

三、用 Azure Cosmos DB 模拟器实战文档数据库

Cosmos DB 完全符合“Not Only SQL”的定义:它的文档数据库依赖 SQL 来查询数据。上一课 关系型数据库基础 介绍的 SQL 语言基础知识,在这里几乎可以直接复用。

**Cosmos DB 模拟器(Emulator)**让你在本地计算机上创建和探索文档数据库,无需云订阅。你可以为 Windows 下载安装模拟器;macOS 与 Linux 用户则可参考官方文档中的运行方式。启动后,模拟器会在浏览器窗口中打开,其Explorer(资源管理器)视图用于浏览文档。

3.1 文档长什么样

文档是字段与对象值的集合,字段描述对象值所代表的内容。以下是一个典型文档示例(来自课程原文):

{ "firstname": "Eva", "age": 44, "id": "8c74a315-aebf-4a16-bb38-2430a9896ce5", "_rid": "bHwDAPQz8s0BAAAAAAAAAA==", "_self": "dbs/bHwDAA==/colls/bHwDAPQz8s0=/docs/bHwDAPQz8s0BAAAAAAAAAA==/", "_etag": "\"00000000-0000-0000-9f95-010a691e01d7\"", "_attachments": "attachments/", "_ts": 1630544034 }

其中值得关注的业务字段是firstnameidage;其余带下划线前缀的字段(_rid_self_etag_attachments_ts)由 Cosmos DB 自动生成,分别对应资源 ID、资源自链接、实体标签、附件引用和时间戳,一般无需手动维护。

3.2 探索示例数据:从 SampleDB 到 Persons 容器

如果跟随操作,请在模拟器界面点击“Start with Sample”(以示例开始),系统会生成名为SampleDB的示例数据库。展开 SampleDB,会看到一个名为Persons容器(Container)

  • 容器存放一组条目(Items),条目即容器内的文档;
  • 展开Persons容器下的Items,可以看到4 个示例文档

3.3 用 SQL 查询文档数据

模拟器支持直接对文档数据执行 SQL 查询:点击“New SQL Query”(新建 SQL 查询)按钮(左侧起第二个按钮),即可输入查询语句。

查询 1:取回容器内全部文档

SELECT * FROM c

查询 2:加 WHERE 子句过滤,找出年龄小于 40 的人

SELECT * FROM c where c.age < 40

该查询返回两个文档,注意每个返回文档的 age 值都小于 40。这里的c是文档的别名(alias),c.age即访问文档的age字段——这与关系型数据库中的表别名用法一脉相承,印证了“Not Only SQL”中 SQL 的复用价值。

3.4 JSON 与文档:API 数据直达数据库

如果你熟悉 JavaScript Object Notation(JSON),会发现文档与 JSON 高度相似。本目录下的 PersonsData.json 包含额外的数据(Christophe、Prema、Arthur、Zoe、Keisha、Jackie 六条记录,每条含firstnameage字段),可以通过模拟器中的Upload Item(上传条目)按钮上传到 Persons 容器中。

绝大多数情况下,返回 JSON 数据的 API 可以把响应直接存入文档数据库——无需额外建表或字段映射。下面是课程提供的另一个文档示例,它来自 Microsoft Twitter 官方账号,经由 Twitter API 抓取后插入 Cosmos DB:

{ "created_at": "2021-08-31T19:03:01.000Z", "id": "1432780985872142341", "text": "Blank slate. Like this tweet if you've ever painted in Microsoft Paint before. https://t.co/cFeEs8eOPK", "_rid": "dhAmAIUsA4oHAAAAAAAAAA==", "_self": "dbs/dhAmAA==/colls/dhAmAIUsA4o=/docs/dhAmAIUsA4oHAAAAAAAAAA==/", "_etag": "\"00000000-0000-0000-9f84-a0958ad901d7\"", "_attachments": "attachments/", "_ts": 1630537000 }

这里值得关注的字段是created_at(发布时间)、id(推文 ID)与text(推文正文)。

四、动手挑战:上传 Twitter 数据并完成 LIKE 查询

课程附带一份 TwitterData.json,其中包含 10 条真实的 Microsoft 官方推文数据(字段为created_atidtext)。建议把它上传到 SampleDB 数据库的独立新容器中,步骤如下:

  1. 点击右上角的“New Container”(新建容器)按钮;
  2. 选择已有数据库(SampleDB),为容器创建一个Container ID
  3. 将**分区键(Partition Key)**设置为/id
  4. 点击OK(这是本地运行的小数据集,其余设置可以忽略);
  5. 打开新建的容器,用Upload Item按钮上传 TwitterData.json 文件。

随后尝试运行几条 SELECT 查询,找出text 字段中包含 “Microsoft”的文档。提示:可以使用 Cosmos DB 的LIKE关键字配合通配符%,例如:

SELECT * FROM c WHERE c.text LIKE '%Microsoft%'

这一挑战完整串起了本课的核心能力:建容器 → 设分区键 → 导入 JSON → SQL 模糊查询,与后续课程中用 Python 处理数据(第 7 课 Python 基础)以及数据准备(第 8 课数据准备)形成互补的数据处理链条。

五、作业:Soda Profits 利润计算

配套作业 Soda Profits 要求补全 CocaColaCo.xlsx 中缺失的计算:

  1. 计算 FY '15、'16、'17、'18 的毛利润(Gross Profit):毛利润 = 净营业收入(Net Operating revenues)− 销售成本(Cost of goods sold);
  2. 函数计算所有毛利润的平均值:平均值 = 毛利润之和 ÷ 财年数(10),可参考AVERAGE函数文档;
  3. 该文件是 Excel 格式,但在任何电子表格平台(Google Sheets、WPS 等)中都可以编辑。

六、复习与延伸学习

  • 本课没有覆盖电子表格的全部格式与功能,如需深入学习 Excel,微软官方提供了大量的文档与视频库;
  • 想系统了解非关系型数据各类别的特征,可参阅架构文档《Non-relational Data and NoSQL》;
  • Cosmos DB 作为云端非关系型数据库,同样支持本课讨论的多种 NoSQL 类型,可通过 Microsoft Learn 的《Work with NoSQL data in Azure Cosmos DB》路径进一步学习。

总而言之,本课从“人人都能上手”的电子表格出发,递进到 NoSQL 的四大分类,最后落到 Cosmos DB 模拟器的文档数据库实战,帮你建立起一套完整的非关系型数据认知与操作框架——无论是在日常工作中用函数快速聚合数据,还是为应用程序设计文档型数据存储,都能直接派上用场。

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 23:48:41

开源免费、轻量高效的mdput:能否成为Typora的可靠平替

1. 为什么 Typora 用户都在找平替1.1 从 Typora 收费说起Typora 大概是 Markdown 编辑器里知名度最高的那个。它把“所见即所得”做到了极致——左边不用开预览窗口&#xff0c;输入#后面跟个空格&#xff0c;标题样式立刻呈现&#xff0c;打字体验几乎和 Word 一样流畅。2018 …

作者头像 李华
网站建设 2026/9/12 23:47:57

Bicep Code Review Results

Bicep Code Review Results 【免费下载链接】awesome-copilot Community-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot Compilatio…

作者头像 李华
网站建设 2026/9/12 23:47:49

go2rtc 日志分析实战指南:流媒体排查快速定位手册

go2rtc 日志分析实战指南&#xff1a;流媒体排查快速定位手册 【免费下载链接】go2rtc Ultimate camera streaming application 项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc 深夜摄像头画面突然卡死&#xff0c;切到 WebRTC 又黑屏几秒才恢复——如果你装…

作者头像 李华
网站建设 2026/9/12 23:43:52

无头服务器EGL display报错排查:从原理到软件渲染与Xvfb解决方案

1. 先把这个报错拆开看&#xff1a;到底是谁在喊救命如果你在无显示器的 Linux 服务器上部署过 OpenWebRX 这类 SDR 接收服务&#xff0c;大概率会对这行日志非常眼熟&#xff1a;Platform::WindowlessEglApplication::tryCreateContext(): cannot get default EGL display第一…

作者头像 李华