描述
根据要素属性和可选的空间或时态约束对要素进行分组。
插图
使用方法
-
此工具将生成一个包含分析中所使用字段以及一个名为 SS_GROUP 的新增整型字段的输出要素类。默认渲染将基于 SS_GROUP 字段,并会显示每个要素所属的组。例如,如果您指明需要 3 个组,则对于 SS_GROUP 字段,每个记录将包含 1、2 或 3。如果为空间约束参数选择了无空间约束,则输出要素类还将包含一个名为 SS_SEED 的新二进制字段。 SS_SEED 字段可指明使用哪些要素作为分组的起点。SS_SEED 字段中非零值的数量将与为组数参数所输入的值相匹配。
-
为输出报表文件参数指定了路径时,此工具可创建一个 PDF 报表文件。此报表包含各种表格和图形,可帮助您了解所确定的组的特征。PDF 报表路径将随附在汇总工具执行参数的消息中。单击此路径将弹开报表文件。您可以将鼠标悬停在进度条上来访问该消息,单击弹出按钮或展开地理处理窗格中的消息部分。您还可以通过地理处理历史访问之前运行分组分析的消息。
注:
创建报表文件会大大增加处理时间。因此,当分组分析将创建显示组成员资格的输出要素类时,如果指定超过 15 个组或超过 15 个变量,则不会创建 PDF 报表文件。
-
如果未投影输入要素类(即,坐标单位为度、分和秒),或者将输出坐标系设置为地理坐标系,则采用弦测量方法计算距离。使用弦距离测量法是因为此方法不仅计算速度快,而且提供真实测地线距离的良好估测,至少对于彼此 30 度以内的点是这样。弦距离以扁椭圆体为基础。给定地球表面上的任意两点,两点之间的弦距离是从三维地球穿过然后连接该两点的一条线的长度。弦距离以米为单位输出。
警告:
如果您的研究区域超过 30 度,则请确保投影数据。测地线距离超过 30 度时,弦距离不是理想的估测方法。
-
通过唯一 ID 字段可以将输出要素类中的记录链接回原始输入要素类中的数据。因此,每个要素的唯一 ID 字段值都必须唯一,而且通常应该是一个与要素类一同保留的永久性字段。如果数据集中没有唯一 ID 字段,则可以随时创建一个,方法是向要素类表中添加一个新的整型字段,然后将此字段的值计算为与 FID/OID 字段的值相等。您无法将 FID/OID 字段直接用于唯一 ID 字段参数。
-
分析字段应为数值型字段,而且应包含各种值。无任何变化的字段(即每个记录的值相同)将从分析中删除,但将包括在输出要素类中。如果分类字段以哑元变量表示(值 1 表示类别中的所有要素,而 0 表示所有其他要素),则可以与分组分析工具结合使用。
-
分组分析工具将构造具有或不具有空间或时间约束的组。在某些应用中,您可能不想对所创建的组实施邻接或其他邻域分析要求。在这些情况下,您可将空间约束参数设置为无空间约束。
-
对于某些分析,您想让各个组在空间上相邻。可以启用面要素类的“邻接”选项,来指明仅当要素与组中的另一成员共享某条边(仅邻接边)或共享某条边或某个折点(邻接边拐角)时,才表示这些要素属于同一个组。
-
当您想确保所有组成员都互相邻近时,可将 Delaunay 三角测量和 K 最近邻域选项用于点或面要素。这些选项用于指明,仅当某个要素至少有一个其他要素是自然邻域(Delaunay 三角测量)或“K 最近邻域”时,该要素才能包括在组中。K 是要考虑的相邻要素数,可以使用相邻要素的数目参数指定。
-
要创建具有空间和时间约束的组,请首先使用生成空间权重矩阵工具创建一个用于定义要素之间的空间-时间关系的空间权重矩阵文件 (.swm)。接下来,运行分组分析,将空间约束参数设为通过文件获取空间权重,将空间权重矩阵文件参数设为您所创建的 SWM 文件。
要创建三维组并将要素的 Z 值考虑在内,请首先使用生成空间权重矩阵工具并选中使用 Z 值参数来创建一个用于定义要素中的 3D 关系的空间权重矩阵文件 (.swm)。接下来,运行分组分析,将空间约束参数设为通过文件获取空间权重,将空间权重矩阵文件参数设为您所创建的 SWM 文件。
-
也可以施加其他空间约束,如“固定距离”,方法是首先使用生成空间权重矩阵工具创建 SWM 文件,然后为空间权重矩阵文件参数提供该文件的路径。
注:
即使您可以创建一个空间权重矩阵 (SWM) 文件来定义空间约束,但仍然不会应用实际权重。SWM 定义哪些要素相邻或邻近。施加空间约束将确定哪个要素可以是同一组的成员以及哪个要素不能是同一组的成员。例如,如果选择了仅邻接边,则单个组中的所有要素都至少有一条边与组中的另一要素是共用的。这可以确保生成的组在空间上是连续的。
-
定义空间约束可以确保各个组紧凑、连续或邻近。在分析字段列表中包括空间变量还会强化这些组属性。空间变量示例可包括距高速公路入口匝道的距离、就业机会的可获取性、购物机会的邻近性、连接测量值甚至坐标 (X, Y)。引入表示时间、周几或时态距离的变量可以促进组成员之间的时态紧凑性。
-
当要素的空间模式非常独特时(例如三个单独的、空间上独特的聚类),会使空间约束分组算法复杂化。因此,分组算法首先要会确定是否存在任何不相连的组。如果不相连的组数大于所指定的组数,则工具无法求解,并会显示相应的错误消息。如果不相连的组数与指定的组数完全相同,则要素的空间配置可以单独确定组结果,如下面的 (A) 中所示。如果指定的组数大于不相连的组数,那么分组将从已确定的不相连的组开始。例如,如果有三个不相连的组,而指定的组数为 4,则三个组中的其中一个组将被分割,以便创建第四个组,如下面的 (B) 中所示。
-
在某些情况下,分组分析工具将不能满足所施加的空间约束,某些要素将不会包括在任何组中(SS_GROUP 值将为 -9999,并呈空心渲染状态)。要素不具有相邻要素时便会出现这种情况。为避免这种情况出现,可使用 K 最近邻域来确保所有要素都具有相邻要素。增大相邻要素的数目参数可以帮助解决存在不相连的组的问题。
-
虽然倾向于引入尽可能多的分析字段,但对此工具而言,最好从单个变量开始构建。较少的分析字段的结果更易于解释。而且,字段较少时,还易于确定哪些变量是最佳辨别因素。
-
当为空间约束参数选择了无空间约束时,初始化方法有三个选项:查找种子位置、通过字段获取种子和使用随机种子。种子是用于增加单个组的要素。例如,如果为组数参数输入了 3,则分析将从三个种子要素开始。默认选项查找种子位置会随机选择第一个种子,然后确保所选择的后续种子代表了在数据空间中相互远离的要素。选择捕获数据空间不同区域的初始种子可以提高性能。有时,您知道特定要素会反映您想通过不同组表示的独特特征。在此情况下,请创建一个用于标识这些独特要素的种子字段。除了初始种子要素之外,您所创建的种子字段都应具有零值;初始种子要素的值应为 1。您将为初始化方法参数选择通过字段获取种子。如果您对执行某种灵敏度分析感兴趣,想了解哪些要素始终可以在同一组中找到,则可以为初始化方法参数选择使用随机种子选项。对于此选项,所有种子要素都会被随机选择。
注:
使用随机种子时,您可能希望通过“随机数生成器环境”设置选择种子来启动随机数生成器。但是,此工具使用的“随机数生成器”始终为 Mersenne Twister。
-
初始化字段中的任何 1 值均被视为种子。如果种子要素的数量比组数多,则将从初始化字段所确定的要素中随机选择种子要素。如果种子要素少于组数指定的数量,则将选择其他种子要素,以便使它们远离(在数据空间中)初始化字段所确定的要素。
-
有时,您可能知道最适合于数据的组数。但是,如果不知道,则必须尝试不同的组数,注意哪些值能够最恰当地对组进行区分。当选中评估最佳组数参数时,将对具有 2 至 15 个组的分组解决方案计算伪 F 统计量。如果没有其他标准指导您选择组数,可使用与其中一个最大伪 F 统计量值相关的数字。最大 F 统计量值指明在组相似性和组差异之间具有最佳性能的解决方案。如果指定了一个可选的输出报表文件,该 PDF 报表将包括一个图,该图显示具有 2 到 15 个组的解决方案的 F 统计量值。
-
不管您如何指定组数,如果随意分到其他组,则工具将停止运行。例如,假设数据由三个空间聚类面和单个分析字段组成。如果聚类中的所有要素都具有相同的分析字段值,则在创建三个组后可以随意划分各个聚类。如果在这种情况下指定的组多于三个,则此工具仍将仅创建三个组。只要组中至少有一个分析字段具有一些变量值,即可继续将其划分成其他组。
-
当在分析中引入空间或空间-时间约束时,伪 F 统计量具有可比性(只要输入要素和分析字段不改变)。因此,您不但可以使用 F 统计量值确定最佳组数,还可以帮助您选择最有效的空间约束选项、距离方法和相邻要素的数目。
-
在为空间约束参数选择了无空间约束并为初始化方法选择了查找种子位置或使用随机种子时,用于对要素进行分组的 K 均值算法将包含启发式算法,导致您每次运行工具时所返回的结果可能并不相同(即使使用了相同的数据和相同的工具参数)。这是因为其中包含了一个随机分量以查找用于分组的初始种子要素。
-
如果施加了空间约束,则算法不存在随机分量,因此可以为 2 至 15 个组计算一个单独的伪 F 统计量,并且可使用最高 F 统计量值来确定用于分析的最佳组数。但是,由于无空间约束选项是一个启发式求解法,因此确定最佳组数的过程会更加复杂。由于初始种子要素不同,因此在每次运行工具时,F 统计量可能并不相同。但是,当数据中存在独特模式时,从一次运行到下次运行的求解结果将会更加一致。因此,当选择了无空间约束选项时,为帮助确定最佳组数,该工具会针对 2、3、4 到多达 15 个组的分组分析求解 10 次。然后,报告有关这 10 个求解分布情况的信息(最小值、最大值、均值和中值),以便为分析确定最佳组数。
-
分组分析工具将返回三个派生输出值,这些值可能会在自定义模型和脚本中使用。这三个派生输出值分别是针对组数 (Output_FStat) 的伪 F 统计量、针对组 2 至 15 的最大伪 F 统计量 (Max_FStat) 和与最大伪 F 统计量相关的组数 (Max_FStat_Group)。当未选择评估最佳组数时,所有派生输出变量均设为 None。
-
为一组要素分配的组编号在这次运行与下次运行中可能并不相同。例如,假设您根据收入变量将要素分成两组。在首次运行分析时,您可能发现高收入要素被标为组 2,低收入要素被标为组 1;而在第二次运行相同的分析时,高收入要素可能被标为组 1。在指定了无空间约束时,您还可能发现某些中间的收入要素在两次运行中会相互交换组成员资格。
-
虽然可以选择创建大量不同的组,但在大多数情况下,您可能会将要素仅分成少量的几个组。由于在组数较多的情况下,图表和地图将变得难以解释。因此,在为组数参数输入了大于 15 的值或者选择了超过 15 个分析字段时,将不会创建报表。但是,您可以增大最大组数的限值。
抢先版本:
因为您拥有分组分析工具的 Python 源代码,因此您可以根据需要覆盖 15 个变量或15 个组报表限值。此上限可以通过 Partition.py 脚本文件中以及空间统计工具箱内工具的验证代码中的两个变量进行设置:
maxNumGroups = 15 maxNumVars = 15
-
有关输出报表文件的详细信息,请参阅了解有关分组分析工作原理的详细信息。
旧版本:
在 ArcGIS Pro 2.1 中,分组分析工具背后的算法已得到增强,且新功能已添加到这些方法中。为了简化新的功能和方法,已经创建了两个新工具来取代分组分析工具。如果要创建在空间上连续的组,请使用空间约束多元聚类工具。使用多元聚类工具来创建无空间约束的组。
语法
GroupingAnalysis(Input_Features, Unique_ID_Field, Output_Feature_Class, Number_of_Groups, Analysis_Fields, Spatial_Constraints, {Distance_Method}, {Number_of_Neighbors}, {Weights_Matrix_File}, {Initialization_Method}, {Initialization_Field}, {Output_Report_File}, {Evaluate_Optimal_Number_of_Groups})
参数 | 说明 | 数据类型 |
Input_Features | 要创建组的要素类或要素图层。 | Feature Layer |
Unique_ID_Field | 包含输入要素类中每个要素不同值的整型字段。如果没有“唯一 ID”字段,则可以创建一个,方法是向要素类表添加一个整型字段,然后将此字段的值计算为与 FID 或 OBJECTID 字段的值相等。 | 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 (可选) | 当 Spatial_Constraints 参数为 K_NEAREST_NEIGHBORS 或邻接方法中的一种(CONTIGUITY_EDGES_ONLY 或 CONTIGUITY_EDGES_CORNERS)时,将指定此参数。默认的相邻要素数是 8,并且对于 K_NEAREST_NEIGHBORS,此数目不能小于 2。该值反映在构建组时要考虑的最近邻域候选要素的准确数量。除非组中的一个其他要素是 K 最近邻域,否则不会将该要素包括在组中。CONTIGUITY_EDGES_ONLY 和 CONTIGUITY_EDGES_CORNERS 的默认值为 0。对于邻接方法,该值反映了要考虑的最小邻域候选数量。如果要素的相邻要素的数目小于指定的 Number_of_Neighbors,则将根据要素质心邻近性获得附加相邻要素。 | Long |
Weights_Matrix_File (可选) | 指向包含空间权重(其定义了要素间的空间关系)的文件的路径。 | File |
Initialization_Method (可选) | 指定当选择的 Spatial_Constraint 参数为 NO_SPATIAL_CONSTRAINT 时如何获取初始种子。种子用来生长组。例如,如果您指明需要三个组,则分析将从三个种子开始。
| String |
Initialization_Field (可选) | 用于标识种子要素的数值型字段。将使用此字段中具有 1 值的要素进行分组。 | Field |
Output_Report_File (可选) | 所要创建的用于汇总组特征的 PDF 报表文件的完整路径。此报表提供了许多图表,以帮助您比较每个组的特征。创建报表文件会大大增加处理时间。 | File |
Evaluate_Optimal_Number_of_Groups (可选) |
| Boolean |
派生输出
名称 | 说明 | 数据类型 |
Output_FStat | ||
Max_FStat_Group | ||
Max_FStat |
代码示例
以下 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 Analysis 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())
环境
许可信息
- Basic: 是
- Standard: 是
- Advanced: 是