同一値を持つレコードの検出 (Find Identical) (データ管理)

サマリー

フィールドの一覧内で同一値を持つ、フィーチャクラスまたはテーブルのレコードを報告し、同一値を持つこれらのレコードを示すテーブルを生成します。 Shape フィールドが指定されている場合は、フィーチャ ジオメトリが照合されます。

同一値を持つレコードを検出して削除するには、[同一値を持つレコードの削除 (Delete Identical)] ツールを使用します。

同一値を持つレコードの検出ツールの図
この例では、1、2、3、8、9、および 10 の OBJECTID のポイントが空間的に一致しています (青いハイライト)。 出力テーブルは、同じ CATEGORY を共有する空間的に一致しているこれらのポイントを特定します。

使用法

  • 選択した入力フィールドの値が同じレコードは、同一とされます。 入力データセット内の複数のフィールドにある値を照合することができます。 複数のフィールドが指定された場合、レコードは、最初のフィールド内の値によって照合された後、2 番目のフィールドの値によって照合されるという具合に、順次照合されます。

  • フィーチャクラスまたはフィーチャ レイヤーを入力に指定して、[フィールド] パラメーターで Shape フィールドを選択すると、同一値を持つフィーチャを位置によって検索するためにフィーチャ ジオメトリが照合されます。 [XY 許容値][Z 許容値] パラメーターは、Shape フィールドが指定されている場合のみ有効になります。

    Shape フィールドが指定されていて、入力フィーチャの M 値または Z 値が有効な場合、同一フィーチャの判定に M 値または Z 値も使用されます。

  • 出力テーブルの対象を重複レコードだけにする場合は、[重複レコードのみを出力] パラメーターをオンにします。 このパラメーターがオフの場合、出力は入力データセットと同じレコード数を持ちます。

  • 出力テーブルには、以下のテーブルが含まれます。

    • IN_FID- 入力データセットの Object ID フィールドの値。 このフィールドを使用すると、出力テーブルのレコードを入力データセットと結合できます。
    • FEAT_SEQ- シーケンス番号。 同じ値を持つ入力のレコードは同じ FEAT_SEQ 値を持ち、同一ではないレコードは一意の連番の値を持ちます。 FEAT_SEQ 値は入力レコードの ID とは関連がありません。

パラメーター

ラベル説明データ タイプ
入力データセット

同一値を持つレコードを検出するテーブルまたはフィーチャクラス。

Table View
出力データセット

同一値を持つレコードを報告する出力テーブル。 出力テーブルの FEAT_SEQ フィールドは、同一レコードでは同じ値を持ちます。

Table
フィールド

同一値を持つレコードを検出するために値が照合されるフィールド。

Field
XY 許容値
(オプション)

別のフィーチャ内に同一値の頂点が存在するかどうかを評価するときに各頂点に適用される XY 許容値。

このパラメーターは、[フィールド] パラメーターの値に Shape フィールドが含まれる場合にアクティブになります。

Linear Unit
Z 許容値
(オプション)

別のフィーチャ内に同一値の頂点が存在するかどうかを評価するときに各頂点に適用される Z 許容値。

このパラメーターは、[フィールド] パラメーターの値に Shape フィールドが含まれる場合にアクティブになります。

Double
重複レコードのみを出力
(オプション)

出力テーブルに重複レコードのみを含めるかどうかを指定します。

  • オフ - すべての入力レコードが、出力テーブル内に対応するレコードを持ちます。 これがデフォルトです。
  • オン - 重複レコードだけが、出力テーブル内に対応するレコードを持ちます。 重複が検出されない場合、出力は空になります。
Boolean

arcpy.management.FindIdentical(in_dataset, out_dataset, fields, {xy_tolerance}, {z_tolerance}, {output_record_option})
名前説明データ タイプ
in_dataset

同一値を持つレコードを検出するテーブルまたはフィーチャクラス。

Table View
out_dataset

同一値を持つレコードを報告する出力テーブル。 出力テーブルの FEAT_SEQ フィールドは、同一レコードでは同じ値を持ちます。

Table
fields
[fields,...]

同一値を持つレコードを検出するために値が照合されるフィールド。

Field
xy_tolerance
(オプション)

別のフィーチャ内に同一値の頂点が存在するかどうかを評価するときに各頂点に適用される XY 許容値。

このパラメーターは、fields パラメーターの値に Shape フィールドが含まれる場合に有効になります。

Linear Unit
z_tolerance
(オプション)

別のフィーチャ内に同一値の頂点が存在するかどうかを評価するときに各頂点に適用される Z 許容値。

このパラメーターは、fields パラメーターの値に Shape フィールドが含まれる場合に有効になります。

Double
output_record_option
(オプション)

出力テーブルに重複レコードのみを含めるかどうかを指定します。

  • ALLすべての入力レコードが、出力テーブル内に対応するレコードを持ちます。 これがデフォルトです。
  • ONLY_DUPLICATES重複レコードだけが、出力テーブル内に対応するレコードを持ちます。 重複が検出されない場合、出力は空になります。
Boolean

コードのサンプル

FindIdentical の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、イミディエイト モードで FindIdentical 関数を使用する方法を示しています。

import arcpy

# Find identical records based on a text field and a numeric field.
arcpy.FindIdentical_management("C:/data/fireincidents.shp", "C:/output/duplicate_incidents.dbf", ["ZONE", "INTENSITY"])
FindIdenticalの例 2 (スタンドアロン スクリプト)

次のスタンドアロン スクリプトは、FindIdentical 関数を使用して、テーブルまたはフィーチャクラスの重複するレコードを識別する方法を示しています。

# Name: FindIdentical_Example2.py
# Description: Finds duplicate features in a dataset based on location (Shape field) and fire intensity

import arcpy

arcpy.env.overwriteOutput = True

# Set workspace environment
arcpy.env.workspace = "C:/data/findidentical.gdb"

# Set input feature class
in_dataset = "fireincidents"

# Set the fields upon which the matches are found
fields = ["Shape", "INTENSITY"]

# Set xy tolerance
xy_tol = ".02 Meters"

out_table = "duplicate_incidents"

# Execute Find Identical 
arcpy.FindIdentical_management(in_dataset, out_table, fields, xy_tol)
print(arcpy.GetMessages())
FindIdentical の例 3: (スタンドアロン スクリプト)

次のスタンドアロン スクリプトで、オプションの output_record_option パラメーターを使用する方法を示します。 パラメーター値が ONLY_DUPLICATES である場合、一意のレコードはすべて削除され、重複レコードだけが出力に残されます。

# Name: FindIdentical_Example3.py
# Description: Demonstrates the use of the optional parameter Output only duplicated records.

import arcpy

arcpy.env.overwriteOutput = True

# Set workspace environment
arcpy.env.workspace = "C:/data/redlands.gdb"

in_data = "crime"
out_data = "crime_dups"

# Note that XY Tolerance and Z Tolerance parameters are not used
# In that case, any optional parameter after them must assign
# the value with the name of that parameter    
arcpy.FindIdentical_management(in_data, out_data, ["Shape"], output_record_option="ONLY_DUPLICATES")

print(arcpy.GetMessages())
FindIdentical の例 4: (スタンドアロン スクリプト)

次のスタンドアロン スクリプトで、FindIdentical 関数の出力を読み取り、FEAT_SEQ フィールド値によって同一レコードをグループ化します。

import arcpy

from itertools import groupby
from operator import itemgetter

# Set workspace environment
arcpy.env.workspace = r"C:\data\redlands.gdb"

# Run Find Identical on feature geometry only.
result = arcpy.FindIdentical_management("parcels", "parcels_dups", ["Shape"])
    
# List of all output records as IN_FID and FEAT_SEQ pair - a list of lists
out_records = []   
for row in arcpy.SearchCursor(result.getOutput(0), fields="IN_FID; FEAT_SEQ"):
    out_records.append([row.IN_FID, row.FEAT_SEQ])

# Sort the output records by FEAT_SEQ values
# Example of out_records = [[3, 1], [5, 3], [1, 1], [4, 3], [2, 2]]
out_records.sort(key = itemgetter(1))
    
# records after sorted by FEAT_SEQ: [[3, 1], [1, 1], [2, 2], [5, 3], [4, 3]]
# records with same FEAT_SEQ value will be in the same group (i.e., identical)
identicals_iter = groupby(out_records, itemgetter(1))
    
# now, make a list of identical groups - each group in a list.
# example identical groups: [[3, 1], [2], [5, 4]]
# i.e., IN_FID 3, 1 are identical, and 5, 4 are identical.
identical_groups = [[item[0] for item in data] for (key, data) in identicals_iter]

print(identical_groups)

関連トピック