चयनित बिंदुओं का X% बेतरतीब ढंग से कैसे घटाया जाए?


16

आर्कजीआईएस 10.2 में कौन से तरीके उपलब्ध हैं, अंकों के चयन को बेतरतीब ढंग से कम करने के लिए। उदाहरण के लिए, संलग्न स्क्रीनशॉट में मुझे चयनित बिंदुओं का 20% रखने और बाकी को हटाने में दिलचस्पी है।

यहाँ छवि विवरण दर्ज करें


मुझे नहीं लगता कि परत से यादृच्छिक बिंदुओं के चयन के लिए एक डिफ़ॉल्ट तरीका है। क्या आपने अजगर स्क्रिप्ट के साथ प्रयास किया? या ऐड-इन
Marcin D

जवाबों:


27

यहां एक अजगर फ़ंक्शन है जो वर्तमान चयन की अनदेखी करते हुए प्रतिशत के आधार पर एक परत में यादृच्छिक सुविधाओं का चयन करेगा:

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)

इसे ArcMap में अजगर के खोल में कॉपी / पेस्ट करें।

फिर शेल प्रकार में SelectRandomByPercent ("layer", num), जहां layerआपकी परत का नाम है, और numआपके प्रतिशत की पूरी संख्या है।

यादृच्छिक चयन

एक उप-चयन खोजने के लिए एक बदलाव के रूप में पूछा:

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)

अंत में, एक प्रतिशत के बजाय एक गिनती द्वारा एक परत का चयन करने के लिए एक और भिन्नता:

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()
हारून

धन्यवाद @ अरोन। मैंने पहले निर्यात किए बिना एक सबसेट चयन के लिए उत्तर अपडेट किया।
एमिल ब्रुंडेज

+1। क्या sqlपैरामीटर के लिए स्ट्रिंग की लंबाई पर कोई ज्ञात सीमाएं हैं ?
पॉल

@ पाओल I ने इस कोड का परीक्षण केवल एक परत के साथ 100% सुविधाओं का चयन करने के लिए किया है जिसमें लगभग 4 मिलियन विशेषताएं हैं, जिसके परिणामस्वरूप मेमोरी त्रुटि हुई। तो जबकि वहाँ एक कठोर स्ट्रिंग सीमा प्रतीत नहीं होती है, स्मृति पर निर्भरता है। ओरेकल एसडीई
Emil

1
Esri ने एक ब्लॉग support.esri.com/en/technical-article/000013141
Emil Brundage

13

आम तौर पर, मैं भी स्थानिक पारिस्थितिकी उपकरणों का उपयोग करने की सलाह देता हूं जैसा कि blah238 द्वारा चर्चा की गई है।

हालाँकि, एक और तरीका जिसे आप आज़मा सकते हैं, वह है रैंडम नंबर स्टोर करने के लिए रैंडम नामक एक विशेषता जोड़ना। यहाँ छवि विवरण दर्ज करें

फिर, पायथन पार्सर के साथ उस विशेषता पर फ़ील्ड कैलकुलेटर का उपयोग करते हुए, निम्नलिखित कोडब्लॉक का उपयोग करें:

import random
def rand():
  return random.random()

नीचे चित्र देखें:

यह 0 और 1. के बीच यादृच्छिक मान पैदा करेगा। यदि आप 20% सुविधाओं का चयन करना चाहते हैं, तो आप उन विशेषताओं का चयन कर सकते हैं जहाँ यादृच्छिक मान 0.2 से कम है। बेशक, यह कई विशेषताओं के साथ बेहतर काम करेगा। मैंने परीक्षण के रूप में केवल 7 सुविधाओं के साथ एक फीचर वर्ग बनाया और 0.2 से कम कोई मान नहीं था। हालाँकि, ऐसा लगता है कि आपके पास बहुत सारी सुविधाएँ हैं, ताकि कोई फर्क न पड़े।

यहाँ छवि विवरण दर्ज करें


7
यह विधि औसत 20% सुविधाओं पर वापस आ जाएगी , जो कुछ मामलों में पसंद की जाएगी। लेकिन अगर आप हर बार 20% चाहते हैं, तो आप सुझाए अनुसार कर सकते हैं, फिर यादृच्छिक मूल्य के आधार पर सुविधाओं को क्रमबद्ध करें और पहले 20% का चयन करें।
लवलेव्स

एस्री ने इस प्रक्रिया का उपयोग एक ब्लॉग में किया: support.esri.com/en/technical-article/000013141
एमिल ब्रूंडेज

6

ArcGIS डेस्कटॉप के लिए उपलब्ध @StephenLead से यादृच्छिक स्क्रिप्ट में पहले से चुनिंदा विशेषताएं भी हैं । हालाँकि, मैंने लिखा है, मुझे लगता है कि ArcGIS 9.x के लिए, और आखिरी बार 2008 में, मैंने इसे 2010 में 10.0 के आसपास इस्तेमाल किया, और इसने अच्छा काम किया।


5

आप Hawth's टूल्स को आज़मा सकते हैं: http://www.spatialecology.com/htools/rndsel.php

ध्यान दें कि मौजूदा चयन सम्मानित नहीं है, इसलिए आपको पहले मौजूदा चयन से एक फीचर लेयर बनाना होगा।


दुर्भाग्य से, यह संस्करण आर्कगिस 9.3 और इसके बाद के संस्करण के साथ संगत नहीं है। अब इसे भू-स्थानिक मॉडलिंग पर्यावरण कहा जाता है: spatialecology.com/gme
kenbuja

अच्छी बात है, यहाँ GME में बराबर कमांड है: spatialecology.com/gme/rsample.htm
blah238

GME टूलसेट "ArcGIS" के भीतर काम नहीं करता है, बल्कि यह एक स्टैंड अलोन टूल है
Ryan Garnett

3

यहाँ एक और रैंडम सेलेक्शन ऐड-इन आर्कगिस 10, सैम्पलिंग डिज़ाइन टूल है । यह आपको अपने डेटासेट में 20% सुविधाओं का चयन करने देगा। हालाँकि, यह यादृच्छिक चयन करने के लिए एक चयनित सेट का उपयोग नहीं करता है, यह ब्लाह 238 द्वारा उल्लिखित हॉथ्स टूल्स के प्रतिबंधों के समान है।


0

आप सबसेट फीचर्स टूल का भी उपयोग कर सकते हैं । प्रलेखन के अनुसार:

मूल डेटासेट को दो भागों में विभाजित करता है: एक भाग का उपयोग स्थानिक संरचना को मॉडल करने के लिए और एक सतह का उत्पादन करने के लिए किया जाता है, दूसरे का उपयोग आउटपुट सतह की तुलना और मान्य करने के लिए किया जाता है।

एक नुकसान यह है कि आपको भूस्थैतिक विश्लेषक विस्तार की आवश्यकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.