描述
基于时间序列特征的相似性,对存储在时空立方体中的时间序列集合进行划分。可以基于三个条件聚集时间序列:具有相似的时间值,趋于同时增加和减少以及具有相似的重复模式。此工具的输出为一个 2D 地图,该地图可显示按聚类成员资格和消息进行符号化的立方体中的每个位置。输出还包括相应图表,其中包含有关每个聚类的代表性时间序列签名的信息。
插图
使用方法
此工具接受通过聚合点创建时空立方体、通过已定义要素创建时空立方体以及通过多维栅格图层创建时空立方体工具创建的 netCDF 文件。
该工具会将每个位置处的时间序列与输入时空立方体中所有其他位置处的时间序列进行比较,并且时间序列基于其相似性聚集在一起。感兴趣特征参数用于定义两个时间序列相似的含义,可以根据以下特征之一定义相似性:
- 值 - 如果时间序列具有近似相等的分析变量时间值,则时间序列相似。例如,具有值(1、0、1、0、1)的时间序列与具有值(1、1、1、1、1)的时间序列的相似性高于与具有值(10、0、10、0、10)的时间序列的相似性,因为值更相似。
- 轮廓(相关性)- 如果时间序列的值趋于同时增加和减少并且近似成比例(换言之,它们在时间上相关),则时间序列相似。例如,具有值(1、0、1、0、1)的时间序列与具有值(10、0、10、0、10)的时间序列的相似性高于与具有值(1、1、1、1、1)的时间序列的相似性,因为值会同时增加和减少并保持比例一致。
- 轮廓(傅里叶)- 如果时间序列的时间值具有相似的平滑周期性模式,则时间序列相似。这些周期有时称为循环或季节,它们表示在新周期中重复的模式的持续时间。例如,企业可以查看每周总销售额中的周期性重复模式,该周期从星期一开始,到星期日结束。(可选)可以使用要忽略的时间序列特征参数选择忽略这些模式的某些特征。重复模式通过傅里叶系列功能数据分析进行检测。为使此选项最有效,输入时空立方体的时间序列应覆盖至少一个周期的整个持续时间。例如,温度具有由天气季节驱动的年周期,但是如果所有数据是在一年的几个月内收集的,则此选项可能无法检测到年周期。
使用相似性定义,通过多种聚类算法对时空立方体的位置进行聚类,以生成该工具返回的最终聚类。有关这些聚类算法的详细信息,请参阅时间序列聚类工作原理。
基于 CLUSTER_ID 字段进行渲染时,可将输出要素添加到内容窗格,并指示每个位置所属的聚类。例如,如果您指定三个聚类,则对于 CLUSTER_ID 字段,每个记录将包含值 1、2 或 3。CENTER_REP 字段可标识每个聚类的时间序列中心点,对于每个聚类的中心点时间序列,所含值为 1;对于所有其他要素,所含值为 0。
-
该工具将创建消息和可选图表,以帮助您了解所标识聚类的特征。可将鼠标悬停在进度条上、单击弹出按钮或展开地理处理窗格中的消息部分来访问消息。还可通过地理处理历史访问之前运行时间序列聚类工具的消息。如果指定图表的输出表,将为输出表创建图表,以显示每个聚类的平均时间序列以及每个聚类中时间序列的中心点。可以在内容窗格的独立表部分中创建的表下访问这些图表。有关输出消息和图表的详细信息,请参阅时间序列聚类工作原理。
-
有时,您可能知道最适合数据的聚类数。如果您不知道,则可能需要尝试不同的聚类数,注意哪些值能够最恰当地对聚类进行区分。如果将聚类数参数留空,则该工具将使用伪 F 统计量评估最佳聚类数,并以地理处理消息的形式报告最佳聚类数。伪 F 统计量越大,聚类彼此的区别就越大。最佳聚类数不会大于 10,并且计算最佳聚类数会占用工具的大部分执行时间。如果您知道适当的值或该工具的执行时间太长,建议提供多个聚类。
要计算最佳聚类数,该工具将尝试数量介于 2 个到 10 个的聚类。对于这 9 个可能的聚类数中的每一个,该工具将使用随机起始种子进行 10 次聚类(除非与轮廓(相关性)搭配使用的时空立方体中的位置超过 10,000 个,在这种情况下,每个相邻要素的数量都将重复 20 次)。这将产生 90 个(或 180 个)可能的聚类结果(9 个可能的聚类数中每一个对应 10 个或 20 个结果),并为在工具中使用的最终聚类数选择伪 F 统计量最大的聚类结果。对于 9 个可能的聚类数中的每一个,最大伪 F 统计量在地理处理消息中打印为表格。
注:
无穷大伪 F 统计量表示同一聚类中的所有时间序列完全相同。
-
由于该算法将随机选择初始种子来开始发展聚类,因此分配给位置的聚类 ID 在这次运行与下次运行中可能并不相同。例如,假设您根据每年人口增长将位置划分为两个聚类。在首次运行分析时,您可能发现高增长率的位置被标为聚类 2,低增长率的位置被标为聚类 1;而在第二次运行相同的分析时,高增长率的位置可能被标为聚类 1。您还可能发现某些平均或中等增长率的位置在两次运行中会相互交换聚类成员资格。这是因为聚类算法中包含随机分量。如果使用相同的参数重新运行该工具时,聚类结果发生显著变化,请考虑更改聚类数参数值。
语法
TimeSeriesClustering(in_cube, analysis_variable, output_features, characteristic_of_interest, {cluster_count}, {output_table_for_charts}, {shape_characteristic_to_ignore}, {enable_time_series_popups})
参数 | 说明 | 数据类型 |
in_cube | 要分析的 netCDF 立方体。此文件必须具有 .nc 扩展名,并且必须使用通过聚合点创建时空立方体、通过已定义要素创建时空立方体或通过多维栅格图层创建时空立方体工具进行创建。 | File |
analysis_variable | netCDF 文件中的数值变量会随时间改变,将用于区分各个聚类。 | String |
output_features | 新的输出要素类,包含时空立方体中的所有位置以及一个表示聚类成员资格的字段。此要素类将为数据中聚类的二维表示。 | Feature Class |
characteristic_of_interest | 指定时间序列的特征,用于确定应聚集在一起的位置。
| String |
cluster_count (可选) | 要创建的聚类数。如果留空,该工具将使用伪 F 统计量评估最佳聚类数。将在消息窗口中报告最佳聚类数。 | Long |
output_table_for_charts (可选) | 如果指定,则此图表将包含每个聚类的代表性时间序列,其中每个聚类基于每个时间序列聚类和中心点时间序列的平均值。基于该表创建的图表可通过独立表部分进行访问。 | Table |
shape_characteristic_to_ignore [shape_characteristic_to_ignore,...] (可选) | 指定确定两个时间序列之间的相似性时将忽略的特征。
如果忽略了这两个特征,则当周期的持续时间相似时,这两个时间序列将视为相似,即使二者开始时间不同且在周期内具有不同的值。 | String |
enable_time_series_popups (可选) | 指定是否将在每个输出要素的弹出窗口中创建时间序列图表,以显示要素的时间序列以及该要素所在聚类中所有要素的平均时间序列。Shapefile 输出不支持时间序列弹出窗口。
| Boolean |
代码示例
以下 Python 脚本演示了如何使用 TimeSeriesClustering 工具:
import arcpy
arcpy.env.workspace = r"C:\Analysis"
# Value
arcpy.stpm.TimeSeriesClustering(r"Temperature.nc",
"Air_NONE_ZEROS", r"Analysis.gdb\Temp_Value_3Clusts",
"VALUE", 3, "Temp_Value_3Clusts_Chart", None, "CREATE_POPUP")
# Profile - correlation
arcpy.stpm.TimeSeriesClustering(r"Temperature.nc", "Air_NONE_ZEROS",
r"Analysis.gdb\Temp_Profile_3Clusts", "PROFILE", 3,
r"Temp_Profile_3Clusts_Chart", None, "CREATE_POPUP")
# Profile - Fourier
arcpy.stpm.TimeSeriesClustering(r"Temperature.nc",
"Air_NONE_ZEROS", r"Analysis.gdb\Temp_Fourier_3Clusts",
"PROFILE_FOURIER", 3, r"Temp_Fourier_3Clusts_Chart",
"TIME_LAG", "CREATE_POPUP")
以下 Python 脚本演示了如何使用 TimeSeriesClustering 工具来聚集相似的存储位置:
# Create clusters of store locations with similar sales volumes over time.
# Import system modules.
import arcpy
# Set property to overwrite existing output, by default.
arcpy.env.overwriteOutput = True
# Set workspace...
workspace = r"C:\Analysis"
arcpy.env.workspace = workspace
# Create 3 clusters of location with similar extent of fluctuation in temperature.
arcpy.stpm.TimeSeriesClustering(r"Temperature.nc", "Air_NONE_ZEROS",
r"Analysis.gdb\Temperature_TSC",
"PROFILE_FOURIER", 3, "Temp_Chart", None,
"CREATE_POPUP")
# Create a feature class containing all the bins in the input space time cube.
arcpy.stpm.VisualizeSpaceTimeCube3D(r"Temperature.nc", "Air_NONE_ZEROS", "VALUE",
r"Temp_Bins.shp")
# Make the bins as a feature layer.
arcpy.MakeFeatureLayer_management("Temp_Bins.shp", "Temp_Bins_Temp_Layer")
# Join the clustering results to the bins so each bin now has a cluster ID.
arcpy.management.AddJoin("Temp_Bins_Temp_Layer", "Location",
r"Analysis.gdb\Temperature_TSC", "Location", "KEEP_ALL")
# Summarize the bins using Summary Statistics with Cluster ID as a case field
# to get the minimum, maximum, and average temperature for each cluster.
arcpy.analysis.Statistics("Temp_Bins_Temp_Layer", "Temp_Bins_Statistics.shp",
"Temp_Bins.VALUE MEAN;Temp_Bins.VALUE MAX;Temp_Bins.VALUE MIN",
"Temperature_TSC.CLUSTER_ID")
许可信息
- Basic: 是
- Standard: 是
- Advanced: 是