日本語

操作手順: 既存のポイント フィーチャ レイヤーからランダム ポイントを選択する

概要

ポイント フィーチャが多すぎる場合に、一部のポイントのみを保持して統計解析に使用することができます。 分布しているポイントをランダムに選択することで、偏りのない解析を行うことができます。 以下の手順で、ランダム ポイントは選択されるのみで、新たなランダム ポイントは作成されません。 ポイントが選択されたら、新しいレイヤーにエクスポートできます。

以下の手順は、既存のポイント フィーチャ レイヤーからランダム ポイントを選択する方法を説明しています。

手順

以下に、[Subset Features] ツール、Python、または [属性検索] 関数を使用した 3 つのワークフローを説明します。

[Subset Features] ツールの使用
[Subset Features] ツールは、データを 2 つのサブセットに分割します。 フィーチャは、一様な [0,1] 分布から乱数を生成することで分割されます。このツールには、Geostatistical Analyst ライセンスが必要です。 [Subset Features] ツールの詳細については、ArcGIS Web ヘルプ「Subset Features」をご参照ください。

Python スクリプトの使用

注意:
以下の Python スクリプトは、Stack Exchange からのコントリビューションであり、ワークフローは Esri が検証済みです。
  1. ArcMap では、[Python] ボタン python_buttonをクリックして [Python] ウィンドウを開きます。
  2. 以下のいずれかの Python スクリプトをコピーして [Python] ウィンドウに貼り付けます。

    スクリプト 1 を使用して割合に基づいてランダム ポイント フィーチャを選択するか、スクリプト 2 を使用してカウントに基づいてランダム ポイント フィーチャを選択します。

    スクリプト 1
    import arcpy
    def SelectRandomByPercent (layer, percent):
        #layer 変数は TOC のレイヤー名
        #percent は 0 ~ 100 の整数
        if percent > 100:
            print "percent is greater than 100"
     return
        if percent < 0:="" print="" "percent="" is="" less="" than="" zero"="" return="" import="" random="" fc="arcpy.Describe" (layer).catalogpath="" featurecount="float" (arcpy.getcount_management="" (fc).getoutput="" (0))="" count="int" (featurecount="" *="" float="" (percent)="" float="" (100))="" if="" not="" count:="" arcpy.selectlayerbyattribute_management="" (layer,="" "clear_selection")="" return="" oids="[oid" for="" oid,="" in="" arcpy.da.searchcursor="" (fc,="" "oid@")]="" oidfldname="arcpy.Describe" (layer).oidfieldname="" delimoidfld="arcpy.AddFieldDelimiters" (layer,="" oidfldname)="" randoids="random.sample" (oids,="" count)="" oidsstr=", " .join="" (map="" (str,="" randoids))="" sql="{0} IN ({1})" .format="" (delimoidfld,="" oidsstr)="" arcpy.selectlayerbyattribute_management="" (layer,="" "",="">

    スクリプト 2
    import arcpy
    def SelectRandomByCount (layer, count):
        import random
        layerCount = int (arcpy.GetCount_management (layer).getOutput (0))
        if layerCount < count:="" print="" "input="" count="" is="" greater="" than="" layer="" count"="" return="" oids="[oid" for="" oid,="" in="" arcpy.da.searchcursor="" (layer,="" "oid@")]="" oidfldname="arcpy.Describe" (layer).oidfieldname="" delimoidfld="arcpy.AddFieldDelimiters" (layer,="" oidfldname)="" randoids="random.sample" (oids,="" count)="" oidsstr=", " .join="" (map="" (str,="" randoids))="" sql="{0} IN ({1})" .format="" (delimoidfld,="" oidsstr)="" arcpy.selectlayerbyattribute_management="" (layer,="" "",="">
  3. [Python] ウィンドウで、Enter キーを押してスクリプトを実行します。
  4. 以下のコードを入力します。ここで、パラメーター layer はレイヤーの名前、num は割合またはカウントの数です。
    SelectRandomByPercent ("layer", num)
  5. Enter キーを押して、スクリプトを実行します。
[属性検索] の使用
  1. 新しいフィールドでランダム値を生成します。
    1. 新しい [Float] フィールドを作成します。
    2. 新しいフィールド ヘッダーを右クリックして、[フィールド演算] をクリックします。
    3. パーサーを [Python] に変更します。
    4. [コードブロックを表示] チェックボックスをオンにします。
    5. 以下のコードをコピーして、[Pre-Logic Script Code] テキスト ボックスに貼り付けます。
import random
def rand():
   return random.random()
  1. [ランダム] テキスト ボックスに「rand()」と入力します。
  2. [OK] をクリックします。 新しいフィールドに乱数が生成されます。
  3. [テーブル オプション] ボタンをクリックし、[属性検索] をクリックします。
  4. テキスト ボックスに以下の条件式を入力します。ここで、layer はレイヤーの名前、num は割合の数です。 ユーザーがフィーチャの 50% を維持すると仮定すると、num 値は「0.5」です。
"layer"<>
  1. [適用] をクリックします。

関連情報