কিভাবে এলোমেলোভাবে নির্বাচিত পয়েন্টগুলির X% সাবসেট করবেন?


16

আর্কজিআইএস 10.2 এ কোন পয়েন্টের নির্বাচন এলোমেলোভাবে সাবসেট করতে কোন পদ্ধতিগুলি পাওয়া যায়। উদাহরণস্বরূপ, সংযুক্ত স্ক্রিনশটে আমি নির্বাচিত পয়েন্টগুলির 20% রাখার এবং বাকিগুলি মুছতে আগ্রহী।

এখানে চিত্র বর্ণনা লিখুন


ওয়েল আমি স্তর থেকে র্যান্ডম পয়েন্ট নির্বাচন করার জন্য একটি ডিফল্ট পদ্ধতি আছে বলে মনে করি না। আপনি অজগর স্ক্রিপ্ট দিয়ে চেষ্টা করেছেন? নাকি অ্যাড-ইন?
মার্সিন ডি

উত্তর:


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)

এটি আর্কম্যাপে অজগর শেলের মধ্যে অনুলিপি করুন / আটকান।

তারপরে শেল প্রকারে 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()
হারুন

ধন্যবাদ @ অ্যারন আমি প্রথমে রফতানি না করে সাবসেট নির্বাচনের জন্য উত্তর আপডেট করেছি।
এমিল ব্রুঞ্জেজ 21

+1 টি। sqlপরামিতিটির জন্য স্ট্রিং দৈর্ঘ্যের কোনও সীমাবদ্ধতা রয়েছে ?
পল 19

@ পল আমি প্রায় 4 মিলিয়ন বৈশিষ্ট্যযুক্ত এমন একটি স্তর সহ 100% বৈশিষ্ট্য নির্বাচন করতে এই কোডটি পরীক্ষা করেছিলাম, যার ফলে মেমোরি ত্রুটি হয়। সুতরাং যখন শক্ত স্ট্রিং সীমা হিসাবে উপস্থিত না হয় তবে মেমরির উপর নির্ভরতা রয়েছে। ওরাকল এসডিই ডাটাবেসগুলির জন্য একটি এসকিউএল আইটেমের সীমাও রয়েছে, যা আমি এখানে ব্লগ করেছি: emilsarcpython.blogspot.com/2015/10/…
এমিল


13

সাধারণত, আমি ব্লাহ 238 দ্বারা আলোচিত হিসাবে স্থানিক বাস্তুবিদ্যা সরঞ্জামগুলি ব্যবহার করার পরামর্শ দিই।

তবে, আপনি যে অন্য পদ্ধতিটি চেষ্টা করতে পারেন তা হ'ল র্যান্ডম নামক একটি বৈশিষ্ট্য যুক্ত করে একটি এলোমেলো নম্বর সঞ্চয় করতে: এখানে চিত্র বর্ণনা লিখুন

তারপরে পাইথন পার্সার সহ সেই বৈশিষ্ট্যটিতে ফিল্ড ক্যালকুলেটর ব্যবহার করে নিম্নলিখিত কোডব্লকটি ব্যবহার করুন:

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

নীচে চিত্র দেখুন:

এটি 0 এবং 1 এর মধ্যে এলোমেলো মান তৈরি করবে Then অবশ্যই, এটি অনেকগুলি বৈশিষ্ট্য সহ আরও ভাল কাজ করবে। আমি পরীক্ষা হিসাবে মাত্র 7 টি বৈশিষ্ট্যযুক্ত একটি বৈশিষ্ট্য শ্রেণি তৈরি করেছি এবং 0.2 এর চেয়ে কম মান নেই। যাইহোক, দেখে মনে হচ্ছে আপনার কাছে প্রচুর বৈশিষ্ট্য রয়েছে, তাই এটি কোনও বিষয় নয়।

এখানে চিত্র বর্ণনা লিখুন


7
এই পদ্ধতিতে ফিচারের গড় 20% ফিরে আসবে , যা কিছু ক্ষেত্রে পছন্দসই হবে। তবে আপনি যদি প্রতিবার 20% চান, তবে আপনি পরামর্শ মতো করতে পারেন, তারপরে এলোমেলো মান অনুসারে বৈশিষ্ট্যগুলি সাজান এবং প্রথম 20% নির্বাচন করুন select
Llaves

এসরি এই ব্লগটিতে এই প্রক্রিয়াটি ব্যবহার করেছেন: সমর্থন.esri.com/en/technical-article/000013141
এমিল ব্রুন্ডেজ

6

আরকিজিআইএস ডেস্কটপের জন্য @ স্টেফেললিড থেকে র্যান্ডম স্ক্রিপ্টে পূর্বের সিলেক্ট বৈশিষ্ট্যগুলিও রয়েছে । যদিও লেখা আছে, আমি মনে করি, আর্কজিআইএস 9.x এর জন্য এবং সর্বশেষে ২০০৮ সালে পরিবর্তিত হয়েছিল, আমি এটি প্রায় 2010 সালে 10.0 এ ব্যবহার করেছি এবং এটি এখনও ভালভাবে কাজ করেছে।


5

আপনি হাথের সরঞ্জামগুলি চেষ্টা করতে পারেন: http://www.spatialecology.com/htools/rndsel.php

নোট করুন যে বিদ্যমান নির্বাচনটি সম্মানিত নয় তাই আপনাকে প্রথমে বিদ্যমান নির্বাচন থেকে একটি বৈশিষ্ট্য স্তর তৈরি করতে হবে।


দুর্ভাগ্যক্রমে, সেই সংস্করণটি আর্কজিআইএস 9.3 এবং তারপরের সাথে সামঞ্জস্যপূর্ণ নয়। এখন এটা বলা হচ্ছে ভৌগলিক অবস্থান বিষয়ক প্রযুক্তিবিদ্যা মডেলিং পরিবেশ: spatialecology.com/gme
kenbuja

গুড পয়েন্ট, এখানে GME মধ্যে সমতুল্য কমান্ড: spatialecology.com/gme/rsample.htm
blah238

জিএমই সরঞ্জামসেটটি আর্কজিআইএস-এর "ভিতরে" কাজ করে না, বরং এটি একা একা স্ট্যান্ড সরঞ্জাম
রায়ান গারনেট

3

স্যাম্পলিং ডিজাইনের সরঞ্জাম , আরকজিআইএস 10 এর জন্য এখানে আরও একটি এলোমেলো নির্বাচন অ্যাড-ইন রয়েছে । এটি আপনাকে আপনার ডেটাসেটের 20% বৈশিষ্ট্য নির্বাচন করতে দেবে। যাইহোক, এটি blah238 দ্বারা উল্লিখিত হাথের সরঞ্জামগুলির সীমাবদ্ধতার অনুরূপ, এলোমেলো নির্বাচন করতে কোনও নির্বাচিত সেট ব্যবহার করে না।


0

আপনি সাবসেট বৈশিষ্ট্যগুলি সরঞ্জামও ব্যবহার করতে পারেন । ডকুমেন্টেশন অনুযায়ী:

মূল ডেটাसेटকে দুটি ভাগে বিভক্ত করে: এক অংশ স্থানিক কাঠামোকে মডেল করার জন্য এবং একটি পৃষ্ঠ উত্পাদন করতে ব্যবহৃত হয়, অন্যটি আউটপুট পৃষ্ঠকে তুলনা করতে ও বৈধ করতে ব্যবহৃত হয়।

একটি অসুবিধা হ'ল আপনার জিওস্ট্যাটিস্টিকাল অ্যানালিস্ট এক্সটেনশন প্রয়োজন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.