时空热点:如何开启全新维度的洞察力
时尚趋势:如何打开全新时尚洞察的大门
您可能听说过一个统计数据,即80%的数据具有空间组成部分,而几乎100%的数据具有时间维度。但是,如何有效分析两者之间的相互作用呢?
空间时间聚类是一种方法之一。
这种技术分析了空间和时间模式,使企业能够发现隐藏的趋势,并在空间和时间上以更详细的层面做出更明智的决策。
但是,它是如何工作的,您如何在组织中使用它来推动更好的决策制定呢?继续阅读以了解并按照我们的逐步指南使用这种方法生成强大的业务洞察力 – 快速!
什么是空间时间聚类?
想象一下,您是一家外卖公司的分析师。您的工作是优化配送。为了做到这一点,您需要知道哪些地方有大量的外送服务 – 即所谓的热点聚集地 – 这样您就可以相应地定位送货司机。很简单 – 对吧?
但是等一下。有三个主要位置有热点聚集区,即中央商务区、夜生活热点区和居民区。这些位置可能在一天中的不同时间有不同的需求水平。简单地在所有这些位置派遣更多的送货司机将导致大量的时间浪费 – 因此也是金钱浪费。
这是空间时间聚类的完美用例。这种方法不仅告诉您热点在哪里,还告诉您热点在何时。这些信息使您在决策时添加了额外的洞察力,尤其是当利润率很低时。
空间时间聚类如何工作?
首先,让我们讨论一下什么是聚类或热点。
热点分析通过为空间表中的每个要素定义用户定义的邻域,并计算该邻域内的值是否显著高于或低于整个表格中的值来识别和测量空间模式的强度。有许多不同的热点算法可用,其中最常见的两个是统计工具Getis-Ord* vs Moran’s I;您可以在我们关于空间热点的完整指南中了解更多。

原始的踏步计数数据(左侧)与Getis-Ord*热点(右侧)。
空间时间聚类的工作方式基本相同,但还评估值是否在时间上具有统计显著性,以及空间上。
我们为Google BigQuery提供的分析工具包括计算空间-时间Getis-Ord Gi(*GI)统计量的函数。正值的GI*值表示邻域值显著高于整个表格的值 – 即它是一个热点 – 负值的GI*值则表示相反。您可以在我们的文档中了解更多有关如何计算这个值的信息。
这听起来像是您需要的东西吗?继续阅读逐步教程!
空间时间聚类:逐步指南
按照本指南进行操作,您需要两个东西。首先,CARTO账户;如果您还没有账户,可以在此处注册免费14天试用账户。
其次,您需要一个您想要调查的数据集!任何具有空间和时间维度的数据集都可以。在这个例子中,我们将查看纽约市自2012年至今发生的180万起车辆碰撞事件的时空趋势(在下面的地图中可视化,或在此处全屏查看)。我们将调查城市的某些地区在某些时间内是否发生更多的车辆碰撞。这个例子对于交通规划或城市设计等用例非常有帮助。
如果您想要追踪本示例,请在此处访问数据。
步骤1:数据预处理
首先,如果您的数据尚未存储在云端,则需要将其加载到您的Google BigQuery项目中,您可以按照此指南进行操作。如果您没有访问自己的项目的权限,您可以使用为所有用户提供的CARTO数据仓库。
其次,我们需要确保我们的数据结构正确,以便运行此分析。我们将使用下面的Spatial SQL来进行操作,这将产生以下变量:
- 空间索引变量:我们将使用的聚类技术要求数据以空间索引格式存储,即连续的空间网格。为此,我们将在步骤1中使用数据的经度和纬度创建一个点几何体(ST_Geogpoint),然后在步骤2中将其转换为H3索引(H3_FromGeogPoint)。您可以在此免费电子书中了解更多关于空间索引的信息!
- 时间戳:碰撞时间最初以字符串形式存储在“crash_time”变量中,因此我们将在步骤1中使用字符串函数的组合来从中提取小时值。然后,在步骤2中,我们将将其转换为datetime变量类型(DATETIME)。我们将分配“dummy”日期和分钟值,因为我们想要整体上的每小时值。
- 碰撞次数:在步骤2中使用COUNT()函数计算。这可以被任何您想要从中计算热点的数值变量替换。
WITH -- 步骤1: 创建一个点几何体,并从数据碰撞中提取小时字段 AS ( SELECT ST_GEOGPOINT(longitude, latitude) AS geom, CASE WHEN LENGTH(crash_time) = 5 THEN CAST(LEFT(crash_time,2) AS INT64) ELSE CAST(LEFT(crash_time,1) AS INT64) END AS hour FROM `yourproject.yourdataset.newyork_collisions`) -- 步骤2: 转换为H3空间索引,计算每小时/每个单元的碰撞次数,并创建时间戳SELECT `carto-un`.carto.H3_FROMGEOGPOINT(geom, 9) AS h3, COUNT(hour) AS collision_count, DATETIME(2023, 1, 1, hour, 0, 0) AS timeFROM collisionsGROUP BY hour, h3
在下面的地图中查看此结果,或在此处全屏查看。
步骤2:运行时空聚类
在下一步中,我们将运行Getis Ord SpaceTime函数,该函数可通过我们的Analytics Toolbox的statistics模块来使用,适用于H3和Quadbin。
SELECT * FROM `carto-un`.carto.GETIS_ORD_SPACETIME_H3(( SELECT ARRAY_AGG(STRUCT(h3, time, collision_count)) AS input_data FROM yourproject.yourdataset.input_data), 3, 'HOUR', 1, 'triangular', 'triangular');
根据您在第1步准备的数据,调整输入查询,然后选择您的热点参数:
- 邻域大小,这将作为计算Gi*值的依据(这里我们使用3);该值以K戒环为单位进行测量。 K戒环值为1时,包括6个单元(或Quadbin索引为8个),它们紧邻该单元。当值为2时,包括与这些即时单元相邻的单元,依此类推。
- 时间单位是使用的时间单位。您可以选择年、季度、月、周、日、小时、分钟或秒。
- 时间间隔是在时间领域中要考虑的相邻间隔的数量,以指定的时间单位进行测量,以计算Gi*值。在这里,我们使用1小时。
- 核函数描述了给予k戒环中的单元的空间权重;您可以定义它们与输入单元的接近程度对分析结果的影响程度。这里我们使用的是三角形,这意味着离中心单元较远的单元具有较低的权重。其他选项包括均匀、三角形、二次、四次或高斯。
- 时间核函数类似,但应用于时间权重。
要了解更多信息,请查阅该函数的完整文档here。
第3步:解读结果
第2步的输出将是一个包含索引(H3/Quadbin)ID、日期/时间、p值和GI*的查询。在这个阶段,我们建议将此查询提交到一个表中。
P值是可能使我们拒绝分析的零假设的显著性值。因此,如果我们的零假设是“没有空间 – 时间聚类碰撞”,那么在单元格落入设定的阈值下,我们可以拒绝这个假设。通常,该阈值将为0.01或0.05,与95%或99%的置信水平相对应。
GI*值表示聚类的强度。正值表示相对于更大数据集的正值的强烈空间聚类,而负值表示相反。
因此,如果我们对高值的统计显著聚类感兴趣,我们需要运行以下查询:
SELECT * FROM yourproject.yourdataset.youroutputtableWHERE p_value < = 0.05 AND GI > 0
结果?请在下面检查它们!
在此处全屏查看。
我们通过将SQL参数整合到可视化中,使其非常用户友好和交互式。这些参数允许您向SQL添加占位符(如下所示:{{time_from}}和{{time_to}}),以便终端用户以受控的方式与您的数据交互。在这里,他们可以查看特定时间段内的平均GI*值 – 例如高峰时段或深夜。
SELECT INDEX AS h3, *, EXTRACT(hour FROM date) AS hourFROM yourproject.yourdataset.youroutputtableWHERE p_value < = 0.1 AND gi > = 0 AND (EXTRACT(hour FROM date) > = {{time_from}} AND EXTRACT(hour FROM date) < = {{time_to}})
基于数据的时空聚类进行数据驱动的决策
时空聚类对于寻求从数据中提取可行见的业务来说是一次革命性的变革。通过同时考虑空间和时间维度,您可以发现趋势、优化运营,并做出更明智的决策,推动增长。
立即注册免费14天试用,开始您的位置智能之旅吧!
文章原始发布于此处,已获得许可后再次转载。