আর্কজিআইএস 10.2 এ কোন পয়েন্টের নির্বাচন এলোমেলোভাবে সাবসেট করতে কোন পদ্ধতিগুলি পাওয়া যায়। উদাহরণস্বরূপ, সংযুক্ত স্ক্রিনশটে আমি নির্বাচিত পয়েন্টগুলির 20% রাখার এবং বাকিগুলি মুছতে আগ্রহী।
আর্কজিআইএস 10.2 এ কোন পয়েন্টের নির্বাচন এলোমেলোভাবে সাবসেট করতে কোন পদ্ধতিগুলি পাওয়া যায়। উদাহরণস্বরূপ, সংযুক্ত স্ক্রিনশটে আমি নির্বাচিত পয়েন্টগুলির 20% রাখার এবং বাকিগুলি মুছতে আগ্রহী।
উত্তর:
এখানে একটি অজগর ফাংশন যা শতাংশের ভিত্তিতে একটি স্তরে এলোমেলো বৈশিষ্ট্যগুলি নির্বাচন করবে, বর্তমান নির্বাচনকে উপেক্ষা করে:
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()
।
sql
পরামিতিটির জন্য স্ট্রিং দৈর্ঘ্যের কোনও সীমাবদ্ধতা রয়েছে ?
সাধারণত, আমি ব্লাহ 238 দ্বারা আলোচিত হিসাবে স্থানিক বাস্তুবিদ্যা সরঞ্জামগুলি ব্যবহার করার পরামর্শ দিই।
তবে, আপনি যে অন্য পদ্ধতিটি চেষ্টা করতে পারেন তা হ'ল র্যান্ডম নামক একটি বৈশিষ্ট্য যুক্ত করে একটি এলোমেলো নম্বর সঞ্চয় করতে:
তারপরে পাইথন পার্সার সহ সেই বৈশিষ্ট্যটিতে ফিল্ড ক্যালকুলেটর ব্যবহার করে নিম্নলিখিত কোডব্লকটি ব্যবহার করুন:
import random
def rand():
return random.random()
নীচে চিত্র দেখুন:
এটি 0 এবং 1 এর মধ্যে এলোমেলো মান তৈরি করবে Then অবশ্যই, এটি অনেকগুলি বৈশিষ্ট্য সহ আরও ভাল কাজ করবে। আমি পরীক্ষা হিসাবে মাত্র 7 টি বৈশিষ্ট্যযুক্ত একটি বৈশিষ্ট্য শ্রেণি তৈরি করেছি এবং 0.2 এর চেয়ে কম মান নেই। যাইহোক, দেখে মনে হচ্ছে আপনার কাছে প্রচুর বৈশিষ্ট্য রয়েছে, তাই এটি কোনও বিষয় নয়।
আরকিজিআইএস ডেস্কটপের জন্য @ স্টেফেললিড থেকে র্যান্ডম স্ক্রিপ্টে পূর্বের সিলেক্ট বৈশিষ্ট্যগুলিও রয়েছে । যদিও লেখা আছে, আমি মনে করি, আর্কজিআইএস 9.x এর জন্য এবং সর্বশেষে ২০০৮ সালে পরিবর্তিত হয়েছিল, আমি এটি প্রায় 2010 সালে 10.0 এ ব্যবহার করেছি এবং এটি এখনও ভালভাবে কাজ করেছে।
আপনি হাথের সরঞ্জামগুলি চেষ্টা করতে পারেন: http://www.spatialecology.com/htools/rndsel.php
নোট করুন যে বিদ্যমান নির্বাচনটি সম্মানিত নয় তাই আপনাকে প্রথমে বিদ্যমান নির্বাচন থেকে একটি বৈশিষ্ট্য স্তর তৈরি করতে হবে।
স্যাম্পলিং ডিজাইনের সরঞ্জাম , আরকজিআইএস 10 এর জন্য এখানে আরও একটি এলোমেলো নির্বাচন অ্যাড-ইন রয়েছে । এটি আপনাকে আপনার ডেটাসেটের 20% বৈশিষ্ট্য নির্বাচন করতে দেবে। যাইহোক, এটি blah238 দ্বারা উল্লিখিত হাথের সরঞ্জামগুলির সীমাবদ্ধতার অনুরূপ, এলোমেলো নির্বাচন করতে কোনও নির্বাচিত সেট ব্যবহার করে না।
আপনি সাবসেট বৈশিষ্ট্যগুলি সরঞ্জামও ব্যবহার করতে পারেন । ডকুমেন্টেশন অনুযায়ী:
মূল ডেটাसेटকে দুটি ভাগে বিভক্ত করে: এক অংশ স্থানিক কাঠামোকে মডেল করার জন্য এবং একটি পৃষ্ঠ উত্পাদন করতে ব্যবহৃত হয়, অন্যটি আউটপুট পৃষ্ঠকে তুলনা করতে ও বৈধ করতে ব্যবহৃত হয়।
একটি অসুবিধা হ'ল আপনার জিওস্ট্যাটিস্টিকাল অ্যানালিস্ট এক্সটেনশন প্রয়োজন।