使用 Datasette 探索数据库

本教程将教你如何使用 Datasette 探索新的数据库。

Datasette 提供了灵活的工具来探索数据表。在考虑采用更复杂的分析或可视化方法之前,花时间熟悉数据的原始、表格形式总是值得的。

国会立法者数据

我们将使用一个美国国会议员(1789年至今)的示例数据库。我使用 GitHub 上由 Joshua Tauberer、Eric Mill 和其他 100 多位贡献者维护的 unitedstates/congress-legislators 项目中的数据构建了这个示例。

在此 Datasette 中访问示例:https://congress-legislators.datasettes.com/legislators

Screenshot of database index page, showing a box to enter SQL queries and a list of their tables

理解表

理解关系型数据库(如我们在此使用的 SQLite、MySQL、PostgreSQL、Oracle 等)的关键在于学会用表的思维方式思考。

数据库表就像电子表格——它们有列和行,每一行都为每一列提供一个值。与电子表格不同的是,你不能合并单元格或应用格式——数据库表是一个简单的二维网格。它只有数据。

表中的每一列都有一个类型。在 SQLite 中,这些类型可以是 text(文本)、integer(整数)、real(浮点数)和 blob(二进制数据)中的一种。列的类型很重要,因为它会影响你按该列排序时会发生什么,或者你可以对这些值使用哪些数学运算。

浏览表

我们示例数据库中的表包括:

现在点击这些链接,浏览这些表,了解数据在该数据库中的组织方式。

表之间可以相互关联

有时你会看到表中的一行链接到另一个表,例如 legislator_terms 表中的 legislator_id

A table where the legislator_id column contains names that link to other rows

点击该列中链接的姓名之一将带你到该立法者个人行的页面,看起来像这样

The page for a row includes links to related rows

“来自其他表的链接”部分显示了其他表中有多少行引用了该立法者。

在数据库中,这些被称为“外键”——它们通过在外键列中存储另一行数据的 ID 来工作。

外键是理解关系型数据库为何比存储在 CSV 等格式的独立数据文件强大得多的关键。

使用分面

分面是 Datasette 最强大的功能之一。它们可以帮助你快速地从一个包含数千行的表中识别有趣的趋势和模式。

我将使用 executive_terms 表展示一些示例。

分面可以通过两种方式应用:你可以从“建议分面”列表中选择一个选项,或者你可以从每列旁边的齿轮菜单中选择“按此分面”选项。

Screenshot of a table showing the suggested facet links and indicating where in the column cog menu the Facet by this link can be found

一旦选择,分面界面会显示在表上方,就像这个示例中所示

Facets show as two lists above the table - one of parties and one of types, where the types are prez or viceprez

每个分面显示了该列中最常见值列表,并为每个值提供了总计数。

这些数字会随着你进一步筛选数据而更新:如果你选择“Democratic”,你将只看到匹配该政党的行,并且“type”分面将更新,显示该政党共有 21个总统任期和 19个副总统任期。

These facets show just the options for type - prev and viceprez - with the party option narrowed down to only Democratic

练习

  1. legislator_terms 表应用 typestateparty 分面
  2. 使用它们筛选出北卡罗来纳州(NC)的共和党参议员
  3. 找出哪个州的共和党参议员任期数最多。(如果你卡住了,可以看解决方案

使用过滤器

当你选择一个分面时,你正在对数据应用一个过滤器。这些过滤器会反映在页面顶部的框中

The filters box above the facets shows inputs for party = Democratic and type = viceprez

你不必使用分面来实现这些——你可以直接编辑它们。

要查看仅限于 19世纪的民主党副总统,我们可以添加一个过滤器,用于“start”列以“18”开头的行

Here an additional row has been added to the filters, specifying that start should start with 18

这是该查询的结果

A table listing Democratic vice presidential terms served in the 1800s

练习

使用 legislator_terms 表,查找:

  1. 特拉华州(DE)的所有参议员任期
  2. ... 始于以 18 开头的年份
  3. ... 然后按政党分面,查看哪个政党拥有最多的参议员任期

分享链接

Datasette 中的每个页面都设计为可分享的。复制并粘贴页面 URL 即可与他人分享。

这包括应用的过滤器和分面——因此如果你找到了一个有趣的探索数据的方式,你可以通过分享 URL 直接分享它。

一些示例

练习:分享一些链接!

使用上述练习在数据中找到一些有趣的东西。复制并粘贴该 URL 到你的笔记中,或者与朋友分享,或者发布到 Twitter 上。

导出数据

如果你在 Datasette 中可以看到数据,你就可以导出原始数据。这是该项目的一个基本原则。

在任何页面上寻找 CSV.json 链接,以这些格式导出数据。

The export options live both above and below the table - above is the links to CSV, JSON and copyable while below is an Advanced export box with more options.

“高级导出”框提供了更多选项。使用“下载文件”将 CSV 文件下载到你的计算机。

“展开标签”选项将添加一个额外的列,其中包含与任何外键列关联的标签——在此示例中,它将添加 legislator_id_label 来配合 legislator_id 中的 ID。

可以使用插件启用其他格式。示例实例正在运行 datasette-copyable 插件,它提供了一个“可复制”链接,可用于通过复制粘贴以不同格式导出数据!

Datasette 也可以配置为允许用户将整个数据库下载为单个文件。你可以在 https://congress-legislators.datasettes.com/legislators 页面底部找到那个 legislators.db 下载选项——整个数据库只有 5.2MB。

练习

  1. 使用“高级导出”框中的“下载文件”复选框,下载一份 19世纪民主党副总统的 CSV 文件。
  2. 使用“可复制”选项将该数据直接复制粘贴到 Google 表格、Excel 或 Numbers 中。

通过插件进行数据可视化

你可能已经在 offices 表中注意到了这一点,该表显示了所有办公室位置的交互式地图

A map of the United States and American Samoa, covered in markers and marker clusters representing congressional offices

你可以点击标记群集来放大,点击单个标记查看该行的详细信息。

使用这些地图来发现明显的异常值很有趣——在此示例中,美属萨摩亚代表 Aumua Amata Radewagen 的办公室立即引人注目。

这是 Datasette 插件的另一个示例——在此情况下是 datasette-cluster-map。插件可以为 Datasette 添加额外的功能,例如可视化或替代导出方法(参见上面描述的“可复制”)。

对于更大的地图可视化示例,可以查看 这份包含 33,000 多个全球发电厂的地图,使用 datasette-cluster-map 进行可视化。

下一步

现在你已经知道如何使用 Datasette 探索表了,下一步教程将介绍如何使用 Datasette 学习 SQL