<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Random sample/select polygons by attributes iteratively python advice in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494229#M38782</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Ok, I didn't think I would get away with that brief specification. A sample script takes 3 seconds to iterate 100 times. I have shown one case creating a layer of the random selection. You could put this back into a table of contents.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;# randomselection.py
# 19 May 2011
# kimo@ollivier.co.nz
#
# Input: parcel polygon featureclass
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item to sum (area)
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; threshold (check min, mean, max values for reasonable figure)
# Assumes values always less than threshold or you get a null list

# Output: Total sum and layer with selected parcels
# set up to allow iteration
# uses ArcGIS 10 but could use 9.3

import arcpy
import sys
import os
import random
import datetime

try:
&amp;nbsp;&amp;nbsp;&amp;nbsp; fc = sys.argv[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp; item = sys.argv[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp; threshold = sys.argv[3]
except:
&amp;nbsp;&amp;nbsp;&amp;nbsp; # debugging and standalone operation
&amp;nbsp;&amp;nbsp;&amp;nbsp; fc = "c:/project/forum/mobile.gdb/parcel"
&amp;nbsp;&amp;nbsp;&amp;nbsp; item = "area"
&amp;nbsp;&amp;nbsp;&amp;nbsp; threshold = 100000.0 # square metres

def getdict(fc,item):
&amp;nbsp;&amp;nbsp;&amp;nbsp; ''' Make a dictionary
&amp;nbsp;&amp;nbsp;&amp;nbsp; once for the sampler
&amp;nbsp;&amp;nbsp;&amp;nbsp; '''
&amp;nbsp;&amp;nbsp;&amp;nbsp; dParcel = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in arcpy.SearchCursor(fc,"featcode = 'parcel'"):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if item.lower() == 'area':
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dParcel[row.objectid] = row.shape.area
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else :
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dParcel[row.objectid] = row.GetValue(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return dParcel

def getsample(dParcel,threshold):
&amp;nbsp;&amp;nbsp;&amp;nbsp; '''Given a dict of values
&amp;nbsp;&amp;nbsp;&amp;nbsp; return a random selection
&amp;nbsp;&amp;nbsp;&amp;nbsp; less than the threshold.
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; Shuffles the list and pops off
&amp;nbsp;&amp;nbsp;&amp;nbsp; the ids until threshold reached
&amp;nbsp;&amp;nbsp;&amp;nbsp; ie sampling without replacement
&amp;nbsp;&amp;nbsp;&amp;nbsp; '''
&amp;nbsp;&amp;nbsp;&amp;nbsp; total = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; lstObj = []
&amp;nbsp;&amp;nbsp;&amp;nbsp; lstKey = dParcel.keys()
&amp;nbsp;&amp;nbsp;&amp;nbsp; random.shuffle(lstKey)
&amp;nbsp;&amp;nbsp;&amp;nbsp; while total &amp;lt; threshold:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nObj = lstKey.pop()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nVal = dParcel[nObj]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; total = nVal
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if total &amp;gt; threshold:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break # do not exceed threshold
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else :
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lstObj.append(nObj)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; total += nVal
&amp;nbsp;&amp;nbsp;&amp;nbsp; return (total,lstObj)

# --------------- main ---------------
print
start = datetime.datetime.now()
print start
#
# make a dictionary
dParcel = getdict(fc,item)
print "records",len(dParcel)

# sample the dictionary
total,lstObj = getsample(dParcel,threshold)

print "Total: ",total
print "No of parcels: ",len(lstObj)
print "objectid: value"
for ob in lstObj:
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ob,":",dParcel[ob],",&amp;nbsp; ",
print
# make up an sql query to select the features
sqlQuery = "OBJECTID in (" + ",".join([str(id) for id in lstObj]) + ")"
print sqlQuery
arcpy.env.overwriteOutput = True
arcpy.MakeFeatureLayer_management(fc,"fc_lay",sqlQuery)
lyrName = arcpy.CreateUniqueName("xx.lyr",os.path.dirname(os.path.dirname(fc)))
print lyrName
arcpy.SaveToLayerFile_management("fc_lay",lyrName)

# Or sample the dictionary 100 times
for it in range(100):
&amp;nbsp;&amp;nbsp;&amp;nbsp; total,lstObj = getsample(dParcel,threshold)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print total,len(lstObj)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
# finished
elapsed = datetime.datetime.now() - start
print "\n\nElapsed",elapsed, "Well done!" # positive feedback
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;2011-05-19 20:40:43.640000
records 7170
Total:&amp;nbsp; 145316.242757
No of parcels:&amp;nbsp; 21
objectid: value
726 : 809.726863177 ,&amp;nbsp;&amp;nbsp; 4530 : 809.419546424 ,&amp;nbsp;&amp;nbsp; 4752 : 1012.70775115 ,&amp;nbsp;&amp;nbsp; 6120 : 809.397052955 ,&amp;nbsp;&amp;nbsp; 3022 : 809.418725814 ,&amp;nbsp;&amp;nbsp; 253 : 986.240771943 ,&amp;nbsp;&amp;nbsp; 4445 : 1132.16238039 ,&amp;nbsp;&amp;nbsp; 7161 : 928.75695316 ,&amp;nbsp;&amp;nbsp; 5747 : 964.13873029 ,&amp;nbsp;&amp;nbsp; 2188 : 864.834770195 ,&amp;nbsp;&amp;nbsp; 4164 : 20.9192428737 ,&amp;nbsp;&amp;nbsp; 187 : 839.573627519 ,&amp;nbsp;&amp;nbsp; 2745 : 811.268061104 ,&amp;nbsp;&amp;nbsp; 2572 : 1002.32513709 ,&amp;nbsp;&amp;nbsp; 1445 : 1381.14243957 ,&amp;nbsp;&amp;nbsp; 2674 : 812.661986759 ,&amp;nbsp;&amp;nbsp; 6925 : 25126.7099296 ,&amp;nbsp;&amp;nbsp; 5479 : 1395.56544711 ,&amp;nbsp;&amp;nbsp; 4791 : 810.812432473 ,&amp;nbsp;&amp;nbsp; 5406 : 848.317697436 ,&amp;nbsp;&amp;nbsp; 6543 : 72658.1213786 ,&amp;nbsp; 
OBJECTID in (726,4530,4752,6120,3022,253,4445,7161,5747,2188,4164,187,2745,2572,1445,2674,6925,5479,4791,5406,6543)
c:/project/forum\xx0.lyr
185921.392647 4
145871.629063 27
154201.63183 1
...
140524.256299 0
...
190822.946912 9
193668.483773 23
334292.358346 16
141967.626185 23
15109126.1898 56
...
413536.709991 2
157130.891363 6


Elapsed 0:00:02.917000 Well done!
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 21:45:12 GMT</pubDate>
    <dc:creator>KimOllivier</dc:creator>
    <dc:date>2021-12-11T21:45:12Z</dc:date>
    <item>
      <title>Random sample/select polygons by attributes iteratively python advice</title>
      <link>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494226#M38779</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi all,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I need to write a script to do the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Randomly select polygons (parcels in my case) in a feature class using an attibute with parcel value. It needs to keep selecting parcels randomly until it reaches a total max parcel value. So, if each parcel is valued between 1-100, and I have a max value of 500, it needs to select enough parcels to reach the target value of 500, then I'll do some operations/calculations on these selected parcels. Finally, I need to create a loop to do this 100 or so times. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is what I propose above doable and fairly straightforward. I'm relatively new at Python programming, so any tips about the logic in the code would be so helpful and appreciated.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Holly&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 13 May 2011 18:42:43 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494226#M38779</guid>
      <dc:creator>HollyCopeland</dc:creator>
      <dc:date>2011-05-13T18:42:43Z</dc:date>
    </item>
    <item>
      <title>Re: Random sample/select polygons by attributes iteratively python advice</title>
      <link>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494227#M38780</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Yes, Python has good standard modules for random selections, permutations and other sampling techniques.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You need to run a cursor first to get all the details of the parcels into a dictionary/list in memory so that you can accumulate random selections until you get to your target value. This will be very fast.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then create an SQL query with the selected parcel ids to process those parcels with a cursor.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If you don't want to actually update the featureclass, even this would be unnecessary.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The process to get the parcel details can run once outside your loop.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Then when you run the process 100 times, it will make a selection, run the SQL query to make a layer and then process the layer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The SQL query would be in the form "parcel_id in (23,43,65,876,...)"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Make sure that the parcel_id has an attribute index defined, it is not by default except for the objectid.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 May 2011 22:16:39 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494227#M38780</guid>
      <dc:creator>KimOllivier</dc:creator>
      <dc:date>2011-05-15T22:16:39Z</dc:date>
    </item>
    <item>
      <title>Re: Random sample/select polygons by attributes iteratively python advice</title>
      <link>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494228#M38781</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thank you Kim for your advice. I am thankful to hear that this seems doable to you and straightforward. Do you have any example code or quick specific code hints for using a cursor and accumulating random selections from the attribute until I get to the target value? Thank you -- Holly&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 18 May 2011 17:47:23 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494228#M38781</guid>
      <dc:creator>HollyCopeland</dc:creator>
      <dc:date>2011-05-18T17:47:23Z</dc:date>
    </item>
    <item>
      <title>Re: Random sample/select polygons by attributes iteratively python advice</title>
      <link>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494229#M38782</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Ok, I didn't think I would get away with that brief specification. A sample script takes 3 seconds to iterate 100 times. I have shown one case creating a layer of the random selection. You could put this back into a table of contents.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;# randomselection.py
# 19 May 2011
# kimo@ollivier.co.nz
#
# Input: parcel polygon featureclass
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item to sum (area)
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; threshold (check min, mean, max values for reasonable figure)
# Assumes values always less than threshold or you get a null list

# Output: Total sum and layer with selected parcels
# set up to allow iteration
# uses ArcGIS 10 but could use 9.3

import arcpy
import sys
import os
import random
import datetime

try:
&amp;nbsp;&amp;nbsp;&amp;nbsp; fc = sys.argv[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp; item = sys.argv[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp; threshold = sys.argv[3]
except:
&amp;nbsp;&amp;nbsp;&amp;nbsp; # debugging and standalone operation
&amp;nbsp;&amp;nbsp;&amp;nbsp; fc = "c:/project/forum/mobile.gdb/parcel"
&amp;nbsp;&amp;nbsp;&amp;nbsp; item = "area"
&amp;nbsp;&amp;nbsp;&amp;nbsp; threshold = 100000.0 # square metres

def getdict(fc,item):
&amp;nbsp;&amp;nbsp;&amp;nbsp; ''' Make a dictionary
&amp;nbsp;&amp;nbsp;&amp;nbsp; once for the sampler
&amp;nbsp;&amp;nbsp;&amp;nbsp; '''
&amp;nbsp;&amp;nbsp;&amp;nbsp; dParcel = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in arcpy.SearchCursor(fc,"featcode = 'parcel'"):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if item.lower() == 'area':
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dParcel[row.objectid] = row.shape.area
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else :
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dParcel[row.objectid] = row.GetValue(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return dParcel

def getsample(dParcel,threshold):
&amp;nbsp;&amp;nbsp;&amp;nbsp; '''Given a dict of values
&amp;nbsp;&amp;nbsp;&amp;nbsp; return a random selection
&amp;nbsp;&amp;nbsp;&amp;nbsp; less than the threshold.
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; Shuffles the list and pops off
&amp;nbsp;&amp;nbsp;&amp;nbsp; the ids until threshold reached
&amp;nbsp;&amp;nbsp;&amp;nbsp; ie sampling without replacement
&amp;nbsp;&amp;nbsp;&amp;nbsp; '''
&amp;nbsp;&amp;nbsp;&amp;nbsp; total = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; lstObj = []
&amp;nbsp;&amp;nbsp;&amp;nbsp; lstKey = dParcel.keys()
&amp;nbsp;&amp;nbsp;&amp;nbsp; random.shuffle(lstKey)
&amp;nbsp;&amp;nbsp;&amp;nbsp; while total &amp;lt; threshold:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nObj = lstKey.pop()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nVal = dParcel[nObj]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; total = nVal
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if total &amp;gt; threshold:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break # do not exceed threshold
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else :
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lstObj.append(nObj)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; total += nVal
&amp;nbsp;&amp;nbsp;&amp;nbsp; return (total,lstObj)

# --------------- main ---------------
print
start = datetime.datetime.now()
print start
#
# make a dictionary
dParcel = getdict(fc,item)
print "records",len(dParcel)

# sample the dictionary
total,lstObj = getsample(dParcel,threshold)

print "Total: ",total
print "No of parcels: ",len(lstObj)
print "objectid: value"
for ob in lstObj:
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ob,":",dParcel[ob],",&amp;nbsp; ",
print
# make up an sql query to select the features
sqlQuery = "OBJECTID in (" + ",".join([str(id) for id in lstObj]) + ")"
print sqlQuery
arcpy.env.overwriteOutput = True
arcpy.MakeFeatureLayer_management(fc,"fc_lay",sqlQuery)
lyrName = arcpy.CreateUniqueName("xx.lyr",os.path.dirname(os.path.dirname(fc)))
print lyrName
arcpy.SaveToLayerFile_management("fc_lay",lyrName)

# Or sample the dictionary 100 times
for it in range(100):
&amp;nbsp;&amp;nbsp;&amp;nbsp; total,lstObj = getsample(dParcel,threshold)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print total,len(lstObj)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
# finished
elapsed = datetime.datetime.now() - start
print "\n\nElapsed",elapsed, "Well done!" # positive feedback
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;2011-05-19 20:40:43.640000
records 7170
Total:&amp;nbsp; 145316.242757
No of parcels:&amp;nbsp; 21
objectid: value
726 : 809.726863177 ,&amp;nbsp;&amp;nbsp; 4530 : 809.419546424 ,&amp;nbsp;&amp;nbsp; 4752 : 1012.70775115 ,&amp;nbsp;&amp;nbsp; 6120 : 809.397052955 ,&amp;nbsp;&amp;nbsp; 3022 : 809.418725814 ,&amp;nbsp;&amp;nbsp; 253 : 986.240771943 ,&amp;nbsp;&amp;nbsp; 4445 : 1132.16238039 ,&amp;nbsp;&amp;nbsp; 7161 : 928.75695316 ,&amp;nbsp;&amp;nbsp; 5747 : 964.13873029 ,&amp;nbsp;&amp;nbsp; 2188 : 864.834770195 ,&amp;nbsp;&amp;nbsp; 4164 : 20.9192428737 ,&amp;nbsp;&amp;nbsp; 187 : 839.573627519 ,&amp;nbsp;&amp;nbsp; 2745 : 811.268061104 ,&amp;nbsp;&amp;nbsp; 2572 : 1002.32513709 ,&amp;nbsp;&amp;nbsp; 1445 : 1381.14243957 ,&amp;nbsp;&amp;nbsp; 2674 : 812.661986759 ,&amp;nbsp;&amp;nbsp; 6925 : 25126.7099296 ,&amp;nbsp;&amp;nbsp; 5479 : 1395.56544711 ,&amp;nbsp;&amp;nbsp; 4791 : 810.812432473 ,&amp;nbsp;&amp;nbsp; 5406 : 848.317697436 ,&amp;nbsp;&amp;nbsp; 6543 : 72658.1213786 ,&amp;nbsp; 
OBJECTID in (726,4530,4752,6120,3022,253,4445,7161,5747,2188,4164,187,2745,2572,1445,2674,6925,5479,4791,5406,6543)
c:/project/forum\xx0.lyr
185921.392647 4
145871.629063 27
154201.63183 1
...
140524.256299 0
...
190822.946912 9
193668.483773 23
334292.358346 16
141967.626185 23
15109126.1898 56
...
413536.709991 2
157130.891363 6


Elapsed 0:00:02.917000 Well done!
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 21:45:12 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494229#M38782</guid>
      <dc:creator>KimOllivier</dc:creator>
      <dc:date>2021-12-11T21:45:12Z</dc:date>
    </item>
    <item>
      <title>Re: Random sample/select polygons by attributes iteratively python advice</title>
      <link>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494230#M38783</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thank you, Kim. This is very helpful!!! I'll post my final code too when I get it finished. Cheers, Holly&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 20 May 2011 19:05:16 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494230#M38783</guid>
      <dc:creator>HollyCopeland</dc:creator>
      <dc:date>2011-05-20T19:05:16Z</dc:date>
    </item>
    <item>
      <title>Re: Random sample/select polygons by attributes iteratively python advice</title>
      <link>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494231#M38784</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;This code isn't nearly as elegant as yours, Kim, but perhaps it is useful to someone else, so I'm posting it. Holly&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;CODE:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# ---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# Select Random Parcels.py&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# Created on: 2011-5-18&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;# Creator: Holly Copeland (&lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:hcopeland@tnc.org"&gt;hcopeland@tnc.org&lt;/A&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# Requirements: Spatial Analyst Extension&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# Description: This script randomly selects data from a feature class and&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# stops selecting when it reaches a threshold value set by the user&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# It also iterates multiple times and generates summary statistics from a&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# separate field at the end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# ---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# Import arcpy module&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy, os, sys, random, array&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;from arcpy.sa import *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;from arcpy import env&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# Check out the ArcGIS Spatial Analyst extension license&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.CheckOutExtension("Spatial")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.env.workspace = "D:\\Work\\SageGrouseEaseStudyBackup\\Data\WYParcels_Merge.gdb"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#Specify Input Parameters&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;fc = "WYParcelsPrivate_AgValuesMay2011"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;scenarioValue = 5000000&amp;nbsp; #this is the THRESHOLD value&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;iterationCount = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;iterationNumber = 5 #number of iterations&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sgSumTotal = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sgMeanTotal = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;while iterationCount &amp;lt; iterationNumber:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Set parcel accumulation value to 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; accumulatorValue = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; objectIDList = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Set sage grouse accumulation value to 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sagegrouseValue = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sagegrouseList = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sagegrouseListSum = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create a search cursor&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # The variables row and rows are initially set to None, so that they&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&amp;nbsp; can be deleted in the finally block regardless of where (or if)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&amp;nbsp; script fails.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row, rows = None, None&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Start while statement to accumulate parcels&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Value in while statement should be the same as the scenario&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while accumulatorValue &amp;lt; scenarioValue:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objectID = random.randrange(1,27577) #generate random number to select parcel object id&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; expression = '"OBJECTID" = ' + str(objectID)&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows = arcpy.SearchCursor(fc, expression)&amp;nbsp; #select the objectid from above&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Iterate through the rows in the cursor of randomly selected parcels&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for row in rows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #assuming you are sampling without replacement&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if row.OBJECTID not in objectIDList:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; accumulatorValue += row.AdjustedParcelValue&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sagegrouseValue += row.SageGrouseTest&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objectIDList.append(row.OBJECTID)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sagegrouseList.append(row.SageGrouseTest)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddError("Script Bombed")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #calculate statistics for each iteration&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sgSum = sum(sagegrouseList)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sgMax = max(sagegrouseList)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sgMin = min(sagegrouseList)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sgMean = sum(sagegrouseList)/len(sagegrouseList)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sgSumTotal.append(sgSum)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sgMeanTotal.append(sgMean)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Sage Grouse Statistics for Run #" ,iterationCount&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "No of parcels:" ,len(objectIDList)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Max:" ,sgMax&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Min:" ,sgMin&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Sum:" ,sgSum&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Mean:" ,sgMean&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; iterationCount += 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;sgSumTotalFinal = sum(sgSumTotal)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sgMeanTotalFinal = sum(sgMeanTotal)/len(sgSumTotal)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Final Sage Grouse Statistics (Sum, Mean):" ,sgSumTotalFinal, sgMeanTotalFinal&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 20 May 2011 21:02:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/random-sample-select-polygons-by-attributes/m-p/494231#M38784</guid>
      <dc:creator>HollyCopeland</dc:creator>
      <dc:date>2011-05-20T21:02:35Z</dc:date>
    </item>
  </channel>
</rss>

