非关系型数据实战:从电子表格公式到 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)——执行计算的预定义公式。
函数的使用有两个关键点:
- 函数需要参数(Arguments):参数是计算所需的值;
- 多参数必须按正确顺序列出:顺序错误可能导致计算结果不正确。
本例中使用的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 }其中值得关注的业务字段是firstname、id和age;其余带下划线前缀的字段(_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 六条记录,每条含firstname与age字段),可以通过模拟器中的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_at、id、text)。建议把它上传到 SampleDB 数据库的独立新容器中,步骤如下:
- 点击右上角的“New Container”(新建容器)按钮;
- 选择已有数据库(SampleDB),为容器创建一个Container ID;
- 将**分区键(Partition Key)**设置为
/id; - 点击OK(这是本地运行的小数据集,其余设置可以忽略);
- 打开新建的容器,用
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 中缺失的计算:
- 计算 FY '15、'16、'17、'18 的毛利润(Gross Profit):毛利润 = 净营业收入(Net Operating revenues)− 销售成本(Cost of goods sold);
- 用函数计算所有毛利润的平均值:平均值 = 毛利润之和 ÷ 财年数(10),可参考
AVERAGE函数文档; - 该文件是 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),仅供参考