通过已定义位置创建时空立方体 (时空模式挖掘)

摘要

获取固定样本数据或站点数据(地理位置不会改变但属性会随时间改变的已定义位置),并通过创建时空条柱将其构建为 netCDF 数据格式。 对于所有位置,评估变量或汇总字段趋势。

了解有关通过已定义位置创建时空立方体的工作原理的详细信息

插图

时空立方体创建

使用情况

  • 此工具可获取固定样本或站点数据(地理位置不会改变但属性会随时间改变的已定义位置)作为输入要素,并将其构建到时空条柱。 所创建的数据结构可被视为由时空条柱组成的一个三维立方体,其中 x 和 y 维度表示空间,t 维度表示时间。

    三维立方体中的时空条柱

  • 每个条柱在空间(如果输入点,则为 x,y 位置;如果输入面位置,则为一组固定的折点)和时间 (t) 中都有固定位置。 覆盖同一已定义位置区域(无论 x,y 还是折点)的条柱将共用同一个位置 ID。 包含相同持续时间的条柱共用相同的时间步长 ID。

    时空立方体中的位置

  • 时空立方体中的每一个条柱都具有 LOCATION_IDtime_step_IDCOUNT 值以及创建立方体后包括的所有变量汇总字段的值。 与同一物理位置相关的条柱将共享同一位置 ID,这些条柱组合起来可表示时间序列。 与同一时间步长间隔相关的条柱将共享同一时间步长 ID,这些条柱组合起来可构成时间片。

  • 输入要素可以是点或面,并且应该表示具有随时间收集的关联属性的已定义或固定位置。 此类数据通常称为固定样本或站点数据。 包含事件时间戳的字段必须为日期类型。

    注:

    如果输入要素存储在文件地理数据库中,并且包含真曲线(存储为弧,而非与折点一起存储),则多边形将在存储到时空立方体时变形。 要检查输入要素中是否包含真曲线,请通过 OGC 验证方法运行检查几何工具。 如果您收到表明所选选项不支持非线性段的错误消息,则说明真曲线位于数据集中,并且可被消除并由折点取代,方法为在创建时空立方体前将增密工具与角度增密方法结合使用。

  • 输入要素可以是包含在同一要素类中的重复形状,也可以是一组要素,其相关表包含随时间记录的属性。

  • 如果指定的参数将导致立方体具有二十多亿个条柱,则此工具将无法执行。

  • 此工具需要使用投影数据来准确测量距离。

  • 如果选中时间聚合,则生成的时空立方体将包含各个条柱的计数值,可反映在相关时间步长间隔内出现在相关位置的事件的数量。

  • 此工具的输出为 netCDF,可表示输入要素以及汇总了立方体特征的消息。 在工具执行期间,消息将写入到地理处理窗格底部。 可通过将鼠标悬停在进度条上、单击弹出按钮弹出按钮或展开地理处理窗格中的消息部分来访问消息。 您还可以通过地理处理历史访问之前运行此工具的消息。 可将 netCDF 文件用作其他工具(例如新兴时空热点分析工具或局部异常值分析工具)的输入。 要获取允许您查看立方体内容的策略,请参阅可视化时空立方体

  • 时间字段参数选择“日期”类型的字段。 如果输入为重复形状,则此字段应包含与各个要素相关联的时间戳。 如果输入具有一个相关表,则此字段即为与表中各个记录相关联的时间戳。

  • 时间步长间隔用于定义要如何对数据的时间范围进行分区。 如果取消选中“时间聚合”,则时间步长间隔应设置为数据的现有结构。 例如,对于每五年收集一次的人口普查数据,输入应为 5 年。 如果要进行时间聚合,请选中此参数。 例如,对于每 5 分钟记录一次的传感器数据,您可能会决定采用一天间隔进行聚合。 时间步长间隔始终为固定持续时间,并且此工具最少需要十个时间步长。

    注:

    尽管时间步长间隔下拉列表中显示有多个时间单位,但是工具仅支持年、月、周、日、小时、分钟和秒。

  • 如果您无法创建时空立方体,则工具可能无法将您提供的输入数据构建为十个时间步长间隔。 如果运行此工具时收到错误消息,请检查输入的时间戳,确保其包含值范围(至少为十)。 值范围的跨度必须大于等于 10 秒,因为运行工具所需的最小时间增量为十秒。 Mann-Kendall 统计需要十个时间步长间隔。

  • 参考时间可以是日期和时间值或仅为日期值,但不可仅为时间值。 预期格式由计算机的区域时间设置决定。

  • 在聚合变量或汇总字段值上执行的趋势分析是以 Mann-Kendall 统计为基础的。

  • 使用此工具可对属性聚合执行以下统计运算:总和、平均值、最小值、最大值、标准差和中值。

  • 任何汇总字段记录中出现的空值都将导致从输出立方体中排除这些要素。 如果输入要素中出现空值,则强烈建议您先运行填充缺失值工具。 如果在运行填充缺失值工具后,仍存在空值而每个条柱中的点数是分析策略的一部分,您可能需要考虑创建单独的立方体,针对计数(不含汇总字段)创建一个,并针对汇总字段创建一个。 如果每个汇总字段的空值集不相同,您可能还需要考虑为每个汇总字段创建一个单独的立方体。

  • 当使用 SPATIAL_NEIGHBORS 填充空条柱时,此工具会根据最邻近的 8 个最近相邻要素进行估算。 使用此选项填充空条柱最少需要 4 个这样的空间相邻要素。

  • 当使用 SPACE_TIME_NEIGHBORS 填充空条柱时,此工具会根据最邻近的 8 个最近相邻要素进行估算。 此外,通过向前和向后移动 1 个时间步长,对被视为时间相邻要素的每个条柱,使用空间相邻要素。 使用此选项填充空条柱最少需要 13 个时空相邻要素。

  • 通过 TEMPORAL_TREND 填充空条柱时,给定位置的前两个时间段和后两个时间段在其条柱中必须具有值,以便对该位置的其他时间段进行插值。

  • TEMPORAL_TREND 填充类型使用 SciPy 插值包中的一元样条插值方法。

  • 该工具可利用具有多个 CPU(或多核 CPU)的系统来提高性能。 该工具将默认在使用 50% 可用处理器的情况下运行;但是,可以使用并行处理因子环境增加或减小使用的 CPU 数。 在创建较大的时空立方体时,处理速度的提高最为明显。

参数

标注说明数据类型
输入要素

要转换为时空立方体的输入点或面要素类。

Feature Layer
输出时空立方体

将创建的输出 netCDF 数据立方体。

File
位置 ID

包含每个唯一位置的 ID 编号的整型字段。

Field
时间聚合

确定是否对数据进行时间聚合。

  • 取消选中 - 时空立方体将通过输入要素的现有时间结构进行创建。 例如,您有一组年度数据,并希望通过年度时间步长间隔创建立方体。 这是默认设置。
  • 选中 - 时空立方体将根据您提供的时间步长间隔对您的要素进行时间聚合。 例如,您有一组每日收集的数据,并希望通过每周时间步长间隔创建立方体。
Boolean
时间字段

包含数据集中每行的时间戳的字段。 此字段的类型必须是日期。

Field
时间步长间隔
(可选)

用来表示单个时间步长的秒数、分钟数、小时数、天数、周数或年数。 此参数的有效条目示例为 1 周13 天1 个月

如果取消选中时间聚合,则不进行时间聚合,且此参数应设置为数据的现有时间结构。

如果选中时间聚合,则会进行时间聚合,且此参数应设置为您要创建的时间步长间隔。 将聚合相同时间步长间隔内的所有要素。

Time Unit
时间步长对齐
(可选)

定义如何根据给定的时间步长间隔创建立方体结构。

  • 结束时间时间步长与最后一次时间事件对齐,并向后聚合时间。 这是默认设置。
  • 开始时间时间步长与第一次时间事件对齐,并向前聚合时间。
  • 参考时间时间步长将与指定的特定日期/时间对齐。 如果输入要素中的所有点的时间戳大于您所提供的参考时间(或时间戳刚好位于输入要素的开始时间),则时间步长间隔将以该参考时间为开始时间,并向前聚合时间(与使用开始时间对齐的效果相同)。 如果输入要素中的所有点的时间戳小于您所提供的参考时间(或时间戳刚好位于输入要素的结束时间),则时间步长间隔将以该参考时间为结束时间,并向后聚合时间(与使用结束时间对齐的效果相同)。 如果提供的参考时间处于数据时间范围的中间,则将以提供的参考时间结束创建时间步长间隔(与使用结束时间对齐的情况相同);其他间隔将在参考时间前后进行创建,直到覆盖数据的完整时间范围为止。
String
参考时间
(可选)

用于对齐时间步长间隔的日期/时间。 例如,如果想要按星期从星期一至星期天对数据进行归类,可以将星期天的午夜设置为参考时间,以确保条柱在星期天和星期一之间的午夜进行划分。

Date
变量
(可选)

将在时空立方体中引入的包含属性值的数值字段。

可用填充类型有:

  • DROP_LOCATIONS - 缺少任何变量的数据的位置将从输出时空立方体中删除。
  • ZEROS - 用零填充空立方图格。
  • SPATIAL_NEIGHBORS - 用空间相邻要素平均值填充空立方图格。
  • SPACE_TIME_NEIGHBORS - 用时空相邻要素平均值填充空立方图格。
  • TEMPORAL_TREND - 使用一元样条插值算法填充空立方图格。

注:

任何变量记录中出现的空值都将导致产生空条柱。 如果输入要素中出现空值,则强烈建议您先运行填充缺失值工具。

Value Table
汇总字段
(可选)

包含属性值的数值字段,用于在将数据聚合到时空立方体时计算指定的统计数据。 可以指定多项统计和字段组合。 在任何指定字段中出现的空值都将导致从输出立方体中删除相应要素。 如果输入要素中出现空值,则强烈建议您在创建时空立方体前先运行填充缺失值工具。

可用的统计类型有:

  • SUM - 添加每个立方图格中指定字段的合计值。
  • MEAN - 计算每个立方图格中指定字段的平均值。
  • MIN - 查找每个立方图格中指定字段所有记录的最小值。
  • MAX - 查找每个立方图格中指定字段所有记录的最大值。
  • STD - 查找每个立方图格中指定字段的值的标准差。
  • MEDIAN - 查找每个立方图格中指定字段所有记录的中值。

可用填充类型有:

  • ZEROS - 用零填充空立方图格。
  • SPATIAL_NEIGHBORS - 用空间相邻要素平均值填充空立方图格
  • SPACE_TIME_NEIGHBORS - 用时空相邻要素平均值填充空立方图格。
  • TEMPORAL_TREND - 使用一元样条插值算法填充空立方图格。

注:

任何汇总字段记录中出现的空值都将导致从输出立方体中排除这些要素。 如果输入要素中出现空值,则强烈建议您先运行填充缺失值工具。 如果在运行填充缺失值工具后,仍存在空值而每个条柱中的点数是分析策略的一部分,您可能需要考虑创建单独的立方体,针对计数(不含汇总字段)创建一个,并针对汇总字段创建一个。 如果每个汇总字段的空值集不相同,您可能还需要考虑为每个汇总字段创建一个单独的立方体。

Value Table
相关表
(可选)

将关联到输入要素的表或表视图。

Table View
相关位置 ID
(可选)

相关表中包含基于关联的位置 ID 的整型字段。

Field

arcpy.stpm.CreateSpaceTimeCubeDefinedLocations(in_features, output_cube, location_id, temporal_aggregation, time_field, {time_step_interval}, {time_step_alignment}, {reference_time}, {variables}, {summary_fields}, {in_related_table}, {related_location_id})
名称说明数据类型
in_features

要转换为时空立方体的输入点或面要素类。

Feature Layer
output_cube

将创建的输出 netCDF 数据立方体。

File
location_id

包含每个唯一位置的 ID 编号的整型字段。

Field
temporal_aggregation
  • APPLY_TEMPORAL_AGGREGATION时空立方体将根据您提供的 time_step_interval 对您的要素进行时间聚合。 例如,您有一组每日收集的数据,并希望通过每周 time_step_interval 创建立方体。
  • NO_TEMPORAL_AGGREGATION时空立方体将通过 in_features 的现有时间结构进行创建。 例如,您有一组年度数据,并希望通过年度 time_step_interval 创建立方体。 这是默认设置。
Boolean
time_field

包含数据集中每行的时间戳的字段。 此字段的类型必须是日期。

Field
time_step_interval
(可选)

用来表示单个时间步长的秒数、分钟数、小时数、天数、周数或年数。 此参数的有效条目示例为 1 周13 天1 个月

如果取消选中 temporal_aggregation,则不进行时间聚合,且此参数应设置为数据的现有时间结构。

如果选中 temporal_aggregation,则会进行时间聚合,且此参数应设置为您要创建的 time_step_interval。 将聚合相同 time_step_interval 内的所有要素。

Time Unit
time_step_alignment
(可选)

定义如何根据给定的 time_step_interval 创建立方体结构。

  • END_TIME时间步长与最后一次时间事件对齐,并向后聚合时间。
  • START_TIME时间步长与第一次时间事件对齐,并向前聚合时间。
  • REFERENCE_TIME时间步长将与指定的特定日期/时间对齐。 如果输入要素中的所有点的时间戳大于您所提供的参考时间(或时间戳刚好位于输入要素的开始时间),则时间步长间隔将以该参考时间为起始时间,并向前聚合时间(与使用 START_TIME 对齐的效果相同)。 如果输入要素中的所有点的时间戳小于您提供的参考时间(或时间戳刚好位于输入要素的结束时间),则时间步长间隔将以该参考时间为结束时间,并向后聚合时间(与使用 END_TIME 对齐的效果相同)。 如果提供的参考时间处于数据时间范围的中间,则将创建以提供的参考时间为结束的时间步长间隔(与使用 END_TIME 对齐的效果相同);其他间隔将在参考时间前后进行创建,直到覆盖数据的完整时间范围。
String
reference_time
(可选)

用于对齐时间步长间隔的日期/时间。 例如,如果想要按星期从星期一至星期天对数据进行归类,可以将星期天的午夜设置为参考时间,以确保条柱在星期天和星期一之间的午夜进行划分。

Date
variables
[[Field, Fill Empty Bins with],...]
(可选)

将在时空立方体中引入的包含属性值的数值字段。

可用填充类型有:

  • DROP_LOCATIONS - 缺少任何变量的数据的位置将从输出时空立方体中删除。
  • ZEROS - 用零填充空立方图格。
  • SPATIAL_NEIGHBORS - 用空间相邻要素平均值填充空立方图格。
  • SPACE_TIME_NEIGHBORS - 用时空相邻要素平均值填充空立方图格。
  • TEMPORAL_TREND - 使用一元样条插值算法填充空立方图格。

注:

任何变量记录中出现的空值都将导致产生空条柱。 如果输入要素中出现空值,则强烈建议您先运行填充缺失值工具。

Value Table
summary_fields
[[Field, Statistic, Fill Empty Bins with],...]
(可选)

包含属性值的数值字段,用于在将数据聚合到时空立方体时计算指定的统计数据。 可以指定多项统计和字段组合。 在任何指定字段中出现的空值都将导致从输出立方体中删除相应要素。 如果输入要素中出现空值,则强烈建议您在创建时空立方体前先运行填充缺失值工具。

可用的统计类型有:

  • SUM - 添加每个立方图格中指定字段的合计值。
  • MEAN - 计算每个立方图格中指定字段的平均值。
  • MIN - 查找每个立方图格中指定字段所有记录的最小值。
  • MAX - 查找每个立方图格中指定字段所有记录的最大值。
  • STD - 查找每个立方图格中指定字段的值的标准差。
  • MEDIAN - 查找每个立方图格中指定字段所有记录的中值。

可用填充类型有:

  • ZEROS - 用零填充空立方图格。
  • SPATIAL_NEIGHBORS - 用空间相邻要素平均值填充空立方图格
  • SPACE_TIME_NEIGHBORS - 用时空相邻要素平均值填充空立方图格。
  • TEMPORAL_TREND - 使用一元样条插值算法填充空立方图格。

注:

任何汇总字段记录中出现的空值都将导致从输出立方体中排除这些要素。 如果输入要素中出现空值,则强烈建议您先运行填充缺失值工具。 如果在运行填充缺失值工具后,仍存在空值而每个条柱中的点数是分析策略的一部分,您可能需要考虑创建单独的立方体,针对计数(不含汇总字段)创建一个,并针对汇总字段创建一个。 如果每个汇总字段的空值集不相同,您可能还需要考虑为每个汇总字段创建一个单独的立方体。

Value Table
in_related_table
(可选)

将关联到输入要素的表或表视图。

Table View
related_location_id
(可选)

相关表中包含基于关联的位置 ID 的整型字段。

Field

代码示例

CreateSpaceTimeCubeDefinedLocations 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何使用 CreateSpaceTimeCubeDefinedLocations 函数。

import arcpy
arcpy.env.workspace = r"C:\STPM\Chicago.gdb"
arcpy.stpm.CreateSpaceTimeCubeDefinedLocations("Chicago_Data", r"C:\STPM\Chicago_Cube.nc", "MYID",
                                               "NO_TEMPORAL_AGGREGATION", "TIME", "1 Months",
                                               "END_TIME", "", "COUNT ZEROS")
CreateSpaceTimeCubeDefinedLocations 示例 2(独立脚本)

以下独立 Python 脚本演示了如何使用 CreateSpaceTimeCubeDefinedLocations 函数。

# Fill missing values using a feature set and related table
# Use the results to create a space-time cube from defined locations
# Run Emerging Hot Spot Analysis on the data
# Visualize the results in 3d

# Import system modules
import arcpy

# Set overwriteOutput property to overwrite existing output, by default
arcpy.env.overwriteOutput = True

# Local variables ...
arcpy.env.workspace = r"C:\STPM\Chicago.gdb"

try:

    # Fill missing values in a feature class containing block group polygon shapes and a related table containing the incidents
    # Since some of the values are missing we will fill them using the temporal trend method.

    arcpy.stpm.FillMissingValues("Chicago_Feature", "Chicago_FilledFeature", "COUNT", "TEMPORAL_TREND", "", "", NoneNone,
                                 "TIME", "", "MYID", "Chicago_Table", "MYID", "", "", "", "Chicago_FilledTable")



    # Create a defined location space time cube using a related table
    # Using a reference time at the start of the month to force binning fall on month breaks
    # Using temporal aggregation to sum multiple entries into one month
    # Using the method drop location if missing values since we already filled using Fill Missing Values
    arcpy.stpm.CreateSpaceTimeCubeDefinedLocations("Chicago_FilledFeature", r"C:\STPM\Chicago_Cube.nc", "MYID",
                                                   "APPLY_TEMPORAL_AGGREGATION", "TIME", "1 Months", "REFERENCE_TIME",
                                                   "10/1/2015", "", "COUNT SUM DROP_LOCATIONS", "Chicago_FilledTable",
                                                   "MYID")

    # Run an emerging hot spot analysis on the defined locations cube
    # Using contiguity edges so only block groups which bound each other are considered neighbours
    arcpy.stpm.EmergingHotSpotAnalysis(r"C:\STPM\Chicago_Cube.nc", "COUNT_SUM_NONE",
                                       "Chicago_Cube_EmergingHotSpot", "", 1, "",
                                       "CONTIGUITY_EDGES_ONLY")

    # Use Visualize Cube in 3d to see the hot spot results for each time slice
    arcpy.stpm.VisualizeSpaceTimeCube3D(r"C:\STPM\Chicago_Cube.nc", "COUNT_SUM_NONE", "HOT_AND_COLD_SPOT_RESULTS",
                                        "Chicago_Cube_Visualize3d")

except arcpy.ExecuteError:
    # If any error occurred when running the tool, print the messages
    print(arcpy.GetMessages())