Skip to main content

在 Superset 中探索数据​

在本教程中,我们将通过探索一个真实数据集来介绍 Apache Superset 中的关键概念。 这个数据集包含了 2011 年英国某组织员工的飞行记录。关于每次飞行,提供了以下信息:

  • 旅行者的部门。为了本教程的目的,部门名称已更改为橙色、黄色和紫色。
  • 机票的价格。
  • 旅行等级(经济舱、高级经济舱、商务舱和头等舱)。
  • 票是单程还是往返。
  • 出行日期。
  • 关于出发地和目的地的信息。
  • 出发地与目的地之间的距离,单位为千米(km)。

启用数据上传功能​

您可能需要启用将 CSV 或 Excel 文件上传到数据库的功能。以下部分解释了如何为示例数据库启用此功能。

在顶部菜单中,选择 Data ‣ Databases。在列表中找到 examples 数据库,并选择 Edit 按钮。

在弹出的模态窗口中,切换到 Extra 选项卡,并勾选 Allow Data Upload 复选框。 最后点击 Save 按钮。

加载 CSV 数据​

从 GitHub 下载 CSV 数据集到您的计算机。在 Superset 菜单中,选择 Data ‣ Upload a CSV。

然后,将 Table Name 输入为 tutorial_flights,并从您的计算机中选择 CSV 文件。

接下来,在 Parse Dates 字段中输入文本 Travel Date。

保持所有其他选项为其默认设置,选择页面底部的 Save。

Table 可视化​

现在,您应该在 Datasets 选项卡中看到 tutorial_flights 作为数据集。 点击条目以使用此数据集启动 Explore 工作流。

在本节中,我们将创建一个表格可视化来展示不同旅行等级下的航班数量和成本。

默认情况下,Apache Superset 仅显示最近一周的数据。 在我们的例子中,我们想可视化数据集中所有的数据。 点击 Time ‣ Time Range 部分,将 Range Type 更改为 No Filter。

点击Apply以保存更改。

现在,我们想通过使用 Group by 选项来指定表格中的行。 因为在这个例子中,我们想了解不同的旅行等级,所以我们在此菜单中选择 Travel Class。

接下来,我们可以使用 Metrics 选项来指定我们希望在表格中看到的度量。

  • COUNT(*),代表 table 中的行数(在这种情况下,每个旅行等级(Travel Class)的航班数量)
  • SUM(Cost),代表每个旅行等级花费的总金额

最后,选择 Run Query 来查看 table 的结果。

要保存可视化结果,点击屏幕左上角的 Save。在随后的模态窗口中,

  • 选择 Save as 选项并将图表名称输入为 Tutorial Table(您将能够通过 Charts 屏幕再次找到它,该屏幕可通过顶部菜单访问)。
  • 选择 Add To Dashboard 并输入 Tutorial Dashboard。最后,选择 Save & Go To Dashboard。

Dashboard (仪表板)基础​

接下来,我们将探索仪表板界面。如果您已经按照前一节操作,那么您应该已经打开了仪表板。 否则,您可以通过顶部菜单选择 Dashboards,然后从仪表板列表中选择 Tutorial dashboard 来导航至仪表板。

在这个仪表板上,您应该能看到在前一节中创建的表格。 选择 Edit dashboard,然后将鼠标悬停在表格上。 通过选择表格右下角(光标也会变化),您可以拖拽调整其大小。

最后,通过选择右上角的 Save changes 来保存您的修改。

Pivot Table(透视表)​

在本节中,我们将使用更复杂的可视化 — 透视表(Pivot Table),来扩展我们的分析。 到本节结束时,您将创建一个表格,展示前六个月各部门不同旅行等级下的月度飞行支出。

通过选择右上角的 + ‣ Chart 来创建一个新的图表。 再次选择 tutorial_flights 作为数据源,然后点击可视化类型进入可视化菜单。 选择 Pivot Table 可视化(您可以在搜索框中输入文本进行筛选),然后选择 Create New Chart。

在 Time 部分,保持时间列为 Travel Date(这会自动选择,因为我们数据集中只有一个时间列)。 然后选择时间粒度为月,因为每日数据对于观察模式来说太过详细。 然后选择时间范围为 2011 年的前六个月,方法是在时间范围部分点击 Last week, 然后在 Custom 中选择开始/结束时间为2011年1月1日(1st January 2011)和2011年6月30日(30th June 2011), 可以直接输入日期或使用日历小部件(通过选择月份名称和年份,可以更快地移动到较远的日期)。

接下来,在 Query 部分,移除默认的 COUNT(*),添加 Cost,保持默认的 SUM 聚合。 请注意,Apache Superset 会通过列表左侧列的符号指示指标的类型(ABC 表示字符串,# 表示数字,钟面表示时间等)。

在 Group by 中,选择 Time:这将自动使用我们在时间部分定义的 Time Column(时间列) 和 Time Grain(时间粒度) 选择。

在 Columns 中,首先选择 Department,然后选择 Travel Class。 一切就绪,让我们 Run Query 来看看一些数据吧!

您应该能在行中看到月份,在列中看到 Department 和 Travel Class。 将此图表发布到您之前创建的现有 Tutorial Dashboard 上。

Line Chart(折线图)​

在本节中,我们将创建一个折线图来理解整个数据集中按月平均机票价格的变化。

在时间部分,如同之前一样,保持时间列为 Travel Date 和 Time Grain 为月, 但这次对于 Time range 选择无过滤,因为我们想查看整个数据集。

在指标部分,移除默认的 COUNT(*) 指标,而是添加 AVG(Cost),以展示平均值。

接下来,选择 Run Query 来在图表上展示数据。

看起来怎么样?我们可以看到平均成本在十二月上升。 然而,也许将单程和往返票合并在一起并不合理,而是应该为每种票型分别显示两条线。

让我们通过在 Group by box(按...分组框)中选择 Ticket Single or Return, 然后再次选择 Run Query 来实现这一点。 不错!我们可以看到平均而言,单程票比往返票便宜,而十二月的大峰值是由往返票造成的。

我们的图表看起来已经很不错了,但是让我们通过前往左侧窗格的 Customize 标签页来进行更多定制。 在这个窗格内,尝试改变颜色方案(Color Scheme),通过在显示范围过滤(Show Range Filter)下拉菜单中选择无来移除范围过滤, 并使用 X 轴 Label 和 Y 轴 Label 添加一些标签。

一旦完成,将图表发布在您的 Tutorial Dashboard 上。

Markup(标记)​

在本节中,我们将在仪表板上添加一些文本。如果您已经在仪表板上,可以通过顶部菜单选择 Dashboards, 然后从仪表板列表中选择 Tutorial dashboard 来导航至此。通过选择 Edit dashboard 进入编辑模式。

在 Insert 组件窗格中,将 Markdown 框拖放到仪表板上。寻找蓝色线条,它们指示框将放置的位置。

现在,要编辑文本,选择该框。您可以输入文本, 采用 markdown 格式(有关此格式的更多信息,请参阅 此 Markdown 速查表)。 您可以使用框顶部的菜单在 Edit 和 Preview 之间切换。

要退出,选择仪表板上的任何其他部分。最后,别忘了使用 Save changes 来保留您的修改。

发布你的 Dashboard​

如果您已经遵循了前一节中概述的所有步骤,那么您应该拥有一个如下所示的仪表板。 如果愿意,您可以通过选择 Edit dashboard 并拖放来重新排列仪表板的元素。

如果您想让其他用户也能访问您的仪表板,只需在左上角仪表板标题旁选择 Draft,将其状态更改为已发布即可。 您也可以通过选择星形图标将此仪表板设为收藏。

Annotations(注释)​

Annotations 允许您向图表添加额外的上下文。 在本节中,我们将向在前一节中制作的 Tutorial Line Chart 添加注释。 具体来说,我们将添加英国民航局因冰岛 Grímsvötn 火山爆发而取消部分航班的日期(23-25 May 2011)。

首先,通过导航至 Manage ‣ Annotation Layers 来添加注释层。 通过选择绿色加号添加新记录来添加新的注释层。 输入名称 Volcanic Eruptions 并保存。我们可以使用这个层来引用多个不同的注释。

接下来,通过导航至 Manage ‣ Annotations,然后选择绿色加号创建新的注释。 然后,选择 Volcanic Eruptions 层, 添加简短描述 Grímsvötn 以及爆发日期(23-25 May 2011),最后保存。

然后,通过前往图表,从列表中选择 Tutorial Line Chart 来导航至折线图。 接下来,转到 Annotations 和 Layers 部分,选择添加注释层。在此对话框中:

  • 将层命名为 Volcanic Eruptions
  • 将 Annotation Layer Type 更改为 Event
  • 设置 Annotation Source 为 Superset annotation
  • 指定 Annotation Layer 为Volcanic Eruptions

选择 Apply 以在图表上显示您的注释。

如果需要,您可以通过更改显示配置部分中的设置来更改注释的外观。 否则,选择 OK,最后选择 Save 来保存您的图表。 如果您保持默认选择覆盖图表,您的注释将被保存到图表中, 并且也会自动出现在 Tutorial Dashboard 中。

高级分析​

在本节中,我们将探索 Apache Superset 的高级分析功能,该功能允许您对数据应用额外的转换。转换的三种类型是:

设置基础图表

在本节中,我们将设置一个基础图表,然后可以对该图表应用不同的 高级分析 功能。 首先,使用相同的 tutorial_flights 数据源和 Line Chart 可视化类型创建一个新的图表。 在时间部分,将时间范围设置为 1st October 2011 至 31st October 2011。

接下来,在查询部分,将指标更改为 Cost 的总和。 选择 Run Query 以显示图表。您应该能看到 2011 年十月每天的总成本。

最后,将可视化保存为 Tutorial Advanced Analytics Base, 并将其添加到 Tutorial Dashboard 中。

Rolling Mean(移动平均)​

数据中存在大量波动,这使得很难识别任何趋势。我们可以采取的一种方法是显示时间序列的滚动平均值。 为此,在 Advanced Analytics 的 Moving Average 子部分中, 选择 mean 在 Rolling 框中,并在 Periods 和 Min Periods 中都输入 7。 周期是以时间粒度(Time Grain)的倍数表示的滚动周期(rolling period)长度。 在我们的示例中,时间粒度是一天,因此滚动周期是 7 天,例如在2011年10月7日, 显示的值将对应于2011年10月的前七天。 最后,通过将 Min Periods 指定为 7,我们确保平均值始终基于 7 天计算,避免了任何启动期。

在选择 Run Query 显示图表后,您会发现数据的波动较小,且序列开始得更晚,因为启动期被排除在外。

将图表保存为 Tutorial Rolling Mean,并将其添加到 Tutorial Dashboard 中。

Time Comparison(时间比较)​

在本节中,我们将比较时间序列中的值与一周前的值。 首先,通过在顶部菜单中选择 Charts, 然后在列表中选择可视化名称来打开 Tutorial Advanced Analytics Base 图表 (或者,找到 Tutorial Dashboard 中的图表,并从该可视化的菜单中选择 Explore chart)。

接下来,在 Advanced Analytics 的 Time Comparison 子部分中, 通过键入 “minus 1 week(减去1周)”(注意,此框接受自然语言输入)来输入时间偏移。 运行查询以查看新图表,其中包含一个额外的系列,其值相同,但时间向后移动了一周。

然后,将 Calculation type(计算类型) 更改为 Absolute difference(绝对差),并选择 Run Query。 我们现在只能看到一个序列,这一次显示的是我们之前看到的两个序列之间的差异。

将图表保存为 Tutorial Time Comparison,并将其添加到 Tutorial Dashboard 中。

Resampling the data(重采样数据)​

在本节中,我们将重采样数据,以便我们不是拥有每日数据,而是拥有每周数据。 如前一节所述,重新打开 Tutorial Advanced Analytics Base 图表。

接下来,在 Advanced Analytics 的 Python 函数子部分中, 在 Rule 中输入 7D,对应于七天,在 Method 中输入 median,并通过选择 Run Query 来显示图表。

请注意,我们现在每隔 7 天有一个数据点。 在我们的情况下,显示的值对应于七个每日数据点内的中位数。 有关本节中各种选项含义的更多信息,请参阅 Pandas文档。

最后,将您的图表保存为 Tutorial Resample,并将其添加到 Tutorial Dashboard 中。 前往 tutorial dashboard 查看四个图表并排显示,比较不同的输出。