Have you every come across a situation like one of these:
- you need to test out something but don't have the data
- are you sick of trying to get a function to work in the field calculator
- you want to test out one of ArcMap's functions but none of your data are suitable
- all I need are some points which have a particular distribution
- someone forgot to post a sample of their data on GeoNet for testing and you don't have a match
- you forgot to collect something in the field

Well, this lesson is for you. It is a culmination of a number of the previous lessons and a few
NumPy Snippets and Before I Forget posts. I have attached a script to this post below
There is also a GitHub repository that takes this one step further providing more output options... see Silly on GitHub
The following provides the basic requirements to operate a function should you choose not to
incorporate the whole thing. Obviously, the header section enclosed within triple quotes
isn't needed but the import section is.
<SPAN class="comment token"># -*- coding: UTF-8 -*-</SPAN>
<SPAN class="string token">"""
:Script: random_data_demo.py
:Author: Dan.Patterson AT carleton.ca
:Modified: 2015-08-29
:Purpose:
: Generate an array containing random data. Optional fields include:
: ID, Shape, text, integer and float fields
:Notes:
: The numpy imports are required for all functions
"""</SPAN>
<SPAN class="comment token">#-----------------------------------------------------------------------------</SPAN>
<SPAN class="comment token"># Required imports</SPAN>
<SPAN class="keyword token">from</SPAN> functools <SPAN class="keyword token">import</SPAN> wraps
<SPAN class="keyword token">import</SPAN> numpy <SPAN class="keyword token">as</SPAN> np
<SPAN class="keyword token">import</SPAN> numpy<SPAN class="punctuation token">.</SPAN>lib<SPAN class="punctuation token">.</SPAN>recfunctions <SPAN class="keyword token">as</SPAN> rfn
np<SPAN class="punctuation token">.</SPAN>set_printoptions<SPAN class="punctuation token">(</SPAN>edgeitems<SPAN class="operator token">=</SPAN><SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> linewidth<SPAN class="operator token">=</SPAN><SPAN class="number token">75</SPAN><SPAN class="punctuation token">,</SPAN> precision<SPAN class="operator token">=</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN>
suppress<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">,</SPAN>threshold<SPAN class="operator token">=</SPAN><SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN>
formatter<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">{</SPAN><SPAN class="string token">'bool'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">lambda</SPAN> x<SPAN class="punctuation token">:</SPAN> repr<SPAN class="punctuation token">(</SPAN>x<SPAN class="punctuation token">.</SPAN>astype<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'int32'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'float'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'{: 0.2f}'</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#-----------------------------------------------------------------------------</SPAN>
<SPAN class="comment token"># Required constants ... see string module for others</SPAN>
str_opt <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'0123456789'</SPAN><SPAN class="punctuation token">,</SPAN>
'!"<SPAN class="comment token">#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~',</SPAN>
<SPAN class="string token">'abcdefghijklmnopqrstuvwxyz'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'ABCDEFGHIJKLMNOPQRSTUVWXYZ'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'</SPAN>
<SPAN class="punctuation token">]</SPAN>
<SPAN class="comment token">#-----------------------------------------------------------------------------</SPAN>
<SPAN class="comment token"># decorator</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">func_run</SPAN><SPAN class="punctuation token">(</SPAN>func<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""Prints basic function information and the results of a run.
:Required: from functools import wraps
"""</SPAN>
@wraps<SPAN class="punctuation token">(</SPAN>func<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">wrapper</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="operator token">*</SPAN>args<SPAN class="punctuation token">,</SPAN><SPAN class="operator token">**</SPAN>kwargs<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"\nFunction... {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>func<SPAN class="punctuation token">.</SPAN>__name__<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">" args.... {}\n kwargs.. {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>args<SPAN class="punctuation token">,</SPAN> kwargs<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">" docs.... \n{}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>func<SPAN class="punctuation token">.</SPAN>__doc__<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
result <SPAN class="operator token">=</SPAN> func<SPAN class="punctuation token">(</SPAN><SPAN class="operator token">*</SPAN>args<SPAN class="punctuation token">,</SPAN> <SPAN class="operator token">**</SPAN>kwargs<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"{!r:}\n"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>result<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># comment out if results not needed</SPAN>
<SPAN class="keyword token">return</SPAN> result <SPAN class="comment token"># for optional use outside.</SPAN>
<SPAN class="keyword token">return</SPAN> wrapper
<SPAN class="comment token">#-----------------------------------------------------------------------------</SPAN>
<SPAN class="comment token"># functions</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>Before I go any further, lets have a look at the above code.
- line 14 - functools wraps module - I will be using decorators to control output and wraps handles all the fiddly stuff in decorators (see Before I Forget # 14)
- line 16 - - numpy.lib.recfunctions is a useful module for working with ndarrays and recarrays in particular...it is imported as rfn
- lines 17-20 - np.set_printoptions allows you to control how arrays are formatted when printing or working from the command line. Most of the parameters are self-explanatory or you will soon get the drift
- lines 30 - 43 - the decorator function presented in BIF # 14.
Now back to the main point. If you would like to generate data with some control on the output.
This will present some functions to do so and put it together into a standalone table or feature class.
An example follows:
Array generated<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="number token">7.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1.0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'E0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(0,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'A'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'ARXYPJ'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Bb'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9.380410289877375</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="number token">2.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9.0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'D0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(4,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'B'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'RAMKH'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1.0263298179133362</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">(</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="number token">5.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8.0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'C0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(1,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'B'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'EGWSC'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2.644448491753841</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">(</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="number token">9.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">7.0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'A0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(1,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'A'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'TMXZSGHAKJ'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'dog'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6.814471938888746</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">(</SPAN><SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="number token">10.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3.0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'E0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(1,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'B'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'FQZCTDEY'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'-1'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2.438467639965038</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token"><</SPAN> snip <SPAN class="operator token">></SPAN>
dtype<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'ID'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<i4'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Shape'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'X'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<f8'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Y'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<f8'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Colrow'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<U2'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Rowcol'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<U5'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'txt_fld'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<U1'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'str_fld'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<U10'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'case1_fld'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<U3'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'case2_fld'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<U2'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'int_fld'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<i4'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'float_fld'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<f8'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>Here are the code snippets...
| Code snippets |
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">pnts_IdShape</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> x_min<SPAN class="operator token">=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> x_max<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> y_min<SPAN class="operator token">=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> y_max<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">""" Create an array with a nested dtype which emulates a shapefile's
: data structure. This array is used to append other arrays to enable
: import of the resultant into ArcMap. Array construction, after hpaulj
: http://stackoverflow.com/questions/32224220/
: methods-of-creating-a-structured-array
"""</SPAN>
Xs <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>randint<SPAN class="punctuation token">(</SPAN>x_min<SPAN class="punctuation token">,</SPAN> x_max<SPAN class="punctuation token">,</SPAN> size<SPAN class="operator token">=</SPAN>N<SPAN class="punctuation token">)</SPAN>
Ys <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>randint<SPAN class="punctuation token">(</SPAN>y_min<SPAN class="punctuation token">,</SPAN> y_max<SPAN class="punctuation token">,</SPAN> size<SPAN class="operator token">=</SPAN>N<SPAN class="punctuation token">)</SPAN>
IDs <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>arange<SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> N<SPAN class="punctuation token">)</SPAN>
c_stack <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>column_stack<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>IDs<SPAN class="punctuation token">,</SPAN> Xs<SPAN class="punctuation token">,</SPAN> Ys<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> simple<SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># version 1</SPAN>
dt <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'ID'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<i4'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Shape'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<f8'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="comment token"># short version, optional form</SPAN>
a <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>ones<SPAN class="punctuation token">(</SPAN>N<SPAN class="punctuation token">,</SPAN> dtype<SPAN class="operator token">=</SPAN>dt<SPAN class="punctuation token">)</SPAN>
a<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'ID'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> c_stack<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
a<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Shape'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> c_stack<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="comment token"># this line too</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># version 2</SPAN>
dt <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'ID'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<i4'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Shape'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'X'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<f8'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Y'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'<f8'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN>
a <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>ones<SPAN class="punctuation token">(</SPAN>N<SPAN class="punctuation token">,</SPAN> dtype<SPAN class="operator token">=</SPAN>dt<SPAN class="punctuation token">)</SPAN>
a<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Shape'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'X'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> c_stack<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN>
a<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Shape'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Y'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> c_stack<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN>
a<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'ID'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> c_stack<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">return</SPAN> a
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">colrow_txt</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> cols<SPAN class="operator token">=</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> rows<SPAN class="operator token">=</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> zero_based<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">""" Produce spreadsheet like labels either 0- or 1-based.
:N - number of records/rows to produce.
:cols/rows - this combination will control the output of the values
:cols=2, rows=2 - yields (A0, A1, B0, B1)
: as optional classes regardless of the number of records being produced
:zero-based - True for conventional array structure,
: False for spreadsheed-style classes
"""</SPAN>
<SPAN class="keyword token">if</SPAN> zero_based<SPAN class="punctuation token">:</SPAN>
start <SPAN class="operator token">=</SPAN> <SPAN class="number token">0</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
start <SPAN class="operator token">=</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">;</SPAN> rows <SPAN class="operator token">=</SPAN> rows <SPAN class="operator token">+</SPAN> <SPAN class="number token">1</SPAN>
UC <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>list<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN>cols<SPAN class="punctuation token">]</SPAN> <SPAN class="comment token"># see constants</SPAN>
dig <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>list<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'0123456789'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN>start<SPAN class="punctuation token">:</SPAN>rows<SPAN class="punctuation token">]</SPAN>
cr_vals <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>c <SPAN class="operator token">+</SPAN> r <SPAN class="keyword token">for</SPAN> r <SPAN class="keyword token">in</SPAN> dig <SPAN class="keyword token">for</SPAN> c <SPAN class="keyword token">in</SPAN> UC<SPAN class="punctuation token">]</SPAN>
colrow <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>choice<SPAN class="punctuation token">(</SPAN>cr_vals<SPAN class="punctuation token">,</SPAN>N<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> colrow
Yields
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'D0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'E0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'C0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'E0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'C0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'C0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'D0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'D0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'E0'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'D0'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
dtype<SPAN class="operator token">=</SPAN><SPAN class="string token">'<U2'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">rowcol_txt</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN>rows<SPAN class="operator token">=</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN>cols<SPAN class="operator token">=</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">""" Produce array-like labels in a tuple format.
"""</SPAN>
rc_vals <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">"({},{})"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>r<SPAN class="punctuation token">,</SPAN> c<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> c <SPAN class="keyword token">in</SPAN> range<SPAN class="punctuation token">(</SPAN>cols<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> r <SPAN class="keyword token">in</SPAN> range<SPAN class="punctuation token">(</SPAN>rows<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN>
rowcol <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>choice<SPAN class="punctuation token">(</SPAN>rc_vals<SPAN class="punctuation token">,</SPAN> N<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> rowcol
Yields
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'(2,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(2,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(4,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(0,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(4,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(2,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(4,0)'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'(0,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(2,0)'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'(0,0)'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
dtype<SPAN class="operator token">=</SPAN><SPAN class="string token">'<U5'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">rand_text</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN>cases<SPAN class="operator token">=</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN>vals<SPAN class="operator token">=</SPAN>str_opt<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">""" Generate N samples from the letters of the alphabet denoted by the
: number of cases. If you want greater control on the text and
: probability, see rand_case or rand_str.
:
: vals: see str_opt in required constants section
"""</SPAN>
vals <SPAN class="operator token">=</SPAN> list<SPAN class="punctuation token">(</SPAN>vals<SPAN class="punctuation token">)</SPAN>
txt_vals <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>choice<SPAN class="punctuation token">(</SPAN>vals<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN>cases<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>N<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> txt_vals
Yields
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'C'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'C'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'C'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'B'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'A'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'B'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'A'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'C'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'C'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'C'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
dtype<SPAN class="operator token">=</SPAN><SPAN class="string token">'<U1'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">rand_str</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN>low<SPAN class="operator token">=</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN>high<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN>vals<SPAN class="operator token">=</SPAN>str_opt<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">""" Returns N strings constructed from 'size' random letters to form a string
: - create the cases as a list: string.ascii_lowercase or ascii_uppercase etc
: - determine how many letters. Ensure min <= max. Add 1 to max alleviate low==high
: - shuffle the case list each time through loop
"""</SPAN>
vals <SPAN class="operator token">=</SPAN> list<SPAN class="punctuation token">(</SPAN>vals<SPAN class="punctuation token">)</SPAN>
letts <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>arange<SPAN class="punctuation token">(</SPAN>min<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>low<SPAN class="punctuation token">,</SPAN>high<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>max<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>low<SPAN class="punctuation token">,</SPAN>high<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># number of letters</SPAN>
result <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">for</SPAN> i <SPAN class="keyword token">in</SPAN> range<SPAN class="punctuation token">(</SPAN>N<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>shuffle<SPAN class="punctuation token">(</SPAN>vals<SPAN class="punctuation token">)</SPAN>
size <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>choice<SPAN class="punctuation token">(</SPAN>letts<SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN>
result<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN><SPAN class="string token">""</SPAN><SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>vals<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN>size<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
result <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>array<SPAN class="punctuation token">(</SPAN>result<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> result
Yields
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'ZDULHYJSB'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'LOSZJNB'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PKECZOIJ'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'ZV'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'DENCBP'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'XRNITEJ'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'HJMDLBNSEF'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'DWLYPQF'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'HZOUTBSLN'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'MOEXR'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
dtype<SPAN class="operator token">=</SPAN><SPAN class="string token">'<U10'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">rand_case</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN>cases<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">"Aa"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Bb"</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>p_vals<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0.8</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">0.2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">""" Generate N samples from a list of classes with an associated probability
: ensure: len(cases)==len(p_vals) and sum(p_values) == 1
: small sample sizes will probably not yield the desired p-values
"""</SPAN>
p <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>np<SPAN class="punctuation token">.</SPAN>array<SPAN class="punctuation token">(</SPAN>p_vals<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">*</SPAN>N <SPAN class="comment token"># convert to integer</SPAN>
kludge <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>np<SPAN class="punctuation token">.</SPAN>repeat<SPAN class="punctuation token">(</SPAN>cases<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> p<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>tolist<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> i <SPAN class="keyword token">in</SPAN> range<SPAN class="punctuation token">(</SPAN>len<SPAN class="punctuation token">(</SPAN>cases<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN>
case_vals <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>val <SPAN class="keyword token">for</SPAN> i <SPAN class="keyword token">in</SPAN> range<SPAN class="punctuation token">(</SPAN>len<SPAN class="punctuation token">(</SPAN>kludge<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> val <SPAN class="keyword token">in</SPAN> kludge<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>shuffle<SPAN class="punctuation token">(</SPAN>case_vals<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> case_vals
Yields
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'dog'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'dog'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'dog'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'fish'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
dtype<SPAN class="operator token">=</SPAN><SPAN class="string token">'<U4'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># or</SPAN>
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Bb'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Bb'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Aa'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
dtype<SPAN class="operator token">=</SPAN><SPAN class="string token">'<U2'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">rand_int</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN>begin<SPAN class="operator token">=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN>end<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">""" Generate N random integers within the range begin - end
"""</SPAN>
int_vals <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>randint<SPAN class="punctuation token">(</SPAN>begin<SPAN class="punctuation token">,</SPAN>end<SPAN class="punctuation token">,</SPAN>size<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> int_val
Yields
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">7</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">rand_float</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN>begin<SPAN class="operator token">=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN>end<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">""" Generate N random floats within the range begin - end
Technically, N random integers are produced then a random
amount within 0-1 is added to the value
"""</SPAN>
float_vals <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>randint<SPAN class="punctuation token">(</SPAN>begin<SPAN class="punctuation token">,</SPAN>end<SPAN class="number token">-1</SPAN><SPAN class="punctuation token">,</SPAN>size<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>N<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
float_vals <SPAN class="operator token">=</SPAN> float_vals <SPAN class="operator token">+</SPAN> np<SPAN class="punctuation token">.</SPAN>random<SPAN class="punctuation token">.</SPAN>rand<SPAN class="punctuation token">(</SPAN>N<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> float_vals
Yield
array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN> <SPAN class="number token">8.40</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9.09</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0.90</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9.64</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8.63</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5.05</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2.07</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">8.13</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">9.91</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0.22</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
The above functions can be used with the main portion of the script and your own function.
| Sample function |
<SPAN class="comment token"># required imports</SPAN>
<SPAN class="comment token"># required constants</SPAN>
<SPAN class="comment token"># pnts_IdShape function</SPAN>
<SPAN class="comment token"># rand_case function</SPAN>
<SPAN class="comment token"># rand_int function</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">blog_post</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""sample run"""</SPAN>
N <SPAN class="operator token">=</SPAN> <SPAN class="number token">10</SPAN>
id_shape <SPAN class="operator token">=</SPAN> pnts_IdShape<SPAN class="punctuation token">(</SPAN>N<SPAN class="punctuation token">,</SPAN>x_min<SPAN class="operator token">=</SPAN><SPAN class="number token">300000</SPAN><SPAN class="punctuation token">,</SPAN>x_max<SPAN class="operator token">=</SPAN><SPAN class="number token">300500</SPAN><SPAN class="punctuation token">,</SPAN>y_min<SPAN class="operator token">=</SPAN><SPAN class="number token">5000000</SPAN><SPAN class="punctuation token">,</SPAN>y_max<SPAN class="operator token">=</SPAN><SPAN class="number token">5000500</SPAN><SPAN class="punctuation token">)</SPAN>
case1_fld <SPAN class="operator token">=</SPAN> rand_case<SPAN class="punctuation token">(</SPAN>N<SPAN class="punctuation token">,</SPAN>cases<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'cat'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">'dog'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">'fish'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>p_vals<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0.6</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">0.3</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">0.1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
int_fld <SPAN class="operator token">=</SPAN> rand_int<SPAN class="punctuation token">(</SPAN>N<SPAN class="punctuation token">,</SPAN>begin<SPAN class="operator token">=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN>end<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">)</SPAN>
fld_names <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Pets'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">'Number'</SPAN><SPAN class="punctuation token">]</SPAN>
fld_data <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>case1_fld<SPAN class="punctuation token">,</SPAN>int_fld<SPAN class="punctuation token">]</SPAN>
arr <SPAN class="operator token">=</SPAN> rfn<SPAN class="punctuation token">.</SPAN>append_fields<SPAN class="punctuation token">(</SPAN>id_shape<SPAN class="punctuation token">,</SPAN>fld_names<SPAN class="punctuation token">,</SPAN>fld_data<SPAN class="punctuation token">,</SPAN>usemask<SPAN class="operator token">=</SPAN><SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> arr
<SPAN class="keyword token">if</SPAN> __name__ <SPAN class="operator token">==</SPAN> <SPAN class="string token">'__main__'</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""create ID,Shape,{txt_fld,int_fld...of any number}
"""</SPAN>
returned <SPAN class="operator token">=</SPAN> blog_post<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
array([(0, (300412.0, 5000473.0), 'dog', 4),
(1, (300308.0, 5000043.0), 'cat', 4),
(2, (300443.0, 5000170.0), 'dog', 5),
(3, (300219.0, 5000240.0), 'cat', 0),
(4, (300444.0, 5000067.0), 'cat', 9),
(5, (300486.0, 5000106.0), 'cat', 3),
(6, (300242.0, 5000145.0), 'cat', 5),
(7, (300038.0, 5000341.0), 'dog', 7),
(8, (300335.0, 5000495.0), 'cat', 9),
(9, (300345.0, 5000108.0), 'fish', 7)],
dtype=[('ID', '<i4'), ('Shape', [('X', '<f8'), ('Y', '<f8')]),
('Pets', '<U4'), ('Number', '<i4')])
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN> |
You will notice in the above example that the rand_case function was to determine
the number of pets based upon p-values of 0.6, 0.3 and 0.1, with cats being favored, as they should be, and
this is reflected in the data. The coordinates in this example were left as integers, reflecting a 1m resolution.
It is possible to add a random pertubation of floating point values in the +/- 0.99 to add centimeter values if you desire.
This is not shown here, but I can provide the example if needed.
The 'Number' field in this example simply reflects the number of pets per household.
Homework...
Using NumPyArrayToFeatureclass, create a shapefile using a NAD_1983_CSRS_MTM_9 projection
(Projected, National Grids, Canada, NAD83 CSRS_MTM_9)
Answer...
<SPAN class="operator token">>></SPAN><SPAN class="operator token">></SPAN> <SPAN class="keyword token">import</SPAN> arcpy
<SPAN class="operator token">>></SPAN><SPAN class="operator token">></SPAN> a <SPAN class="operator token">=</SPAN> blog_post<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># do the run if it isn't done</SPAN>
<SPAN class="operator token">>></SPAN><SPAN class="operator token">></SPAN> <SPAN class="comment token"># ..... snip ..... the output</SPAN>
<SPAN class="operator token">>></SPAN><SPAN class="operator token">></SPAN> <SPAN class="comment token"># ..... snip ..... now create the featureclass</SPAN>
<SPAN class="operator token">>></SPAN><SPAN class="operator token">></SPAN> SR_name <SPAN class="operator token">=</SPAN> <SPAN class="number token">32189</SPAN> <SPAN class="comment token"># u'NAD_1983_CSRS_MTM_9'</SPAN>
<SPAN class="operator token">>></SPAN><SPAN class="operator token">></SPAN> SR <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">(</SPAN>SR_name<SPAN class="punctuation token">)</SPAN>
<SPAN class="operator token">>></SPAN><SPAN class="operator token">></SPAN> output_shp <SPAN class="operator token">=</SPAN><SPAN class="string token">'F:/Writing_Projects/NumPy_Lessons/Shapefiles/out.shp'</SPAN>
<SPAN class="operator token">>></SPAN><SPAN class="operator token">></SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>NumPyArrayToFeatureClass<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> output_shp<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Shape'</SPAN><SPAN class="punctuation token">,</SPAN> SR<SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Result

That's all...