分组分析 (Spatial Statistics)
插图
用法
-
此工具将生成一个包含分析中所使用字段以及一个名为 SS_GROUP 的新增整型字段的输出要素类。默认渲染将是基于 SS_GROUP 字段,并会显示每个要素所属的组。例如,如果您指明需要 3 个组,则对于 SS_GROUP 字段,每个记录将包含 1、2 或 3。当为空间约束参数选择了 NO_SPATIAL_CONSTRAINT 时,输出要素类还将包含一个名为 SS_SEED 的新的二进制字段。SS_SEED 字段可指示使用哪些要素作为分组的起点。SS_SEED 字段中非零值的数量将与为组数参数所输入的值相匹配。
当为输出报表文件参数指定了路径时,此工具还可创建一个 PDF 报表文件。此报表包含各种表格和图形,可帮助您了解所确定的组的特征。PDF 报表文件可以通过结果 窗口进行访问。
注:创建报表文件会大大增加处理时间。因此,当分组分析将创建显示组成员资格的输出要素类时,如果指定超过 15 个组或超过 15 个变量,则不会创建 PDF 报表文件。
如果未投影输入要素类(即,坐标单位为度、分和秒),或者将输出坐标系设置为地理坐标系,则采用弦测量方法计算距离。使用弦距离测量法是因为此方法不仅计算速度快,而且提供真实测地线距离的良好估测,至少对于彼此 30 度以内的点是这样。弦距离以球体为基础,而不是以地球实际的扁椭圆体为基础。给定地球表面上的任意两点,两点之间的弦距离是从三维地球穿过然后连接该两点的一条线的长度。弦距离以米为单位报告。
警告:如果您的研究区延伸超过 30 度,则需确保投影数据。测地线距离超过 30 度时,弦距离不是理想的估测方法。
-
通过唯一 ID 字段可以将输出要素类中的记录链接回原始输入要素类中的数据。因此,每个要素的唯一 ID 字段值都必须唯一,而且通常应该是一个与要素类一同保留的永久性字段。如果数据集中没有唯一 ID 字段,则可以随时创建一个,方法是向要素类表中添加一个新的整型字段,然后将此字段的值计算为与 FID/OID 字段的值相等。您无法将 FID/OID 字段直接用于唯一 ID 字段参数。
-
分析字段应为数值型字段,而且应包含各种值。无任何变化的字段(即每个记录的值相同)将从分析中删除,但将包括在输出要素类中。如果分类字段以哑元变量表示(值 1 表示类别中的所有要素,而 0 表示所有其他要素),则可以与分组分析工具结合使用。
分组分析工具将构造具有或不具有空间/时间约束的组。在某些应用中,您可能不想对所创建的组实施邻接或其他邻域分析要求。在这些情况下,您将空间约束参数设为 NO_SPATIAL_CONSTRAINT。
对于某些分析,您想让各个组在空间上相邻。可以启用面邻接类的 CONTIGUITY 选项,来指示仅当要素与组中的另一成员共享某条边 (CONTIGUITY_EDGES_ONLY) 或共享某条边或某个折点 (CONTIGUITY_EDGES_CORNERS) 时,才表示这些要素属于同一个组。
当您想确保所有组成员都互相邻近时,可以将 DELAUNAY_TRIANGULATION 和 K_NEAREST_NEIGHBORS 选项用于点或面要素。这些选项用于指示,仅当某个要素至少有一个其他要素是自然邻域 (Delaunay Triangulation) 或“K 最近邻”时,该要素才能包括在组中。K 是要考虑的相邻要素数,可以使用相邻要素的数目参数指定。
要创建具有空间和时间约束的组,请首先使用生成空间权重矩阵工具创建一个用于定义要素之间的空间-时间关系的空间权重矩阵文件(SWM 文件)。接下来,运行分组分析,将空间约束参数设为 GET_SPATIAL_WEIGHTS_FROM_FILE,将空间权重矩阵文件参数设为您所创建的 SWM 文件。
也可以施加其他空间约束,如“固定距离”,方法是使用生成空间权重矩阵工具首先创建 SWM 文件,然后为空间权重矩阵文件参数提供该文件的路径。
注:即使您可以创建一个空间权重矩阵 (SWM) 文件来定义空间约束,但仍然不会应用实际权重。SWM 只定义哪些要素相邻或邻近。施加空间约束将确定哪个要素可以是同一组的成员以及哪个要素不能是同一组的成员。例如,如果选择了 CONTIGUITY_EDGES_ONLY,则单个组中的所有要素都至少有一条边与组中的另一要素是共用的。这可以确保生成的组在空间上是连续的。
定义空间约束可以确保各个组紧凑、连续或邻近。在分析字段列表中包括空间变量还会强化这些组属性。空间变量可包括与高速公路驶入坡道的距离、职位空缺的可达性、购物机会的邻近性、连接测量值甚至坐标 (X, Y)。引入表示时间、周几或时态距离的变量可以促进组成员之间的时态紧凑性。
当要素的空间模式非常独特时(例如三个单独的、空间上独特的聚类),会使空间约束分组算法复杂化。因此,分组算法首先要会确定是否存在任何不相连的组。如果不相连的组数大于所指定的组数,则工具无法求解,并会显示相应的错误消息。如果不相连的组数与指定的组数完全相同,则要素的空间配置可以单独确定组结果,如下面的 (A) 中所示。如果指定的组数大于不相连的组数,那么分组将从已确定的不相连的组开始。例如,如果有三个不相连的组,而指定的组数为 4,则三个组中的其中一个组将被分割,以便创建第四个组,如下面的 (B) 中所示。
在某些情况下,分组分析工具将不能满足所施加的空间约束,某些要素将不会包括在任何组中(SS_GROUP 值将为 -9999,并呈空心渲染状态)。要素不具有邻域的要素时便会出现这种情况。要避免这种情况出现,可使用 K_NEAREST_NEIGHBORS 来确保所有要素都具有邻域。增大相邻要素的数目参数可以帮助解决存在不相连的组的问题。
虽然倾向于引入尽可能多的分析字段,但对此工具而言,最好从单个变量开始构建。较少的分析字段的结果更易于解释。而且,字段较少时,还易于确定哪些变量是最佳辨别因素。
当为空间约束参数选择 NO_SPATIAL_CONSTRAINT 时,初始化方法有三个选项:FIND_SEED_LOCATIONS、GET_SEEDS_FROM_FIELD 和 USE_RANDOM_SEEDS。种子是用于增加单个组的要素。例如,如果为组数参数输入了 3,则分析将从三个种子要素开始。默认选项 FIND_SEED_LOCATIONS 会随机选择第一个种子,然后确保所选择的后续种子代表了在数据空间中相互远离的要素。选择捕获数据空间不同区域的初始种子可以提高性能。有时,您知道特定要素会反映您想通过不同组表示的独特特征。在此情况下,请创建一个用于标识这些独特要素的种子字段。除了初始种子要素之外,您所创建的种子字段都应具有零值;初始种子要素的值应为 1。然后,为初始化方法参数选择 GET_SEEDS_FROM_FIELD。如果您对执行某种灵敏度分析感兴趣,想了解哪些要素始终可以在同一组中找到,则可以为初始化方法参数选择 USE_RANDOM_SEEDS 选项。对于此选项,所有种子要素都会被随机选择。
初始化字段中的任何 1 值均被视为种子。如果种子要素的数量比组数多,则将从初始化字段所确定的要素中随机选择种子要素。如果种子要素少于组数指定的数量,则将选择其他种子要素,以便使它们远离(在数据空间中)初始化字段所确定的要素。
有时,您可能知道最适合于数据的组数。但是,如果不知道,则必须尝试不同的组数,注意哪些值能够最恰当地对组进行区分。当选中评估最佳组数参数时,将对具有 2 至 15 个组的分组解决方案计算伪 F 统计量。如果没有其他标准指导您选择组数,可使用与其中一个最大伪 F 统计量值相关的数字。最大 F 统计量指示在组相似性和组差异之间具有最佳性能的解决方案。如果指定了一个可选的输出报表文件,该 PDF 报表将包括一个图,该图显示具有 2 到 15 个组的解决方案的 F 统计量值。
当在分析中引入空间或空间-时间约束时,伪 F 统计量具有可比性(只要输入要素和分析字段不改变)。因此,您不但可以使用 F 统计量值确定最佳组数,还可以帮助您选择最有效的空间约束选项、距离方法和相邻要素的数目。
在为空间约束参数选择了 NO_SPATIAL_CONSTRAINT 并为初始化方法选择了 FIND_SEED_LOCATIONS 或 USE_RANDOM_SEEDS 时,用于对要素进行分组的 K 均值算法将包含启发式算法,导致您每次运行工具时所返回的结果可能并不相同(即使使用了相同的数据和相同的工具参数)。这是因为其中包含了一个随机分量以查找用于分组的初始种子要素。
如果施加了空间约束,则算法不存在随机分量,因此可以为 2 至 15 个组计算一个单独的伪 F 统计量,并且可使用最高 F 统计量值来确定用于分析的最佳组数。但是,由于 NO_SPATIAL_CONSTRAINT 选项是一个启发式求解法,因此确定最佳组数的过程会更加复杂。由于初始种子要素不同,因此在每次运行工具时,F 统计量可能并不相同。但是,当数据中存在独特模式时,从一次运行到下次运行的求解结果将会更加一致。因此,当选择了 NO_SPATIAL_CONSTRAINT 选项时,为帮助确定最佳组数,该工具会针对 2、3、4 到多达 15 个组的分组分析求解 10 次。然后,报告有关这 10 个求解分布情况的信息(最小值、最大值、均值和中值),以便为分析确定最佳组数。
分组分析工具将返回三个派生输出值,这些值可能会在自定义模型和脚本中使用。这三个派生输出值分别是针对组数 (Output_FStat) 的伪 F 统计量、针对组 2 至 15 的最大伪 F 统计量 (Max_FStat) 和与最大伪 F 统计量相关的组数 (Max_FStat_Group)。当未选择评估最佳组数时,所有派生输出变量均设为“无”。
为一组要素分配的组编号在这次运行与下次运行中可能并不相同。例如,假设您根据收入变量将要素分成两组。在首次运行分析时,您可能发现高收入要素被标为组 2,低收入要素被标为组 1;而在第二次运行相同的分析时,高收入要素可能被标为组 1。在指定了 NO_SPATIAL_CONSTRAINT 时,您还可能发现某些中间的收入要素在两次运行中会相互交换组成员资格。
虽然可以选择创建大量不同的组,但在大多数情况下,您可能会将要素仅分成少量的几个组。由于在组数较多的情况下,图表和地图将变得难以解释。因此,在为组数参数输入了大于 15 的值或者选择了超过 15 个分析字段时,将不会创建报表。但是,您可以增大最大组数的限值。
开始行动:因为您拥有分组分析工具的 Python 源代码,因此您可以根据需要覆盖 15 个变量/15 个组报表限值。此上限可以通过 Partition.py 脚本文件中以及空间统计工具箱内工具的验证代码中的两个变量进行设置:
maxNumGroups = 15 maxNumVars = 15
此工具将选择性地创建汇总结果的 PDF 报表。PDF 文件不会自动显示在目录 窗口中。如果要在“目录”中显示 PDF 文件,可打开 ArcCatalog 应用程序,选择自定义菜单选项,单击 ArcCatalog 选项,然后选择文件类型选项卡。单击新建类型按钮,并指定 PDF 作为文件扩展名,如下图所示。
在配置了中文或日文的 ArcGIS 语言包的计算机上,您可能会发现 PDF 输出报表文件中存在丢失文本或格式化问题。这些问题可通过更改字体设置进行更正。
有关输出报表文件的详细信息,请参阅了解有关“分组分析”工作原理的详细信息
语法
参数 | 说明 | 数据类型 |
Input_Features |
要为其创建组的要素类或要素图层。 | Feature Layer |
Unique_ID_Field |
包含输入要素数据集中每个要素不同值的整型字段。 | Field |
Output_Feature_Class |
创建的新输出要素类,其中包含所有要素、指定的分析字段以及一个用于指示每个要素所属组的字段。 | Feature Class |
Number_of_Groups |
要创建的组数。如果多于 15 个组,将禁用输出报表参数。 | Long |
Analysis_Fields [analysis_field,...] |
用于区分各个组的字段的列表。如果多于 15 个字段,将禁用输出报表参数。 | Field |
Spatial_Constraints |
指定要素之间的空间关系是否应该约束所创建的组以及如何约束。
| String |
Distance_Method (可选) |
指定计算每个要素与邻近要素之间的距离的方式。
| String |
Number_of_Neighbors (可选) |
当空间约束参数为 K_NEAREST_NEIGHBORS 或 CONTIGUITY 方法的其中一种时,将启用此参数。默认的相邻要素数是 8。对于 K_NEAREST_NEIGHBORS,此整型值反映在构建组时要考虑的最近邻域候选要素的准确数量。除非组中的其中一个其他要素是 K 最近邻域,否则不会将该要素包括在组中。对于 CONTIGUITY 方法,此值反映了要考虑的邻域候选要素的准确数量(仅针对岛屿面)。由于岛屿面没有相连的邻域,因此将为其分配不相连但接近的邻域。 | Long |
Weights_Matrix_File (可选) |
指向包含空间权重(其定义要素间的空间关系)的文件的路径。 | File |
Initialization_Method (可选) |
指定当选择的空间约束参数是 NO_SPATIAL_CONSTRAINT 时如何获取初始种子。种子用来进行分组。例如,如果您指明需要 3 个组,则分析将从三个种子开始。
| String |
Initialization_Field (可选) |
用于标识种子要素的数值型字段。将使用此字段中具有 1 值的要素进行分组。 | Field |
Output_Report_File (可选) |
所要创建的用于汇总组特征的 .pdf 报表文件的完整路径。此报表提供了许多图表,以帮助您比较每个组的特征。创建报表文件会大大增加处理时间。 | File |
Evaluate_Optimal_Number_of_Groups (可选) |
| Boolean |
代码实例
以下 Python 窗口脚本演示了如何使用 GroupingAnalysis 工具。
import arcpy
import arcpy.stats as SS
arcpy.env.workspace = r"C:\GA"
SS.GroupingAnalysis("Dist_Vandalism.shp", "TARGET_FID", "outGSF.shp", "4",
"Join_Count;TOTPOP_CY;VACANT_CY;UNEMP_CY",
"NO_SPATIAL_CONSRAINT", "EUCLIDEAN", "", "", "FIND_SEED_LOCATIONS", "",
"outGSF.pdf", "DO_NOT_EVALUATE")
以下独立 Python 脚本演示了如何使用 GroupingAnalysis 工具。
# Grouping Analysis of Vandalism data in a metropolitan area
# using the Grouping Analysis Tool
# Import system modules
import arcpy, os
import arcpy.stats as SS
# Set geoprocessor object property to overwrite existing output, by default
arcpy.gp.overwriteOutput = True
try:
# Set the current workspace (to avoid having to specify the full path to
# the feature classes each time)
arcpy.env.workspace = r"C:\GA"
# Join the 911 Call Point feature class to the Block Group Polygon feature class
# Process: Spatial Join
fieldMappings = arcpy.FieldMappings()
fieldMappings.addTable("ReportingDistricts.shp")
fieldMappings.addTable("Vandalism2006.shp")
sj = arcpy.SpatialJoin_analysis("ReportingDistricts.shp", "Vandalism2006.shp", "Dist_Vand.shp",
"JOIN_ONE_TO_ONE",
"KEEP_ALL",
fieldMappings,
"COMPLETELY_CONTAINS", "", "")
# Use Grouping Anlysis tool to create groups based on different variables or analysis fields
# Process: Group Similar Features
ga = SS.GroupingAnalysis("Dist_Vand.shp", "TARGET_FID", "outGSF.shp", "4",
"Join_Count;TOTPOP_CY;VACANT_CY;UNEMP_CY",
"NO_SPATIAL_CONSRAINT", "EUCLIDEAN", "", "", "FIND_SEED_LOCATIONS", "",
"outGSF.pdf", "DO_NOT_EVALUATE")
# Use Summary Statistic tool to get the Mean of variables used to group
# Process: Summary Statistics
SumStat = arcpy.Statistics_analysis("outGSF.shp", "outSS", "Join_Count MEAN; \
VACANT_CY MEAN;TOTPOP_CY MEAN;UNEMP_CY MEAN",
"GSF_GROUP")
except:
# If an error occurred when running the tool, print out the error message.
print arcpy.GetMessages()
环境
- 输出坐标系
在进行分析之前将要素几何投影到输出坐标系。所有数学计算都基于输出坐标系空间参考。输出坐标系基于度、分、秒时,测地线距离用弦距离估测。