ArcGIS 10.2'de bir dizi noktayı rastgele alt kümeye koymak için hangi yöntemler mevcuttur. Örneğin, ekli ekran görüntüsünde seçilen noktaların% 20'sini tutmak ve geri kalanını silmekle ilgileniyorum.
ArcGIS 10.2'de bir dizi noktayı rastgele alt kümeye koymak için hangi yöntemler mevcuttur. Örneğin, ekli ekran görüntüsünde seçilen noktaların% 20'sini tutmak ve geri kalanını silmekle ilgileniyorum.
Yanıtlar:
Geçerli seçimi yok sayarak, yüzde cinsinden bir katmandaki rastgele özellikleri seçecek bir python işlevi şunlardır:
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)
Bunu kopyalayın / ArcMap'teki python kabuğuna yapıştırın.
Daha sonra kabuk türünde SelectRandomByPercent ("layer", num)
, layer
katmanınızın adı ve num
yüzde değerinizin bir sayısıdır.
Sorulduğu gibi bir alt küme seçimi bulmak için bir varyasyon:
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)
Son olarak, bir katmanı yüzde yerine sayıyla seçmek için bir varyasyon daha var:
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
Parametre için dize uzunluğu konusunda bilinen herhangi bir sınırlama var mı?
Genel olarak, blah238 tarafından tartışıldığı gibi mekansal ekoloji araçlarını da kullanmanızı öneririm.
Bununla birlikte, deneyebileceğiniz başka bir yöntem, rastgele bir sayı depolamak için Rastgele adlı bir özellik eklemek olacaktır:
Ardından, bu öznitelikteki alan hesaplayıcısını Python Parser ile kullanarak aşağıdaki kod bloğunu kullanın:
import random
def rand():
return random.random()
Aşağıdaki resme bakın:
Bu, 0 ile 1 arasında rastgele değerler oluşturur. Ardından, özelliklerin% 20'sini seçmek istiyorsanız, Rastgele değerinin 0,2'den düşük olduğu özellikleri seçebilirsiniz. Tabii ki, bu birçok özellik ile daha iyi çalışacaktır. Test olarak yalnızca 7 özelliğe sahip bir özellik sınıfı oluşturdum ve 0.2'den daha az değer yoktu. Ancak, birçok özelliğiniz var gibi görünüyor, bu yüzden önemli değil.
ArcGIS Desktop için @StephenLead'in rastgele komut dosyasında daha önceki bir Select özelliği de var . Her ne kadar yazılmış olsa da, ArcGIS 9.x için ve son olarak 2008'de değiştirildi, 2010'da 10.0'da kullandım ve hala iyi çalıştı.
Hawth'in Araçlarını deneyebilirsiniz: http://www.spatialecology.com/htools/rndsel.php
Mevcut seçimin onurlandırılmadığından, önce mevcut seçimden bir özellik katmanı yapmanız gerekeceğini unutmayın.
Örnekleme Tasarım Aracı ArcGIS 10 için başka bir rastgele seçim eklentisi . Veri kümenizdeki özelliklerin% 20'sini seçmenizi sağlar. Bununla birlikte, bu, blah238 tarafından belirtilen Hawth's Tools kısıtlamalarına benzer şekilde rastgele bir seçim yapmak için seçilen bir seti kullanmaz.
Altküme Özellikleri aracını da kullanabilirsiniz . Belgelere göre:
Orijinal veri kümesini iki parçaya ayırır: bir kısmı uzamsal yapıyı modellemek ve bir yüzey üretmek için kullanılır, diğeri çıktı yüzeyini karşılaştırmak ve doğrulamak için kullanılır.
Bir dezavantaj Geostatistic Analyst uzantısına ihtiyacınız olmasıdır.