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

ライセンス レベル:BasicStandardAdvanced

サマリ

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

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

Find Identical illustration
In this example, points with the OBJECTIDs of 1,2, 3, 8, 9, and 10 are spatially coincident (blue highlight). The output table identifies those spatially coincident points that share the same CATEGORY.

使用法

構文

FindIdentical_management (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 許容値。このパラメータは、Shape がフィールドの 1 つとして選択されている場合のみ有効になります。

Linear unit
z_tolerance
(オプション)

別のフィーチャ内に同一値の頂点が存在するかどうかを評価するときに各頂点に適用される Z 許容値。このパラメータは、Shape がフィールドの 1 つとして選択されている場合のみ有効になります。

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
from arcpy import env

env.overwriteOutput = True

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

try:
    # 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()

except arcpy.ExecuteError:
    print arcpy.GetMessages(2)
    
except Exception as ex:
    print ex.args[0]
FindIdentical(同一値を持つレコードの検出)の例 3: 重複レコードのみを出力(スタンドアロン スクリプト)

オプションの [重複レコードのみを出力] パラメータを使用する方法を示しています。ツール ダイアログ ボックスでオンにするか、ONLY_DUPLICATES の値を設定すると、一意のレコードは出力からすべて削除され、重複レコードだけが残されます。

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

import arcpy
from arcpy import env

env.overwriteOutput = True

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

try:
    
    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()
    
except Exception as ex:
    print arcpy.GetMessages(2)
    print ex.args[0]
FindIdentical(同一値を持つレコードの検出)の例 4: FEAT_SEQ 値による同一レコードのグループ化

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

環境

関連トピック

ライセンス情報

ArcGIS for Desktop Basic: ×
ArcGIS for Desktop Standard: ×
ArcGIS for Desktop Advanced: ○
7/28/2014