Metode apa yang tersedia di ArcGIS 10.2 untuk secara acak mengelompokkan pilihan poin. Misalnya, dalam tangkapan layar terlampir saya tertarik untuk menyimpan 20% dari poin yang dipilih dan menghapus sisanya.
Metode apa yang tersedia di ArcGIS 10.2 untuk secara acak mengelompokkan pilihan poin. Misalnya, dalam tangkapan layar terlampir saya tertarik untuk menyimpan 20% dari poin yang dipilih dan menghapus sisanya.
Jawaban:
Berikut adalah fungsi python yang akan memilih fitur acak dalam sebuah layer berdasarkan pada persen, mengabaikan pilihan saat ini:
def SelectRandomByPercent (layer, percent):
#layer variable is the layer name in TOC
#percent is percent as whole number (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
path = arcpy.Describe (layer).path
delimOidFld = arcpy.AddFieldDelimiters (path, oidFldName)
randOids = random.sample (oids, count)
oidsStr = ", ".join (map (str, randOids))
sql = "{0} IN ({1})".format (delimOidFld, oidsStr)
arcpy.SelectLayerByAttribute_management (layer, "", sql)
Salin / tempel ini ke kulit python di ArcMap.
Kemudian dalam jenis shell SelectRandomByPercent ("layer", num)
, di mana layer
nama layer Anda, dan num
merupakan jumlah seluruh persen Anda.
Variasi untuk menemukan pilihan subset seperti yang diminta:
def SelectRandomByPercent (layer, percent):
#layer variable is the layer name in TOC
#percent is percent as whole number (0-100)
if percent > 100:
print "percent is greater than 100"
return
if percent < 0:
print "percent is less than zero"
return
import random
featureCount = float (arcpy.GetCount_management (layer).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 (layer, "OID@")]
oidFldName = arcpy.Describe (layer).OIDFieldName
path = arcpy.Describe (layer).path
delimOidFld = arcpy.AddFieldDelimiters (path, oidFldName)
randOids = random.sample (oids, count)
oidsStr = ", ".join (map (str, randOids))
sql = "{0} IN ({1})".format (delimOidFld, oidsStr)
arcpy.SelectLayerByAttribute_management (layer, "", sql)
Akhirnya, satu variasi lagi untuk memilih layer berdasarkan hitungan, bukan persen:
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
path = arcpy.Describe (layer).path
delimOidFld = arcpy.AddFieldDelimiters (path, oidFldName)
randOids = random.sample (oids, count)
oidsStr = ", ".join (map (str, randOids))
sql = "{0} IN ({1})".format (delimOidFld, oidsStr)
arcpy.SelectLayerByAttribute_management (layer, "", sql)
random.sample()
.
sql
parameter yang diketahui ?
Secara umum, saya juga merekomendasikan menggunakan alat ekologi spasial seperti yang dibahas oleh blah238.
Namun, metode lain yang bisa Anda coba adalah menambahkan atribut yang disebut Acak untuk menyimpan nomor acak:
Kemudian, menggunakan kalkulator bidang pada atribut itu, dengan Python Parser, gunakan kunci kode berikut:
import random
def rand():
return random.random()
Lihat gambar di bawah ini:
Ini akan membuat nilai acak antara 0 dan 1. Kemudian, jika Anda ingin memilih 20% dari fitur, Anda bisa memilih fitur di mana nilai acak kurang dari 0,2. Tentu saja, ini akan bekerja lebih baik dengan banyak fitur. Saya membuat kelas fitur dengan hanya 7 fitur sebagai tes dan tidak ada nilai kurang dari 0,2. Namun, sepertinya Anda memiliki banyak fitur, jadi itu tidak masalah.
Ada juga fitur Pilih sebelumnya pada skrip acak dari @StephenLead tersedia untuk ArcGIS Desktop. Meskipun ditulis, saya pikir, untuk ArcGIS 9.x, dan terakhir dimodifikasi pada 2008, saya menggunakannya sekitar 2010 pada 10.0, dan masih berfungsi dengan baik.
Anda dapat mencoba Hawth's Tools: http://www.spatialecology.com/htools/rndsel.php
Perhatikan bahwa pilihan yang ada tidak dihormati sehingga Anda harus membuat lapisan fitur dari pilihan yang ada terlebih dahulu.
Berikut ini tambahan tambahan acak untuk ArcGIS 10, Alat Desain Pengambilan Sampel . Ini akan memungkinkan Anda memilih 20% dari fitur dalam dataset Anda. Namun, ini tidak menggunakan set yang dipilih untuk membuat pilihan acak, mirip dengan pembatasan Hawth's Tools yang disebutkan oleh blah238.
Anda juga bisa menggunakan alat Fitur Subset . Menurut dokumentasi:
Membagi dataset asli menjadi dua bagian: satu bagian yang akan digunakan untuk memodelkan struktur spasial dan menghasilkan permukaan, yang lain untuk digunakan untuk membandingkan dan memvalidasi permukaan output.
Salah satu kelemahannya adalah Anda memerlukan ekstensi Analis Geostatistic.