diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..5a4a47d
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+assignment_09
\ No newline at end of file
diff --git a/.idea/assignment_09.iml b/.idea/assignment_09.iml
new file mode 100644
index 0000000..6f63a63
--- /dev/null
+++ b/.idea/assignment_09.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..97626ba
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..f9edad6
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..aada090
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..462847e
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,320 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1460347454539
+
+ 1460347454539
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FoliumTests.ipynb b/FoliumTests.ipynb
new file mode 100644
index 0000000..6efe134
--- /dev/null
+++ b/FoliumTests.ipynb
@@ -0,0 +1,63 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import folium\n",
+ "map_osm = folium.Map(location=[33.42,-112.065])\n",
+ "map_osm"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "import view\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.5.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/assignment_09.ipynb b/assignment_09.ipynb
new file mode 100644
index 0000000..5c8970b
--- /dev/null
+++ b/assignment_09.ipynb
@@ -0,0 +1,418 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "import point\n",
+ "import numpy as np\n",
+ "import scipy.spatial as ss"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false,
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[]\n"
+ ]
+ }
+ ],
+ "source": [
+ "new_pattern = point.PointPattern()\n",
+ "print(new_pattern.set_of_points)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "new_pattern.create_random_points(100)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false,
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "100\n",
+ "0.9142760164698801 0.15245063193191088\n",
+ "0.48292614290484737 0.9184628109684032\n",
+ "0.33337651658050294 0.14784305046750346\n",
+ "0.9327600879601421 0.2358142955339223\n",
+ "0.5345702139280762 0.1830012587408244\n",
+ "0.002849203469585393 0.5434766718623576\n",
+ "0.6251115361250151 0.2645918875037627\n",
+ "0.7182434387659785 0.2395936701848791\n",
+ "0.21368200421050754 0.267438850795948\n",
+ "0.3521725340587013 0.5056825585905379\n",
+ "0.5439423094433921 0.2712087706030353\n",
+ "0.82615355908667 0.6547727443633703\n",
+ "0.08986045973059864 0.9246296996694158\n",
+ "0.24471380776144358 0.8116256262258893\n",
+ "0.21024467340906994 0.37991618148937134\n",
+ "0.5747940828502552 0.8063150200582564\n",
+ "0.6025047760765152 0.9753594541295302\n",
+ "0.7866415747670197 0.22319518296945173\n",
+ "0.2579375000076477 0.8799154276145454\n",
+ "0.9888673392391436 0.13713011317465384\n",
+ "0.5702736966115158 0.770253540370834\n",
+ "0.8766275270801958 0.641916441376012\n",
+ "0.07201277369943748 0.7742175904664074\n",
+ "0.9478697924248484 0.1604053259950955\n",
+ "0.7305570577634707 0.18514257900216402\n",
+ "0.5537733831272414 0.4397696756607836\n",
+ "0.1551455561334898 0.48356741119165836\n",
+ "0.4279734358661875 0.7431233536565317\n",
+ "0.059476358378460215 0.0855312189522206\n",
+ "0.9787609352882003 0.9116216475342881\n",
+ "0.5144408762183188 0.6466992634194961\n",
+ "0.7665654174343465 0.8116327405751677\n",
+ "0.04954603647738143 0.12260715200453676\n",
+ "0.293864892759087 0.22602694869125362\n",
+ "0.36400690068460106 0.4544533170785756\n",
+ "0.45493764851109353 0.6516003388905123\n",
+ "0.29499855187404833 0.7308962595207906\n",
+ "0.48498111247671694 0.8773148081492596\n",
+ "0.23332745739723426 0.3401382348786517\n",
+ "0.3468309538263892 0.3241406065723006\n",
+ "0.40918925690082286 0.9383262981016628\n",
+ "0.105568084445395 0.07797118207917819\n",
+ "0.6817937716026468 0.7904206275561758\n",
+ "0.07007824361811354 0.556865336462241\n",
+ "0.2819049352306924 0.16689764114822214\n",
+ "0.6144378442123944 0.2797050017013618\n",
+ "0.31649064551762973 0.8441030137320968\n",
+ "0.8230946562010628 0.30067911209431886\n",
+ "0.2618994372009026 0.33352195422658415\n",
+ "0.981869901555576 0.2193626317783588\n",
+ "0.9269895104965136 0.5088279168426362\n",
+ "0.849475891067517 0.18481959677726145\n",
+ "0.2068049066207207 0.7087007874012001\n",
+ "0.8916661885934265 0.14880488519629842\n",
+ "0.23707561990224568 0.41691407513779255\n",
+ "0.2886420631832953 0.3653916005369152\n",
+ "0.7435969547589796 0.6927859059931808\n",
+ "0.5222235112808983 0.7990156931243353\n",
+ "0.6230869279780937 0.5672448689886037\n",
+ "0.9854109280758173 0.7673786925278128\n",
+ "0.7879314480728475 0.40910935134790005\n",
+ "0.0308960116621797 0.7962125987209373\n",
+ "0.587634060500698 0.351406109599945\n",
+ "0.4808262378401841 0.5650946324495782\n",
+ "0.08853053030971048 0.004176858656150029\n",
+ "0.41498096721400035 0.4296172802136691\n",
+ "0.745140060664367 0.15938841008146687\n",
+ "0.7887168376609083 0.20307882866212235\n",
+ "0.7409672069267957 0.41630659997950914\n",
+ "0.6269155513832362 0.8408910861033316\n",
+ "0.01660540098455332 0.11206648725322677\n",
+ "0.5218590922009425 0.11550308536945275\n",
+ "0.18937887758506478 0.10953410548782527\n",
+ "0.36222684192188925 0.8322795568797339\n",
+ "0.14357517377699935 0.8817086061690274\n",
+ "0.9302055316266093 0.6029112018423958\n",
+ "0.07853663510888098 0.09398472590186813\n",
+ "0.014658941403184134 0.11447865853102557\n",
+ "0.14529708534678143 0.32752012910329686\n",
+ "0.6410269827316531 0.4864479883050712\n",
+ "0.473544960405193 0.22739874008158323\n",
+ "0.35491532619647814 0.21635264638392082\n",
+ "0.4373322595213115 0.5417906778459081\n",
+ "0.8860375525077219 0.14201178855679664\n",
+ "0.09945908682911275 0.13854368523393434\n",
+ "0.05931279084493868 0.6757281907181366\n",
+ "0.1914869579350612 0.40647248738390696\n",
+ "0.9766361248822688 0.027057545855305953\n",
+ "0.5373914243497263 0.7900942340523922\n",
+ "0.361305006192813 0.5213786521648469\n",
+ "0.8208587933342094 0.970676245567716\n",
+ "0.6478749011749924 0.11459295410797588\n",
+ "0.22799010563773037 0.6865104135458886\n",
+ "0.40828408180197384 0.4639285130096892\n",
+ "0.4299356804231873 0.2810535030806197\n",
+ "0.06283394090070793 0.5165536456890886\n",
+ "0.4834708255248602 0.6378151236470068\n",
+ "0.4278802294627707 0.35732215757078334\n",
+ "0.20072055070401662 0.27405623006300184\n",
+ "0.14163527086350292 0.5786473576092528\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(len(new_pattern.set_of_points))\n",
+ "for i in range(len(new_pattern.set_of_points)):\n",
+ " print(new_pattern.set_of_points[i].x,new_pattern.set_of_points[i].y)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 0.02290187, 0.04119928, 0.05488535, 0.05179219, 0.06868461,\n",
+ " 0.06574966, 0.01850227, 0.05582604, 0.01455297, 0.01815955,\n",
+ " 0.07100568, 0.05208556, 0.06875675, 0.06955834, 0.03251291,\n",
+ " 0.0363437 , 0.13242461, 0.02022312, 0.06863672, 0.04714376,\n",
+ " 0.0363437 , 0.05208556, 0.04663012, 0.03452273, 0.0295963 ,\n",
+ " 0.09462909, 0.08523101, 0.09541243, 0.0208508 , 0.14439617,\n",
+ " 0.03221912, 0.08738527, 0.034586 , 0.06032674, 0.04527967,\n",
+ " 0.03168871, 0.08037559, 0.04119928, 0.02932803, 0.07132735,\n",
+ " 0.07636548, 0.03141867, 0.07455794, 0.04095745, 0.05488535,\n",
+ " 0.01850227, 0.04723975, 0.08563052, 0.02932803, 0.05179219,\n",
+ " 0.09413824, 0.05547144, 0.0306794 , 0.008822 , 0.04570278,\n",
+ " 0.04160339, 0.09088781, 0.0175971 , 0.08276461, 0.14439617,\n",
+ " 0.04751253, 0.04663012, 0.07654732, 0.0493437 , 0.0757356 ,\n",
+ " 0.03495868, 0.0295963 , 0.02022312, 0.04751253, 0.0625472 ,\n",
+ " 0.00309956, 0.06868461, 0.08955706, 0.04723975, 0.06875675,\n",
+ " 0.06627225, 0.0208508 , 0.00309956, 0.07700746, 0.08276461,\n",
+ " 0.0691419 , 0.0618122 , 0.0493437 , 0.008822 , 0.04922652,\n",
+ " 0.09930484, 0.03251291, 0.11075005, 0.0175971 , 0.01815955,\n",
+ " 0.16805537, 0.10708475, 0.0306794 , 0.03495868, 0.0691419 ,\n",
+ " 0.04095745, 0.03168871, 0.07343688, 0.01455297, 0.07479883])"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "new_pattern.nearest_neighbor_kdtree()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.054670644019223634"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "new_pattern.nn_kdtree_avg()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.52"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "new_pattern.np_compute_g(.05)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "tuples = np.random.uniform(-1, 1, (1,2))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[ 0.66428233 0.53293921]]\n",
+ "[ 0.66428233 0.53293921]\n"
+ ]
+ }
+ ],
+ "source": [
+ "print (tuples)\n",
+ "print (tuples[0])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.532939208977\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(tuples[0][1])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Assignment 8: Pysal"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "from point import PointPattern\n",
+ "import pysal as ps"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "shapefile = ps.open(ps.examples.get_path('new_haven_merged.shp'))\n",
+ "dbf = ps.open(ps.examples.get_path('new_haven_merged.dbf'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(-72.976512, 41.337662) [' Thu, Sept. 18th 2014', 'all-cases-dead-on-arrival', ' 1605 WHALLEY AVE', ' AMITY/POND LILY', ' 01:53 p.m.']\n",
+ "-72.976512\n"
+ ]
+ }
+ ],
+ "source": [
+ "for geometry, attributes in zip(shapefile, dbf):\n",
+ " print(geometry, attributes)\n",
+ " print(geometry[0])\n",
+ " break"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "new_pattern = point.PointPattern()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "unmarked_point = point.Point()\n",
+ "\n",
+ "for geometry in zip(shapefile,dbf):\n",
+ " unmarked_point.x = geometry[0]\n",
+ " unmarked_point.y = geometry[1]\n",
+ " new_pattern.set_of_points.append(unmarked_point)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.5.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/exit.png b/exit.png
new file mode 100644
index 0000000..6d40c5b
Binary files /dev/null and b/exit.png differ
diff --git a/globe.png b/globe.png
new file mode 100644
index 0000000..3340e3f
Binary files /dev/null and b/globe.png differ
diff --git a/point.py b/point.py
new file mode 100644
index 0000000..8318676
--- /dev/null
+++ b/point.py
@@ -0,0 +1,367 @@
+import random
+import math
+import numpy as np
+import scipy.spatial as ss
+import pysal as ps
+
+
+class Point:
+ """
+ For whatever reason, cannot get import to work, just moved functionality
+ into this file instead.
+ """
+ def __init__(self,x = 0,y = 0,mark = ""):
+ self.x = x
+ self.y = y
+ self.mark = mark
+
+ def __eq__(self, other):
+ return self.x == other.x and self.y == other.y
+
+ def __gt__(self, other):
+ direction = ""
+ if self.y > other.y:
+ direction += "N"
+ elif self.y == other.y:
+ direction += "-"
+ else:
+ direction += "S"
+ if self.x > other.x:
+ direction += "E"
+ elif self.x == other.y:
+ direction += "-"
+ else:
+ direction += "W"
+
+ return direction
+
+ def __neg__(self):
+ return Point(-self.x,-self.y,self.mark)
+
+ def shift_point(self,x_move,y_move):
+ this_point = (self.x,self.y)
+ self.x += x_move
+ self.y += y_move
+
+ """
+ Made redundant by __eq__
+ def coincident(self, check_point):
+ if check_point.x == self.x and check_point.y == self.y:
+ return True
+ else:
+ return False
+ """
+
+
+class PointPattern:
+ def __init__(self):
+ self.set_of_points = []
+
+ def avg_nearest_neighbor_dist(self,mark):
+ average_nearest_neighbor_distance(self.set_of_points, mark)
+
+ def num_coincident_points(self):
+ coincident_points = 0
+ len_list = len(self.set_of_points)
+ for i in range(len_list):
+ if i == len_list-1:
+ break
+ for j in range(len_list+1):
+ if self.set_of_points[i] == self.set_of_points[j]:
+ coincident_points += 1
+
+ return coincident_points
+
+ def list_marks(self):
+ mark_list = []
+ len_list = len(self.set_of_points)
+ for i in range(len_list):
+ if not mark_list:
+ mark_list.append(self.set_of_points[i].mark)
+ elif self.set_of_points[i].mark not in mark_list:
+ mark_list.append(self.set_of_points[i].mark)
+
+ return mark_list
+
+ def list_mark_subsets(self):
+ mark_list = PointPattern.list_marks(self)
+ mark_count = []
+ sub_set = []
+ for i in range(len(mark_list)):
+ sub_set = []
+ for j in range(len(self.set_of_points)):
+ if mark_list[i] == self.set_of_points[j].mark:
+ sub_set.append(self.set_of_points[j])
+ mark_count.append(sub_set)
+
+ return mark_count
+
+ def create_random_points(self, n=100, marks = []):
+ if not marks:
+ self.set_of_points = create_random_unmarked_points(n)
+ else:
+ self.set_of_points = create_random_marked_points(n,marks)
+
+ def k_realizations(self,k = 99):
+ return permutations(k,n = 100)
+
+ def critical_points(self,realizations):
+ return find_crit_points(realizations)
+
+ def compute_g(self, min_dist):
+ gs = 0
+ len_list = len(self.set_of_points)
+ all_pts_min_dists = []
+ for i in range(len_list):
+ local_nn = 0
+ for j in range(len_list):
+ if i != j:
+ new_distance = euclidean_distance(self.set_of_points[i],self.set_of_points[j])
+ if local_nn == 0:
+ local_nn = new_distance
+ elif new_distance < local_nn:
+ local_nn = new_distance
+
+ all_pts_min_dists.append(local_nn)
+
+ for k in range(len(all_pts_min_dists)):
+ if all_pts_min_dists[k]<=min_dist:
+ gs += 1
+
+ return gs
+ """
+ Assignment 8 stuff
+ """
+
+ def nearest_neighbor_kdtree(self, mark=""):
+ buffer = build_np_array(self.set_of_points, mark)
+ kdtree = ss.KDTree(buffer)
+ calc_distances = []
+ values = []
+ for i in buffer:
+ nn_distance, nn = kdtree.query(i, k=2)
+ #do we remove the first one since it is the coincident?
+ calc_distances.append(nn_distance[1])
+ values.append(nn)
+ distances = np.array(calc_distances)
+ return distances
+
+ def nn_kdtree_avg(self, mark=""):
+ return np.mean(self.nearest_neighbor_kdtree(mark))
+
+ def np_compute_g(self, min_dist, mark=""):
+ buffer = build_np_array(self.set_of_points, mark)
+ g = 0
+ n = len(self.set_of_points)
+ list_of_min_dists = []
+ for i in range(len(self.set_of_points)):
+ local_nn = 0
+ for j in range(len(self.set_of_points)):
+ if i != j:
+ new_dist = ss.distance.euclidean(buffer[i],buffer[j])
+ if local_nn == 0:
+ local_nn = new_dist
+ elif new_dist < local_nn:
+ local_nn = new_dist
+ list_of_min_dists.append(local_nn)
+
+ for k in range(len(list_of_min_dists)):
+ if list_of_min_dists[k] <= min_dist:
+ g += 1
+
+ return g/n
+
+ def np_gen_random_points(self, n = 100, dom_spec = False):
+ lop = []
+ if dom_spec:
+ lx,ly,mx,my = minimum_bounding_rectangle(self.set_of_points)
+ for i in range(n):
+ x = np.random.uniform(lx, mx)
+ y = np.random.uniform(ly, my)
+ n_p = Point(x,y)
+ lop.append(n_p)
+ else:
+ for i in range(n):
+ tuples = np.random.uniform(0,1,(1,2))
+ n_p = Point(tuples[0][0],tuples[0][1])
+ lop.append(n_p)
+
+ return lop
+
+"""
+Assignment_08
+"""
+
+
+def build_np_array(points, mark=""):
+ if not points:
+ return "No Points in List"
+ point_buffer = []
+
+ if mark == "":
+ for i in range(len(points)):
+ new_tuple = [points[i].x,points[i].y]
+ point_buffer.append(new_tuple)
+
+ else:
+ for i in range(len(points)):
+ if points[i].mark == mark:
+ new_tuple = [points[i].x,points[i].y]
+ point_buffer.append(new_tuple)
+
+ return np.array(point_buffer)
+
+
+def nn_kdtree(points):
+ tree = ss.KDTree(points)
+ distances = []
+ values = []
+ for i in points:
+ nn_distance, nn = tree.query(i, k=2)
+ distances.append(nn_distance)
+ values.append(nn)
+
+ return distances,values
+
+
+def np_create_rand_points(self, n, specified):
+ lop = []
+ if not specified:
+ for i in range(n):
+ tup = np.random.uniform(0,1,(1,2))
+ point_n = Point(tup[0],tup[1])
+ lop.append(point_n)
+ else:
+ minimum_bounding_rectangle(self.set_of_points)
+
+ return lop
+
+
+"""
+Old Assignment
+"""
+
+
+def create_random_marked_points(n, marks = []):
+ list_of_tuples = [(random.uniform(0,1), random.uniform(0,1)) for i in range(n)]
+ list_of_marks = [random.choice(marks) for i in range(n)]
+ list_of_points = []
+ for j in range(n):
+ new_point = Point(list_of_tuples[j][0],list_of_tuples[j][1],list_of_marks[j])
+ list_of_points.append(new_point)
+
+ return list_of_points
+
+
+def create_random_unmarked_points(n):
+ list_of_tuples = [(random.uniform(0,1), random.uniform(0,1)) for i in range(n)]
+ list_of_points = []
+ for j in range(n):
+ new_point = Point(list_of_tuples[j][0],list_of_tuples[j][1], "")
+ list_of_points.append(new_point)
+
+ return list_of_points
+
+
+def euclidean_distance(a, b):
+ distance = math.sqrt((a.x - b.x)**2 + (a.y - b.y)**2)
+ return distance
+
+
+def average_nearest_neighbor_distance(points, mark=""):
+ mean_d = 0
+ total = 0
+ local_nn = 0
+ num_of_points = len(points)
+
+ if not mark:
+ for i in range(num_of_points):
+ local_nn = 0
+ for j in range(num_of_points):
+ if i != j:
+ new_distance = euclidean_distance(points[i],points[j])
+ if local_nn == 0:
+ local_nn = new_distance
+ elif new_distance < local_nn:
+ local_nn = new_distance
+
+ total += local_nn
+
+ else:
+ for i in range(num_of_points):
+ local_nn = 0
+ for j in range(num_of_points):
+ if i != j and points[i].mark == points[j].mark:
+ new_distance = euclidean_distance(points[i],points[j])
+ if local_nn == 0:
+ local_nn = new_distance
+ elif new_distance < local_nn:
+ local_nn = new_distance
+
+ total += local_nn
+
+ mean_d = total/num_of_points
+
+ return mean_d
+
+
+def permutations(p = 99, n = 100):
+ list_means = []
+
+ for i in range(p):
+ marks = ["elf", "dwarf", "human", "orc"]
+ rand_points = create_random_marked_points(n, marks)
+ newMean = average_nearest_neighbor_distance(rand_points)
+ list_means.append(newMean)
+
+ return list_means
+
+
+def find_crit_points(list_means):
+ entries = list_means
+ maxEntry = 0
+ minEntry = 2
+ for i in range(len(list_means)):
+ if entries[i] > maxEntry:
+ maxEntry = entries[i]
+ if entries[i] < minEntry:
+ minEntry = entries[i]
+
+ return minEntry,maxEntry
+
+
+def crit_point_check(minEntry, maxEntry, observed):
+ if observed < minEntry or observed > maxEntry:
+ return True
+ else:
+ return False
+
+def minimum_bounding_rectangle(points):
+ """
+ Given a set of points, compute the minimum bounding rectangle.
+
+ Parameters
+ ----------
+ points : list
+ A list of points in the form (x,y)
+
+ Returns
+ -------
+ : list
+ Corners of the MBR in the form [xmin, ymin, xmax, ymax]
+ """
+ mbr = [0,0,0,0]
+ numOfPoints = len(points)
+ for i in range(numOfPoints):
+ #Check for min and max x
+ if points[i][0] < mbr[0]:
+ mbr[0] = points[i][0]
+ if points[i][0] > mbr[2]:
+ mbr[2] = points[i][0]
+ #Check for min and max y
+ if points[i][1] < mbr[1]:
+ mbr[1] = points[i][1]
+ if points[i][1] > mbr[3]:
+ mbr[3] = points[i][1]
+
+ return mbr
\ No newline at end of file
diff --git a/view.py b/view.py
new file mode 100644
index 0000000..a3b9574
--- /dev/null
+++ b/view.py
@@ -0,0 +1,36 @@
+import sys
+from PyQt4 import QtGui
+
+
+class Example(QtGui.QMainWindow):
+
+ def __init__(self):
+ super(Example, self).__init__()
+
+ self.initUI()
+
+
+ def initUI(self):
+
+ exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), 'Exit', self)
+ exitAction.setShortcut('Ctrl+Q')
+ exitAction.triggered.connect(QtGui.qApp.quit)
+
+ self.toolbar = self.addToolBar('Exit')
+ self.toolbar.addAction(exitAction)
+
+ self.setGeometry(300, 300, 300, 200)
+ self.setWindowTitle('Assignment_09')
+ self.setWindowIcon(QtGui.QIcon('globe.png'))
+ self.show()
+
+
+def main():
+
+ app = QtGui.QApplication(sys.argv)
+ ex = Example()
+ sys.exit(app.exec_())
+
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file