diff --git a/README.md b/README.md index 59f9fa0..e25642e 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,17 @@ Usage --- See the iPython notebooks in `docs/` for example usage, or https://readthedocs.org/projects/spatial-acccess/ for technical documentation. +Under the **docs** folder, the notebooks run through Chicago's health example: +* [reqs.ipynb](./reqs.ipynb) : This notebook shows the installation and files requirements in order to run the demos. +* [matrix.ipynb](./matrix.ipynb) : This notebook shows how to run the travel time distance matrices. It uses the [p2p](./scripts/p2p.py) script. +* [access_score.ipynb](./access_score.ipynb) : This notebook shows how to run the access score and the specific parameters that might be tweaked depending on the user's interest. It uses the [ScoreModel](./scripts/ScoreModel.py) and [CommunityAnalytics](./scripts/CommunityAnalytics.py) scripts. +* [coverage_score.ipynb](./coverage_score.ipynb) :This notebook shows how to run the coverage score and the specific parameters that might be tweaked depending on the user's interest. It uses the [ScoreModel](./scripts/ScoreModel.py) and [CommunityAnalytics](./scripts/CommunityAnalytics.py) scripts. +* [travel_time_metrics.ipynb](./travel_time_metrics.ipynb) :This notebook shows how to run the travel time distance matrices. It uses the [ScoreModel](./scripts/ScoreModel.py) and [CommunityAnalytics](./scripts/CommunityAnalytics.py) scripts. +* [calibration.ipynb](./calibration.ipynb) : **? Have it as a notebook/within the demos/in this notebook or not at all?** Comparison (validation and calibration) with GoogleMaps. + +The **data** folder contains the files needed for the estimation of the metrics under **sources** (for origins) and **destinations** (for destinations). The **matrices** folder contains the estimated symmetric and asymmetric matrices. The **modelss** folder contain the results of the models' analyses. Finally, **figures** contain the results of maps and plots calculated during the process. + + ### Overwriting default configuration values p2p provides default configuration values for edge weights and node impedence (see spatial_access/configs.py). You can overwrite these as follows: diff --git a/data/input_data/dests.csv b/data/input_data/dests.csv deleted file mode 100644 index d7a5541..0000000 --- a/data/input_data/dests.csv +++ /dev/null @@ -1,4 +0,0 @@ -name,x,y -medici,41.791455,-87.593781 -msi,41.791655,-87.582974 -whole_foods,41.802080,-87.587849 diff --git a/data/input_data/sources.csv b/data/input_data/sources.csv deleted file mode 100644 index b1e9329..0000000 --- a/data/input_data/sources.csv +++ /dev/null @@ -1,4 +0,0 @@ -name,x,y -chicago_theater,41.885343,-87.627911 -lincoln_park_zoo,41.921860,-87.635709 -second_city,41.911518,-87.634719 diff --git a/docs/notebooks/.ipynb_checkpoints/coverage_score-checkpoint.ipynb b/docs/notebooks/.ipynb_checkpoints/coverage_score-checkpoint.ipynb old mode 100755 new mode 100644 index e30156d..369a4be --- a/docs/notebooks/.ipynb_checkpoints/coverage_score-checkpoint.ipynb +++ b/docs/notebooks/.ipynb_checkpoints/coverage_score-checkpoint.ipynb @@ -13,28 +13,43 @@ "source": [ "## Calculating the Coverage Score\n", "---\n", + "#### **Column Inputs for Each Model**\n", + "Each model takes in inputs from both the sources and destination csv files. Each model takes in the standard inputs indicated below as well as additional inputs specified under each model\n", + "\n", + "* Source File\n", + " * Unique index identifier (geoid10) (integer or real) \n", + " * Latitude and longitude coordinates (real)\n", + " * To aggregate: larger areal ID\n", + " * Population within the areal unit\n", + "* Destination File\n", + " * Unique index identifier (ID) (integer or real)\n", + " * Latitude and longitude coordinates (real)\n", + " * Category for each type of facility\n", + " * To aggregate: larger areal ID\n", + " * Capacity for each facility\n", + "\n", + " \n", + "\n", "**Specifications for Coverage Model:** \n", "\n", - "**name.CoverageModel( ):** \n", - "- network_type ('drive' or 'walk')\n", - "- source_filename (primary input data) \n", - "- dest_filename (secondary input data) \n", - "- upper (is the time (in minutes) in which the origin and destinations are considered to be out of range of each other. As a default, if the travel time distance exceeds 30 minutes, the score will be zero.)\n", - "- The prompt will ask for the target which should be specified in the destination file, according to the user's needs. \n", + "**name.Coverage( ):** \n", + "- network_type ('walk', 'bike', 'drive', or 'otp')\n", + "- sources_filename (primary input data)\n", + "- destinations_filename (secondary input data)\n", + "- transit_matrix_filename (origin-destination transit matrix)\n", " \n", "**name.calculate():**\n", - "- Just processes the model specified above. \n", - "\n", - "In the **scripts**, the user can specify further changed to the coverage score.\n", + "- upper_threshold (the time (in seconds) in which the origin and destinations are considered to be out of range of each other)\n", "\n", - "Functions within the PCSpend Model class (use as name_of_model.function()): \n", - "- calculate ()\n", - "- get_aggregate (aggregate_type) Aggregation can be by ('category') or ('lower_areal_unit') for the community level. If the user wants to modify the level of aggregation, change the lower_areal_unit field in destination csv to another unit of analysis.\n", - "- agg_area_cat (aggregate by area and by category)\n", - "- write_aggregate (aggregate_type, filename='name')\n", - "- write_agg_area_cat (write the aggregation by lower areal unit and by category)\n", - "- plot_cdf (title='Coverage Amount')\n", - "- write_csv (filename='name') " + "Functions within the Coverage Model class (use as name.function()): \n", + "- calculate () \n", + "- model_results (results of the TSFCA calculations)\n", + "- write_csv (filename='name') \n", + "- aggregate ()\n", + "- write_aggregated_results()\n", + "- plot_cdf()\n", + "- plot_choropleth()\n", + "\n" ] }, { @@ -46,28 +61,24 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "import sys, os\n", - "os.chdir('scripts')\n", - "\n", - "from CommunityAnalytics import *\n", "import pandas as pd\n", - "\n", - "%matplotlib inline" + "from spatial_access.Models import *" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "#View sources and destinations for Chicago Health Facilities\n", - "sources=pd.read_csv('data/ORIG/tracts2010.csv')\n", - "dest=pd.read_csv('data/DEST/health_chicago.csv')" + "sources=pd.read_csv('/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", + "dest=pd.read_csv('/Users/whlu/spatial_access/data/input_data/health_chicago.csv')\n", + "dest= dest.rename(index=str, columns={\"target\": \"capacity\"})" ] }, { @@ -102,6 +113,7 @@ " Pop2014\n", " Pov14\n", " community\n", + " ID\n", " \n", " \n", " \n", @@ -113,6 +125,7 @@ " 5157\n", " 769\n", " 44\n", + " 1\n", " \n", " \n", " 1\n", @@ -122,6 +135,7 @@ " 5881\n", " 1021\n", " 59\n", + " 2\n", " \n", " \n", " 2\n", @@ -131,6 +145,7 @@ " 3363\n", " 2742\n", " 34\n", + " 3\n", " \n", " \n", " 3\n", @@ -140,6 +155,7 @@ " 3710\n", " 1819\n", " 31\n", + " 4\n", " \n", " \n", " 4\n", @@ -149,18 +165,19 @@ " 3296\n", " 361\n", " 28\n", + " 5\n", " \n", " \n", "\n", "" ], "text/plain": [ - " geoid10 lon lat Pop2014 Pov14 community\n", - "0 17031842400 -87.630040 41.742475 5157 769 44\n", - "1 17031840300 -87.681882 41.832094 5881 1021 59\n", - "2 17031841100 -87.635098 41.851006 3363 2742 34\n", - "3 17031841200 -87.683342 41.855562 3710 1819 31\n", - "4 17031838200 -87.675079 41.870416 3296 361 28" + " geoid10 lon lat Pop2014 Pov14 community ID\n", + "0 17031842400 -87.630040 41.742475 5157 769 44 1\n", + "1 17031840300 -87.681882 41.832094 5881 1021 59 2\n", + "2 17031841100 -87.635098 41.851006 3363 2742 34 3\n", + "3 17031841200 -87.683342 41.855562 3710 1819 31 4\n", + "4 17031838200 -87.675079 41.870416 3296 361 28 5" ] }, "execution_count": 3, @@ -174,7 +191,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -203,7 +220,7 @@ " lat\n", " lon\n", " Type\n", - " target\n", + " capacity\n", " category\n", " community\n", " \n", @@ -276,15 +293,15 @@ "3 4 Mercy Family - Henry Booth House Family Health... 41.841694 \n", "4 6 Cook County - Dr. Jorge Prieto Health Center 41.847143 \n", "\n", - " lon Type target category community \n", - "0 -87.651879 5 127000 Other Health Providers 3 \n", - "1 -87.669535 5 190000 Other Health Providers 77 \n", - "2 -87.717270 5 137000 Other Health Providers 22 \n", - "3 -87.624790 5 159000 Other Health Providers 35 \n", - "4 -87.724975 5 166000 Other Health Providers 30 " + " lon Type capacity category community \n", + "0 -87.651879 5 127000 Other Health Providers 3 \n", + "1 -87.669535 5 190000 Other Health Providers 77 \n", + "2 -87.717270 5 137000 Other Health Providers 22 \n", + "3 -87.624790 5 159000 Other Health Providers 35 \n", + "4 -87.724975 5 166000 Other Health Providers 30 " ] }, - "execution_count": 4, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -295,9 +312,26 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "dest_updated = pd.read_csv('/Users/whlu/spatial_access/data/input_data/health_chicago.csv').rename(index=str, columns={\"target\": \"capacity\"})\n", + "dest_updated.to_csv('/Users/whlu/spatial_access/data/input_data/health_chicago_updated.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:spatial_access.p2p:You should use tmx instead of csv for significantly better performance\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -309,60 +343,96 @@ "> Pop2014\n", "> Pov14\n", "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", + "> ID\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the unique index variable: geoid10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no population variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the population variable: Pop2014\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "The variables in your data set are:\n", + "> Unnamed: 0\n", "> ID\n", "> Facility\n", "> lat\n", "> lon\n", "> Type\n", - "> target\n", + "> capacity\n", "> category\n", - "> community\n", - "If you have no target variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" + "> community\n" ] }, { - "name": "stderr", + "name": "stdin", "output_type": "stream", "text": [ - "INFO:ScoreModel:Loaded sp matrix from file: data/matrices/walk_asym_health_tracts.csv\n", - "INFO:ScoreModel:Finished loading sp_matrix in 0.14 seconds\n", - "INFO:ScoreModel:Processing... This could take a while\n", - "INFO:ScoreModel:Finished processing ModelData in 0.06 seconds\n" + "Enter the unique index variable: ID\n" ] - } - ], - "source": [ - "coverage = CoverageModel(network_type='walk',\n", - " sp_matrix_filename='data/matrices/walk_asym_health_tracts.csv',\n", - " source_filename='data/ORIG/tracts2010.csv',\n", - " dest_filename='data/DEST/health_chicago.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ + }, { - "name": "stderr", + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no capacity variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the capacity variable: capacity\n" + ] + }, + { + "name": "stdout", "output_type": "stream", "text": [ - "INFO:ScoreModel:Finished calculating CoverageModel in 0.03 seconds\n" + "If you have no category variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the category variable: category\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" ] } ], "source": [ - "coverage.calculate()" + "coverage = Coverage(network_type=\"walk\",\n", + " transit_matrix_filename='/Users/whlu/spatial_access/data/output_1_walk.csv',\n", + " sources_filename='/Users/whlu/spatial_access/data/input_data/tracts2010.csv',\n", + " destinations_filename='/Users/whlu/spatial_access/data/input_data/health_chicago_updated.csv')" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -386,114 +456,73 @@ " \n", " \n", " \n", - " target\n", + " service_pop\n", + " percap_spending\n", " category\n", - " lat\n", - " lon\n", - " lower_areal_unit\n", - " pop_served\n", - " coverage\n", - " \n", - " \n", - " ID\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", " \n", - " 1\n", - " 127000\n", - " Other Health Providers\n", - " 41.956676\n", - " -87.651879\n", - " 3\n", - " 113180\n", - " 1.122106\n", + " 14\n", + " 100892\n", + " 1.001070\n", + " Federally Qualified Health Centers\n", " \n", " \n", - " 2\n", - " 190000\n", - " Other Health Providers\n", - " 41.997852\n", - " -87.669535\n", - " 77\n", - " 112084\n", - " 1.695157\n", + " 15\n", + " 49853\n", + " 2.226546\n", + " Federally Qualified Health Centers\n", " \n", " \n", - " 3\n", - " 137000\n", - " Other Health Providers\n", - " 41.924904\n", - " -87.717270\n", - " 22\n", - " 106064\n", - " 1.291673\n", + " 16\n", + " 51802\n", + " 2.721903\n", + " Federally Qualified Health Centers\n", " \n", " \n", - " 4\n", - " 159000\n", - " Other Health Providers\n", - " 41.841694\n", - " -87.624790\n", - " 35\n", - " 77870\n", - " 2.041865\n", + " 17\n", + " 74269\n", + " 2.113937\n", + " Federally Qualified Health Centers\n", " \n", " \n", - " 6\n", - " 166000\n", - " Other Health Providers\n", - " 41.847143\n", - " -87.724975\n", - " 30\n", - " 99714\n", - " 1.664761\n", + " 18\n", + " 41958\n", + " 4.004004\n", + " Federally Qualified Health Centers\n", " \n", " \n", "\n", "" ], "text/plain": [ - " target category lat lon lower_areal_unit \\\n", - "ID \n", - "1 127000 Other Health Providers 41.956676 -87.651879 3 \n", - "2 190000 Other Health Providers 41.997852 -87.669535 77 \n", - "3 137000 Other Health Providers 41.924904 -87.717270 22 \n", - "4 159000 Other Health Providers 41.841694 -87.624790 35 \n", - "6 166000 Other Health Providers 41.847143 -87.724975 30 \n", - "\n", - " pop_served coverage \n", - "ID \n", - "1 113180 1.122106 \n", - "2 112084 1.695157 \n", - "3 106064 1.291673 \n", - "4 77870 2.041865 \n", - "6 99714 1.664761 " + " service_pop percap_spending category\n", + "14 100892 1.001070 Federally Qualified Health Centers\n", + "15 49853 2.226546 Federally Qualified Health Centers\n", + "16 51802 2.721903 Federally Qualified Health Centers\n", + "17 74269 2.113937 Federally Qualified Health Centers\n", + "18 41958 4.004004 Federally Qualified Health Centers" ] }, - "execution_count": 15, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "coverage.results.head()" + "coverage.calculate(upper_threshold=1800).head()" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "coverage.write_csv()" + "#Writes output to csv\n", + "\n", + "coverage.model_results.to_csv('/Users/whlu/spatial_access/data/coverage score/coverage_results.csv')" ] }, { @@ -512,7 +541,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -536,95 +565,74 @@ " \n", " \n", " \n", - " target\n", - " lat\n", - " lon\n", - " coverage\n", + " service_pop\n", + " percap_spending\n", " \n", " \n", - " lower_areal_unit\n", - " \n", - " \n", + " spatial_index\n", " \n", " \n", " \n", " \n", " \n", " \n", - " 44\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", + " ALBANY PARK\n", + " 305008\n", + " 1.638229\n", " \n", " \n", - " 59\n", - " 200000.0\n", - " 41.831274\n", - " -87.676580\n", - " 3.231279\n", + " ARCHER HEIGHTS\n", + " 59620\n", + " 1.777927\n", " \n", " \n", - " 34\n", - " 170000.0\n", - " 41.852812\n", - " -87.634843\n", - " 1.996641\n", + " ARMOUR SQUARE\n", + " 58671\n", + " 2.897513\n", " \n", " \n", - " 31\n", - " 691000.0\n", - " 209.274216\n", - " -438.350068\n", - " 10.296501\n", + " AUBURN GRESHAM\n", + " 106340\n", + " 2.461102\n", " \n", " \n", - " 28\n", - " 2020000.0\n", - " 502.477414\n", - " -1052.049515\n", - " 28.417641\n", + " AUSTIN\n", + " 248120\n", + " 3.094732\n", " \n", " \n", "\n", "" ], "text/plain": [ - " target lat lon coverage\n", - "lower_areal_unit \n", - "44 NaN NaN NaN NaN\n", - "59 200000.0 41.831274 -87.676580 3.231279\n", - "34 170000.0 41.852812 -87.634843 1.996641\n", - "31 691000.0 209.274216 -438.350068 10.296501\n", - "28 2020000.0 502.477414 -1052.049515 28.417641" + " service_pop percap_spending\n", + "spatial_index \n", + "ALBANY PARK 305008 1.638229\n", + "ARCHER HEIGHTS 59620 1.777927\n", + "ARMOUR SQUARE 58671 2.897513\n", + "AUBURN GRESHAM 106340 2.461102\n", + "AUSTIN 248120 3.094732" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "coverage._get_aggregate('coverage').head()" + "coverage.aggregate(aggregation_type=None, shapefile='/Users/whlu/spatial_access/data/chicago_boundaries/chi_comm_boundaries.shp', \n", + " spatial_index='community', projection='epsg:4326').head()" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Wrote aggregate to file: data/coverage_metrics/coverage_aggregate_0.csv\n" - ] - } - ], + "outputs": [], "source": [ - "coverage.write_aggregate('coverage')\n", + "#For community areas write to csv\n", "\n", - "#Saved as cov_aggregate_health_tracts_comm.csv" + "coverage.write_aggregated_results(filename = \"/Users/whlu/spatial_access/data/coverage score/coverage_aggregated.csv\", output_type = 'csv')" ] }, { @@ -634,237 +642,90 @@ "" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot\n", + "The following cumulative distribution function shows the number of tracts that fall below a certain level of per capita spending.\n" + ] + }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python3.6/site-packages/pandas/core/reshape/merge.py:544: UserWarning: merging between different levels can give an unintended result (1 levels on the left, 2 on the right)\n", - " warnings.warn(msg, UserWarning)\n" + "INFO:spatial_access.BaseModel:Plot was saved to: /Users/whlu/spatial_access/data/coverage score/coverage_cdf_plot.png\n" ] }, { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
(target, All Free Health Clinics)(target, Federally Qualified Health Centers)(target, Hospitals)(target, Other Health Providers)(target, School-Based Health Centers)(coverage, All Free Health Clinics)(coverage, Federally Qualified Health Centers)(coverage, Hospitals)(coverage, Other Health Providers)(coverage, School-Based Health Centers)
lower_areal_unit
44NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
59NaN200000.0NaNNaNNaNNaN3.231279NaNNaNNaN
34NaNNaNNaN170000.0NaNNaNNaNNaN1.996641NaN
31NaN369000.0NaNNaN322000.0NaN5.464956NaNNaN4.831545
28339000.0292000.0614000.0192000.0583000.05.8527414.3935488.3408392.3849457.445568
\n", - "
" - ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAEWCAYAAACQWmUDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3de5zVdZ3H8dcblEABFXV0xAvqWgpeIJU2bRWzbZNKzSxTNyUtuuhWm1tessTIVStz19VUXE0sQQkvqVnrpdQs7wIqqCWKCHNkUlMgCYbhs3/8vgOH8czMmeGcOTO/eT8fj/PgnO/5/b6/z+ccnc/5fn83RQRmZmbWu/WrdQBmZma24VzQzczMcsAF3czMLAdc0M3MzHLABd3MzCwHXNDNzMxywAXdrBeS9H1Jr0l6tdaxmFnP4IJuViZJx0l6XNJySQVJv5b0gfTeJElNkpalx58kXSqpvmj9cZLWpPVbHrd3IY4dgNOAkRGxbRvLDJX0X5IWpu28kF5v1dX8ezpJoyTdJemvkt6U9ISk8bWOy6y7uKCblUHSN4D/Av4T2AbYEfgJcETRYjdGxBBgGPAJYFvgieKiDjRExOCix8e7EM5OwOsR0dhGrAOAe4FRwEeAocABwOvA2C5sr0skbdRd20puB+4m+37qgK8CSyu5gRrkZFY2F3SzDkjaDPgecEpE3BwRf4uIpoi4PSK+2Xr59N5c4BjgL2Sj6U5vU9J1kv4i6WVJZ0vqJ+lDZEVruzTyvrbE6ieQ/eD4RETMi4g1EdEYEZMj4s7U/x6S7ksj2bmSDk/t/yjpVUn9i2L5hKSn0vN+ks6QNF/S65JmSBqW3hshKSSdLGkh8NvU/ovU51uSHpA0qqjvLSXdLmmppMfSroQHi97fXdLdkt6Q9LykT7fxeW0F7AxcFRGr0uMPEVHc1xGSZqdtzZf0kdS+naTb0jZekPSFonUmSZop6eeSlgIT2vsMzGrJBd2sY+8HBgK3dGaliGgGfgn8Uxe2+T/AZsAuwMFkRfpzEXEPcBjrRvoTSqz7IeA3EbG8VMeSNiYbzd5FNpL9N+B6Se+JiIeBvwEfLFrlOGBaev5V4MgU03bAX4HLWm3iYGAP4F/S618Du6VtPQlcX7TsZWl72wInpkdLnJuS/XiZltY9FvhJ8Q+CIq8DLwA/l3SkpG1a5TwWuA74JrA5cBCwIL09HViU8jka+E9JhxatfgQwM613fZmfgVn3iwg//PCjnQdwPPBqB8tMAn5eov1LwJ/T83HAGuDNosenS6zTH1hJto+8pe2LwH1F/SxqJ5a7gQvaef+fgFeBfkVt04FJ6fn3gWvS8yFkBXen9PpZ4NCi9eqBJmAjYAQQwC7tbHvztMxmKc8m4D1F738feDA9Pwb4fav1rwTOaaPv7YFLgfnpc34A2K1ovYtLrLMD0AwMKWo7H7i26Ht9oNU6bX4Gtf5v1Y++/fD+ILOOvQ5sJWmjiFjdyXWHA28UvW6IiO07WGcrYADwclHby6mvcrxOVmTash3wSkSsaaP/acAfJX0ZOAp4MiJaYtkJuEVS8brNZPutW7zS8iRN3Z8HfArYmqzQQpbjILIfAq+UWjdt632S3ixq2wj4WamkImIRcGra7g7AFLJR+fvJCvedJVbbDngjIpYVtb0M7NdGTC1xtfUZLC4Vm1l38JS7WcceAv5ONs1aNkn9gI8Dv+/k9l4jG/HtVNS2I+UXi3uAf0lT1qU0ADuk+N7Rf0TMIytqh7H+dDtkxe2wiNi86DEwIopjK76F43FkU9YfIhuVj0jtIju+YDXZyLrFDq22dX+rbQ2OiC93kD8R8QrZNPieRX3tWmLRBmCYpCFFba0/69a3pCznMzDrdi7oZh2IiLeA7wKXpf2zm0jaWNJhkn7Qevn03h5k09jbAj/u5PaagRnAeZKGSNoJ+Abw8zK7+BlZ0bkpHVTWLx18dlY6jesRsmn0b6VYx5H98LihqI9pZPuKDwJ+UdR+RYprp5Tr1pKKj/RvbQjZ7oPXgU3IzhIozvNmYFL6THcnO1agxR3AuyV9NsW5saT902e7HklbSDpX0j+kfLcCTgIeTotcDXxO0qHp/eGSdk+F/4/A+ZIGStobOJn19/O31tnPwKxbuKCblSEifkxWVM8mG1m+Qja9e2vRYsdIWk62b/w2siK2b0Q0dGGT/0ZWdF8EHiQrsNeUGetKshHxc2T705cCj5JNcz8SEauAw8lG4K+RnX53QkQ8V9TNdLJ99b+NiNeK2v875XaXpGVkBfN97YRzHdlofzEwj3UFtsWpZCP3V8l+iEwn+wFAmgb/MPAZspH0q8CFwLtKbGcV2ej/npTvM6mfCamvR4HPARcDbwH3s24G5Ni0bgPZgY/nRMTd7eTU2c/ArFsoovVskplZbUi6ENg2Ik7scGEzW49H6GZWM2mXwN7KjCWb7u7U6YFmlvFR7mZWS0PIptm3AxqBi8jO3TezTvKUu5mZWQ54yt3MzCwHevWU+xZbbBH19dtVtM/Vq5vYaKONK9pnT9WXcgXnm3fON9+c7zrPPjvvtYjYunV7ry7o9fXbMW3a9Ir2WSgspr6+3Aty9W59KVdwvnnnfPPN+a4zZsw+L5dq95S7mZlZDrigm5mZ5YALupmZWQ64oJuZmeWAC7qZmVkOVK2gS9pB0u8kPStprqSvpfZhku6W9Of07xapXZIukfSCpKckvbdasZmZmeVNNUfoq4HTImIP4B+BUySNBM4A7o2I3YB702vI7vy0W3pMBC6vYmxmZma5UrWCHhGFiHgyPV8GPAsMB44ApqbFpgJHpudHANdF5mFgc0n11YrPzMwsT7rlwjKSRgBjgEeAbSKiAFnRl1SXFhtOdo/pFotSW6FVXxPJRvDU1dVRKCyuaKxNTU0V77On6ku5gvPNO+ebb863Y1Uv6JIGAzcBX4+IpZLaXLRE2zvuHBMRU4ApACNHjopKXzmoL12NqC/lCs4375xvvvWWfMePP4xCoWHt6/r67bjzzl93up+u5FvVgi5pY7Jifn1E3Jyal0iqT6PzerJbJkI2It+haPXtgQbMzHKi9R97y5/6+u2YNWvO2tdjxuzTbduuWkFXNhS/Gng2In5c9NZtwInABenfXxa1nyrpBuB9wFstU/PWt/iPnuVV6z/2G6K3jFgrpa/l2xXVHKEfCHwWeFrS7NR2FlkhnyHpZGAh8Kn03p3AeOAF4G3gc1WMzSqo0gW4kn/0ivW1PwjO16xvqVpBj4gHKb1fHODQEssHcEq14rHydbZAV6sAm5lZ+Xr17VNtw5Uq3i7QZma9jwt6H1PqCEwXbzOz3s8FvY8pFBrWFnDvczQzyw8X9JwrNSI3M7P8cUHPueIRuZmZ5ZcLes54RG5m1je5oOeMR+RmZn2TC3ov5xG5mZmBC3qv5xG5mZlBFe+HbmZmZt3HBd3MzCwHXNDNzMxywPvQexkfBGdmZqW4oPcyPgjOzMxK8ZS7mZlZDrigm5mZ5YALupmZWQ5UraBLukZSo6RnitpulDQ7PRZImp3aR0haUfTeFdWKy8zMLI+qeVDctcClwHUtDRFxTMtzSRcBbxUtPz8iRlcxHjMzs9yqWkGPiAckjSj1niQBnwY+WK3tm5mZ9SW1Om3tn4AlEfHnoradJc0ClgJnR8TvS60oaSIwEaCuro5CYXFFA2tqaqp4nxtiwoQJNDY2rn1dyZx7Wq7V5nzzzfnmW2/OtytxdyXfWhX0Y4HpRa8LwI4R8bqkfYFbJY2KiKWtV4yIKcAUgJEjR0V9/fCKBlYoLKbSfW6IxsbGqp133tNyrTbnm2/ON996c75dibsr+Xb7Ue6SNgKOAm5saYuIlRHxenr+BDAfeHd3x2ZmZtZb1eK0tQ8Bz0XEopYGSVtL6p+e7wLsBrxYg9jMzMx6pWqetjYdeAh4j6RFkk5Ob32G9afbAQ4CnpI0B5gJfCki3qhWbGZmZnlTzaPcj22jfUKJtpuAm6oVi5mZWd75SnFmZmY54Lut9TC+PaqZmXWFC3oP49ujmplZV3jK3czMLAdc0M3MzHLABd3MzCwHXNDNzMxywAXdzMwsB1zQzczMcsAF3czMLAd8HnqN+UIyZmZWCS7oNeYLyZiZWSV4yt3MzCwHXNDNzMxywAXdzMwsB1zQzczMcsAF3czMLAeqVtAlXSOpUdIzRW2TJC2WNDs9xhe9d6akFyQ9L+lfqhWXmZlZHlVzhH4t8JES7RdHxOj0uBNA0kjgM8CotM5PJPWvYmxmZma5UrWCHhEPAG+UufgRwA0RsTIiXgJeAMZWKzYzM7O8qcWFZU6VdALwOHBaRPwVGA48XLTMotT2DpImAhMB6urqKBQWVzS4pqamivfZke7eXota5FpLzjffnG++9eZ8uxJ3V/Lt7oJ+OTAZiPTvRcBJgEosG6U6iIgpwBSAkSNHRX19ybrfZYXCYirdZ0e6e3stapFrLTnffHO++dab8+1K3F3Jt1uPco+IJRHRHBFrgKtYN62+CNihaNHtgYbW65uZmVlp3TpCl1QfEYX08hNAyxHwtwHTJP0Y2A7YDXi0O2PrLr4Zi5mZVUPVCrqk6cA4YCtJi4BzgHGSRpNNpy8AvggQEXMlzQDmAauBUyKiuVqx1ZJvxmJmZtXQqYIuaTNgeETM62jZiDi2RPPV7Sx/HnBeZ+IxMzOzTIf70CXdK2mopC2Ap8mmxn9Y/dDMzMysXOUcFDcsIpYCRwFTI2I04Cu5mZmZ9SDlFPSNJG0NfAq4vcrxmJmZWReUU9DPA+4HFkbEo5J2AV6qblhmZmbWGeUcFLcgIka2vIiIFyWdX8WYzMzMrJPKGaH/pETbZZUOxMzMzLquzRG6pLHA+4GtJX216K2hwMbVDszMzMzK196U+6bAVmmZrYval5EdIGdmZmY9RJsFPSJ+B/xO0k8j4sVujMnMzMw6qax96JI2b3khaQtJv6piTGZmZtZJ5RT0bSLizZYX6f7lvqOImZlZD1JOQV8jafuWF5J2rGI8ZmZm1gXlnIf+XeAPkn6bXh8CfLl6IZmZmVlndVjQI+JXRaewCTg9IhqrHpmZmZmVrZwpd4C/AwuBJcA/SDqgeiGZmZlZZ3U4Qpd0EnAaMJzs9qn7Aw8D46oamZmZmZWtnBH6vwP7kV3T/Z+AfYFCVaMyMzOzTimnoP89IlYASBoQEXOB3TtaSdI1kholPVPU9kNJz0l6StItLee3SxohaYWk2elxRVcTMjMz64vKKeiFVHhvB/5P0k1k+9I7ci3wkVZtdwN7RsTewJ+AM4vemx8Ro9PjS2X0b2ZmZkk5R7kfnp5+R9KhwGZAh1eKi4gHJI1o1XZX0cuHgaPLjtTMzMza1G5Bl9QfeDIi9gGIiHsruO2TgBuLXu8saRawFDg7In7fRkwTgYkAdXV1FAqLKxgSNDU1VbzP1qrdf7m6I9eexPnmm/PNt96cb1fi7kq+7Rb0iGiWNE/S8Iio2Ccp6dvAauD61FQAdoyI1yXtC9wqaVRELC0R0xRgCsDIkaOivn54pcLKAiksptJ9tlbt/svVHbn2JM4335xvvvXmfLsSd1fyLedKcVsBz0p6CPhbS2NEHNW58DKSTgQ+BhwaEZH6WgmsTM+fkDQfeDfweFe20ZOMH38YhULD2tf19b4MvpmZVV45Bf2CSm1M0keA04GDI+LtovatgTfSjMAuwG5ALm7ZWig0MGvWnFqHYWZmOddmQZd0V0R8uKv7zSVNJ7v4zFaSFgHnkB3V/i7gbkkAD6cj2g8CvidpNdAMfCki3ujKds3MzPqi9kboW29IxxFxbInmq9tY9ibgpg3ZnpmZWV/WXkHfTFKb+8kj4uYqxGNmZmZd0G5BJzt4TSXeC8AF3czMrIdor6C/HBEndVskZmZm1mXtXfq11MjczMzMeqD2Cvpnuy0KMzMz2yBtFvSIeKat98zMzKxnKefCMmZm1sNIYs2a1WTX28y/Lbfckubm1bUOo9Nuv/32LsW95ZZbsmbNaqT+pOu2dKi9C8vcGxGHSrowIk7vdDRmZlY1Q4cOBfrRr5/K/oPfmzU3r6F//943Bl26dBnbb9/5uJub1wD9iGhGKm/99paql3QwcLikG2h1kFxEPNnpCM3MrCI22mgjpL5RzPuqbBam/OXbK+jfBc4Atgd+3Oq9AD7Y2eDMzKxyXMzzrbPfb5sFPSJmAjMlfSciJm9oYGZmZlY9HU7MR8RkSYeT3UAF4L6IuKO6YZmZWWd86EMf5PXXX69Yf1tuuSX33PPbivWXZw0Ni/nqV/+NmTNvZu7cudxxx+2cfvoZ3R5HhwVd0vnAWOD61PQ1SQdGxJlVjczMzMpWyWJejf5aW716NRtt1PsOcuvIqFGjGDVqVE22Xc6n+VFgdESsAZA0FZhFditUMzProxoaFnPKKV9hzz334vnnn2PHHXdi8uTv89JLL3HRRT9ixYq32XzzzTn33MlsvfXWfP7zJ7PPPvswe/ZsDj74YD760Y9x3nmTWbRoMQBnnfVtRo8ezb//+9dZsuRVVq5cyXHHHc8nP3k0AAcc8I988pNH8/jjjzF06FDOP/9Chg0bVjK2adOuZ+bMmWy0UX923nkXLrzwB1xxxeUsWvQKjY2NvPrqEiZMmMBRR30SgKlTr+Wuu+6iqWkVhxzyQb785a/Q0LCYU089hdGjxzBnzmzq6uq4+OL/ZuDAgcybN49Jk85h4MCBjBkzZu12H3/8Ma67biqXXHIpV1xxOc899yzLl/+NV18tcNxxx3PccccDMGXKlfz613eyzTbbsvnmmzNy5EhOOOHEDfo+2rtSXLHNi55vtkFbNDOz3FiwYAGf/OQnmTFjJoMHb8qMGTdy4YUX8MMf/ohp027giCOO5LLL/mft8suWLePqq6/hhBNO5Ac/uIB9992PGTN+wfTpN7DrrrsCMGnSuUybdgPXXz+d6dOn8eabbwKwYsUK9thjD6ZPv5H3vndfpky5os24fvrTn3LDDTcyY8ZMzj777LXtf/rTn7nkkkuZOvU6pky5ksbGRh566I8sXLiQn//8em64YQbPPjuPJ554AoCFCxdyzDHHcNNNtzBkyFDuvfeeFON3+da3Tue6637W7ufT0NDAT35yOT/72fVMmXIlTU1NzJ07l3vvvZfp02/koot+zLx587r24bdSzgj9fGCWpN+Rnbp2EB6dm5kZsO222zJ6dDZCHT/+o1x99dXMn/8CX/7ylwBYs6aZrbbaau3yH/7wv6x9/uijjzF58nkA9O/fnyFDhgAwffo0fvvbbP/9kiVLWLhwIbvvvjv9+vVbu/5HP/oxTjvtG23G9e5378ZZZ53JIYccwiGHrDspa9y4cQwcOJCBAwey3377M3fuM8yaNYuHHnqIz3zmGABWrHibhQtfpr5+W7bbbjjvec/uAOyxxx40NDSwbNkyli1bxn777bc2lj/84cGScYwePYYBAwYwYMAAhg0bxhtvvMHs2bPWxgFw0EEHlVy3s8o5KG66pPuA/ckK+ukR8WpFtm5mZr3c+qdWbbrpJuyyy65tjlwHDRrUbm+PP/4YjzzyMFOnXsegQYP4/OdPZtWqlaW33M5ZXZdccilPPvkE999/P1ddNYWZM29O67ReSUQEJ510Ekcf/an13mloWMyAARuvfd2/f39WrlxJduZ2eaeUbbzxujLbr18/mptXE1W6vF9ZU+4RUYiI2yLil50p5pKukdQo6ZmitmGS7pb05/TvFqldki6R9IKkpyS9t/PpmJlZd3r11QJz5swB4De/+Q177bU3b77517VtTU1NzJ//Qsl1x44dyy9+MQOA5uZmli9fzrJlyxk6dCiDBg3ipZde4umnn1q7/Jo1a7jnnrsB+PWv71w7M9DamjVrWLLkVfbffyxf+9rXWbZsGStWvA3Afffdx8qVK3nzzTd54onHGTVqFAcccAC//OWtvP12tkxj4xLeeKPtgwKHDBnKkCGDmTXryRTLr8r+vADGjBnDAw/cz8qVK3n77bd58MHfd2r9tlT7EMNrgUuB64razgDujYgLJJ2RXp8OHAbslh7vAy5P/5qZWQe23HLLip+2Vo6dd96F22+/jfPOm8wOO+zIN7/5LQ444AAuvPBCli9fTnPzao4//l/Zddd/eMe63/rW6Uye/D1uvfUW+vXrz1lnfZsDDzyQmTN/wac/fTQ77TSCvfbae+3ygwYNYv78+Rx33GcYPHgwF1zwg5IxNTc38+1vn8Xy5cuJCI4//l8ZMmQoAHvuuSdf/eqpFAqv8oUvTKSuro66ujpeeuklTjzxs2k7m3Deef9J//5tj3knTfre2oPiDjjggLI+qxajRu3JwQeP45hjPkV9fT0jR45i8ODBneqjFFVr6L92A9II4I6I2DO9fh4YFxEFSfVk57W/R9KV6fn01su11ffIkaNi2rTpFY23UFhMff3wivU3Zsw+zJo1p2L9VVKlc+3pnG++9bV8V636OwMGDKxpDMXnX1fbqlWrGDfuIP74x4e73McVV1zOJptsssFHk3fGvHlzGTnynaexvf3222yyySasWLGCk08+ie9857vssccea99ftWoVAwYMoLl59TuuYT9mzD5PRMR+rftsd4QuqR/wVEsxrpBtWop0Kup1qX048ErRcotS23oFXdJEYCJAXV0dhcLiCoaWTQ9Vus9K91cp1ci1J3O++dbX8h02bBirVq2qaQyrVjUREd0SR8vgc0O21dzczOrVq7v9cyu1vXPPncRLL73IqlWrGD/+o+y6667rLbfuc11DY+OSsrbTbkGPiDWS5kjaMSIWdi6FTit1hME7pg8iYgowBbIReqV/kVfjV35PHTX0tRGN8823vpZvNkIfUNMYRowYwU033dIt21q1alXJ0fn55/8ns2fPXq/tuOOO44gjjnzHsqeccmrV4mtPqe/pwgtL7y5oUTxCL/e/63L2odcDcyU9CvytpTEiDi9rC++0RFJ90ZR7Y2pfBOxQtNz2QEMXt2FmZn3AmWeeVesQeoxyCvq5Fd7mbcCJwAXp318WtZ+abtX6PuCt9vafm5n1dRHhO67lWGePcSvnPPT7Je0E7BYR90jaBOhfTueSpgPjgK0kLQLOISvkMySdDCwEWk78uxMYD7wAvA18rlOZmJn1Idm10LOpXBf1fMp+sJW/fDk3Z/kC2UFow4BdyQ5UuwI4tIxgjm3jrXesG9lPkVM66tPMzGDp0qUMHDiQNWtqHUl3WUNz8+paB9FpQ4cO6WLca4A1SGWNn4HyptxPIbvb2iMAEfHnoiPTzcysBiKCfv3yd7eytjQ2LumVBz1+/OMf79Kpy13Jt5wrxa2MiLXH0kvaiBJHn5uZmVntlFPQ75d0FjBI0j8DvwBur25YZmZm1hnlFPQzgL8ATwNfJDt47ex21zAzM7NuVc5R7mskTSXbhx7A81Ht68WamZlZp5RzlPtHyY5qn092NbedJX0xIn5d7eDMzMysPOUcInkRcEhEvAAgaVfgV4ALupmZWQ9Rzj70xpZinrzIusu1mpmZWQ/Q5ghd0lHp6VxJdwIzyPahfwp4rBtiMzMzszK1N+X+8aLnS4CD0/O/AFtULaJebvz4wygU1t1Tpr5+uxpGY2ZmfUWbBT0ifC31LigUGrp0VSAzM7MNUc5R7jsD/waMKF5+A26famZmZhVWzlHutwJXk10drs/cBsDMzKw3Kaeg/z0iLql6JGZmZtZl5RT0/5Z0DnAXsLKlMSKerFpUZmZm1inlFPS9gM8CH2TdlHuk12ZmZtYDlFPQPwHsUnwLVTMzM+tZyinoc4DNqdDV4SS9B7ixqGkX4LtpG18gO88d4KyIuLMS2zQzM8u7cgr6NsBzkh5j/X3oXTptLSKeB0YDSOoPLAZuAT4HXBwRP+pKv2ZmZn1ZOQX9nCpu/1BgfkS8LKmKmzEzM8u3cu6Hfn8Vt/8ZYHrR61MlnQA8DpwWEX9tvYKkicBEgLq6OgqFxRUNqKmpaYP7rHRM1VKJXHsT55tvzjffenO+XYm7K/mWc6W4ZWRHtQMMADYG/hYRQzsd4fr9DgAOB85MTZcDk9O2JpPdtvWk1utFxBRgCsDIkaOivn74hoTxDoXCYja0z0rHVC2VyLU3cb755nzzrTfn25W4u5JvOSP0IcWvJR0JjO1caCUdBjwZEUvSdpYUbeMq4I4KbMPMzKxPKOd+6OuJiFupzDnox1I03S6pvui9TwDPVGAbZmZmfUI5U+5HFb3sB+zHuin4LpG0CfDPwBeLmn8gaXTqe0Gr98zMzKwd5RzlXnxf9NVkxfaIDdloRLwNbNmq7bMb0qeZmVlfVs4+dN8X3czMrIdrs6BL+m4760VETK5CPGZmZtYF7Y3Q/1aibVPgZLLpchd0MzOzHqLNgh4RF7U8lzQE+BrZ5VlvIDtH3MzMzHqIdvehSxoGfAM4HpgKvLfU1dvMzMysttrbh/5D4Ciyq7LtFRHLuy0qMzMz65T2LixzGrAdcDbQIGlpeiyTtLR7wjMzM7NytLcPvdNXkTMzM7PacNE2MzPLARd0MzOzHHBBNzMzywEXdDMzsxxwQTczM8sBF3QzM7MccEE3MzPLARd0MzOzHHBBNzMzy4F2b85STZIWAMuAZmB1ROyXbgZzIzACWAB82jeDMTMz61itR+iHRMToiNgvvT4DuDcidgPuTa/NzMysA7Uu6K0dQXabVtK/R9YwFjMzs16jZlPuQAB3SQrgyoiYAmwTEQWAiChIqmu9kqSJwESAuro6CoXFFQ2qqampU31OmDCBxsbGta+rEVO1dDbX3s755pvzzbfenG9X4u5KvrUs6AdGREMq2ndLeq6clVLhnwIwcuSoqK8fXtGgCoXFdKbPxsZGZs2aU9EYuktnc+3tnG++Od986835diXuruRbsyn3iGhI/zYCtwBjgSWS6gHSv41t92BmZmYtalLQJW0qaUjLc+DDwDPAbcCJabETgV/WIj4zM7PeplZT7tsAt0hqiWFaRPxG0mPADEknAwuBT9UoPjMzs16lJgU9Il4E9inR/jpwaPdHZGZm1rv1tNPWzMzMrAtc0M3MzHLABd3MzCwHXNDNzMxywAXdzMwsB1zQzczMcsAF3czMLAdc0M3MzHLABd3MzCwHXNDNzPw1gKwAAAxxSURBVMxywAXdzMwsB1zQzczMcsAF3czMLAdc0M3MzHLABd3MzCwHXNDNzMxywAXdzMwsB7q9oEvaQdLvJD0raa6kr6X2SZIWS5qdHuO7OzYzM7PeaqMabHM1cFpEPClpCPCEpLvTexdHxI9qEJOZmVmv1u0FPSIKQCE9XybpWWB4d8dhZmaWJ7UYoa8laQQwBngEOBA4VdIJwONko/i/llhnIjARoK6ujkJhcUVjampq6nSflY6hu3Ql197M+eab88233pxvV+LuSr41K+iSBgM3AV+PiKWSLgcmA5H+vQg4qfV6ETEFmAIwcuSoqK+v7OC+UFhMZ/usdAzdpSu59mbON9+cb7715ny7EndX8q3JUe6SNiYr5tdHxM0AEbEkIpojYg1wFTC2FrGZmZn1RrU4yl3A1cCzEfHjovb6osU+ATzT3bGZmZn1VrWYcj8Q+CzwtKTZqe0s4FhJo8mm3BcAX6xBbGZmZr1SLY5yfxBQibfu7O5YumL8+MMoFBrWvq6v366G0ZiZmWVqepR7b1QoNDBr1pxah2FmZrYeX/rVzMwsB1zQzczMcsAF3czMLAdc0M3MzHLABd3MzCwHfJR7KxMmTKCxsbHN932ampmZ9UQu6K00Njb6tDQzM+t1POVuZmaWAy7oZmZmOeCCbmZmlgMu6GZmZjnggm5mZpYDLuhmZmY54IJuZmaWAy7oZmZmOeCCbmZmlgM9rqBL+oik5yW9IOmMWsdjZmbWG/Sogi6pP3AZcBgwEjhW0sjaRmVmZtbz9aiCDowFXoiIFyNiFXADcESNYzIzM+vxetrNWYYDrxS9XgS8r3gBSROBienl8jFj9nm+wjFsNWbMPq9VuM+eaiugr+QKzjfvnG++9dp8x4zZpyurtZfvTqUae1pBV4m2WO9FxBRgStUCkB6PiP2q1X9P0pdyBeebd84335xvx3ralPsiYIei19sDDTWKxczMrNfoaQX9MWA3STtLGgB8BritxjGZmZn1eD1qyj0iVks6Ffg/oD9wTUTM7eYwqjad3wP1pVzB+ead880359sBRUTHS5mZmVmP1tOm3M3MzKwLXNDNzMxywAU96WuXnJW0QNLTkmZLerzW8VSapGskNUp6pqhtmKS7Jf05/btFLWOspDbynSRpcfqOZ0saX8sYK0XSDpJ+J+lZSXMlfS215/L7bSffvH6/AyU9KmlOyvfc1L6zpEfS93tjOnC612sn32slvVT0/Y7usC/vQ197ydk/Af9MdurcY8CxETGvpoFVkaQFwH4R0Ssv1NARSQcBy4HrImLP1PYD4I2IuCD9aNsiIk6vZZyV0ka+k4DlEfGjWsZWaZLqgfqIeFLSEOAJ4EhgAjn8ftvJ99Pk8/sVsGlELJe0MfAg8DXgG8DNEXGDpCuAORFxeS1jrYR28v0ScEdEzCy3L4/QM77kbM5ExAPAG62ajwCmpudTyf4o5kIb+eZSRBQi4sn0fBnwLNlVJnP5/baTby5FZnl6uXF6BPBBoKW45en7bSvfTnNBz5S65Gxu/4dJArhL0hPpcrp9wTYRUYDsjyRQV+N4usOpkp5KU/K5mIIuJmkEMAZ4hD7w/bbKF3L6/UrqL2k20AjcDcwH3oyI1WmRXP2Nbp1vRLR8v+el7/diSe/qqB8X9EyHl5zNoQMj4r1kd7Y7JU3ZWr5cDuwKjAYKwEW1DaeyJA0GbgK+HhFLax1PtZXIN7ffb0Q0R8RosquFjgX2KLVY90ZVPa3zlbQncCawO7A/MAzocPeRC3qmz11yNiIa0r+NwC1k/9Pk3ZK0P7Jlv2RjjeOpqohYkv5QrAGuIkffcdrXeBNwfUTcnJpz+/2WyjfP32+LiHgTuA/4R2BzSS0XQ8vl3+iifD+SdrVERKwEfkoZ368LeqZPXXJW0qbp4BokbQp8GHim/bVy4TbgxPT8ROCXNYyl6lqKW/IJcvIdp4OIrgaejYgfF72Vy++3rXxz/P1uLWnz9HwQ8CGy4wZ+BxydFsvT91sq3+eKfpyK7HiBDr9fH+WepFM+/ot1l5w9r8YhVY2kXchG5ZBd/nda3vKVNB0YR3YLwiXAOcCtwAxgR2Ah8KmIyMWBZG3kO45sOjaABcAXW/Yx92aSPgD8HngaWJOazyLbr5y777edfI8ln9/v3mQHvfUnG3TOiIjvpb9bN5BNP88C/jWNXnu1dvL9LbA12S7h2cCXig6eK92XC7qZmVnv5yl3MzOzHHBBNzMzywEXdDMzsxxwQTczM8sBF3QzM7MccEE36yRJzenuR89I+oWkTTawv/+Q9Fzqb46kE7rYz+HppiRIOlLSyE6uv42kO1IM8yTd2ZU4OrnNBZK2Ss//WMF+x0j63/R8kqT/aGe73053uXoqfa/vS+33KbsD41Pp+7m06HzhAZIeKLrQiVnNuaCbdd6KiBid7mq2iuyuSGVJd/Yrfv0lsrv8jU39HUTpSxF3KCJui4gL0ssjgU4VdOB7ZNeR3iciRgLdehvhiDiggt2dBfxPRwtJej/wMeC9EbE32UU9iu/rcHxq3xtYSbqYSbqJ073AMRWM2WyDuKCbbZjfA/8AIOlfld3XeLakK1uKt6Tlkr4n6RHg/a3WPwv4Ssu1yCPirYiYmtb7rqTH0sh9SrpiVMvI8b8k/TG9Nza1T0ijyAOAw4Efplh2lfSF1NccSTe1MatQT3YZZFIsT6V+x6XR6C1p5H6FpH7pvQ9LekjSk2m2YnBqXyDp3NT+tKTdU/uWku6SNEvSlRT9eJG0vGh790mamUbG1xflPj61PSjpEkl3tE5C2VUQ946IOWV8f/XAay0XKImI11oui1wsFfBvATtK2ic13wocX8Y2zLqFC7pZF6Xp1sOApyXtQTZaOzDdZKGZdX/sNwWeiYj3RcSDResPAYZExPw2NnFpROyfRu6DyEaSLTZNI9qvANcUrxQRfyS7DOo300zCfLL7SO8fEfuQXUbz5BLbuwy4WtLv0jT0dkXvjQVOA/YiuyHIUWnK+mzgQ+lGP4+T3bO6xWup/XKgZcr7HODBiBiTYtyxjdzHAF8nm2XYBThQ0kDgSuCwiPgA2VW0StmP8i+Dehewg6Q/SfqJpIPbWjAimoE5ZDfMIG1j/zK3Y1Z1LuhmnTdI2a0OHye7xOjVwKHAvsBj6b1DyQoRZMX9phL9iPbvGHWIpEckPU12L+hRRe9Nh7X3QR/asm+3HXtK+n3q6/hWfZH6+r8U81VkRWuWpJai+WhEvJiK2nTgA2Q3zBgJ/CHlfCKwU1GXLTdNeQIYkZ4fBPw8be9XwF/biPfRiFiUbjwyO62/O/BiRLxU/BmUUA/8pTi1NpZruQ/1vsDEtM6Nkia0sTwUzSikz2JV+mFmVnM+oMOs81akUfhaaUp4akScWWL5v6c//uuJiKWS/iZpl4h4sVV/A4GfAPtFxCuSJgEDi1dv3V0HMV8LHBkRc1LBGldqoXTt82nAtDSdfRDwehvbE9k+92Pb2GbLdbabWf9vTTnXmy6+RnfL+uUeW7CC9T+r18mKfLEhwJuwtjDfB9yXfvCcSPZ5rSftQtmLbIajxbuAv5cZl1lVeYRuVhn3AkdLqgOQNEzSTh2sA3A+cJmkoWm9oZImsq4gvZb2Sx/dar1j0vIfAN6KiLdavb+MrGi1GAIUlN2Gs+R+X0kfbNm3nkadu5LNQEB2j+ad077zY4AHgYfJpsJbjiHYRNK7O8j3gZbtSzoM2KKD5Ys9B+wiaUR63dYBac+Sjmso2ubhWneHwaOAORHRLOk9knYrWnY08HLrDtPndj7wStGxBVsCf4mIpk7kYFY1HqGbVUBEzJN0NnBXKnpNwCmUKA6tXA4MJpuqb0rrXRQRb0q6iuwOWwvIbvFb7K/KTvMaCpxUot8bgKskfZXsx8B3yO5G9nLqs9Q08b7ApZJWk/3Y/9+IeEzSOOAh4AKyEeoDwC0RsSaN9qdLelfq42zgT+3ke25a/kngftb9YOhQRKyQ9BXgN5JeAx5tY7nnJG0maUhELIuIpyRdCjwoKcjuk/75tPhg4H/SLovVwAtk0+8trpe0kmwkfg9wRNF7hwBVP7XPrFy+25pZLyPpPuA/IuLxbtreuLS9j3W0bDfEMjgilqddHJcBf46Ii0ss9+/Asoj43yrGcjNwZkQ8X61tmHWGp9zNrDf5QjoAby6wGdlR76Vczvr74StK0gDgVhdz60k8QjczM8sBj9DNzMxywAXdzMwsB1zQzczMcsAF3czMLAdc0M3MzHLg/wFNftrxnmnjEAAAAABJRU5ErkJggg==\n", "text/plain": [ - " (target, All Free Health Clinics) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 NaN \n", - "34 NaN \n", - "31 NaN \n", - "28 339000.0 \n", - "\n", - " (target, Federally Qualified Health Centers) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 200000.0 \n", - "34 NaN \n", - "31 369000.0 \n", - "28 292000.0 \n", - "\n", - " (target, Hospitals) (target, Other Health Providers) \\\n", - "lower_areal_unit \n", - "44 NaN NaN \n", - "59 NaN NaN \n", - "34 NaN 170000.0 \n", - "31 NaN NaN \n", - "28 614000.0 192000.0 \n", - "\n", - " (target, School-Based Health Centers) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 NaN \n", - "34 NaN \n", - "31 322000.0 \n", - "28 583000.0 \n", - "\n", - " (coverage, All Free Health Clinics) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 NaN \n", - "34 NaN \n", - "31 NaN \n", - "28 5.852741 \n", - "\n", - " (coverage, Federally Qualified Health Centers) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 3.231279 \n", - "34 NaN \n", - "31 5.464956 \n", - "28 4.393548 \n", - "\n", - " (coverage, Hospitals) (coverage, Other Health Providers) \\\n", - "lower_areal_unit \n", - "44 NaN NaN \n", - "59 NaN NaN \n", - "34 NaN 1.996641 \n", - "31 NaN NaN \n", - "28 8.340839 2.384945 \n", - "\n", - " (coverage, School-Based Health Centers) \n", - "lower_areal_unit \n", - "44 NaN \n", - "59 NaN \n", - "34 NaN \n", - "31 4.831545 \n", - "28 7.445568 " + "
" ] }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "coverage.agg_area_cat().head()" + "coverage.plot_cdf(filename = '/Users/whlu/spatial_access/data/coverage score/coverage_cdf_plot.png',\n", + " plot_type = \"percap\", title = 'CDF of Coverage Score',\n", + " xlabel = 'Per Capita Spending (USD)',\n", + " ylabel = 'Number of Tracts')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Choropleth Mapping" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python3.6/site-packages/pandas/core/reshape/merge.py:544: UserWarning: merging between different levels can give an unintended result (1 levels on the left, 2 on the right)\n", - " warnings.warn(msg, UserWarning)\n", - "INFO:ScoreModel:Wrote aggregate to file: data/coverage_metrics/walkagg_area_cat_0.csv\n" + "INFO:spatial_access.BaseModel:Figure was saved to: /Users/whlu/spatial_access/data/coverage score/coverage_choropleth.png\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "coverage.write_agg_area_cat()\n", - "\n", - "#Saved as cov_aggregate_health_tracts_comm_cat.csv" + "coverage.plot_choropleth(column = \"percap_spending\",\n", + " shapefile='/Users/whlu/spatial_access/data/chicago_boundaries/chi_comm_boundaries.shp',\n", + " title = 'Per Capita Spending (USD), Chicago Community Areas',\n", + " include_destinations = False,\n", + " filename = '/Users/whlu/spatial_access/data/coverage score/coverage_choropleth.png')" ] }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "See all results in chicago_boundaries.shp" - ] + "source": [] }, { "cell_type": "code", diff --git a/docs/notebooks/notes.ipynb b/docs/notebooks/0_master.ipynb similarity index 75% rename from docs/notebooks/notes.ipynb rename to docs/notebooks/0_master.ipynb index c50a48b..c83eb26 100755 --- a/docs/notebooks/notes.ipynb +++ b/docs/notebooks/0_master.ipynb @@ -5,14 +5,12 @@ "metadata": {}, "source": [ "# Estimating Travel Time Distance Matrices, Access, and Coverage Metrics \n", - "## Chicago's Health Facilities \n", "\n", "
\n", - "Irene Farah \n", - "irenef@uchicago.edu \n", + "[Irene Farah](https://www.linkedin.com/in/imfarah/), [Richard Lu](https://www.linkedin.com/in/richard-lu-576874155/), [Caitlyn Tien ](https://www.linkedin.com/in/caitlyn-tien-0b784b161/) \n", "Center for Spatial Data Science \n", "University of Chicago \n", - "July 31, 2018 \n", + "July 30, 2019\n", "
" ] }, @@ -21,7 +19,7 @@ "metadata": {}, "source": [ "---\n", - "\n", + "This notebook describes the reasoning of the Python modules p2p, ScoreModel, and CommunityAnalytics which compose the calculation of the algorithm of travel time **matrices** and the estimation of the **metrics**. Please note that this report stipulates the **_parameters_** specified within the estimations so the users can reproduce the calculations.\n", "\n", "The purpose of this report is threefold: present the comprehensive methodology for efficiently estimating travel time network distances, generating useful metrics, and illustrating its usage. Specifically, we create an open-source backend infrastructure for estimating travel time network distances (walking and driving), providing the framework for calculating **access** and **coverage** metrics. These two metrics address both the demand and supply of services and goods. On the one hand, the access score focuses on the attributes of the **origins** while on the other, the coverage score focuses on the attributes from the **destinations** of interest. Moreover, this framework allows subsetting of the data according to the user's specific questions of interest. These analyses create a powerful tool for supporting stakeholders and researchers in improving transparent decision-making processes and in understanding the issues of unequal spatial access.\n", "\n", @@ -39,10 +37,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - " \n", "Note: \n", "More seasoned users can edit the Python scripts directly. \n", "The package is written in Python 3.6, C++ 11, and Cython by [Logan Noel](https://www.linkedin.com/in/lmnoel/). (Minimum Python version 3.5) \n", @@ -69,7 +63,7 @@ "Specifically, there are two routes the user can take for getting the travel distances: Creating **asymmetric** or **symmetric** matrices. Symmetric matrices are estimated origin to origin, while asymmetric matrices calculate origin to destination. The user can generate a symmetric distance travel matrix and snap the points of interest to the matrix or create an asymmetric distance matrix that already incorporates origin and destination. The symmetric approach is more appropriate when you need to calculate several scores (across years or different types of scores) for the same area and at the same level of analysis. \n", "\n", "**Metrics** \n", - "After obtaining the distance travel times from origins to destinations (in this case, from the centroids of tracts to the health facilities), the user can calculate the **access score** from each tract areal unit to health facilities, the time to **closest destinations** (nearest neighbor), the **count of nearby destinations** within a thirty minute buffer, and the destination's **coverage score**. \n" + "After obtaining the distance travel times from origins to destinations (in this case, from the centroids of tracts to the health facilities), the user can calculate the **access score** from each tract areal unit to health facilities, the time to **closest destinations** (nearest neighbor), the **count of nearby destinations** within a buffer, the **sum of an attribute** of nearby destinations (wthin a community area), the destination's **coverage score** (per capita spending within a buffer), and the amount of per capita spending each tract areal unit has access to using a **Two Stage Floating Catchment Area** method.\n" ] }, { @@ -83,14 +77,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The workflow first estimates a point to point shortest path [**(p2p)**](./scripts/p2p.py) algorithm for creating the travel-time distance matrix by travel mode (walking and driving). Then, it creates a score infrastructure [**(ScoreModel)**](./scripts/ScoreModel.py) for creating the metrics, using the ModelData class (parent of Access and Coverage Models created below). Specifically, this class allows the user to generate any type of metric, suiting each user's needs. Finally, it creates the models [**(CommunityAnalytics)**](./scripts/CommunityAnalytics.py) for creating aggregate measures of the access score and coverage score (creating the Access and Coverage Models classes). \n", + "The workflow first estimates a point to point shortest path [**(p2p)**](./spatial_access/p2p.py) algorithm for creating the travel-time distance matrix by travel mode (walking and driving). Then, it creates a base model infrastructure [**(BaseModel)**](./spatial_access/BaseModel.py) for creating the metrics, using the ModelData class (parent of Access and Coverage Models created below). Specifically, this class allows the user to generate any type of metric, suiting each user's needs. Finally, it creates the models [**(Models)**](./spatial_access/Models.py) for creating aggregate measures of the access score, AccessTime, AccessCount, AccessSum, DestinationSum, coverage score, and TSFCA output score (creating the Models classes). \n", "\n", "This framework provides the user with the flexibility to start at different stages along the process: \n", "\n", @@ -105,19 +99,19 @@ "source": [ "**The folder is organized as follows:**\n", "\n", - "Under the **demo** folder, the notebooks run through Chicago's health example: \n", - "* [reqs.ipynb](./reqs.ipynb) : This notebook shows the installation and files requirements in order to run the demos. \n", - "* [matrix.ipynb](./matrix.ipynb) : This notebook shows how to run the travel time distance matrices. It uses the [p2p](./scripts/p2p.py) script.\n", - "* [access_score.ipynb](./access_score.ipynb) : This notebook shows how to run the access score and the specific parameters that might be tweaked depending on the user's interest. It uses the [ScoreModel](./scripts/ScoreModel.py) and [CommunityAnalytics](./scripts/CommunityAnalytics.py) scripts.\n", - "* [coverage_score.ipynb](./coverage_score.ipynb) :This notebook shows how to run the coverage score and the specific parameters that might be tweaked depending on the user's interest. It uses the [ScoreModel](./scripts/ScoreModel.py) and [CommunityAnalytics](./scripts/CommunityAnalytics.py) scripts.\n", - "* [travel_time_metrics.ipynb](./travel_time_metrics.ipynb) :This notebook shows how to run the travel time distance matrices. It uses the [ScoreModel](./scripts/ScoreModel.py) and [CommunityAnalytics](./scripts/CommunityAnalytics.py) scripts. \n", - "* [calibration.ipynb](./calibration.ipynb) : **? Have it as a notebook/within the demos/in this notebook or not at all?** Comparison (validation and calibration) with GoogleMaps.\n", + "In the **docs** folder, under **notebooks**, the notebooks run through Chicago's health example: \n", + "* [reqs.ipynb](./docs/notebooks/reqs.ipynb) : This notebook shows the installation and files requirements in order to run the demos. \n", + "* [matrix.ipynb](./docs/notebooks/matrix.ipynb) : This notebook shows how to run the travel time distance matrices. It uses the [p2p](./spatial_access/p2p.py) script.\n", + "* [access_score.ipynb](./docs/notebooks/access_score.ipynb) : This notebook shows how to run the access score and the specific parameters that might be tweaked depending on the user's interest. It uses the [BaseModel](./spatial_access/Basemodel.py) and [Models](./spatial_access/Models.py) scripts.\n", + "* [coverage_score.ipynb](./coverage_score.ipynb) :This notebook shows how to run the coverage score and the specific parameters that might be tweaked depending on the user's interest. It uses the [BaseModel](./spatial_access/Basemodel.py) and [Models](./spatial_access/Models.py) scripts.\n", + "* [travel_time_metrics.ipynb](./docs/notebooks/travel_time_metrics.ipynb) :This notebook shows how to run the travel time distance matrices. It uses the [BaseModel](./spatial_access/Basemodel.py) and [Models](./spatial_access/Models.py) scripts. \n", + "* [calibration.ipynb](./docs/notebooks/calibration.ipynb) : **? Have it as a notebook/within the demos/in this notebook or not at all?** Comparison (validation and calibration) with GoogleMaps.\n", "\n", - "The **data** folder contains the files needed for the estimation of the metrics under **ORIG** (for origins) and **DEST** (for destinations). The **matrices** folder contains the estimated symmetric and asymmetric matrices. The **access_score**, **coverage_score**, and **travel_time_metrics** folders contain the results of the analyses. Finally, **figures** contain the results of maps and plots calculated during the process. \n", + "In the **data** folder, the **input_data** folder contains the files needed for the estimation of the metrics under **sources** (for origins) and **destinations** (for destinations). In the **data** folder within **spatial_access**, the **matrices** folder contains the estimated symmetric and asymmetric matrices. The **access_score**, **coverage score**, **tsfca**, and **travel_time_metrics** folders contain the results of the analyses. Finally, **figures** contain the results of maps and plots calculated during the process. \n", "\n", - "Further editing of the Python scripts is accessible under the folder **scripts**. \n", + "Further editing of the Python scripts is accessible under the folder **spatial_access**. \n", "\n", - "The rest of this notebook describes the reasoning of the Python modules p2p, ScoreModel, and CommunityAnalytics which compose the calculation of the algorithm of travel time **matrices** and the estimation of the **metrics**. Please note that this report stipulates the **_parameters_** specified within the estimations so the users can reproduce the calculations." + "The rest of this notebook describes the reasoning of the Python modules p2p, BaseModel, and Models which compose the calculation of the algorithm of travel time **matrices** and the estimation of the **metrics**. Please note that this report stipulates the **_parameters_** specified within the estimations so the users can reproduce the calculations." ] }, { @@ -138,7 +132,7 @@ "OSM's data structure is composed of four elements: nodes, ways, relations, and tags.\n", "Nodes are latitude and longitude coordinates (projected in WGS 84) that represent the map’s features. Ways are a list of nodes that compose the geometry features (i.e. point, line, polygon) within a map, depicting streets, waterways, parks, etc. Relations express the relationship between nodes and ways. Lastly, tags are attached to nodes, mays or relations, storing metadata about the map objects. \n", "\n", - "Then, the OpenStreetMap network is downloaded using the area of the previously determined bounding box. The complexity of the network depends on the number of nodes on the generated bounding box (i.e. the area of interest defined by the latitude and longitude coordinates). Therefore, the number of observations should not affect the efficiency of the running times. In order to get the distances from OSM, OSM net calculates the distances of the relations, creating the edges that are queried for the travel time estimation. To estimate these distances, the user has to specify data into a WGS 84 projection. (Please find more specifics in the [requirements file](./reqs.ipynb).) " + "Then, the OpenStreetMap network is downloaded using the area of the previously determined bounding box. The complexity of the network depends on the number of nodes on the generated bounding box (i.e. the area of interest defined by the latitude and longitude coordinates). Therefore, the number of observations should not affect the efficiency of the running times. In order to get the distances from OSM, OSM net calculates the distances of the relations, creating the edges that are queried for the travel time estimation. To estimate these distances, the user has to specify data into a WGS 84 projection. (Please find more specifics in the [requirements file](./docs/notebooks/reqs.ipynb).) " ] }, { @@ -163,7 +157,7 @@ "metadata": {}, "source": [ "**Script** \n", - "The p2p.py script runs the point to point (p2p) algorithm and creates two classes: **pyTMatrix** and **TransitMatrix**. The output of p2p is the travel time matrix which is computed in seconds. The **pyTMatrix** generates the environment in Python for estimating the time travel matrix by creating a wrapper for C++. The **TransitMatrix** unified class run manages all aspects of computing a transit time matrix where matrices can be symmetric or assymetric (as mentioned above). Therefore, load one input file if the user wants a symmetric distance graph, or two for an asymmetric matrix. Particularly, this class account for all the details that entail specifying the speed limits, creating the bounding box for the area of interest in order to run the OSM query and calculate the shortest path matrix. " + "The p2p.py script runs the point to point (p2p) algorithm and creates the class **TransitMatrix**. The output of p2p is the travel time matrix which is computed in seconds. The **TransitMatrix** unified class run manages all aspects of computing a transit time matrix where matrices can be symmetric or assymetric (as mentioned above). Therefore, load one input file if the user wants a symmetric distance graph, or two for an asymmetric matrix. Particularly, this class account for all the details that entail specifying the speed limits, creating the bounding box for the area of interest in order to run the OSM query and calculate the shortest path matrix. " ] }, { @@ -172,17 +166,17 @@ "source": [ "**Specifics of P2P parameters** \n", "Several parameters should be taken into account when calculating the distance network matrix: \n", - "* The **network type** can be determined for walking or driving. \n", + "* The **network type** can be determined for walking, biking, or driving. \n", "\n", "* Thresholds can be adjusted and are considered in the calculation of the distance matrix: the **average walking speed** is 5 km/h (3 mph) and the default **average driving speed** is of 40 km/h (25 mph). This parameter might be specified differently for different populations. * The City of Chicago estimates an average block dimension of 660 feet (200 m) by 330 feet (100 m).(https://www.cityofchicago.org/dam/city/depts/cdot/StreetandSitePlanDesignStandards407.pdf) STREET AND SITE PLAN DESIGN STANDARDS (2007:pg 2.) These dimensions might change across cities. >>> (Include table with conversions. Or reference to data on other cities) Therefore, the average walking speed of 3 mph estimates that a person, on average, walks a block in 72 to 144 seconds (1.2 - 2.4 min) to walk a block. The average speeds can be specified within the **p2p_parameters.json file**. For **driving** speed limits, open **speed_limit_dictionary.txt** file that contains speed limits for different OSM type of roads. \n", " \n", "* The **last mile** correction is the distance that is not accounted for when calculating the shortest path from the centroid of the block to the actual network; therefore, the wanting extra distance is added to the travel time distance(>>>). \n", " \n", - "* Also for walking and driving, a **node penalty** of X seconds can also be specified by the user for the number of intersections within the area of analysis. The logic is that having more intersections will increase the travel time due to crossings. However, by doing a time travel calibration between the p2p algorithm and GoogleMaps, there was no need for adding penalities for the city of Chicago. The calibration can be assessed for different cities by using a random set of latitude and longitude points and comparing both estimated travel times for p2p (using the default average speeds and speed limits) and the GoogleMaps API. **(PENDING)** (Show table in which the calibration was tested for different cities, suggesting values for each.) It can be specified within the **p2p_parameters.json file**. \n", + "* Also for walking and driving, a **node penalty** of X seconds can also be specified by the user for the number of intersections within the area of analysis. The logic is that having more intersections will increase the travel time due to crossings. However, by doing a time travel calibration between the p2p algorithm and GoogleMaps, there was no need for adding penalities for the city of Chicago. The calibration can be assessed for different cities by using a random set of latitude and longitude points and comparing both estimated travel times for p2p (using the default average speeds and speed limits) and the GoogleMaps API. **(PENDING)** (Show table in which the calibration was tested for different cities, suggesting values for each.) It can be specified within the **Configs.py** file.\n", " \n", "* The network is **directed**, meaning that one way streets are respected and A->B and B->A can have different edge traversal speeds. \n", "\n", - "* **Threshold constants**: the walk or drive average speed can be specified within the **p2p_parameters.json file**. \n", + "* **Threshold constants**: the walk or drive average speed can be specified within the **Configs.py** file.\n", "\n", "* **Epsilon**: Controls how large to make the network bounding box beyond your dataset. Larger epsilons result in longer computation times, but smaller epsilons result in slightly reduced accuracy at the very edges of the bounding box, especially for driving networks. The default is currently set at 0.05, which seems to balance the two reasonably well. (+/-) 0.02 will result in a large increase/decrease in computation time and accuracy. If too many values are defined as -1, it means that the epsilon is too small. Refer to the epsilon calibration to assess if this value must change and the matrix contains too many -1. The value of -1 is hardcoded in the tmat.h file and is considered as an NaN value of the origins when estimating the metrics. \n", "\n", @@ -197,9 +191,9 @@ "source": [ "**_Specifications_** \n", "\n", - "In the **demo prompt**, the user can specify: **network type, epsilon, primary input data (origin file), secondary input data (destination file if running an asymmetric matrix), and if the user wants to save the matrix to a csv file.** \n", + "In the **demo prompt**, the user can specify: **network type, primary input data (origin file), secondary input data (destination file if running an asymmetric matrix), and if the user wants to save the matrix to a csv file.** \n", "\n", - "In the **scripts**, the user can specify: **Average speeds, last mile corrections, node penalty, threshold constants, and output results** (meters instead of seconds - lines 580 - 599 of p2p.py). \n", + "In the **Configs**, the user can specify: **Average speeds, last mile corrections, node penalty, epsilon, threshold constants, and output results** (meters instead of seconds - lines 580 - 599 of p2p.py). \n", "\n", "In order to construct the matrices, the input table should contain **ID, latitude, longitude** for the origins and destinations.\n" ] @@ -220,7 +214,7 @@ "(Disregard this section if you only care about the travel-time matrix.)\n", "\n", "**Scripts** \n", - "CommunityAnalytics.py creates the classes: **AccessModel** and **CoverageModel**. As mentioned above, the access score, time to closest destination, and count of nearby destinations metrics are attributes of the origins while the coverage score is an attribute of the destinations in a catchment area. The access, coverage, and count of nearby destionation metrics are all estimated within a travel time network distance buffer. \n" + "Models.py creates the classes: **AccessModel** and **Coverage**. As mentioned above, the access score, time to closest destination, sum of nearby attributes, TSFCA (access to per capita spending), and count of nearby destinations metrics are attributes of the origins while the coverage score is an attribute of the destinations in a catchment area. The access to faciilities, acccess to per capita spending, coverage, and count of nearby destionation metrics are all estimated within a travel time network distance buffer. \n" ] }, { @@ -300,22 +294,20 @@ "In the **demo prompt**, the user can specify parameters in two different commands: \n", "\n", "**name.AccessModel( ):** \n", - "- network_type ('drive' or 'walk')\n", - "- source_filename (primary input data) \n", - "- dest_filename (secondary input data) \n", - "- sp_matrix_filename (origin-destination travel time matrix) \n", - "- decay_function ('linear', 'root', 'logit') \n", - "- limit_categories (only estimate model for specific categories)\n", - "\n", + "- network_type ('walk', 'bike', 'drive', 'otp') \n", + "- sources_filename (primary input data)\n", + "- destinations_filename (secondary input data)\n", + "- source_column_names (dictionary that map column names to expected values)\n", + "- dest_column_names (dictionary that map column names to expected values)\n", + "- transit_matrix_filename (sources-destination travel time matrix)\n", + "- decay_function ('linear', 'root', 'logit', default is 'linear')\n", "**name.calculate():**\n", - "- custom_weight_dict (Specifies the weights of each facility/establishment defined as a previously generated dictionary. If custom_weight_dict=None, the dictionary will contain [1,1,1,1,1,1,1,1,1,1] weights.)\n", - "- largest_weights_first=True sorts the weight array such that the largest values will be used first. If False, it will do the opposite.\n", - "- limit_categories (None is defined as default, but user can delimit on particular categories of interest to calculate the access score.) \n", - "- upper (is the time (in minutes) in which the origin and destinations are considered to be out of range of each other. As a default, if the travel time distance exceeds 30 minutes, the score will be zero.)\n", - "- custom_threshold=40 (change binning threshold specifying it in calculate() function. Example: model_name.calculate(custom_threshold=40) for changing the percent of population above a certain threshold.)\n", - "- normalize (Default is True and shows both normalized and non-normalized values. False shows only non-normalized results.) . \n", + "- upper_threshold (maximum time considered out of range in seconds, default is 30 minutes, when out of range, score will be zero)\n", + "- category_weight_dict (specifies the weights of each facility/establishment defined as dictionary, default dictionary will contain [1,1,1,1,1,1,1,1,1,1] weights.)\n", + "- normalize (accepts boolean, default is False and shows only non-normalized results, true shows normalized values.)\n", + "- normalize_type ('z_score' or 'minmax', default is 'minmax')\n", "\n", - "In the **scripts**, the user can specify: The default weights set before as [1,1,1,1,1,1,1,1,1,1] weights, different standarizations, and other modifications to the access score.\n", + "In the **Models**, the user can specify: The default weights set before as [1,1,1,1,1,1,1,1,1,1] weights, different standarizations, and other modifications to the access score.\n", "\n", "GO TO [ACCESS SCORE DEMO](./access_score.ipynb) " ] @@ -357,21 +349,20 @@ "source": [ "---\n", "**Destination-based** \n", - "The **Coverage** model generates a coverage access which defines the reach of services by a specific targeted population. The score focuses on the coverage of the destination, scrutinizing how many people are within a catchment area. Specifically, the per capita spending score is the ratio of the coverage score by population. Specifically, it takes the magnitude of the facility/establishment and divides it by the total population it serves within a bufffer (in this case, 30 minutes). In the specifications, the magnitude of the destination is denominated as target. \n", + "The **Coverage** model generates a coverage access which shows the per capita spending available to a specific targeted population. The model focuses on the coverage of the destination, scrutinizing how many people are within a catchment area. Specifically, it takes the total spending of the facility/establishment and divides it by the total population it serves within a buffer (in this case, 30 minutes). In the specifications, the magnitude of the destination is denominated as target. \n", "\n", "**_Specifications_** \n", "\n", - "**name.CoverageModel( ):** \n", - "- network_type ('drive' or 'walk')\n", - "- source_filename (primary input data) \n", - "- dest_filename (secondary input data) \n", - "- upper (is the time (in minutes) in which the origin and destinations are considered to be out of range of each other. As a default, if the travel time distance exceeds 30 minutes, the score will be zero.)\n", - "- The prompt will ask for the target which should be specified in the destination file, according to the user's needs. \n", + "**name.Coverage( ):** \n", + "- network_type ('walk', 'bike', 'drive', or 'otp')\n", + "- sources_filename (primary input data)\n", + "- destinations_filename (secondary input data)\n", + "- transit_matrix_filename (origin-destination transit matrix)\n", " \n", "**name.calculate():**\n", - "- Just processes the model specified above. \n", + "- upper_threshold (the time (in seconds) in which the origin and destinations are considered to be out of range of each other)\n", "\n", - "In the **scripts**, the user can specify further changed to the coverage score.\n", + "In the **Models**, the user can specify further changed to the coverage score.\n", "\n", "GO TO [COVERAGE SCORE DEMO](./coverage_score.ipynb) " ] diff --git a/docs/notebooks/0_reqs_install.ipynb b/docs/notebooks/0_reqs_install.ipynb new file mode 100644 index 0000000..83a176d --- /dev/null +++ b/docs/notebooks/0_reqs_install.ipynb @@ -0,0 +1,200 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Installation Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "--- \n", + "The package is written in Python 3.6, C++ 11 and Cython by [Logan Noel](https://www.linkedin.com/in/lmnoel/). (Minimum Python version 3.5) \n", + "Currently, the only supported operating systems are MacOS and Ubuntu (if you don't have either, a guide for installing Ubuntu 16.04 LTS is in README.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note: More seasoned users can download installation requirements directly on the terminal.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**For MacOS:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install Python3\n", + "! brew install python3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install homebrew\n", + "! /usr/bin/ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install pip3\n", + "! brew install pip3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install jupyter, jupyterlab, and jupyter hub\n", + "! brew install jupyter\n", + "! brew install jupyterlab" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Clone the repository:\n", + "! git clone https://github.com/jupyterhub/jupyterhub" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install spatial index package\n", + "! brew install spatialindex" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install spatial access package\n", + "! pip3 install spatial_access" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install scipy package\n", + "! brew install scipy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install geopy package\n", + "! pip install geopy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install geopandas package\n", + "! conda install geopandas" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Run setup.py to install all the packages\n", + "! sudo python setup.py install" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**For Ubuntu:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! sudo apt-get install libspatialindex-dev" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! sudo apt-get install python-tk" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip3 install spatial_access" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/1_matrix.ipynb b/docs/notebooks/1_matrix.ipynb new file mode 100755 index 0000000..d91fd09 --- /dev/null +++ b/docs/notebooks/1_matrix.ipynb @@ -0,0 +1,913 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Transit Matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sys, os\n", + "os.chdir('/Users/whlu/spatial_access/spatial_access')\n", + "from p2p import *\n", + "\n", + "import geopandas as gpd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "--- \n", + "

DEMO

\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**View structure of data example: Health Facilities in Chicago.** \n", + "Health Facilities Data: http://makosak.github.io/chihealthaccess/index.html" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geoid10lonlatPop2014Pov14communityID
017031842400-87.63004041.7424755157769441
117031840300-87.68188241.83209458811021592
217031841100-87.63509841.85100633632742343
317031841200-87.68334241.85556237101819314
417031838200-87.67507941.8704163296361285
\n", + "
" + ], + "text/plain": [ + " geoid10 lon lat Pop2014 Pov14 community ID\n", + "0 17031842400 -87.630040 41.742475 5157 769 44 1\n", + "1 17031840300 -87.681882 41.832094 5881 1021 59 2\n", + "2 17031841100 -87.635098 41.851006 3363 2742 34 3\n", + "3 17031841200 -87.683342 41.855562 3710 1819 31 4\n", + "4 17031838200 -87.675079 41.870416 3296 361 28 5" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv('/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Distance Matrices \n", + "\n", + " **Specifications for the asymmetric and symmetric distance matrices:** \n", + "\n", + "- network_type (drive or walk)\n", + "- epsilon=0.05 (can change default) \n", + "- primary_input \n", + "- secondary_input \n", + "- output_type='csv' \n", + "- n_best_matches=4 (for simulations)\n", + "- read_from_file=None \n", + "- write_to_file (set as True if user wants to save results) \n", + "- load_to_mem=True (True is default but can set it to False if the user is running a computational intensive process >>>.)\n", + "\n", + "**Please make sure latitude and longitude are correct if using X and Y.**\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model 1: Asymmetric Matrix \n", + "---\n", + "The first model directly creates an asymmetric matrix from destination points to the centroids of the area of analysis (also takes ~ 20 min). This approach is most effective when you are only calculating the distance matrix or a particular distance score once." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "code_folding": [], + "collapsed": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> geoid10\n", + "> lon\n", + "> lat\n", + "> Pop2014\n", + "> Pov14\n", + "> community\n", + "> ID\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> ID\n", + "> Facility\n", + "> lat\n", + "> lon\n", + "> Type\n", + "> target\n", + "> category\n", + "> community\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:p2p:Approx area of bounding box: 2,445.05 sq. km\n", + "INFO:p2p:All operations completed in 15.88 seconds\n" + ] + } + ], + "source": [ + "# Calculate asymmetric distance matrix for walking (takes ~5 minutes to run) \n", + "\n", + "w_asym_mat = TransitMatrix('walk', \n", + " primary_input='/Users/whlu/spatial_access/data/input_data/tracts2010.csv', \n", + " secondary_input='/Users/whlu/spatial_access/data/input_data/health_chicago.csv')\n", + "w_asym_mat.process()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts.csv in 0.04 seconds\n" + ] + } + ], + "source": [ + "w_asym_mat.write_csv(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts.csv\")\n", + "\n", + "#Saved as walk_asym_health_tracts.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts.tmx in 0.00 seconds\n" + ] + } + ], + "source": [ + "w_asym_mat.write_tmx(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts.tmx\")\n", + "\n", + "# Saved as walk_asym_health_tracts.tmx" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "code_folding": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> geoid10\n", + "> lon\n", + "> lat\n", + "> Pop2014\n", + "> Pov14\n", + "> community\n", + "> ID\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> ID\n", + "> Facility\n", + "> lat\n", + "> lon\n", + "> Type\n", + "> target\n", + "> category\n", + "> community\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:p2p:Approx area of bounding box: 2,445.05 sq. km\n", + "INFO:p2p:All operations completed in 7.94 seconds\n" + ] + } + ], + "source": [ + "# Calculate asymmetric distance matrix for driving (takes ~1.5 minutes to run) \n", + "\n", + "d_asym_mat = TransitMatrix('drive', \n", + " primary_input='/Users/whlu/spatial_access/data/input_data/tracts2010.csv', \n", + " secondary_input='/Users/whlu/spatial_access/data/input_data/health_chicago.csv')\n", + "\n", + "d_asym_mat.process()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/drive_asym_health_tracts.csv in 0.04 seconds\n" + ] + } + ], + "source": [ + "d_asym_mat.write_csv(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/drive_asym_health_tracts.csv\")\n", + "\n", + "#Saved as drive_asym_health_tracts.csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d_asym_mat.write_tmx(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/drive_asym_health_tracts.tmx\")\n", + "\n", + "# Saved as drive_asym_health_tracts.tmx" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model 2: Symmetric Matrix\n", + "\n", + "--\n", + "\n", + "The second model creates a symmetric distance travel matrix from block to block (801 x 801 matrix). Then, we snap the destination points to the area of analysis (blocks), getting a matrix that calculates the distance between the destinations and every block in the dataset.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> geoid10\n", + "> lon\n", + "> lat\n", + "> Pop2014\n", + "> Pov14\n", + "> community\n", + "> ID\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:p2p:Approx area of bounding box: 2,067.39 sq. km\n", + "INFO:p2p:All operations completed in 9.09 seconds\n" + ] + } + ], + "source": [ + "# Specify walking distance matrix (takes ~3 min to run) \n", + "w_sym_mat = TransitMatrix('walk', \n", + " primary_input='/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", + "\n", + "# Run process\n", + "w_sym_mat.process()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/walk_sym_health_tracts.csv in 0.14 seconds\n" + ] + } + ], + "source": [ + "w_sym_mat.write_csv(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/walk_sym_health_tracts.csv\")\n", + "\n", + "# Saved as walk_sym_health_tracts.csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "w_sym_mat.write_tmx(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/walk_sym_health_tracts.tmx\")\n", + "\n", + "# Saved as walk_sym_health_tracts.tmx" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> geoid10\n", + "> lon\n", + "> lat\n", + "> Pop2014\n", + "> Pov14\n", + "> community\n", + "> ID\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lopn\n", + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:p2p:Approx area of bounding box: 2,067.39 sq. km\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requesting network data within bounding box from Overpass API in 1 request(s)\n", + "Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"cycleway|footway|path|pedestrian|steps|track|proposed|construction|bridleway|abandoned|platform|raceway|service\"][\"motor_vehicle\"!~\"no\"][\"motorcar\"!~\"no\"][\"service\"!~\"parking|parking_aisle|driveway|emergency_access\"](41.60021990,-87.95448850,42.07126140,-87.48049640);>;);out;'}\"\n", + "Downloaded 48,348.1KB from www.overpass-api.de in 4.67 seconds\n", + "Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 5.56 seconds\n", + "Returning OSM data with 249,806 nodes and 55,393 ways...\n", + "Edge node pairs completed. Took 79.76 seconds\n", + "Returning processed graph with 77,575 nodes and 117,269 edges...\n", + "Completed OSM data download and Pandana node and edge table creation in 89.67 seconds\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py:2531: PerformanceWarning: \n", + "your performance may suffer as PyTables will pickle object types that it cannot\n", + "map directly to c-types [inferred_type->mixed,key->block2_values] [items->['name', 'ref', 'highway', 'service', 'bridge', 'oneway', 'toll', 'area', 'junction']]\n", + "\n", + " pytables.to_hdf(path_or_buf, key, self, **kwargs)\n", + "INFO:p2p:Finished querying osm\n", + "INFO:p2p:All operations completed in 95.81 seconds\n" + ] + } + ], + "source": [ + "# Specify driving distance matrix (takes ~1.5 minute to run) \n", + "d_sym_mat = TransitMatrix('drive', \n", + " primary_input='/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", + "\n", + "# Run process. For driving, p2p queries OSM to fetch the street network and then output the shortest path transit matrix\n", + "d_sym_mat.process()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/drive_sym_health_tracts.csv in 0.13 seconds\n" + ] + } + ], + "source": [ + "d_sym_mat.write_csv(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/drive_sym_health_tracts.csv\")\n", + "\n", + "# Saved as drive_sym_health_tracts.csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d_sym_mat.write_tmx(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/drive_sym_health_tracts.tmx\")\n", + "\n", + "# Saved as drive_sym_health_tracts.tmx" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, snap the points to the units of analysis. However, snapping the destination points is not always so straightforward. Deciding which points (laying on the network) are assigned to each area of analysis may be arbitrary; therefore, it is important to scrutinize the structure of the data before doing any further processing. If the destinations fall within the unit of analysis, the best option is to run a within function that incorporates the destinations to the unit of analysis and then doing a join with the area IDs.\n", + "The following image shows that in this case, we can safely run a function that assigns each point to the area of analysis of interest. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Spatial join of health facilities and area of analysis**\n", + "\n", + "Finally, in order to get the matrix of origins to destinations, we need to join the health facilities by block with the distance matrix previously generated. This will generate an asymmetric matrix with all the distances from destinations to all the units of analysis in Chicago." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "code_folding": [ + 0 + ], + "collapsed": true + }, + "outputs": [], + "source": [ + "# Read destination files to join with boundaries \n", + "health_gdf = gpd.read_file('/Users/whlu/spatial_access/data/input_data/health_chicago-point.shp')\n", + "health_gdf.head()\n", + "#Use symmetric matrix calculated above or read your previously saved results:\n", + "sym_walk=pd.read_csv('/Users/whlu/spatial_access/spatial_access/data/matrices/walk_sym_health_tracts.csv')\n", + "\n", + "# Read boundaries files \n", + "boundaries_gdf = gpd.read_file('/Users/whlu/spatial_access/data/chicago_boundaries/chi_blocks.shp')\n", + "\n", + "# Rename the ID name in order to match both data frames. \n", + "sym_walk= sym_walk.rename(index=str, columns={\"Unnamed: 0\": \"geoid10\"})\n", + "\n", + "\n", + "# Spatial join of amenities within each area of analysis \n", + "#It drops values outside of the tracts shapefile. From 199 to 182 datapoints.\n", + "s_join = gpd.sjoin(health_gdf, boundaries_gdf, how='inner', op='within')\n", + "\n", + "# Convert geopanda dataframe to non-spatial dataframe to join \n", + "jb_df = pd.DataFrame(s_join)\n", + "\n", + "\n", + "# Make sure the id is of the same data type in both data frames.\n", + "# sym_walk.dtypes\n", + "# jb_df.dtypes\n", + "jb_df.geoid10=jb_df.geoid10.astype(int)\n", + "jb_df=pd.DataFrame(jb_df['geoid10'])\n", + "\n", + "# Join the symmetric matrix with the spatially joined data (with geoid10 id)\n", + "j_asym=pd.merge(sym_walk, jb_df, left_on='geoid10', right_on='geoid10', how='left')\n", + "\n", + "j_asym.to_csv('/Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts_join.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geoid10123456789...793794795796797798799800801Unnamed: 802
01098819106115931216783647089272417104...9824157011607716334155701520122104136668169NaN
12988103326211535926092148901853116327...4472929189478756839487511344939244295NaN
23910633260329737779084154941850415926...7464688172457437667363811336753887287NaN
341159321153297016707905167091699218146...6285756872057014665270281191024826108NaN
451216735923777167009382174331574618870...7762614157785587522556011060929397585NaN
\n", + "

5 rows × 803 columns

\n", + "
" + ], + "text/plain": [ + " geoid10 1 2 3 4 5 6 7 8 9 ... \\\n", + "0 1 0 9881 9106 11593 12167 8364 7089 27241 7104 ... \n", + "1 2 9881 0 3326 2115 3592 6092 14890 18531 16327 ... \n", + "2 3 9106 3326 0 3297 3777 9084 15494 18504 15926 ... \n", + "3 4 11593 2115 3297 0 1670 7905 16709 16992 18146 ... \n", + "4 5 12167 3592 3777 1670 0 9382 17433 15746 18870 ... \n", + "\n", + " 793 794 795 796 797 798 799 800 801 Unnamed: 802 \n", + "0 9824 15701 16077 16334 15570 15201 22104 13666 8169 NaN \n", + "1 4472 9291 8947 8756 8394 8751 13449 3924 4295 NaN \n", + "2 7464 6881 7245 7437 6673 6381 13367 5388 7287 NaN \n", + "3 6285 7568 7205 7014 6652 7028 11910 2482 6108 NaN \n", + "4 7762 6141 5778 5587 5225 5601 10609 2939 7585 NaN \n", + "\n", + "[5 rows x 803 columns]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Check the output is correct\n", + "j_asym.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(801, 803)" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "j_asym.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the user has the origin destination matrices, we can proceed to estimate metrics. For this demo's purpose, we will use only drive_asym_health_tracts.csv and walk_asym_health_tracts.csv to run the metrics." + ] + } + ], + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/2_access_score.ipynb b/docs/notebooks/2_access_score.ipynb new file mode 100755 index 0000000..25e878b --- /dev/null +++ b/docs/notebooks/2_access_score.ipynb @@ -0,0 +1,14125 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Access Metrics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "The following notebook calculates access metrics between origins and destinations, and in this case, from the centroid of tracts to health facilities. Using the distance travel time matrix, the user can calculate the **access score** from each tract areal unit to health facilities, the time to **closest destinations** (nearest neighbor), the **count of nearby destinations** within a buffer, and the **sum of an attribute** of nearby destinations.\n", + "\n", + "Each model has a similar procedure. Define the model by providing the correct arguments and calculate the model. The result can then be written into a csv and then can be aggregated, subsetted, and plotted. All of which are demonstrated below. Each model take in very similar arguments and are also specified below. " + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/Users/tienc/spatial_access\n" + ] + } + ], + "source": [ + "cd '/Users/tienc/spatial_access/'" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "from spatial_access.p2p import *\n", + "from spatial_access.Models import *" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "#View sources and destinations for Chicago Health Facilities\n", + "import pandas as pd\n", + "sources_df = pd.read_csv('data/input_data/sources/tracts2010.csv')\n", + "dests_df = pd.read_csv('data/input_data/destinations/health_chicago.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geoid10lonlatPop2014Pov14community
017031842400-87.63004041.742475515776944
117031840300-87.68188241.8320945881102159
217031841100-87.63509841.8510063363274234
317031841200-87.68334241.8555623710181931
417031838200-87.67507941.870416329636128
\n", + "
" + ], + "text/plain": [ + " geoid10 lon lat Pop2014 Pov14 community\n", + "0 17031842400 -87.630040 41.742475 5157 769 44\n", + "1 17031840300 -87.681882 41.832094 5881 1021 59\n", + "2 17031841100 -87.635098 41.851006 3363 2742 34\n", + "3 17031841200 -87.683342 41.855562 3710 1819 31\n", + "4 17031838200 -87.675079 41.870416 3296 361 28" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sources_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IDFacilitylatlonTypetargetcategorycommunity
01American Indian Health Service of Chicago, Inc.41.956676-87.6518795127000Other Health Providers3
12Hamdard Center for Health and Human Services41.997852-87.6695355190000Other Health Providers77
23Infant Welfare Society of Chicago41.924904-87.7172705137000Other Health Providers22
34Mercy Family - Henry Booth House Family Health...41.841694-87.6247905159000Other Health Providers35
46Cook County - Dr. Jorge Prieto Health Center41.847143-87.7249755166000Other Health Providers30
\n", + "
" + ], + "text/plain": [ + " ID Facility lat \\\n", + "0 1 American Indian Health Service of Chicago, Inc. 41.956676 \n", + "1 2 Hamdard Center for Health and Human Services 41.997852 \n", + "2 3 Infant Welfare Society of Chicago 41.924904 \n", + "3 4 Mercy Family - Henry Booth House Family Health... 41.841694 \n", + "4 6 Cook County - Dr. Jorge Prieto Health Center 41.847143 \n", + "\n", + " lon Type target category community \n", + "0 -87.651879 5 127000 Other Health Providers 3 \n", + "1 -87.669535 5 190000 Other Health Providers 77 \n", + "2 -87.717270 5 137000 Other Health Providers 22 \n", + "3 -87.624790 5 159000 Other Health Providers 35 \n", + "4 -87.724975 5 166000 Other Health Providers 30 " + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dests_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Column Inputs for Each Model**\n", + "Each model takes in inputs from both the sources and destination csv files. Each model takes in the standard inputs indicated below as well as additional inputs specified under each model\n", + "\n", + "* Source File\n", + " * Unique index identifier (ID) (integer or real) \n", + " * Latitude and longitude coordinates (real)\n", + " * To aggregate: larger areal ID\n", + "* Destination File\n", + " * Unique index identifier (ID) (integer or real)\n", + " * Latitude and longitude coordinates (real)\n", + " * Category for each type of facility\n", + " * To aggregate: larger areal ID" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Specifications for the Access Model:\n", + "\n", + "**name = AccessModel( )**\n", + "* network_type ('walk', 'bike', 'drive', 'otp') \n", + "* sources_filename (primary input data)\n", + "* destinations_filename (secondary input data)\n", + "* source_column_names (dictionary that map column names to expected values)\n", + "* dest_column_names (dictionary that map column names to expected values)\n", + "* transit_matrix_filename (sources-destination travel time matrix)\n", + "* decay_function ('linear', 'root', 'logit', default is 'linear')\n", + "\n", + "**Column Inputs**\n", + "* Standard inputs\n", + "\n", + "**name.calculate()**\n", + "- upper_threshold (maximum time considered out of range in seconds, default is 30 minutes, when out of range, score will be zero)\n", + "- category_weight_dict (specifies the weights of each facility/establishment defined as dictionary, default dictionary will contain [1,1,1,1,1,1,1,1,1,1] weights.)\n", + "- normalize (accepts boolean, default is False and shows only non-normalized results, true shows normalized values.)\n", + "- normalize_type ('z_score' or 'minmax', default is 'minmax')\n", + "\n", + "**Functions within the Access Model class** (use as name.function())\n", + "- calculate () \n", + "- aggregate() \n", + "- subset??\n", + "- plot_cdf()\n", + "- plot_chlorepleth\n", + "\n", + "Each function is demonstrated below\n", + "\n", + "When defining the Access Model, use the previously generated shortest-path matrix. Also specify the desired distance decay function. Here, source_column_names and dest_column_names are not specified so the model will ask the user to map column names to expected values. " + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:spatial_access.p2p:You should use tmx instead of csv for significantly better performance\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> geoid10\n", + "> lon\n", + "> lat\n", + "> Pop2014\n", + "> Pov14\n", + "> community\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the unique index variable: geoid10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no population variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the population variable: Pop2014\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> ID\n", + "> Facility\n", + "> lat\n", + "> lon\n", + "> Type\n", + "> target\n", + "> category\n", + "> community\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the unique index variable: ID\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no capacity variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the capacity variable: target\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no category variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the category variable: category\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" + ] + } + ], + "source": [ + "accessM = AccessModel(network_type='walk',\n", + " sources_filename='data/input_data/sources/tracts2010.csv',\n", + " destinations_filename='data/input_data/destinations/health_chicago.csv',\n", + " transit_matrix_filename='data/matrix_walk.csv',\n", + " decay_function='linear')" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "#Example density and variety weights dictionary:\n", + "dict = {\n", + "\"Hospitals\": [10,10,10,10,10],\n", + "\"Federally Qualified Health Centers\": [8, 7, 6, 5, 4],\n", + "\"School-Based Health Centers\": [7, 7, 6, 6, 5],\n", + "\"All Free Health Clinics\": [5, 5, 5, 4, 4],\n", + "\"Other Health Providers\": [4, 3, 2, 1, 1]\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Using weights: {'All Free Health Clinics': [5, 5, 5, 4, 4], 'School-Based Health Centers': [7, 7, 6, 6, 5], 'Federally Qualified Health Centers': [8, 7, 6, 5, 4], 'Other Health Providers': [4, 3, 2, 1, 1], 'Hospitals': [10, 10, 10, 10, 10]}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
all_categories_scoreAll Free Health Clinics_scoreSchool-Based Health Centers_scoreFederally Qualified Health Centers_scoreOther Health Providers_scoreHospitals_score
170318424000.3188890.0000000.3188890.0000000.0000000.000000
170318403006.7844440.0000000.0894446.6950000.0000000.000000
1703184110014.7838890.0722226.1483331.8844444.3233332.355556
1703184120029.5455560.0000007.12777814.1788890.0000008.238889
1703183820047.8200001.0083336.6672228.0444442.68888929.411111
170316503010.7288890.0000000.0000000.7288890.0000000.000000
170315305030.0000000.0000000.0000000.0000000.0000000.000000
170317608030.0000000.0000000.0000000.0000000.0000000.000000
170315401020.1666670.0000000.0000000.1666670.0000000.000000
170315401010.0000000.0000000.0000000.0000000.0000000.000000
170314402010.0000000.0000000.0000000.0000000.0000000.000000
170318390000.0194440.0194440.0000000.0000000.0000000.000000
1703103060115.9416670.0000003.3561113.5377780.6088898.438889
1703103060414.1516670.0000003.0761112.8588890.0000008.216667
1703102080119.0655565.2750000.24500010.3455560.0000003.200000
1703184330043.6394440.6444444.38888913.6527780.55333324.400000
1703108020215.8422220.0000000.0000006.8977780.0000008.944444
1703107010220.8433330.0000000.00000010.0044440.00000010.838889
1703103150146.5211110.0000005.74777818.9866671.67555620.111111
1703103150247.3511110.0000006.59944418.8338892.56222219.355556
170318349006.1444440.9361110.0000005.2083330.0000000.000000
1703183480015.2566673.5472220.0000008.3705560.0000003.338889
170311605029.1777780.0000005.4988892.2844440.0000001.394444
1703114070217.4766670.0000009.6211115.3722220.0000002.483333
1703184200026.6577780.0000008.58444410.1994444.5572223.316667
170311504026.1388890.0000000.0000003.3333330.0000002.805556
170318344006.0238890.0000000.3305560.0000003.3822222.311111
1703104020136.5066670.6194445.01666717.2983330.00000013.572222
1703104020225.8550002.6861112.29055613.8172220.0000007.061111
170310207027.3905565.2750000.0000002.1155560.0000000.000000
.....................
1703129120025.3200000.0000004.14944411.5772220.0822229.511111
170316203009.2588890.0000000.0000009.2588890.0000000.000000
170316204007.5994440.0000000.0000007.5994440.0000000.000000
170316301007.0722222.6861110.0000004.3861110.0000000.000000
170316303005.5061110.0000000.0000005.5061110.0000000.000000
170316304003.3622220.0194440.0000003.3427780.0000000.000000
170316305004.6122221.4055560.0000003.2066670.0000000.000000
170311103000.0000000.0000000.0000000.0000000.0000000.000000
170311104000.0000000.0000000.0000000.0000000.0000000.000000
170311201000.0000000.0000000.0000000.0000000.0000000.000000
170311202000.0000000.0000000.0000000.0000000.0000000.000000
1703127140023.7594442.4972220.74277810.3361110.00000010.183333
170312801001.8188890.1500000.6377781.0311110.0000000.000000
1703128080025.4405564.3083335.5222226.2900001.2200008.100000
170312819001.8388891.8388890.0000000.0000000.0000000.000000
170315501000.0000000.0000000.0000000.0000000.0000000.000000
1703161150010.1844442.7000000.0000007.4844440.0000000.000000
1703161180018.9150007.0916670.00000011.8233330.0000000.000000
1703161190017.1261115.5583330.00000011.5677780.0000000.000000
1703161200010.9733333.0388890.0000007.9344440.0000000.000000
170316201006.9927780.0000000.0000006.9927780.0000000.000000
170316202009.3627780.0000000.0000009.3627780.0000000.000000
1703107020019.1261110.0000000.0000009.8372220.0000009.288889
1703107040016.3316670.0000000.0000009.7261110.0000006.605556
1703107050010.4566670.0000000.0000006.8566670.0000003.600000
1703107100011.4788890.0000000.0000009.2177780.0000002.261111
1703107120011.4961110.0000000.0000007.8961110.0000003.600000
170311303006.1016671.4500000.5522222.6050000.0000001.494444
1703129220024.5883330.0000002.62500014.1777781.3022226.483333
170316309005.9222220.0638890.0000005.8583330.0000000.000000
\n", + "

801 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " all_categories_score All Free Health Clinics_score \\\n", + "17031842400 0.318889 0.000000 \n", + "17031840300 6.784444 0.000000 \n", + "17031841100 14.783889 0.072222 \n", + "17031841200 29.545556 0.000000 \n", + "17031838200 47.820000 1.008333 \n", + "17031650301 0.728889 0.000000 \n", + "17031530503 0.000000 0.000000 \n", + "17031760803 0.000000 0.000000 \n", + "17031540102 0.166667 0.000000 \n", + "17031540101 0.000000 0.000000 \n", + "17031440201 0.000000 0.000000 \n", + "17031839000 0.019444 0.019444 \n", + "17031030601 15.941667 0.000000 \n", + "17031030604 14.151667 0.000000 \n", + "17031020801 19.065556 5.275000 \n", + "17031843300 43.639444 0.644444 \n", + "17031080202 15.842222 0.000000 \n", + "17031070102 20.843333 0.000000 \n", + "17031031501 46.521111 0.000000 \n", + "17031031502 47.351111 0.000000 \n", + "17031834900 6.144444 0.936111 \n", + "17031834800 15.256667 3.547222 \n", + "17031160502 9.177778 0.000000 \n", + "17031140702 17.476667 0.000000 \n", + "17031842000 26.657778 0.000000 \n", + "17031150402 6.138889 0.000000 \n", + "17031834400 6.023889 0.000000 \n", + "17031040201 36.506667 0.619444 \n", + "17031040202 25.855000 2.686111 \n", + "17031020702 7.390556 5.275000 \n", + "... ... ... \n", + "17031291200 25.320000 0.000000 \n", + "17031620300 9.258889 0.000000 \n", + "17031620400 7.599444 0.000000 \n", + "17031630100 7.072222 2.686111 \n", + "17031630300 5.506111 0.000000 \n", + "17031630400 3.362222 0.019444 \n", + "17031630500 4.612222 1.405556 \n", + "17031110300 0.000000 0.000000 \n", + "17031110400 0.000000 0.000000 \n", + "17031120100 0.000000 0.000000 \n", + "17031120200 0.000000 0.000000 \n", + "17031271400 23.759444 2.497222 \n", + "17031280100 1.818889 0.150000 \n", + "17031280800 25.440556 4.308333 \n", + "17031281900 1.838889 1.838889 \n", + "17031550100 0.000000 0.000000 \n", + "17031611500 10.184444 2.700000 \n", + "17031611800 18.915000 7.091667 \n", + "17031611900 17.126111 5.558333 \n", + "17031612000 10.973333 3.038889 \n", + "17031620100 6.992778 0.000000 \n", + "17031620200 9.362778 0.000000 \n", + "17031070200 19.126111 0.000000 \n", + "17031070400 16.331667 0.000000 \n", + "17031070500 10.456667 0.000000 \n", + "17031071000 11.478889 0.000000 \n", + "17031071200 11.496111 0.000000 \n", + "17031130300 6.101667 1.450000 \n", + "17031292200 24.588333 0.000000 \n", + "17031630900 5.922222 0.063889 \n", + "\n", + " School-Based Health Centers_score \\\n", + "17031842400 0.318889 \n", + "17031840300 0.089444 \n", + "17031841100 6.148333 \n", + "17031841200 7.127778 \n", + "17031838200 6.667222 \n", + "17031650301 0.000000 \n", + "17031530503 0.000000 \n", + "17031760803 0.000000 \n", + "17031540102 0.000000 \n", + "17031540101 0.000000 \n", + "17031440201 0.000000 \n", + "17031839000 0.000000 \n", + "17031030601 3.356111 \n", + "17031030604 3.076111 \n", + "17031020801 0.245000 \n", + "17031843300 4.388889 \n", + "17031080202 0.000000 \n", + "17031070102 0.000000 \n", + "17031031501 5.747778 \n", + "17031031502 6.599444 \n", + "17031834900 0.000000 \n", + "17031834800 0.000000 \n", + "17031160502 5.498889 \n", + "17031140702 9.621111 \n", + "17031842000 8.584444 \n", + "17031150402 0.000000 \n", + "17031834400 0.330556 \n", + "17031040201 5.016667 \n", + "17031040202 2.290556 \n", + "17031020702 0.000000 \n", + "... ... \n", + "17031291200 4.149444 \n", + "17031620300 0.000000 \n", + "17031620400 0.000000 \n", + "17031630100 0.000000 \n", + "17031630300 0.000000 \n", + "17031630400 0.000000 \n", + "17031630500 0.000000 \n", + "17031110300 0.000000 \n", + "17031110400 0.000000 \n", + "17031120100 0.000000 \n", + "17031120200 0.000000 \n", + "17031271400 0.742778 \n", + "17031280100 0.637778 \n", + "17031280800 5.522222 \n", + "17031281900 0.000000 \n", + "17031550100 0.000000 \n", + "17031611500 0.000000 \n", + "17031611800 0.000000 \n", + "17031611900 0.000000 \n", + "17031612000 0.000000 \n", + "17031620100 0.000000 \n", + "17031620200 0.000000 \n", + "17031070200 0.000000 \n", + "17031070400 0.000000 \n", + "17031070500 0.000000 \n", + "17031071000 0.000000 \n", + "17031071200 0.000000 \n", + "17031130300 0.552222 \n", + "17031292200 2.625000 \n", + "17031630900 0.000000 \n", + "\n", + " Federally Qualified Health Centers_score \\\n", + "17031842400 0.000000 \n", + "17031840300 6.695000 \n", + "17031841100 1.884444 \n", + "17031841200 14.178889 \n", + "17031838200 8.044444 \n", + "17031650301 0.728889 \n", + "17031530503 0.000000 \n", + "17031760803 0.000000 \n", + "17031540102 0.166667 \n", + "17031540101 0.000000 \n", + "17031440201 0.000000 \n", + "17031839000 0.000000 \n", + "17031030601 3.537778 \n", + "17031030604 2.858889 \n", + "17031020801 10.345556 \n", + "17031843300 13.652778 \n", + "17031080202 6.897778 \n", + "17031070102 10.004444 \n", + "17031031501 18.986667 \n", + "17031031502 18.833889 \n", + "17031834900 5.208333 \n", + "17031834800 8.370556 \n", + "17031160502 2.284444 \n", + "17031140702 5.372222 \n", + "17031842000 10.199444 \n", + "17031150402 3.333333 \n", + "17031834400 0.000000 \n", + "17031040201 17.298333 \n", + "17031040202 13.817222 \n", + "17031020702 2.115556 \n", + "... ... \n", + "17031291200 11.577222 \n", + "17031620300 9.258889 \n", + "17031620400 7.599444 \n", + "17031630100 4.386111 \n", + "17031630300 5.506111 \n", + "17031630400 3.342778 \n", + "17031630500 3.206667 \n", + "17031110300 0.000000 \n", + "17031110400 0.000000 \n", + "17031120100 0.000000 \n", + "17031120200 0.000000 \n", + "17031271400 10.336111 \n", + "17031280100 1.031111 \n", + "17031280800 6.290000 \n", + "17031281900 0.000000 \n", + "17031550100 0.000000 \n", + "17031611500 7.484444 \n", + "17031611800 11.823333 \n", + "17031611900 11.567778 \n", + "17031612000 7.934444 \n", + "17031620100 6.992778 \n", + "17031620200 9.362778 \n", + "17031070200 9.837222 \n", + "17031070400 9.726111 \n", + "17031070500 6.856667 \n", + "17031071000 9.217778 \n", + "17031071200 7.896111 \n", + "17031130300 2.605000 \n", + "17031292200 14.177778 \n", + "17031630900 5.858333 \n", + "\n", + " Other Health Providers_score Hospitals_score \n", + "17031842400 0.000000 0.000000 \n", + "17031840300 0.000000 0.000000 \n", + "17031841100 4.323333 2.355556 \n", + "17031841200 0.000000 8.238889 \n", + "17031838200 2.688889 29.411111 \n", + "17031650301 0.000000 0.000000 \n", + "17031530503 0.000000 0.000000 \n", + "17031760803 0.000000 0.000000 \n", + "17031540102 0.000000 0.000000 \n", + "17031540101 0.000000 0.000000 \n", + "17031440201 0.000000 0.000000 \n", + "17031839000 0.000000 0.000000 \n", + "17031030601 0.608889 8.438889 \n", + "17031030604 0.000000 8.216667 \n", + "17031020801 0.000000 3.200000 \n", + "17031843300 0.553333 24.400000 \n", + "17031080202 0.000000 8.944444 \n", + "17031070102 0.000000 10.838889 \n", + "17031031501 1.675556 20.111111 \n", + "17031031502 2.562222 19.355556 \n", + "17031834900 0.000000 0.000000 \n", + "17031834800 0.000000 3.338889 \n", + "17031160502 0.000000 1.394444 \n", + "17031140702 0.000000 2.483333 \n", + "17031842000 4.557222 3.316667 \n", + "17031150402 0.000000 2.805556 \n", + "17031834400 3.382222 2.311111 \n", + "17031040201 0.000000 13.572222 \n", + "17031040202 0.000000 7.061111 \n", + "17031020702 0.000000 0.000000 \n", + "... ... ... \n", + "17031291200 0.082222 9.511111 \n", + "17031620300 0.000000 0.000000 \n", + "17031620400 0.000000 0.000000 \n", + "17031630100 0.000000 0.000000 \n", + "17031630300 0.000000 0.000000 \n", + "17031630400 0.000000 0.000000 \n", + "17031630500 0.000000 0.000000 \n", + "17031110300 0.000000 0.000000 \n", + "17031110400 0.000000 0.000000 \n", + "17031120100 0.000000 0.000000 \n", + "17031120200 0.000000 0.000000 \n", + "17031271400 0.000000 10.183333 \n", + "17031280100 0.000000 0.000000 \n", + "17031280800 1.220000 8.100000 \n", + "17031281900 0.000000 0.000000 \n", + "17031550100 0.000000 0.000000 \n", + "17031611500 0.000000 0.000000 \n", + "17031611800 0.000000 0.000000 \n", + "17031611900 0.000000 0.000000 \n", + "17031612000 0.000000 0.000000 \n", + "17031620100 0.000000 0.000000 \n", + "17031620200 0.000000 0.000000 \n", + "17031070200 0.000000 9.288889 \n", + "17031070400 0.000000 6.605556 \n", + "17031070500 0.000000 3.600000 \n", + "17031071000 0.000000 2.261111 \n", + "17031071200 0.000000 3.600000 \n", + "17031130300 0.000000 1.494444 \n", + "17031292200 1.302222 6.483333 \n", + "17031630900 0.000000 0.000000 \n", + "\n", + "[801 rows x 6 columns]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "accessM.calculate(upper_threshold=1800,\n", + " category_weight_dict=dict,\n", + " normalize=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
all_categories_scoreAll Free Health Clinics_scoreSchool-Based Health Centers_scoreFederally Qualified Health Centers_scoreOther Health Providers_scoreHospitals_score
170318424000.3188890.0000000.3188890.0000000.0000000.000000
170318403006.7844440.0000000.0894446.6950000.0000000.000000
1703184110014.7838890.0722226.1483331.8844444.3233332.355556
1703184120029.5455560.0000007.12777814.1788890.0000008.238889
1703183820047.8200001.0083336.6672228.0444442.68888929.411111
\n", + "
" + ], + "text/plain": [ + " all_categories_score All Free Health Clinics_score \\\n", + "17031842400 0.318889 0.000000 \n", + "17031840300 6.784444 0.000000 \n", + "17031841100 14.783889 0.072222 \n", + "17031841200 29.545556 0.000000 \n", + "17031838200 47.820000 1.008333 \n", + "\n", + " School-Based Health Centers_score \\\n", + "17031842400 0.318889 \n", + "17031840300 0.089444 \n", + "17031841100 6.148333 \n", + "17031841200 7.127778 \n", + "17031838200 6.667222 \n", + "\n", + " Federally Qualified Health Centers_score \\\n", + "17031842400 0.000000 \n", + "17031840300 6.695000 \n", + "17031841100 1.884444 \n", + "17031841200 14.178889 \n", + "17031838200 8.044444 \n", + "\n", + " Other Health Providers_score Hospitals_score \n", + "17031842400 0.000000 0.000000 \n", + "17031840300 0.000000 0.000000 \n", + "17031841100 4.323333 2.355556 \n", + "17031841200 0.000000 8.238889 \n", + "17031838200 2.688889 29.411111 " + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview the results\n", + "accessM.model_results.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### **After constructing the Access Model**\n", + "\n", + "#### **Once the access model is built, we can do several things:**\n", + "- Write the data frame to a csv\n", + "- Aggregate to a higher level\n", + "- Subset Data\n", + "- Plot Chloreopleth Map and CDF graph" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Write Output to CSV**\n", + "\n", + "Save the output as access_model2010.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "accessM.model_results.to_csv('data/output_data/accessModel2010.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualize the data\n", + "\n", + "Once the scores are in a csv, merge the scores to the origin's shapefile and map out the scores to view the distribution of the access scores by tract" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'/Users/tienc/spatial_access'" + ] + }, + "execution_count": 131, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pwd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Aggregate to a Higher Level**\n", + "\n", + "The current data is at the tract level. To understand the data at a higher level, aggregate the ddata to a community level. Then write it as a a csv. " + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
all_categories_scoreAll Free Health Clinics_scoreSchool-Based Health Centers_scoreFederally Qualified Health Centers_scoreOther Health Providers_scoreHospitals_score
spatial_index
ALBANY PARK15.0333840.0000006.7002026.0215660.0000002.311616
ARCHER HEIGHTS6.8447780.0000000.0000006.8447780.0000000.000000
ARMOUR SQUARE14.0177780.0144444.8403333.9610003.1220002.080000
ASHBURN0.1263890.0000000.0000000.0000000.0000000.126389
AUBURN GRESHAM5.4665930.0000002.4847412.9818520.0000000.000000
AUSTIN9.3147450.0000001.5387045.4355320.0000002.340509
AVALON PARK4.7027780.0000000.0000000.0000000.0000004.702778
AVONDALE5.9066670.0000000.1547781.1333331.4285563.190000
BELMONT CRAGIN4.9229740.0000000.0526143.4190520.0000001.451307
BEVERLY1.0385710.0000000.0000000.1790480.0000000.859524
BRIDGEPORT3.0688330.0000000.8057221.2788330.7876110.196667
BRIGHTON PARK5.4410560.0000002.7650002.6760560.0000000.000000
BURNSIDE0.0000000.0000000.0000000.0000000.0000000.000000
CALUMET HEIGHTS4.6671110.0000000.0000001.0426670.0000003.624444
CHATHAM0.2637220.0000000.1287220.0000000.0000000.135000
CHICAGO LAWN16.4735352.2388893.1804047.1830300.0000003.871212
CLEARING0.3123810.0000000.0000000.3123810.0000000.000000
DOUGLAS20.2100000.0000007.5864447.4694443.1313332.022778
DUNNING3.0541410.0000000.0000000.6096970.0000002.444444
EAST GARFIELD PARK23.5743062.8256942.5492138.9093980.1112969.178704
EAST SIDE4.4880560.0000000.0000004.4880560.0000000.000000
EDGEWATER19.4529740.0169934.8396085.6734310.9278437.995098
EDISON PARK1.2703700.0000000.0000000.0000000.0000001.270370
ENGLEWOOD10.8703542.0590910.1378796.4087370.0000002.264646
FOREST GLEN0.0000000.0000000.0000000.0000000.0000000.000000
FULLER PARK11.9258330.8208334.2875004.2441670.8011111.772222
GAGE PARK5.8246531.0958330.2440284.4847920.0000000.000000
GARFIELD RIDGE4.7553030.0000000.0000004.7553030.0000000.000000
GRAND BOULEVARD21.7998891.7587046.7826678.3817781.6674813.209259
GREATER GRAND CROSSING4.4892130.1539351.8316670.7883330.0000001.715278
.....................
NEAR NORTH SIDE16.7537720.0000000.0000005.7324270.00000011.021345
NEAR SOUTH SIDE12.8464810.0000005.8070372.6690741.6481482.722222
NEAR WEST SIDE25.7535832.4490285.3431395.5625831.08911111.309722
NEW CITY13.7053593.5446080.1189549.9708820.0202610.050654
NORTH CENTER6.9411110.0000001.4480563.6660710.0000001.826984
NORTH LAWNDALE24.9216670.2618522.91163011.4559630.7548159.537407
NORTH PARK4.7479170.5444441.0655562.0268060.0000001.111111
NORWOOD PARK2.5817460.0000000.0000000.0000000.0000002.581746
OAKLAND13.0488890.4333333.0469448.7419440.8266670.000000
OHARE0.0000000.0000000.0000000.0000000.0000000.000000
PORTAGE PARK6.0100790.0000000.0000002.4997620.0000003.510317
PULLMAN1.6403700.0000000.0000000.8829630.0000000.757407
RIVERDALE0.0833330.0000000.0000000.0833330.0000000.000000
ROGERS PARK19.5474240.0000003.51166713.2431311.2921211.500505
ROSELAND6.1575400.0000000.0000003.7674600.0000002.390079
SOUTH CHICAGO8.4965000.0000000.0000005.6081670.0000002.888333
SOUTH DEERING0.8826390.0000000.0000000.4534720.0000000.429167
SOUTH LAWNDALE21.8763270.0000001.99824114.1592591.3611114.357716
SOUTH SHORE11.8837500.0000000.8383803.7941670.1451857.106019
UPTOWN35.7289350.0000005.61365714.7664811.34833314.000463
WASHINGTON HEIGHTS3.0015970.0000000.0000003.0015970.0000000.000000
WASHINGTON PARK19.0533333.0759261.2697226.5743521.2629636.870370
WEST ELSDON8.3034720.0000000.0000008.3034720.0000000.000000
WEST ENGLEWOOD5.3476021.7315790.0466673.2652630.0000000.304094
WEST GARFIELD PARK10.7493890.1097221.0056675.9795560.0000003.654444
WEST LAWN2.9759260.0055560.3247222.6456480.0000000.000000
WEST PULLMAN3.1013190.0000000.0000002.3867360.0000000.714583
WEST RIDGE11.5244843.3964290.6194446.0267860.3631751.118651
WEST TOWN26.0405741.3855563.31805611.7771110.1339269.425926
WOODLAWN8.1772220.0681820.7159091.1604041.8044444.428283
\n", + "

77 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " all_categories_score All Free Health Clinics_score \\\n", + "spatial_index \n", + "ALBANY PARK 15.033384 0.000000 \n", + "ARCHER HEIGHTS 6.844778 0.000000 \n", + "ARMOUR SQUARE 14.017778 0.014444 \n", + "ASHBURN 0.126389 0.000000 \n", + "AUBURN GRESHAM 5.466593 0.000000 \n", + "AUSTIN 9.314745 0.000000 \n", + "AVALON PARK 4.702778 0.000000 \n", + "AVONDALE 5.906667 0.000000 \n", + "BELMONT CRAGIN 4.922974 0.000000 \n", + "BEVERLY 1.038571 0.000000 \n", + "BRIDGEPORT 3.068833 0.000000 \n", + "BRIGHTON PARK 5.441056 0.000000 \n", + "BURNSIDE 0.000000 0.000000 \n", + "CALUMET HEIGHTS 4.667111 0.000000 \n", + "CHATHAM 0.263722 0.000000 \n", + "CHICAGO LAWN 16.473535 2.238889 \n", + "CLEARING 0.312381 0.000000 \n", + "DOUGLAS 20.210000 0.000000 \n", + "DUNNING 3.054141 0.000000 \n", + "EAST GARFIELD PARK 23.574306 2.825694 \n", + "EAST SIDE 4.488056 0.000000 \n", + "EDGEWATER 19.452974 0.016993 \n", + "EDISON PARK 1.270370 0.000000 \n", + "ENGLEWOOD 10.870354 2.059091 \n", + "FOREST GLEN 0.000000 0.000000 \n", + "FULLER PARK 11.925833 0.820833 \n", + "GAGE PARK 5.824653 1.095833 \n", + "GARFIELD RIDGE 4.755303 0.000000 \n", + "GRAND BOULEVARD 21.799889 1.758704 \n", + "GREATER GRAND CROSSING 4.489213 0.153935 \n", + "... ... ... \n", + "NEAR NORTH SIDE 16.753772 0.000000 \n", + "NEAR SOUTH SIDE 12.846481 0.000000 \n", + "NEAR WEST SIDE 25.753583 2.449028 \n", + "NEW CITY 13.705359 3.544608 \n", + "NORTH CENTER 6.941111 0.000000 \n", + "NORTH LAWNDALE 24.921667 0.261852 \n", + "NORTH PARK 4.747917 0.544444 \n", + "NORWOOD PARK 2.581746 0.000000 \n", + "OAKLAND 13.048889 0.433333 \n", + "OHARE 0.000000 0.000000 \n", + "PORTAGE PARK 6.010079 0.000000 \n", + "PULLMAN 1.640370 0.000000 \n", + "RIVERDALE 0.083333 0.000000 \n", + "ROGERS PARK 19.547424 0.000000 \n", + "ROSELAND 6.157540 0.000000 \n", + "SOUTH CHICAGO 8.496500 0.000000 \n", + "SOUTH DEERING 0.882639 0.000000 \n", + "SOUTH LAWNDALE 21.876327 0.000000 \n", + "SOUTH SHORE 11.883750 0.000000 \n", + "UPTOWN 35.728935 0.000000 \n", + "WASHINGTON HEIGHTS 3.001597 0.000000 \n", + "WASHINGTON PARK 19.053333 3.075926 \n", + "WEST ELSDON 8.303472 0.000000 \n", + "WEST ENGLEWOOD 5.347602 1.731579 \n", + "WEST GARFIELD PARK 10.749389 0.109722 \n", + "WEST LAWN 2.975926 0.005556 \n", + "WEST PULLMAN 3.101319 0.000000 \n", + "WEST RIDGE 11.524484 3.396429 \n", + "WEST TOWN 26.040574 1.385556 \n", + "WOODLAWN 8.177222 0.068182 \n", + "\n", + " School-Based Health Centers_score \\\n", + "spatial_index \n", + "ALBANY PARK 6.700202 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 4.840333 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 2.484741 \n", + "AUSTIN 1.538704 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 0.154778 \n", + "BELMONT CRAGIN 0.052614 \n", + "BEVERLY 0.000000 \n", + "BRIDGEPORT 0.805722 \n", + "BRIGHTON PARK 2.765000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHATHAM 0.128722 \n", + "CHICAGO LAWN 3.180404 \n", + "CLEARING 0.000000 \n", + "DOUGLAS 7.586444 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 2.549213 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 4.839608 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 0.137879 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 4.287500 \n", + "GAGE PARK 0.244028 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 6.782667 \n", + "GREATER GRAND CROSSING 1.831667 \n", + "... ... \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 5.807037 \n", + "NEAR WEST SIDE 5.343139 \n", + "NEW CITY 0.118954 \n", + "NORTH CENTER 1.448056 \n", + "NORTH LAWNDALE 2.911630 \n", + "NORTH PARK 1.065556 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 3.046944 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 3.511667 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH DEERING 0.000000 \n", + "SOUTH LAWNDALE 1.998241 \n", + "SOUTH SHORE 0.838380 \n", + "UPTOWN 5.613657 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 1.269722 \n", + "WEST ELSDON 0.000000 \n", + "WEST ENGLEWOOD 0.046667 \n", + "WEST GARFIELD PARK 1.005667 \n", + "WEST LAWN 0.324722 \n", + "WEST PULLMAN 0.000000 \n", + "WEST RIDGE 0.619444 \n", + "WEST TOWN 3.318056 \n", + "WOODLAWN 0.715909 \n", + "\n", + " Federally Qualified Health Centers_score \\\n", + "spatial_index \n", + "ALBANY PARK 6.021566 \n", + "ARCHER HEIGHTS 6.844778 \n", + "ARMOUR SQUARE 3.961000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 2.981852 \n", + "AUSTIN 5.435532 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 1.133333 \n", + "BELMONT CRAGIN 3.419052 \n", + "BEVERLY 0.179048 \n", + "BRIDGEPORT 1.278833 \n", + "BRIGHTON PARK 2.676056 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 1.042667 \n", + "CHATHAM 0.000000 \n", + "CHICAGO LAWN 7.183030 \n", + "CLEARING 0.312381 \n", + "DOUGLAS 7.469444 \n", + "DUNNING 0.609697 \n", + "EAST GARFIELD PARK 8.909398 \n", + "EAST SIDE 4.488056 \n", + "EDGEWATER 5.673431 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 6.408737 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 4.244167 \n", + "GAGE PARK 4.484792 \n", + "GARFIELD RIDGE 4.755303 \n", + "GRAND BOULEVARD 8.381778 \n", + "GREATER GRAND CROSSING 0.788333 \n", + "... ... \n", + "NEAR NORTH SIDE 5.732427 \n", + "NEAR SOUTH SIDE 2.669074 \n", + "NEAR WEST SIDE 5.562583 \n", + "NEW CITY 9.970882 \n", + "NORTH CENTER 3.666071 \n", + "NORTH LAWNDALE 11.455963 \n", + "NORTH PARK 2.026806 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 8.741944 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 2.499762 \n", + "PULLMAN 0.882963 \n", + "RIVERDALE 0.083333 \n", + "ROGERS PARK 13.243131 \n", + "ROSELAND 3.767460 \n", + "SOUTH CHICAGO 5.608167 \n", + "SOUTH DEERING 0.453472 \n", + "SOUTH LAWNDALE 14.159259 \n", + "SOUTH SHORE 3.794167 \n", + "UPTOWN 14.766481 \n", + "WASHINGTON HEIGHTS 3.001597 \n", + "WASHINGTON PARK 6.574352 \n", + "WEST ELSDON 8.303472 \n", + "WEST ENGLEWOOD 3.265263 \n", + "WEST GARFIELD PARK 5.979556 \n", + "WEST LAWN 2.645648 \n", + "WEST PULLMAN 2.386736 \n", + "WEST RIDGE 6.026786 \n", + "WEST TOWN 11.777111 \n", + "WOODLAWN 1.160404 \n", + "\n", + " Other Health Providers_score Hospitals_score \n", + "spatial_index \n", + "ALBANY PARK 0.000000 2.311616 \n", + "ARCHER HEIGHTS 0.000000 0.000000 \n", + "ARMOUR SQUARE 3.122000 2.080000 \n", + "ASHBURN 0.000000 0.126389 \n", + "AUBURN GRESHAM 0.000000 0.000000 \n", + "AUSTIN 0.000000 2.340509 \n", + "AVALON PARK 0.000000 4.702778 \n", + "AVONDALE 1.428556 3.190000 \n", + "BELMONT CRAGIN 0.000000 1.451307 \n", + "BEVERLY 0.000000 0.859524 \n", + "BRIDGEPORT 0.787611 0.196667 \n", + "BRIGHTON PARK 0.000000 0.000000 \n", + "BURNSIDE 0.000000 0.000000 \n", + "CALUMET HEIGHTS 0.000000 3.624444 \n", + "CHATHAM 0.000000 0.135000 \n", + "CHICAGO LAWN 0.000000 3.871212 \n", + "CLEARING 0.000000 0.000000 \n", + "DOUGLAS 3.131333 2.022778 \n", + "DUNNING 0.000000 2.444444 \n", + "EAST GARFIELD PARK 0.111296 9.178704 \n", + "EAST SIDE 0.000000 0.000000 \n", + "EDGEWATER 0.927843 7.995098 \n", + "EDISON PARK 0.000000 1.270370 \n", + "ENGLEWOOD 0.000000 2.264646 \n", + "FOREST GLEN 0.000000 0.000000 \n", + "FULLER PARK 0.801111 1.772222 \n", + "GAGE PARK 0.000000 0.000000 \n", + "GARFIELD RIDGE 0.000000 0.000000 \n", + "GRAND BOULEVARD 1.667481 3.209259 \n", + "GREATER GRAND CROSSING 0.000000 1.715278 \n", + "... ... ... \n", + "NEAR NORTH SIDE 0.000000 11.021345 \n", + "NEAR SOUTH SIDE 1.648148 2.722222 \n", + "NEAR WEST SIDE 1.089111 11.309722 \n", + "NEW CITY 0.020261 0.050654 \n", + "NORTH CENTER 0.000000 1.826984 \n", + "NORTH LAWNDALE 0.754815 9.537407 \n", + "NORTH PARK 0.000000 1.111111 \n", + "NORWOOD PARK 0.000000 2.581746 \n", + "OAKLAND 0.826667 0.000000 \n", + "OHARE 0.000000 0.000000 \n", + "PORTAGE PARK 0.000000 3.510317 \n", + "PULLMAN 0.000000 0.757407 \n", + "RIVERDALE 0.000000 0.000000 \n", + "ROGERS PARK 1.292121 1.500505 \n", + "ROSELAND 0.000000 2.390079 \n", + "SOUTH CHICAGO 0.000000 2.888333 \n", + "SOUTH DEERING 0.000000 0.429167 \n", + "SOUTH LAWNDALE 1.361111 4.357716 \n", + "SOUTH SHORE 0.145185 7.106019 \n", + "UPTOWN 1.348333 14.000463 \n", + "WASHINGTON HEIGHTS 0.000000 0.000000 \n", + "WASHINGTON PARK 1.262963 6.870370 \n", + "WEST ELSDON 0.000000 0.000000 \n", + "WEST ENGLEWOOD 0.000000 0.304094 \n", + "WEST GARFIELD PARK 0.000000 3.654444 \n", + "WEST LAWN 0.000000 0.000000 \n", + "WEST PULLMAN 0.000000 0.714583 \n", + "WEST RIDGE 0.363175 1.118651 \n", + "WEST TOWN 0.133926 9.425926 \n", + "WOODLAWN 1.804444 4.428283 \n", + "\n", + "[77 rows x 6 columns]" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "accessM.aggregate(aggregation_type=None, shapefile='data/chicago_boundaries/chicago_boundaries.shp',\n", + " spatial_index='community', projection='epsg:4326')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
all_categories_scoreAll Free Health Clinics_scoreSchool-Based Health Centers_scoreFederally Qualified Health Centers_scoreOther Health Providers_scoreHospitals_score
spatial_index
ALBANY PARK15.0333840.0000006.7002026.0215660.0002.311616
ARCHER HEIGHTS6.8447780.0000000.0000006.8447780.0000.000000
ARMOUR SQUARE14.0177780.0144444.8403333.9610003.1222.080000
ASHBURN0.1263890.0000000.0000000.0000000.0000.126389
AUBURN GRESHAM5.4665930.0000002.4847412.9818520.0000.000000
\n", + "
" + ], + "text/plain": [ + " all_categories_score All Free Health Clinics_score \\\n", + "spatial_index \n", + "ALBANY PARK 15.033384 0.000000 \n", + "ARCHER HEIGHTS 6.844778 0.000000 \n", + "ARMOUR SQUARE 14.017778 0.014444 \n", + "ASHBURN 0.126389 0.000000 \n", + "AUBURN GRESHAM 5.466593 0.000000 \n", + "\n", + " School-Based Health Centers_score \\\n", + "spatial_index \n", + "ALBANY PARK 6.700202 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 4.840333 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 2.484741 \n", + "\n", + " Federally Qualified Health Centers_score \\\n", + "spatial_index \n", + "ALBANY PARK 6.021566 \n", + "ARCHER HEIGHTS 6.844778 \n", + "ARMOUR SQUARE 3.961000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 2.981852 \n", + "\n", + " Other Health Providers_score Hospitals_score \n", + "spatial_index \n", + "ALBANY PARK 0.000 2.311616 \n", + "ARCHER HEIGHTS 0.000 0.000000 \n", + "ARMOUR SQUARE 3.122 2.080000 \n", + "ASHBURN 0.000 0.126389 \n", + "AUBURN GRESHAM 0.000 0.000000 " + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview the output of the aggrregation by community area\n", + "accessM.aggregated_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "#For community areas write to csv\n", + "accessM.write_aggregated_results(filename = \"data/output_data/accessModel_aggregated.csv\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualize the Aggregated Data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Plot Aggregated Data**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following cumulative distribution function shows the percentage of tracts that fall within an access score." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Plot was saved to: data/output_data/accessModel_CDFplot\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "accessM.plot_cdf(filename = \"data/output_data/accessModel_CDFplot\", \n", + " xlabel = \"Access Score\", ylabel = \"% population\", title = \"Access Model CDF Plot\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Figure was saved to: data/output_data/accessModel_choropleth_map\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASQAAAEICAYAAAD2l4mhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvXdgJNl52Pn7qqpzN7qRwwCYnPPOzO5soLikaIkUKYr20bJ0kkidLdlWOFtWsESfT9LZ4kk6W+FkK1ESSUuUKEo8K1GkuCSXS26c3Z2dvJNzAAZAA91AA53r3R9VDTSABjoiDFC/ZRPdVe+9elVT9dX3vve97xOlFA4ODg6rAW2lO+Dg4OBQwBFIDg4OqwZHIDk4OKwaHIHk4OCwanAEkoODw6rBEUgODg6rBkcgOZRERG6JyHsqKLdJRJSIGMvRr6VGRBIismWJ2n5BRH5ogX399rH1pTj2o4IjkEpg3zhjIuJZ6b6UQ0Q+bQuED87Z/pv29h9coa4V+vGMiLwiInERGRWRl0Xk2Er2aTGUUkGl1I1a6oqIW0R+UUSuisikLdQ/KSKbKjjuHfvY+VqOvVZwBNIc7JvnHYACPrho4dXDFeCjhR+2tvJPgesr1iOrH03AF4D/BrQAG4D/C0g3+DirRav4PNY9878CYeAgcBL41pXs1KOEI5Dm8xHgNeDTFD3kACLiE5FfE5Hb9hv/JRHx2fsKmkBMRO4WNBMR8YjIfxWROyLyUER+r6hOm4h8wa4zKiIviohm7/tZEbkvIhMicllEFrup/w54WkSa7d/vBc4Cg0V910TkP9p9HxKRPxaRcNH+H7D3RUXk/5hz3pqI/JyIXLf3/4WItFRwLXcAKKU+q5TKK6WSSqnnlFJni9r+YRG5aJ/n2yLymL19t62pxkTkQrEGaGuFvysiXxSRSeBdtV7nudha5bai4/y2iPy93b8TIrJ1gXrvAf4R8F1KqTeUUjmlVFwp9dtKqT8qKrrR1hInROQ5EWmz688a+opIi4h8SkQe2Nr6X9vbm+1zGba3f0FEeov6sVlEvmm3/1W7/58p2v9B+3rG7Ou7u4J/x+VDKeV8ij7ANeBHgSNAFugs2vfbwAtYb3odeArwAP3ABPC9gAtoBQ7ZdX4T+FssDSGEJTx+2d73y8Dv2XVcWJqZADuBu0CPXW4TsHWB/n4a+CXgE8CP2Nv+wu7LS8AP2tv+uX1uW4Ag8D+BP7H37QESwLfY5/PrQA54j73/J7CEdK+9//eBzxb1TQFGib41AVHgfwDvA5rn7P+nwH3gmH3e24CN9rW4BvwHwA28276+O4vOOQ48jfVS9dZynRe4ngrYVnScUeBxwAD+FPjzBer9CvCNMvfWC1ha6w7AZ//+lVLXEfh74HNAs93nd9rbW4H/BfDb5/mXwF8XHeNV4L/a1+0ZYBz4jL1vBzCJJThdwL+3r7N7pZ+76f6vdAdW08f+B8wCbfbvS8C/s79rQBI4WKLex4C/KrFd7Btga9G2J4Gb9vf/BPxN4QEoKrMNGALeA7jK9PnTWALpGftmDAMP7Ru+WCB9DfjRono77XM1gJ8vftCAAJBhRiBdBL61aH93Ud1ZD1KJ/u22+3gPS8j9LbaQB74M/NsSdd6Bpd1pRds+C/xi0Tn/cb3XeYH+zhVIf1i07zuASwvU+wMWEFZFZV4A/mPR7x8F/sH+Pn0d7etrMkeAL9DmIWDM/t5vX2N/0f7PMCOQ/k/gL4r2aVgvhGdX+tkrfJwh22w+CjynlBqxf/8ZM8O2Nqw3cSm7TN8C29ux3mQnbRU5BvyDvR3gv2C9oZ4TkRsi8nMASqlrWFrJLwJDIvLnItKzWMeVUi/Z7f5H4AtKqeScIj3A7aLft7Fu/k57392itiaxNJsCG4G/KjqHi0DerrsoSqmLSqkfVEr1AvvsY/2mvXuh69YD3FVKmXP6u6Ho992i7zVd5woZLPo+haVdliKKJUga0V4fMKqUGpu7Q0T8IvL79vB6HPgmEBHLjtZj15sqqlJ8nWbdA/b1vcvs67qiOALJxrY3fDfwThEZFJFB4N8BB0XkIDACpIBSNoS7C2wfwdKq9iqlIvYnrJQKAiilJpRSP6WU2gJ8J/CTBVuRUurPlFLPYAkDBfxqBafxGeCngD8use+B3VaBwtv0ITCA9RAUroUfa2hQfH7vKzqHiFLKq5S6X0GfplFKXcLSOvYVtVvquj0A+ubYefqx3ubTzRV9r/k6N5CvAo8X23Pq4C7QIiKREvt+Cku7fUIp1YQ1zAZLSxyw6/mLyvcVfZ91D4iI2Pur+ndcShyBNMOHsN76e7DU4ENYw40XgY/Yb5NPAr8uIj0ioovIk2K5Bvwp8B4R+W4RMUSkVUQO2XX+APgNEekAEJENIvLt9vcPiMg2+8YYt4+fF5GdIvJuu+0U1sNWyXTwb2HZB75ZYt9ngX9nGz2DwP8NfE4plcOaHfqAWIZ5N9YQp/je+D3g4yKy0e53u4h8V7nOiMguEfmpwkMqIn1Ytq3X7CJ/CPy0iBwRi232MU5gDcH+vYi4RORZLEHy56WOU+t1Ltf/alBKfRX4CpYmecS+D0Ii8q9F5J9X2dYA8CXgd2wjtktECoInhHU/xMSaWPiFonq3gTeBXxTLBeFJrOtW4C+A94vIt4qIC0u4pYFXajvrxuMIpBk+CnxKWf4gg4UP8N+B77NnP34aOAe8gWXs/FUsO8cdLPvCT9nbT2NN+QL8LNZw4TVbxf4q1hsOYLv9O4Fl//kdpdQLWIbjX8F68w8CHVgG3kVRSo0qpb6mbAPBHD4J/AmWsLqJJej+d7veBeDHsIaoA8AYls2nwP+LZft5TkQmsATKE+X6g2WIfgI4IdZs2GvAeazrhFLqL4GP28edAP4aaFFKZbCmz99nX4PfwXopXFrkWLVc50bzYeCLWMboONa5HrWPXS0/gGWnu4RlT/wJe/tvYtkHR7Cu5z/Mqfd9WPazKJZt8XPYbhZKqcvA92O5YYxgCavvtK/3qkBK37sODg5rARH5HJYh/hfKFl4FOBqSg8MaQkSOichWsXzH3gt8F5bm+UiwJtYfOTg4TNOF5WPWijXs/hGl1KmV7VLlOEM2BweHVYMzZHNwcFg1PFJDtubmZtXdvah/oIODwyrk4sW3R5RS7eXKPVICqbu7hz/7s8+udDccHByq5PDhg7fLl3KGbA4ODqsIRyA5ODisGhyB5ODgsGpwBJKDg8OqwRFIDg4OqwZHIDk4OKwaHIHk4OCwanAEkoODw6rhkXKMdHBoJJ9/63+SaEpZPxRooiEIO/QtPLF51aaOW9M4GpLDuuW9u/4RnrybWFOCeGSSsfAEo+FxXkqcIJfLrXT31iWOhrSGSEwmcHl0RAQRQATE/iNCIj5FOFQqTPOjx6Wh8+T9WUSzgmsrFIiyv2N/L/wSAF586yT5Vuu7IGhoKBT5bB7DXfQohIRbQ7fZ1lMyBZvDEuIIpDVEPp/j4ME9C+6/cPriMvZmifFDqC9QVZVIc5hoSwKwxFTezhNgzHkMjICba7EbbCuZf8BhKXGGbGsIj9vLxfOXFykhNbUbi48xMRWrrVNLRvVxvNr84fKFbK7LHVLpVNXHcKgPRyCtIbxeL4axsNJbSTC+fD5PMjk1/ZmamiJv5mnvaCOTyZDNZhvZ5TqoQSBFmjFNs3xBIBc2OfvgfNXHcKgPZ8i2hoiPx2juaFpwv6rgIU6n0xheoa+/17ZFCZqm4fP5iAVjTE1OMTw4SiCwUL7E5cGUygRLMa19ETwvCtkKQ2qdzJ+lP95HV7hsPkyHBrHmNaR0Ol3xWzEWnxmWJCYTpDJJYvGxVaQVLI4IbN66aeECFSgVfr+fbMokk84SiUQIh8OEQiEMw6CtvY3+Tf24vS4AstksIyMjjIyMEI1Gy7TcWFQNAknXdXa0bCxf0CYTzvM3w19iMP6w6mM51MaaF0gYecZi8zISl2R4eGimmqFx6Mh+jj9zjEhriDxZxifiq1s4SRkbUYWjnIA/wN2b94nF4iX3b9raTyw2xuRUgmfedZxn3nWcDRu7quxsfZg1DNkAeno7yI2lKy6fCmf5/IO/4/KdKzUdz6E6KhZIdqbWUyLyBfv3n4rIZRE5LyKftDNhlqr3URG5an8+WrT9iIicE5FrIvJbdlbRhpNOpdF1veS+ZCrJVDLBVGqSZHqScHMTqUySdDY1rQUA9G3sZe/+3Tz+1BFCzT4mEqUf1BWnrDyq/CEOBkNcvXSdeHz+uYZCITo3tJGYnCSdTlfddkOo8W4JtgTYrvVXVWePazvbe7fVdkCHqqjGhvRvgYtAwUjxp1hZMMHKPPpDwO8WVyhK9XsU6/18UkT+Vik1Zpf9l1jZN78IvBcrfXBDiY+N09LSxuDQA7o6ZhsPJhOTPPOu44vWv37tOtev3uDIscdobWtl0+ZNxEbjpHJTpJJpIqHmRne5Zhol0ZVSjE/EibQ0cfnyFQ4fPoTLNft9s3nLZlpaWzj91hmeePJxzHz1Q6iVYmNvN1cH72MEKrv9Y5lxNG3tDyZWAxVdZTs3+/uxcrEDoJT6orIBXgd6S1T9duArdornMazc5+8VkW6gSSn1ql3/j4EP1Xku0ySTSWKxMWLxGNHoCL2bunn8+FH8ITf+Jg/R2DCTyQR5lStrX9q6bSvv+fZv5dbN23ztK8/zyjdPkEpmmJpIoanSmtdqZWpqilgiSio/yVB0kGw2S3w8Rmx8jNj4GKOxKGPxUQyvxuNPHcHlMejfsoEzZ86WbC8cDvPEk48D4HK5GB9fba4BpWnuDtOXaqu4/D3vAPHVqhWvMSrVkH4T+PdAaO4Oe6j2A1ga1Fw2AHeLft+zt21gdu74wvZ5iMi/xNKk6O7urqizeZXj+DuOcfb0Ob7127+V9nbr5usPWKp6/8a+itopoGkaR449hlKKgfsDpNJpspks2UyOyWSCTDpLKBhadMp9WSgz6vUE3Ow7tHv69/XLN9nQ00FLWwtgTQDcvzPAxGScU2dO4fV56Ip0oHhQ9tD9G/vo2dDN9as3iI2OEwo2rWqtYkt3L3cTI7M9tBdAhYS3o5d5Mvj4MvRsfVP2X0NEPgAMKaVOisizJYr8DvBNpdSLpaqX2KYW2T5/o1KfAD4BsGfP3ooMFRo633z+Zbp6OqaFUSMQEXp6588ZK6U4ffIMhrGyU+GJxAS3b90BpTCVQpkKpRShUJCOrg7mXuKtOzfP+u3xeNiyfdP079hojCtvXyMRT3D54hWCoQCpdJrm5ggtLS3zjm8YBjt370ApxbWrN5iIJyzfp+nDzrY0iQjKnN0npRTxRIxAIGAte5kpPf1nJDaM1lnfALV9YwvHL+3mrWuXMMIukEI3i/uoprednDjFkxsdgbTUVPJKfxr4oIh8B+AFmkTkM0qp7xeRXwDagX+1QN17wLNFv3uBF+ztvXO2l38NV4jf7ydvZtmxa3ujmlwUESEQDDAWjWGaJpFwM0tko1+UpuYmevrnz3a9deI0o6PVD6dE00gl02zc3M+WLVsYHx9nQ9MGXnrxFZ55x1ML1xNh+47all289MpL7H9q14ITEQAPXx8g1F6f8BcR+nb3cDp2lVzbQu85mf6rzDymaa5qrW8tUPbqKqU+ppTqVUptAr4HeN4WRj+EZSP6XqXUQoaYLwPfJiLNItIMfBvwZaXUADAhIsft2bWPAH/TiBMCmEpOEWmpfJlAI9ixaztPPH2UJ54+SnyFbCluT8mJTh574hBbd21i36GF17mVIhxp4sCRvRhenTffPElTUxOX3r5MV2dHI7o7jwsXLtCzpXNRYQTgonG2O63Cieac5JwIAMtAPeL+94BO4FUROS0iPw8gIkdF5A8BlFKjwH8G3rA//8neBvAjWEbya8B1GjjDls1m2L5zZaZpNU0jEPSvyLFdrqUxsrd1tCKapUXohk4ylWZqaqqhx3g4NEROz9AUWdjTvMDu3buIPxxvyHGlwrlJ5YVc3hFIS01VVlil1AtYQy6UUiXrKqXexHIBKPz+JPDJBcrtq+b4jwotrRFGh8fnTZUvRCOGAvl8Hu8CGlIjUPaDu33HNl59+TVyuRwjI1Hu3bmHbhhMJhIcf+qJmtq+cOECyfwUm3ZU5h8UCoVgsrLr9fbJ67x59yq5fA5TmWTNPNl8lrxS5M082zZ0IRU8BkqDfC5f0TEdamdNDogrWEO6pGzo28BUcrLi8iPRETwBA8OrobkgT5ZUJsn4RJzRsdGKhgrxeIyOrrKp02un6Jo++fRxYrEYDwcfcuixg+w/sJdcNsf1azeqajKbzfLqq6+B16xYGBVw590VlcujuGw85Lonyk3vGPf84zwMJRlpSjEWySJaZVql7ta5O36vfEGHuliji2tXWCIBTc0hpiam8PvLD9+aW8Js3rKp5D6lFAMDgySnkgwOPCQQ8pPN5MhnTXLZPJFwBMMw0Awpa3upj9nXtL9/tgB55p1Pc+niJSYmJiwNpgy5XI6XXv8m+x7bW9MEQF93L7diNwlGFo+J1KhrYrgNvpp6kYEbD+lTPezYuqMh7TrMxtGQlojde3aSMytb97aYL4yI0NPTzdZtW2hvb2PHvq00dzQRbgvQ3BVCeTMoT4ZQS3XBypaCXbt3cevG7XnbR8dGeXB/9iSqYRi0drTWPBvZv6mPbKz8EMpo4KyYeDXO65doa6AricNs1qaGtBokElTsKDk1UbmB+NqlG2QTeQKBEDoQmxjGzOXR9MY9eK+88BrhSAQR61KKQEd7ZTNrHo+HeHyccHjGOH3j+g3cTS7unb433aCI0NHTWlc/M2Mm/+Wlz1BYtaIwUQpMZU7Hfsq6FYQX0ZKqvFW8GS8tTfN9sBwaw5oUSKtDHIEv4IEyL/FsNovH56m4zWQqidfnI6OmSCQmaQ1ZdqMsyXq6OotIJMLRo0drqrtj13ZOvXWaw48dmt4mInT3dTbcN+vgrj1Er/9PdO9cgSNUurJPmarimTaAjGRIppL4vL7KO+pQMWtyyLZaNKSeDd1MTiYW3J/JZNA9sO9A5f5B+w/tZfveLWzbs4VUOs3kpGU814wG/lPWKTdaWpuJRkenf/t8viXx4enp6+aYpz73jny+untFNQl/f+c53r5u2cscGsua1JBWwku6FLdv3CGfL60ipVJJfAEPO/dUbhwtLGQ48dIbpFNZ8tk8fref2HiGtt7GRR2oV55v3LiR8+cu0NpqDW0ikQip5FRFbhDJZJI3T79F/4Y+NvaXn3l7atNB3rp9s+a+JkYmaDKC02q1MrEugLImFAq/lbK0qXze5LX7J/m1k3/Ip3/819lZgQHfoXLWpEBaLYwMR3EZbjtAnCKTzuDxeMjn8xhunUN79lfUzgtf+wamqTAMF9HhMXRd57EndhMMBUmlUgwNDJNNZ7l9/Q6iCb0bN3D90g10w2WvJbMeqJaOCC2t5QVXI8S51zMzDA2Hw/zGP3yKQGRmxrF43VgmmuZ/+46PYBgGf/n1vyK4y8+D4Qdcvn2VZn+EI4cPz/LTev2tkwxPDWNgkI7V56B54+oDTn/tUvUVNUimKw/05lAZa1IgVRLMfqm4e+cesWgcU5m0tLZYb1kFZj6PiGCaJi63C0QxNhYDFA8Hh2lvb6W1bcbIOzExQTw2Dkrx+JPH8Pl8vPzCa7RErDLXL9xGd+lkM1laI+3TQmTw4QDtXW2kxvOEw7PXeyUmEhUJpEaIpKGhYXSXwebNm/D5fPiaPQS6SrtA5No8fO7vPs/RnYdx2zOOrmYXieYJxvNxrr14jW69m5AvRHQiymjrKO4eN2kg15oj/GWDeKS2IWE9Q93B2FD5Qg5VsSYF0kqSmkrhMiozUl+/fMtamOsPcP/OwCyBdOfWPXSsIc7AwNu0dbQxnojT1mYZsZvDdtk5z7jf5+fW1bu43fMdBys13orUL9CfeuZJzpyy4ihZ2s3CxzZcBrJXOKvOY2yafUtquoanz8Oo/R/N4Gbm3AyPwfGNO/ly/EJN/RStduH7P77xeZ7Z/zjBFU54sJZwBFKDqeZRLr6Rg+HZkkVkOh4GIX+EdCLHlk3lDbhNTfai4hLmmuiIZWhOTqVmLSqdUSgtbW5oOMprb7w2EyhG2fsoKgdk0hmefcez01tN08Q0TTKZDJlMhrHRMe7cvUM6nSF2K05yYgqVAxHNEsTtPvwt1nnrRu0OjBv2tnHklV5OUoMndR3K4KWRW/yHP/xlfuEjP0Vr82xXgBu3buJyuejbUCpuocNCrGmBlM/nuX/vQdUB2epCLRTuqYJqReRyOVKTiemga4XhXrip9lTYLYEOVBK8MueNPqe7oWCI3j3lg/anU2lev/iq1f+8QnRBNwx0XdBdBp27W0jqExh+g28//B76tvbO8pz+yjeeJ9uSqfl8CuiGzoHjWzBO6JxQ8x0zF6XO0emLd9/iX/z2z/Dhx9/HU7uPsKXPijE1NjbKgX0H6mt8HbImBZJSils3bzM0MAwiJCeTVc1m1XXsGupMTibY1j87WNqBQ/PXHV+7fJ1cZnW4NAB4vB56+iuL4qkb+rxlHE8fOc7J06eItkZx+ytbm7YQhttg7/FNcAJOmJULpWp8kEo3INyOD/BrX/kkv/blT7K5uYfOcDs7Wvo4cvhIfW2vQ9akH1JraxupRJamUISmYJjYWGNCVVRCLbd3Lp8jHF7e+E2LsRSTAjev3pq3zR/0845nnma/to/UgwZoSi6dvcc3cah0NOSSqAY8Abop9ATaONSzg5AvyGt3zvD5M19hYGiw/sbXGWtSQ5qLaa4eraIUgdDKxE9aiKWIitjV286bL73F0Wcem7dv684ttMfaOXvxPBmVtuxbhay5tte1iIYmlkYjIggaYv+m8Nf+fjgoHGs+gGa3ISJooqFrGpqmoSGIZm07pS6wcWcPdmPkM3m+8HdfJV/FJfixd38/ezftYGNHL3/0D5/l2JYD/JOn30d3x/LmqlsLrAuB5Pf5ePPEKdwuF7pLY+9+yzN6SUKSVumUOT4R5+CRysJCZfNZUrkUU8nk9JKRelBKMTY+SrDZh9vrsrsuZGKputueS//WfqIDCyfsbIqEeObJJxtyrEuGj427+yta6T+ciHJDK866q/H4/gO8eqF0ppVSXLh9mXwuzzfOvcYz+4/zLYcWT63lsDDrQiB5PF48eAHL2Fjg7//my7S3t+Hze2mKhBYMAVKK115+HZSGrmu43C50XUM3dKYSUwQD5aMeFoi0NOHxVOYmICJs37eFqakpbp6/T7iptmFePp8nnogRavGz79jOeUI5swQOf16vl7HoGD2bupfck753Sy+jw2O0d5VflS8y/4XUfaAHOXcOpVWmWRteNz/0Xd9fvqBDWSoWSCKiA28C95VSHxCRHwd+AtgKtCulRhao96tYOd0A/rNS6nP29k8D7wQKCa9+UCl1uqazqJKxsTGam5tpjkSIhC1HwcH7Q1UJJI/bg887J+SHoiphBDAeT3Dh7EXbgXJmyYLH6y5hiLceEL/fjyq3arcE2WyWRGqcppYg+/fsWlAwlHpIG8GuQzu4c/0eG7ct7azn5MQU/kBli1+NEueaaxfedfxxnn/9xMxG0wQT+2Mi6Bia4NYN7j+835iOO9SVufZl4AvYIW1LISLvBx4DDgEe4Bsi8iWlVMHK/DNKqc9X2+l6aG5u4eaVO1zN38AfmBEo+RXKvBr022uh5siGTGZxLaWclqGUIpfLkclkyOVyZLNZ3GGN/cd2L1oPrBmxi6evTNtnUKBMk637Npd0uKwUwzAYGxldcoE0eO8hux6rLOOMpmmWkJlD4HCYD2x7D3ZQE5RYbg1ooAxBdA1N1xBdUDmTKwPX2NHtpNuul4oEUlHm2o8DPwmglDpl71us6h7gG0qpHJATkTNYKbP/oo4+143fPz+YWcAf4NypC4zFYjQ1hfB4PXh9bjq7OvH5fOTz+ekHO5fLkclm8Xkb16fJqQS6oU8bYX3+Uo3PXOtQm5+8mUY026CrYdcFRNBF8Lk9eDxNuNwu3G53xfayvo299G2c7dCXTCa5fPsym7ZUF2p2Lq4ljPsNMBGfINLWVPGwUFtIS/ToiMeyQZW7auLSeSN+zhFIDaDuzLVlOAP8goj8OtYih3cBbxft/7idreRrwM8ppeapBbVkrq0Fn89S8TvaOq0NJqQn85w/dYlMJo2mWX40hc+0ZtMgmiLBsplSih+e/s3L6OyJZQNKTjQi5tLSznjeuXGX7QcrzwnXKHvWFf0OD0YH6GlZunt0PVD2lVmcubbaxpVSzwFfBF4BPgu8ChRWQX4M2AUcA1qAn12gjU8opY4qpY5GIo0LsVEpTU1NtLW109LSQjgcJhgM4vP5ljh+dWlkBZMUighmA/yTRNOWdPFzIBwgOVW54HRVGOR/MXyDGkqD5x++Wndb6526MtdWcgCl1MexhnqIyJ8BV+3tA3aRtIh8Cvjpaju/lohF42XLrKRAgsqTKi6G2+Oy7FkL2KIun72C1+fD9kDA8kFierRa0GgUCq3YIG2bu9y6i+jgGL1bKjNqN0I0TrXm2D7QjbvZxQtXXubZHU83oNX1SVmBpJT6GJY2g4g8C/x0pcLInpmLKKWiInIAOAA8Z+/rVkoN2JlrPwScr+0U1ga67mJ0dIyWloW1wA093bz56pscfvLgMvZshkYMbwKhAJn0wgIpZyo2bq9vOHrlwtWKyxpSv4YkLg13s5d/suN9/Lczn0K7LHzLzoVTjTssTM2vPBH5NyJyD+gFzhay1RZnrsVac/6iiLwNfAL4ftvADfCnInIOOAe0Ab9Ua1/WAn6/n+hwdNEyPr+PlRi2Fqh73RcwfD+6YMpvi/p1lmw2RyZd2VIUvUE2pAvBW5wbuMhHt3+Y8fFxJpONzey7Xqgnc+1vAb9Vosx05lqlVAprpq1UW++urqtrn8RE+eSS9cTvqZdGDNnaulqIj8ZpXyipZQPsS3sP7eat186w+8j2srY+w3BZgf7rvK4iwsvxk0THR7mbHyTgW13LgR4V1oWn9qOChsHb5y+yeesmstks6VSabC6Hmc9bMZ2VIjYa495tbToSZeEBtiPVUohV1NwaJtI825P7zMmz1tT/vGfPstOMRUcJt0QQERRqZohm22e4s5sVAAAgAElEQVQ00bhz+R4zupLMrJQRe1vR30Jd66fViIbB25cv0ha3oi2O3B+mt2cjPr8HEFraGqMBHnp8P2++fIqDTy2eiDIY8GOOmegNMG4PhycY5iy4TO6M3Ke/rfJFvg4WjkBaRXg8HvK5POfeuohhGNOfYv+htuZOSJZP9BOLjs8TSG6vh+17tixY59ypC2zfX/mUea1Es8N09lkaUufGdkauxNi6a3OZWtWhaRoHn9jH5VPX8IU8C9qldF1HNXrxtU/jjbEzjkCqAUcgrTJ0XaepqbrlJ6UYHxvn2ts3ZzJmKIUq5ZJczHLFIp/TjYyeYioxhT/Y2GGOx+3hwNG9fOmr/0Aqlaanr5NQZLb/WDqTbmiSzQIX1A2OjNxhU1t9jqTrDUcgrVFaSkQDmMovHhdqpZIj9Gzt4syJ8/hD3lnDzul+FbYUUhWJmi08FSBzfhe14m5yk+lJ8ua1k3gn/QSbZjz1k8kUhzMbcSmX5XiqwNB1BDvciaahFUKfiIZmhzKxQprIdIiTwt+8aYKCCXOSkZFhRyBViSOQ1hHlBc4yCaQSh/G2u5n0TeAJlo98UKn5uVAuYi+/bNvcSvTGGM3NYcLtM5pSH0vjXZ2+uDryAz5KrMmIkQ6lKa8ALdPtUGLk2Lelh9RA/VEjy9G6pZmhB8MM3RpeMIlno8iRXdL21yKOQFpHlNWQluuFvkA32ttbScYbsV5ucZp3hqEDLp29Qnxo6dJhJ/TYkrW9VnEE0npitUTyXaAf3X1dpAYypKeWXlPSNI3O3R1EB0fLF64RvzE/qoTD4jgCaR0xFB3i5ROvcfbMuZXuyoLs3LON8SXUWubi7ja4fvoWw7dHGHtYfj1hNeR9Ge7eu9PQNtc6jlF7HeEP+mja6SOXzfHyqVfQMhodrZ1s3VbwAVo5o3YBX8CHy7W0MZOK8Ya8eHdZsaeiD0dhAJq7G5MBJtzVxM1L9+nrdWbaKsURSOsKy0hkuAy6tlpuAcnJCV5642VcpgtDt1biL7lAUIsbqzLRDKlACm+kgRHwKiDS2cTQzSHcPheBSP0+USKC6cuRTCXxeSuLPrDecQTSeqKEIPAFfPh2Wg/L6OAYr7/5Ol7Dh6FZt0Zx+mzr/+dusZeVoNG/qY/m1vqXfhx7+jFOvXF22QUSQOvmFu5cuMfuI41JLNq+tYXrl66xb9f+hrS31nEE0jpCyozIWrqaaemqTaAopbg3epfrD6+TTyl0NFBWXjVBMHSDlrZmNvRuqGhk6HP7SMZT+MKNFUpXzt+0jOYC+4/tnN6ey+XQNI2Hd4c4c+Mm5wbucCs6wIcff5Ytu2sPhxJub4Jsgmh8mNZwO/cf3GdDj7OkZCEcgbSeKDNUqgcRIdzaBK0LHFop4hMxBt5+wIWb1/jbm6N4NRcI0xlXpv9Tlh6WvJOaXq2vYXlKW47cVrmsymOiyOdN7t8eRA+5UaaJpumWJmcqlFhanalMFIqUliPlyUPW5O+uvYWJaQXxRyEIebcVT5sUEIBff+uv+Png99HRt8CJVUC4J0hycpxTF24xNZJyBNIiOAJpPbGEAqkcIkKwKUCwKcDtoSFup640tP2JhxmynircBVwaGRcUTzQrSrhieTTOX7rGfltIFtYGQtEawcKqFqVQpgmiAQrTjsaQTCZxZT0c7H0M9+bas7asBxyBtI4QJUTvj9lhS4oevnmCyg4uoub8NkyaN0Tq7kfebIyHtFxKk9AyKBQ5b0lxUjd9oz7SfZNc0m/U3kgQ9ozuxe1yhFE5HIG0juhs7QJqzzf/YPxuQ/rRiMiTAJrHRcxVWDC8NNrf7cgkh131x0qaVE4EyUqo2DFSRHQROSUiX7B//7iIXBMRJSIL5iwWkV8VkfP2558Vbd8sIidE5KqIfE5EnNfHaqdBbkpGgzK2LHFGbgDco3k8rZWlOl+MgfyDBvRm7VONp3Yhc22Bl4H3ALcXqjAnc+0TwM+ISCHYz68Cv6GU2g6MAf+iir44rACN0mz0BmVPWQ6LWCYopAfrX8oy4R/n2tC1BvRobVPRnVGUubYQvB+l1Cml1K0yVacz1yqlJrESR77XzjTybqCQRvt/YGUecVjFSIOM4pVm0C2HWgaRpHkNvnLhLNlEfSv3PUEPZ/RTvDHwOvHJxi5RWUtUemcUMteWCTk4jzPA+0TEbw/r3gX0YU0Ox4oykNwDnLnQ1U6DBFI605jFs/lUGldC4U6Ayld7a1ZOsgmef+08108OEL82WXMgOz2kc7/1Hq9EX16xYHirnbJG7eLMtXZetopRSj0nIsewMtcOM5O5ttSdXfJfaLlSaTssH363F+YlTa8etctLB5bj5MNLQ+SC9be5ELFAljczdzEfmhwc7qGnrQXd0PD3etCrNHqnOpOcfnCKwxseW6LePrqsVObaESAiIoatJfUCJa1+SqlPYOV0Y8+evc5rZQVp1JCtEQkni0kPTRLIutGTBnllEvc3QNotgKZpnGOQcyODAHzQdQBfb3UCSUS44btB73gf7U3tDI8Pc2nyIkopy01TFPt9B2iLLDhXtGYpO2RTSn1MKdWrlNoEfA/wfDWZa0Wk1f4+nblWWfrq14EP20U/CvxNDf13WE4aJJC8nsZOqHo6AgT3R/BtD+ILe2hPBpZ0CFfMVKK24ace1Hh9/ARj8TFOxt8k2jrCaFuUsZZRRpuiTKUTDe7po8FKZq79WeAnReQalk3pj2rti8My0SD91GMsnfub3unBvd1Pt4RpTy/hGM7mqwMXGHm7NiN1tiPDV9SXSXZMkb+Yx3XZhfuah8CdIDczt/japa8SH19fUSdXMnPtDeDxqnrrsKKUW5xbcTtLkHZoLnq/F/eNpY2ZDYBX5/nBi3wwchhvT3l/pXQizcgbw5AHRGhyh4hsC+MKetgY3AhiLUhWpqKzvwufb32FLXE8tR0qRtMN8vl82fTU5TBzOcIPdXTRQARd09HR0DVBF51ULoNbM3Abbu5FhxC3hmCtD0NZqYmmE2WKkMvn0NDQNKF4tUsmnSV4N0+wM4IgaLq13852BBT/nR9opbBdzd2qFFoOXIaLZD4NuvDGqSs807XPWsaSymG4DTRDI5fJ0RFtZ3fPLpQymXIlSRxNkDPzuDQX27o2E2wKcfn8FRKjE6QmUwQDTezcsbPu6/wo4ggkh4pxu1xkUkl8gfre2lOTU/zwd1bmdvZf//ZzTDXVZqfxx2Fyq86UtlT2mJmEBKbHJH0hy/uPfBuRriayuTxm3kQ3NLoe6yxryG/yNLNld2NiMD3KOALJoWI8bi+J1EjdAgmsVfKVzLZpdczIZVUO0ZYnwoFmaGxo28j2ndWlIo+PjTMen0ATJ7w9OALJoQrcbjfZTP12mUDITzadxe0tP9umo2O5rlVPUq+tXq10R+ZnC16IiXiCkYEomck84WAzLc2NTSP+qOKIZYeKERGsID/1EWwOkk5VNgxzSe12FH9+eddru/XK3+9jI2PkEhAO1h/ydy3hCCSHKql/CBQKh8hWKJCMOgSSp8H+TuUYTVQ+Ra8UhEJN5QuuMxyB5FAdDXCO1DSN5FiqorKNijCwHLx+53zFa9S0ZXB9eBRxropDVTTKF8ltVBZjyGvUo+Us70qjr0+e442Tpysqu1zG9kcNRyA5VEejVvynK1tv5tVrF0jLvaJeMzReuVmZQFo1ac1XGY5AcqiSxggkX5O1Sj8xMcmrL59mLFp6+YVRxy2ab4ABvlreenCxIkHohB8pjTPt71AVjRqyvXb6HAOnJridGSYbUNz7+kOa25pRQC6Vob+jHYUi+mAEl9e0g7FZftMmM2mT/FMG7oCXUjlDsqk0BBrT30q5rUWJDkVp61x8pb7h0olH42gihIKOcbuAI5AcqqNBQ7Zb5ih33WPW8mvgpP8+TN2fKTBop0kqE4EjGcoApWfsgqaBmcmhuZfvNjd8Ll4/dZLuri5MZWKaligtCFEwiU+NE8/FkBAwJWyc2gaaIqPStPraiaxjVwBHIDlUhUzqxK4nmLVorJBSqVhYFX2fnikrqpMzlz48yEQwS9tQgNGWpYuPVIpEaIKx9oUfLQOhFUvoJB+kiU/GyG9IkpswkZjmCCQHh0rpbdnYkHaMJQxBUkA0IR0Bd1yRCS/frJaqwnYVzrawrXsnbwy/TDAfZkvXtiXs2erHMWo7rAj1ODxWQ8ZrElDLG8JDVTGFllATjCfG0YJCqnmCwbGBJezZ6sfRkBxWBEOW79bzZIXghM54IEt+PIsrqfB7vIS9Idwuy4gloiFiDS5FBBE775sI9sZZTpqF0CeFTZlEkuuuKJqmYeYrF0hxc5TRiSjuNheZ4Tw+w9uo034kcQSSw4pgaMtz65mmSVNPBLc/RySbI9em0H2u6UgD5ZcKz42cVJp8CDYPtmNOpMltyDJ0KUpO5enZ3bFovZAWZmP7Jk4M3MWjewk3rV/7EVQhkEREB94E7iulPiAiPw78BLAVaFdKjSxQ7//ByummAV8B/q1SSonIC0A3M0Flvk0pNVTzmTg8UrhEb1xI3DiExGtrOEI2myXoC+D2uUm7MmimYIYEcC3ZG1j3u9CaFO/cc5iWTWEAErfKp88WH4xPxvGJj1yNUQ3WEtX8+xQy1xacJl4GvoAd0rYUIvIUVtaSA/aml4B3FtX5PjvkrcM6w627ao0qQiiq4Xa5EayhVcDnI9k7I93ceLCcAbKA4B+tPYRJpWyNN7Pv8Ebcgeo8yz2dLu7cvcH41DjZXG7m6VqnVCSQijLXfhz4SbAy19r7FquqsFInubFG2y7gYe3ddVgruDVX2TLeGPjEY5lw7NC1uia4u71kIjMCKFlG1WpU+qaF8I9q7NnXP08Ymf4cY8NjNLcvPgzLRjLs0vbRHu5cym4+ElSqIRUy14aqaVwp9aqIfB0YwBJI/10pdbGoyKdEJA/8f8AvKcefft2gVzDB2+VvmaX5FMhUPdZr/G1l5kz0hzki4ufxXTvxNs1fLOwL+5gaTkKZuG3ekJvo2DDtOAJpSTPXisg2YDdWqiSAr4jItyilvok1XLsvIiEsgfQDwB+XaMPJXLsGcc0xaudSOZoSBq2BiGX70TNMdubQaIB7QB0akmmamOkcrRMBdjZvojfURWsgQn9rD5ve38/Ag0Gee/k56Jlf13AbZKcqi/ukmesvoH8pljpz7T8GXlNKJQBE5EvAceCbSqn7AEqpCTuj7eOUEEhO5tq1iTmZoW3SR8gfABdMhdPQb8yy/TREGFH7Qtbu0SY+euCDdLS309HZXtI8saG3h6cOPsXw8DD3sndnpULKTGUYj04w9sAO3KaswGwocHl1Qu0zA45RfRjr3b2+KSuQlFIfAz4GYGtIP11p5lrgDvDDIvLLWEO2dwK/KSIGEFFKjYiIC/gA8NUa+u/wiNLe2Y6uPWBqeuJ96dwAVJXLVGQiz49t+W4ee/d+PJ7ycZt27trBTnbw2b/+HMlAEl/YcsScHEpzuyfB7akr8+rkR3L4LurkVZ50LkuP2cHxJ6vq5ppkqTPXfh64DpwDzgBnlFJ/B3iAL4vIWeA0cB/4g9pPw+FRoxIb0krxTv8hnjx6tCJhVMz3fuif4Y3NBOtfbL5HDxlkeoT8BgNjo4+RzglG4tFau7xmWOrMtXngX5UoMwkcqbq3DmuGuTak1USzr/a5d13TMW0XA9GkYnu66YcTN17n/YffRyaTwe1e3njgq4XV+5pyWNO4KD/t3yiqsSB5xgWSJlOT5Z0aSx6ryPW72pRyl8O3eeHVF0hnljc6wWpi9b6mHNY0Ad1XybqNBmGJJD2qeCK8m92dW/C7vWiahm6vYctkMrhcLrp7OmkKh7hy+iqHjh6s/kh1+F/m/RDpbSEUrMq7Zk3hCCSHFcGne5ZFIPlGNHbqG3iy+wibj/cRCFUWQrJzawen3jzNoSMHK8qwW8Dv8jKFnbq7Bm+D12InOdR3oHzBNYojkBxWBH2Jwo/kJzJ0pJt4qucg2zr62fSOfm5eusXufTuraicUChI44OfN105y7MmjFdeLm+O4CpaQGgRSIpTiuWvP823b3l195TWAI5AcVoRGCiQ9qngstI39XTvYcqCP1vYWNK3YPFqbY6SmaWw9uJlrl6+zbefWiusUcPkN1M0s0rq4vSwQNdjWtAFE0FyCkjSxiTEiofW38t8RSA4rgl6txbcEgWGd93Qe49nvPI4/4C9foQaqne3SRQMsvyd/sw/vZRflTNSbgl1s2DU7TMn1gUvsTh3E712a81qtOALJYUWoxQs7l8rSMxnmye6DbO/sZ9Oz/bhc5WfrUskkpmnO0Zoqp5qQtC5cZItEUDaXo9xjFgzMj2jp7XZzaeAs/dlttIXKZDpYQzgCyWFFMERHmapsBlf3qMnRpt3s7tpMZizFU+8/XrVgOfjEfq5fusH2PbXFq7aESmVE3M0M5O5NxwzXtIK+VBrzQZqmJ0ob2j3dLgbu3aWtXOqVNYQjkBxWBI/LhcqbiDZfUwoO6xzv3Me29j76Hu+eHo5dP3e7Ji1H0zQm4glefeUEpm5aa8qmI1+b1l81O7NbQScSDeKxODfjN1FmHkSstbr2ojQldgxtZX3PT5iM30vgbfGQnEqSSOQwHmjTbRaOWji+mRe++Ppb1q94lg+9/x2z+p7Ory+fJEcgOSwbI7Ehgm0+BJhS44huPahmzqQzFuDxrr1s7uyl/5mekkOxerx4H3vyEF969ct4N1TvkBnc4MNcIPebMNtknryZYvuhzQDEo3FiqbcxguWGfJb/Q4T58bSNDrg7cpu+BmV7We04Aslh2dB1nd7NVpyOPHk23WnlaM9uNnZ007upp6y/T72hHqTG2bZa8YUCSLby8vkSjlkun4vh4ADp4TRb27ZX5RP1KOIIJIflo0ii5HJZfuR9343HW90C1npYDoFULDTdbgMDrWJBmslluH72pj20Y3oYaX25RzQ6yhO7jje2w6sMRyA5LDnZbJbxyRiGf0YgeP1ectlcVQLJrDPb7XLoFtnU7KGdhl6xQ3oumeWEfm/B/a2pGPtTB9a0K4CzuNZhyYhNjDKRHUMiOXYe28LWvZvra7BOibIcGpLbM9tvSa/imOUEVzSU4AtXv1pzwLlHAUcgOSwZ7qDO5j39dPXMz00WaY6QSlY3g1RNRthSyDLc7mZ+tlixHCUrRJXXAE8HrvPp83/J+OREtV17JHAEksOSYS7iUOj1eslmqrD4Wi3W1Z/l0JDyc7SXaoTo3LqlEE24FnrA5aFrVfftUcARSA5LxyLPl6ZpVDvyqFdDSqQTddWvBMM12yxbjRA0K9CQCryYOEk6U1kCgUcJRyA5LBnlBE61tpCx0bE6egOGd+kze1QzQpuLWYUGGA0l+OSVzzEQW1tpDlcylfYR4NOAD/hiYXs9J+PwiFHFCGzw7kNGR2JcPH0Z0TRkxpcaUylcboOC1VsEspksustApt2vhS3BrXiSboYeDpHcNNnYc1kAjZnFtuUwlYlSqmJfo3vBKL//4HM8Gz3Ks1ufqqOXq4eVTKX9u1j51l7DEkjvBb5URX8cVjn1akimaXLp7BV0XSfSE6ZnSxc7Dta2Hm1uv+5ws+52SjJHlnjjCnfWhQCaHZ1SlLKEqjCdDhyEybxJ23gYw9CnhVJhn4jM9gq3KoMO8cnhpTmXFWBFUmmLSDfQpJR61W7jj4EP4QikZSeXy5HL5TBNk1wuRyaTtmw1UmT9sJ+E6YdEszZK8b5CQbuSCIirnEQqvTmdTvP2qcsEw376dm9A162hVtTjIpVM4fXNX2JRDUvp7DzXztXaHSbTXpknUsZvEOrw4PZXF/IkMhquqvxqZkVSaYvIUaDYA+wesKFUG07m2saTz+cZm4riD3nwNHsIuAx0Q8flduPxuGsO01EtpTSkCycv4Y942XFk67yXXVNLiHQqXb9AKhNhoB7mCiRDaWQqdI00PC7MbPUzicNqiMnkJAFfZeF5VzMrkkobSJYoXvJ96WSubTz5fJ6O/mZa2lpWtiMmXHjrMm7PzG0Y7gzR0lU6UmIwHCQ1kSLcXJ9GoOt6XfGRFmOuUVvTdKAy9wbDa2DmqhdI0ip8eexLeEd97Pfup6+1v+o2VgsrlUr7T5gRUtjfH1TVc4e6WA3zBwODg/Rs7aK5I1JRebfbTbIB4Tg6N3Tw3F8+R7AziNjukoJma2SChjZj7xENTYRUMom4DbQiw7kgoARNs208IphTEL0aozCk1TOVa2OG24Aabe2BXIAebQPtwflOqI8SK5JKWyk1ICITInIcOAF8BPhvNfTfoQZcLheZbCkldXlpaW+pWBgVqCZ640JcPnuV7//H31fV0O+NN08S2lr9GrJoMk685IBgAWo4vXw2z37vAXraSlo9HilWKpU2wI8Afwhcs8s4Bu1lQkQgX5/Xc0OoRUtrgGInIlXboWr18taqTGZQy3E0Q+NBam0MMFYklXZRuX1V9dahYayCERtK1fCQS/0dXy6jvXWs6spLDddERLjmvUrmfJan9j3a/khO+JF1SiOGPvV3onwfTNMkk8qQTmfIpNPE748zMTVJJpUmb5ooFKZZCCNr/1aK6f+UFaLWVDOOlOPDcXbu2z4d97oSanUV0EuE6C1zpHlbUuMpsuksZi6Pyln2PyNlENgWwMyZlstGPkck+OhP/zsCaZ0yeHeIqfHktL/R9P9PP3li/0+KHPhmyliOejPfCx7G1sceFoqgIdMaSWE/9t983ESGDPu3fdRpR0Drh6YJAb0Jl9/AFXbxJ1c+Sy6UQ/NoNWs6kzJJYjxBpKVy+1XtQ7aF+/j41B7aOttmX7MI07/tA+Np9mC4DHRNQzQNXdfQdI2H94YxggaGrmG4Dabuz1/bNj4xTlOoad721YojkNYpWzdtZ+v2OuMT1UksPsbGLdVNUXvcHsu9tg48fg+Zahem1qhQ+pJe3uE+yleGX8TbMTvdUWdPB939nbU1DPRs7Jr1W2OSB/fv0eprx+P2MD4xTnQ0+kgJJGdx7TpF1Rl9sSF9qOEp1xpwyxpug0yqutAntWpIu7bt4t1PvgOm5oQlUQqzwRMLwUiAzr3NDOZvc/7qGa5cucym/k0NPcZS42hI65TFYhUtF7XYseoNY1tgKlml20MN8mj43Cgb9vYB8MNHvw/RBF2sIRciXL97vfpGyx3z5iix+5Ps2rjH0iYfMRyBtE6pJvbOklGDpdjUGtPvau1PWg0SKRgI0NpuecNv2bZp3v7bD25X3WZZEhrNzREeZu8TybTS9IgZuh2BtE5ZyiGbUop8Pk82myWbzZJOpcnlcuTzeZSCru7OilJgl6IRQzYA06w09L5NDcKznP63FCmN0p4khmnQ3B8mPZUkNmwSCZZeirMacQTSOmVyfIpzpy6gFKgibcn6bedYtb8rcyYzK0pNz9YrNVMGZVmECt91XUfXDQxj5lPQSgZ5SF9/77w+VUKjBFI2X3l67FpJTCweodLMzRdZt9++i5gzs50i1vIUBEZjo+i+ovMXZqXbnWlNMXLZCkmSTKTZzV7Cj4hQcgTSOiUUWjlV/vLFSzwcekgiUX1I2cWm0auh2oD/LsMgn89Ph0Ipx3hsgv179i5aZte2HVw9d5WN+2dmGtsCbWzbvbVk+a++9Dyhbb6S+xaiiQD34jeIjTSzsW1LVXVXAmeWzWHZ6d3Sw+6DOzj29GNV123UMMfjri7mUCAUIJupTKuajE1y440btLW3LVqutaOVw4cOM3DhIeNjVhYRcxFn0WSqtpW3/rCPuHuUTDbD5NTyRMqsFUcgOawAtQsVvUG3bLWzbOFwmGy6MleBwQsjfOR7PlKRNuXxeHjs2GG8aT/3rw0sGoWhyV+7P1Goz88l8wy3xld3thJnyOaw7NQT+kSnQYH6q5SJ/qCf7MPKBNKhPQer7s7GLX20xCOMRWMl9w8NDpPW0nipTrMrRvcIzfriWttK4wgkh+WnDheoRtmQ3FXO8rnd7opnJqv2ArcJhUOEwqWDsk5MJAhvripg6zz8YT+Dg/dwj7tpa2qvq62lwhmyOSw7lSpId27enbetUQKpplm2CvutG41Nt2SaJhcun29IW807Qwx67nBj6CqZ7OrL6+YIJIdlp9IhW3Iiza1LdznzxjlyOUuA5HJV+g8tQE0PYwWhQcbuxnFVEUWgEgbuDdB6uLpAdosR6PAh27NcTp7j1sgN0hkrCufFy2/ztTe+wlRqqmHHqhZnyOaw7FS6ZETXdPbt34tSimtXrhEdizI5MQkl1qOapkk2lSWbypLL5CAHKqvQ8kJemXg0Dy7Nha7paGjcT97Ho1zTOdtM05xONQRgikxbq5QdfSA7mmM8NVmUugjSrhSt/S2MDcRwTbnxqWDVC4bLoRRMPkgS7q9vyDaXYJ8PRYorw2fRJgzU1jxbWjdw48ZlNqsdK5I0wBFIDstOpUO2giYlImzfuZ3tbGf37j2MjY2hiUY+n0PXdZQCXddwe9y43W4Mw0DX9WmHzEIbxbx26lU27uyrqt+72Tlv26svnmD82iRT0TTv+453VtVepYyOxAinm0lcSuDf0fisMMH2GcGTSWXQRK/ek71BLGnmWhF5F/AbRZt2Ad+jlPprEfk0VoztuL3vB5VSp2s7DYdHicpn2eaXC4ebCIcbEE6jQWuLn3zHEwBcu7BEiSexlvk8/sxRlFKcOXWWqHuEUHvjtJfx4QnyUYWJiRkTHt/9ZMParpYlzVyrlPo6cAhARFqw4mc/V1TkZ5RSn6+iDw5rgPHoBIO3hu2lJwrD0MnnTTRdKwpWptHbV9vykkpo+OLiJUw+GQhawkdEOPTYQQbvP+Tc9bOEt4asRJ+ZHNlMjlzW+p5LZ8nnTPI5KzW3Nh2CrxBsr7BUWMMjHvr6NtB61FoEPHJrlKHRQQzdRUu4delOagGWOnNtMR8GvqSUWjmLmcOqoKW1hW3bSy+PWC6qXTpSjmwmy7XzBS1J2RpY0WKzmQT9HOYAABZOSURBVAi600VmMv3a5YueJaumcPPmdTbtnG2T6trQicv9GN/4xots2tuHx+tG8+vTUSU1XUPXdTS9+qiabZsswZROpnkweAsmdVr87Xg99SXnrJQlzVw7h+8Bfn3Oto+LyM8DXwN+Tik1L+mWk7l27bEq4nk3GI/PzbHDxxrermlm2bZzvvBubW/ln3z4Q5x88xSaTyfS0ti1iR6fh47NVjylsYfDjMYVQcI0BZZ2DWRZ8VmcubbWg4hIN7Af+HLR5o9h2ZSOAS3Az5aqq5T6hFLqqFLqaCTyaKxYdlic1ZCkstHhV7y+pQmGlkymFt1/5OhhAoS4e/nBkl3X5s4IHTuamWR8SdovphJ9rpC59hbw58C7ReQzVR7nu4G/UkpN+94rpQaURRr4FPB4lW06PKKsBg2p0bGICjapgYGBhrbr8pRfKtK/qY+Dew9w68w9piaWLgGouJb+362sQFJKfUwp1auU2oQ17Hq+isy1Bb4X+GzxBltrQqw740NAY1xRHVY9tcTSbngfGiwUm1sivH72BCPJYZ5/4fmGtet2V7bExePx8NTTx0kNZxm6G23Y8YvJy9K7AtTshyQi/wbLrtSFlbn2i0qpHxKRo8C/Vkr9kF1uE9AHfGNOE38qIu1Y9rvTwL+utS8OjxarIZ53ONhMciqJz19dfKGFCIQCBELWbNjkWOPmbfJVeqbv3b+bkaERrp67Ru/u7qpyzxUzNjTG4M3h6RRXAInxSWJMgghej5etWxo/MbGkmWvt37eAeUnHlVLvrqqnDmuG1ZDxZO+ePbz0ykts2NlVdVrtckxMTDSsra72TkZHYrS0Vb50pK2jjbaONt58/SShrgBNrdXPRTV3NNPcMdtmm0lnSF2FlualcwdwPLUdlp3FgpAtJ8889Qxf/+YL7HhsS0O9n91eg7fffps9e/bU1c7rr76B4XZx/dY1ujZ0zAlZK2CaoBV8iixNRtOkUICAN8TEvQQjd8fYcqj+5Sxuj5uEWtoAb45Aclh20uk0d29bK/mn43AXxfCeTnVUcOexClmOlHPKF9crxPu2UmjblafbsFJrJ6YmaAo3UciO297SzoUTF9n/5OLhZqvBNBXD8SFGR7toaWmpqY3r12+w78BeAoEAO3du59LNi2zesbGmtnK5HOdPXcDb5SbcUp+Xu6kvrXbrCCSHZae1uY3J8XkuZ1UwowXM+yVz/s7B1+Gdl5Kot7+H8+fPs3Xfwpl8TdMklUqRSWXIZrOMxyfYuKW/pI3GcLvYvKuPty+dZ2d+D+1lQtmW4sHdAbZttWw0wWCQJneY+FiccHP1fkCGYXDo2EHu3rzH3cv36ds5z4JSESMDUSYnMrCErkhO+BGHdUWp2bVgMMj2zTu4ecnKk3bhxCVG7/7/7Z1pbFvZdcd/hztFiqKo1bYsL2PLkrexPPIy05km9bRFO0CALmjRFGiaIkWBFkXQFBkUQb4FzYdigAb9VkyTNinatCiaNgHSBp2knclMZjyLF3mTbHmRZO2yJVEUJVEbbz+8R5qSSPFxMynr/oBnPb7lvndN6Ojec885/zDh0VnCoxEi43PMP15AYnZ8Dj8NgUY8VGV8hs0MKdjf3sqdh72Ew+mrQGZiYWGB5w6tN45tR9oY7Z/MqZ2N7D3QwtHDxxi8NpIs52KFwdvDTN+dpSW4j70H97BIhHC0NCt5eoSk2VFkCh6sqwsxORngwc1BTnYep8qX2eAAjI5cZi4SIbocxes1VuoSg7Lw9Cz7jhh5ePuP7OXazW48Nq+RQaJgcXGBan+A052daX1Xt3tvc/r0ZgGE40ePMdjfT8uB/EY4AP5qH+dePMPtm32suGM07Ek/eluYW+Dx4AxBf4jTxztxu43Az4RzffDuUNESlFPRBkmzo9gqBqqjo52r3d1ZjRHAp159xSx9ojYFWd69vb6Q/nPH92+6f3V1lbfe/R9+4cULyV/2BMtLK2kDN4M1QXp7l3KSY0qHiNBx4giPJh5z78Z99p9Yn8Q8dn+Cxuomzp9r27KNUhgkPWXT7CiyBUR6XB7mo9lXkhIGIZ3hEFv2KHCHw8GxF9q5eucyP7v4HgODA0/atmU2NufOnk1OLQuloame052nGLs1mZRhAvDbq9l7oHSVFrZCj5A0O4ps+V4dR9u5cuUKR5/vyPsZVtNSRISWg7sBmBx+xNAHQzTWNeLcIjrbZrOxPL/Krcu9hlEUo7BIsk2zgoCklByxu4UDR/anbc/tdnP6bCcPHwwx0DNEVchLc62VJPbShG5og6TZUVhJQA0GQ0w/niZUn9+SfT5CBI0tDdAC48MTPHo0g/26DZLGhSf/CARrg8xMTXPu/DlLxm9kaISZ4QiYJXpFnrQrCGITar0h6vc1YHc4mIo+ytpmeCZCczEK5W1AGyTNjsJKXbaDB/dztbs7b4NEAYm7zS1NyKKT9uOby+WmEo/H6b/fz8FD2eWx9+zNzQk+eTt7grCKSUmW/7UPSbOzsBglbsPGyoo1YchN9xZYScBXld2pbrPZLNcmz4VoNIo3i1N/YX6BxZXS1FnUBkmzo7CatvL8qZM8uDOQ30MKsEf9fQPsbrFWiDBegpxAv9/P9MRMxvNjQxMM3hzjYMvhoj8b9JRNsw1QSrG2tpaUKnJaVJ2NzEVYMwUhE74Wu9O6tXC7XMxH55M1ra1SSF5cPEYyrinrtcWuC25it2d+//hanIC/puDQg0xog6SpaKKxWZqbm7E77DgdDu7cvkvAF7RklKqq3bQfO5H3s9vNuKSOE1v7czZiZdk/E16X9XIopSp0Z9+iZMme/bv46Y8+oKGmifr63FNisqGnbJqKpqmpkZa9e9i1q5n6hnpeevk8i4vWMs6L4WPxuK3FJaXisDtYXs5PproqF3HGEiidjI9PUFWd2ShOTU7j8/qYmZ0u/sPRBklT4WwcBRhL1hZ/E4tgkTo62hl8MJTTPW6Pi2gk9zIdM1Mz1FlY2YvFYnzw3kWamhtzfsZWDA8PMTE1RtPuzO3WNYY49fIxpmYLy6vLhJ6yaSqaeJoAvNW1FSJzhr5oIqZGEaeuPsTkxCT1DXWITQhUFUcUQq0qlpeXcbk217eeejxFf/+AmUqhUAKra2vsbctdIWdyaIr2l7KXQem53sMrP/9yzu1nY2x8nLaTh7Jel6geQAkq2pZTufYAhmhACLgC/J5SKr9xruaZJZ2f5KVXzme8vjrgx+GyEwgUL2gvTjytMQIjsLChNUQgWPjzPM7s/qOxkTFKpr6Tg4+8VLqYuUzZEsq1Cd4HfhHImFijlHpbKXVKKXUKuAAs8ES59q+AbyilDgMzwBdyeXHNziDXpW2fz8f0dOZl63zYSuLIU+UhMlsceSCfZ+v4n6GHw6wsrXL4SPZRTD6Izc6dm3dL0rZVLBmkFOXabyaOKaWumvWyrZJUrjWVRi4ACRnt72Aoj2g068h1Zdvr9TIXLp5+WM+t3i0TTT0eT17+oo3E43F8fn/G8yMjoxAXDjy3v+BnZWJXcxMNzQ0la98K5VKurQPCSqlElahh0ggBgFau3fHk6Ji22Ww8mpim90Yf0WgUv6/qiRM8kQ+mFCTyucxEVBExLzP3zZ8uh4uZ0QgikWQ7qblgiLC6XLgz5d6tB7zU9XNpz8ViMeYjC3QczS38IFfGJyY4dCJz1cxUSlUVPatBSlWuFZFP5/OQNMq16aagafuolHoTeBPg6NFjlVEdXvPUyCcaORgI4rS5cTmWOXEq/zgkq9wb6yu4DadyZQw0vHWth7Pniy/TvRnrnqFSxUCVS7n2MRAUkYRBbAFGc2xTswPIKxrZHMk8LXUTWxGiZ7wZ/EcDDwZpay9NmkZhlMatXRblWmXUgHgbw68E8PvAD3JsU7MDyOcvcSJ1YzlWiJBADs8rgix3lTe9QYrMzhEMWtdkK4RSrZzlQt6mXUS+KCLDGKOb6yLyTfN4V2Lf/Lyf9Mq1fwH8uYjcw/ApfSvfd9FsPyJzERZi8ywuLRBbXmBpZZHllRgrq0vGtrbEanwZlye7tv1GllZiODw2DnUUX1k1HVLgCGl8eILGNEGOd3r7ONxWmhW1dNhssmW9qJuXe5gaCDM1ECY6VZps/3Iq1z4AzubyfM2zQ02tnyMdmWs2F0J9fR2HDmevE1Qs8inIlsrcdJSats1xTGvLa/hzTOwtBJvYiMfjGX1ZTruLw0eM6aNSQjy/6ixboiO1NWUhXgKn6KWPrxBfVQRqMy+flwIpcLLjdW6erl3vvsHx48UTr7SC3eHYcoS0roqBSkroFhVtkDRlwUop2Vx48KAfidsIVPuxFWlRenDgIWvxNVP1FkMFN/HeCSVdBeHpCPev9/Ok5GxKeEAixMA4kiyDkggZmJ2ZJeivpefabbNZhdPpZCGyYLnMSrFwOBzJVc14PJ7cEsQWF5P7VuuG5/wOJWlVo8nC/NwCN67deiJ3nUYmOymPDetksltad7NrdzMA7797EYfdiVKGTBBAeHqOD979eN29Dpedcy/ltnQ+NjnC8c7so5TdzzXl1G4qt672cu7suU3Hr1y+kneb+eKtcnOzuwen00l4fJaurq5kMrOKxznd+ULy2rgeIWmeJar9+eV+KaVYTPlL7fF48XnXT9HS5bEtrSxuOlYJuJ2eDGee/pqX0+HizMmz1NRYKZatDZJGg4gwPjzJ+LBR/qLKQv1pyG+KWOjqmRUyVocswxq80+W0HIhaqhAvbZA0245QqC7ne6LRKAP9gxuUZp9MDRObx+0hFouBgrUS1KxOZWx0jKbm9NO9Qh3l+VBVVcVC1OpIUuuyaTR5Ux9qJBbdep16bi6CzTaHz2dMAQM1haRuZufx2DSH96XPT7OVwSB5PJ51CrZboVRpBnG6YqRGY1JdHUgaIyjdtCSBy5W5rEmoPsTjx1OlfYEN2Gw2VlctJgqX6D9HGySNJhMltkheT+aCbHtb9zI6NJp3be58eHC/31IJXShjtr9Gs1OZn13kzo37CEa4gRGeAAnfE2YYgs0htJ/ILQE2Go0mwxQy0Xm6kw8vfsSZ8y9seV2u3LrRS31DaJP/KhKOcvjQ0w0q3YgeIWk0GQhWh/A5q6lyVuNzBvC5AvjdAfzuGqo9NVR7awh4gxDP3Zty/86DZCzVVpw528VHH3ySz+un5ZMPL9Pa2sro8MSmc1tVxtxIsQNbE2iDpNEUSD6/nC6Hx1K0s91u5/lTJ+m+ci2fV9uE2+0mGKzhxMljXLnUve7c2koOheZKNGfTBkmjKZB8SqR4XJkCIjfj8/k4cOAAN6/dyvk5G0mYQLfbze5duxkaGk6eW1m17q9SJbJI2iBpNHkwPfuYuHsZ5Vkm1Lx1ZPNcJEr/3UH6bt0jMmssq3s81g0SQCgUoqWlhTu9hVenTLCnZTd2HFz68DLxeBwl1o2MzmXTaCoIh91B6xbF/xOMDI4SebRAtT+A0+5l9O4kfSt3OXdmc/5aNurq64jFlnj7Jz8lFKqluqaag89Zq4Gdib2tLexp2U3PrV5WlleZnJyksdGCAGVpMke0QdJo8kEpRSwWQ0SYnYngD/jwer3JkcPUoykmR6dwKve6vD2fz8/ovZG8aoWDMaqZnJyk7chhUNB/d8AY3SRW/MznZ3Jrheo3R7nbbDaOnzjG/Pw8a2vW/EhxFceuDZJGUxl4XFXc636IQuF0OJlSsyyvLGNz2EApXE4Pfm/NpqmNiNDY2ITPl3/htc7Tp/jw4kd0nXmBQ0WsKJnTO5XbqS0idhG5KiI/ND//qYjcExElIvVb3NcqIm+JSK+I9JglbRGRb4tIv4h0m9upQjuj0TwtjNWqILXBWvx+P9XVAepC9dQGQtTW1OGr8mX0s3ircvMfpeP8i+f45ONLJVt+z0q5DRJ5KNea/CPwhlKqA6Nk7WTKudcTyrZKqe70t2s0zw5KKar81ioUZOOFrtNFCweoFEqqXCsiRwGHUurH5j1RpVRpqoNrNNuA8GwYEZibixbclsvlonXfXu713SvCm+VGuQMjE8q1uXri2oCwiPyHOd17Q0RSK4h/XUSui8g3RCRtmKiI/JGIXBKRS+FwcTXbNZqnTW2wltWYYnxkvCjt1dXXsbYWZ27OWpZ+pZPVIKUq1+bRvgN4BfgycAY4CHzePPcVoN08HsKQRdqEUupNpVSXUqorGKzN4xU0mmebIx1tDPQ/fKrPLGdybUK59jXAAwRE5J8sikUOA1dNySNE5PvAeeBbSqkx85olEfkHDKOl0ewIZsJhBgcepg3lEdmgj2aKBRhHzH/Vk30QZqanGegfMDUFJBkjtGGNL7mXDA8wj6Y64K1MxxYWFnDXFO6c30hWg6SU+grGaAYR+TTw5RyUaz8BakWkQSn1CLgAXDLb2qWUGhPjf+LXgJt5vL9Gsy0J+IIszhWvtEhj3S5i0dWitZeN2hprZUpypaTKtUqpNYyRz/+KyA0MY/x3ZhP/bB67AdQDf5l/NzQazbOAlC2OIQ+OHj2mvvvdfyn3a2g0mhzp7Hz+slKqK9t1OrlWo9FUDNogaTSaikEbJI1GUzFog6TRaCoGbZA0Gk3FoA2SRqOpGLRB0mg0FcO2ikMSkUdkL3dSSuqBx2V8frHR/alsnqX+7FNKNWS7aFsZpHIjIpesBHdtF3R/KptnrT9W0FM2jUZTMWiDpNFoKgZtkHLjzXK/QJHR/alsnrX+ZEX7kDQaTcWgR0gajaZi0AZJo9FUDNogpSAip0TkQ1Mn7pKInDWPv56iH3dTRNZEZFPJPBG5ICJXzGu+IyJlF+IsQp9eNfvULSI/E5HiKRPmQRH6817KdaNmWeWyUYT+iIh8XUT6TO3DLz79XhQRpZTezA14C/hVc/814J0013wG+L80x23AENBmfv4a8IXt3CfzXB/QYe7/CfDt7dyfDdd9D/jcdu4P8AcY2oc283NjOftT6KZHSOtRQEKIvQYYTXPNZ4F0ZSvrgCWlVJ/5+cfAbxb9DXOnkD5Zvf9pUmh/ABCRaowa72UdIVF4f/4Y+JpSKg6glJrMcN32oNwWsZI2oAN4iDHSGcEId089XwVMA6E09wpGWkuX+flvgBvbuU/m+VeAKQwFmR4gsJ37k3Ld54B/fwa+nyngqxjiGT8CDpe7T4VsZfdxPG1E5CdAc5pTXwVeBb6klPqeiPw28C0MufAEnwHeV0pNb7xZKaVE5HeAhOjlW8BTkYEoVZ9MvgS8ppT6SEReB/4a+MPivf1mStyfBJ8lRYm5lJS4P24gppTqEpHfAP4e44/I9qTcFrGSNmCWJ7FZAkQ2nP9P4HcttvXLwL9t5z4BDcD9lM+tQM927U/KNXUYIwvPdv5+zPO3gf0p98+Wu0+FbNqHtJ5R4FPm/gXgbuKEiNSY536Q6WYRaTR/ujGUeP+2ZG9qnUL6NAPUiEib+fmXgN4SvadVCvqOTH4L+KFSKlaSN8yNQvvzffM+zGv7tri28im3RaykDXgZuAxcAz4CXkg593ngX9Pc89/AbnP/DYxf2DvAn5W7P0Xq069jaOddA94BDm7n/pif3wF+pdzfTZG+nyDwX+Z3dBF4vtx9KmTTqSMajaZi0FM2jUZTMWiDpNFoKgZtkDQaTcWgDZJGo6kYtEHSaDQVgzZIGo2mYtAGSaPRVAz/D5TSww2uHcJgAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "accessM.plot_choropleth(column = \"all_categories_score\", title = \"Access Model Scores in Chicago\", filename = \"data/output_data/accessModel_choropleth\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Subset the Data to Calculate the Access Score**" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:spatial_access.p2p:You should use tmx instead of csv for significantly better performance\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> geoid10\n", + "> lon\n", + "> lat\n", + "> Pop2014\n", + "> Pov14\n", + "> community\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the unique index variable: geoid10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no population variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the population variable: Pop2014\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> ID\n", + "> Facility\n", + "> lat\n", + "> lon\n", + "> Type\n", + "> target\n", + "> category\n", + "> community\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the unique index variable: ID\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no capacity variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the capacity variable: target\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no category variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the category variable: category\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" + ] + } + ], + "source": [ + "#Subset for Federally Qualified Health Centers (walking)\n", + "accessM.set_focus_categories(['Federally Qualified Health Centers'])" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [], + "source": [ + "#Example of density and variety weights:\n", + "dict = {\n", + "\"Federally Qualified Health Centers\": [10,10,10,10,10]\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Using weights: {'Federally Qualified Health Centers': [10, 10, 10, 10, 10], 'Other Health Providers': 'No decay', 'School-Based Health Centers': 'No decay', 'All Free Health Clinics': 'No decay', 'Hospitals': 'No decay'}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
all_categories_scoreFederally Qualified Health Centers_scoreOther Health Providers_scoreSchool-Based Health Centers_scoreAll Free Health Clinics_scoreHospitals_score
170318424000.0NaNNaN0.0NaNNaN
170318403000.0NaNNaN0.0NaNNaN
170318411000.0NaNNaN0.0NaNNaN
170318412000.0NaNNaN0.0NaNNaN
170318382000.0NaNNaN0.0NaNNaN
170316503010.0NaNNaN0.0NaNNaN
170315305030.0NaNNaN0.0NaNNaN
170317608030.0NaNNaN0.0NaNNaN
170315401020.0NaNNaN0.0NaNNaN
170315401010.0NaNNaN0.0NaNNaN
170314402010.0NaNNaN0.0NaNNaN
170318390000.0NaNNaN0.0NaNNaN
170310306010.0NaNNaN0.0NaNNaN
170310306040.0NaNNaN0.0NaNNaN
170310208010.0NaNNaN0.0NaNNaN
170318433000.0NaNNaN0.0NaNNaN
170310802020.0NaNNaN0.0NaNNaN
170310701020.0NaNNaN0.0NaNNaN
170310315010.0NaNNaN0.0NaNNaN
170310315020.0NaNNaN0.0NaNNaN
170318349000.0NaNNaN0.0NaNNaN
170318348000.0NaNNaN0.0NaNNaN
170311605020.0NaNNaN0.0NaNNaN
170311407020.0NaNNaN0.0NaNNaN
170318420000.0NaNNaN0.0NaNNaN
170311504020.0NaNNaN0.0NaNNaN
170318344000.0NaNNaN0.0NaNNaN
170310402010.0NaNNaN0.0NaNNaN
170310402020.0NaNNaN0.0NaNNaN
170310207020.0NaNNaN0.0NaNNaN
.....................
170312912000.0NaNNaN0.0NaNNaN
170316203000.0NaNNaN0.0NaNNaN
170316204000.0NaNNaN0.0NaNNaN
170316301000.0NaNNaN0.0NaNNaN
170316303000.0NaNNaN0.0NaNNaN
170316304000.0NaNNaN0.0NaNNaN
170316305000.0NaNNaN0.0NaNNaN
170311103000.0NaNNaN0.0NaNNaN
170311104000.0NaNNaN0.0NaNNaN
170311201000.0NaNNaN0.0NaNNaN
170311202000.0NaNNaN0.0NaNNaN
170312714000.0NaNNaN0.0NaNNaN
170312801000.0NaNNaN0.0NaNNaN
170312808000.0NaNNaN0.0NaNNaN
170312819000.0NaNNaN0.0NaNNaN
170315501000.0NaNNaN0.0NaNNaN
170316115000.0NaNNaN0.0NaNNaN
170316118000.0NaNNaN0.0NaNNaN
170316119000.0NaNNaN0.0NaNNaN
170316120000.0NaNNaN0.0NaNNaN
170316201000.0NaNNaN0.0NaNNaN
170316202000.0NaNNaN0.0NaNNaN
170310702000.0NaNNaN0.0NaNNaN
170310704000.0NaNNaN0.0NaNNaN
170310705000.0NaNNaN0.0NaNNaN
170310710000.0NaNNaN0.0NaNNaN
170310712000.0NaNNaN0.0NaNNaN
170311303000.0NaNNaN0.0NaNNaN
170312922000.0NaNNaN0.0NaNNaN
170316309000.0NaNNaN0.0NaNNaN
\n", + "

801 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " all_categories_score Federally Qualified Health Centers_score \\\n", + "17031842400 0.0 NaN \n", + "17031840300 0.0 NaN \n", + "17031841100 0.0 NaN \n", + "17031841200 0.0 NaN \n", + "17031838200 0.0 NaN \n", + "17031650301 0.0 NaN \n", + "17031530503 0.0 NaN \n", + "17031760803 0.0 NaN \n", + "17031540102 0.0 NaN \n", + "17031540101 0.0 NaN \n", + "17031440201 0.0 NaN \n", + "17031839000 0.0 NaN \n", + "17031030601 0.0 NaN \n", + "17031030604 0.0 NaN \n", + "17031020801 0.0 NaN \n", + "17031843300 0.0 NaN \n", + "17031080202 0.0 NaN \n", + "17031070102 0.0 NaN \n", + "17031031501 0.0 NaN \n", + "17031031502 0.0 NaN \n", + "17031834900 0.0 NaN \n", + "17031834800 0.0 NaN \n", + "17031160502 0.0 NaN \n", + "17031140702 0.0 NaN \n", + "17031842000 0.0 NaN \n", + "17031150402 0.0 NaN \n", + "17031834400 0.0 NaN \n", + "17031040201 0.0 NaN \n", + "17031040202 0.0 NaN \n", + "17031020702 0.0 NaN \n", + "... ... ... \n", + "17031291200 0.0 NaN \n", + "17031620300 0.0 NaN \n", + "17031620400 0.0 NaN \n", + "17031630100 0.0 NaN \n", + "17031630300 0.0 NaN \n", + "17031630400 0.0 NaN \n", + "17031630500 0.0 NaN \n", + "17031110300 0.0 NaN \n", + "17031110400 0.0 NaN \n", + "17031120100 0.0 NaN \n", + "17031120200 0.0 NaN \n", + "17031271400 0.0 NaN \n", + "17031280100 0.0 NaN \n", + "17031280800 0.0 NaN \n", + "17031281900 0.0 NaN \n", + "17031550100 0.0 NaN \n", + "17031611500 0.0 NaN \n", + "17031611800 0.0 NaN \n", + "17031611900 0.0 NaN \n", + "17031612000 0.0 NaN \n", + "17031620100 0.0 NaN \n", + "17031620200 0.0 NaN \n", + "17031070200 0.0 NaN \n", + "17031070400 0.0 NaN \n", + "17031070500 0.0 NaN \n", + "17031071000 0.0 NaN \n", + "17031071200 0.0 NaN \n", + "17031130300 0.0 NaN \n", + "17031292200 0.0 NaN \n", + "17031630900 0.0 NaN \n", + "\n", + " Other Health Providers_score School-Based Health Centers_score \\\n", + "17031842400 NaN 0.0 \n", + "17031840300 NaN 0.0 \n", + "17031841100 NaN 0.0 \n", + "17031841200 NaN 0.0 \n", + "17031838200 NaN 0.0 \n", + "17031650301 NaN 0.0 \n", + "17031530503 NaN 0.0 \n", + "17031760803 NaN 0.0 \n", + "17031540102 NaN 0.0 \n", + "17031540101 NaN 0.0 \n", + "17031440201 NaN 0.0 \n", + "17031839000 NaN 0.0 \n", + "17031030601 NaN 0.0 \n", + "17031030604 NaN 0.0 \n", + "17031020801 NaN 0.0 \n", + "17031843300 NaN 0.0 \n", + "17031080202 NaN 0.0 \n", + "17031070102 NaN 0.0 \n", + "17031031501 NaN 0.0 \n", + "17031031502 NaN 0.0 \n", + "17031834900 NaN 0.0 \n", + "17031834800 NaN 0.0 \n", + "17031160502 NaN 0.0 \n", + "17031140702 NaN 0.0 \n", + "17031842000 NaN 0.0 \n", + "17031150402 NaN 0.0 \n", + "17031834400 NaN 0.0 \n", + "17031040201 NaN 0.0 \n", + "17031040202 NaN 0.0 \n", + "17031020702 NaN 0.0 \n", + "... ... ... \n", + "17031291200 NaN 0.0 \n", + "17031620300 NaN 0.0 \n", + "17031620400 NaN 0.0 \n", + "17031630100 NaN 0.0 \n", + "17031630300 NaN 0.0 \n", + "17031630400 NaN 0.0 \n", + "17031630500 NaN 0.0 \n", + "17031110300 NaN 0.0 \n", + "17031110400 NaN 0.0 \n", + "17031120100 NaN 0.0 \n", + "17031120200 NaN 0.0 \n", + "17031271400 NaN 0.0 \n", + "17031280100 NaN 0.0 \n", + "17031280800 NaN 0.0 \n", + "17031281900 NaN 0.0 \n", + "17031550100 NaN 0.0 \n", + "17031611500 NaN 0.0 \n", + "17031611800 NaN 0.0 \n", + "17031611900 NaN 0.0 \n", + "17031612000 NaN 0.0 \n", + "17031620100 NaN 0.0 \n", + "17031620200 NaN 0.0 \n", + "17031070200 NaN 0.0 \n", + "17031070400 NaN 0.0 \n", + "17031070500 NaN 0.0 \n", + "17031071000 NaN 0.0 \n", + "17031071200 NaN 0.0 \n", + "17031130300 NaN 0.0 \n", + "17031292200 NaN 0.0 \n", + "17031630900 NaN 0.0 \n", + "\n", + " All Free Health Clinics_score Hospitals_score \n", + "17031842400 NaN NaN \n", + "17031840300 NaN NaN \n", + "17031841100 NaN NaN \n", + "17031841200 NaN NaN \n", + "17031838200 NaN NaN \n", + "17031650301 NaN NaN \n", + "17031530503 NaN NaN \n", + "17031760803 NaN NaN \n", + "17031540102 NaN NaN \n", + "17031540101 NaN NaN \n", + "17031440201 NaN NaN \n", + "17031839000 NaN NaN \n", + "17031030601 NaN NaN \n", + "17031030604 NaN NaN \n", + "17031020801 NaN NaN \n", + "17031843300 NaN NaN \n", + "17031080202 NaN NaN \n", + "17031070102 NaN NaN \n", + "17031031501 NaN NaN \n", + "17031031502 NaN NaN \n", + "17031834900 NaN NaN \n", + "17031834800 NaN NaN \n", + "17031160502 NaN NaN \n", + "17031140702 NaN NaN \n", + "17031842000 NaN NaN \n", + "17031150402 NaN NaN \n", + "17031834400 NaN NaN \n", + "17031040201 NaN NaN \n", + "17031040202 NaN NaN \n", + "17031020702 NaN NaN \n", + "... ... ... \n", + "17031291200 NaN NaN \n", + "17031620300 NaN NaN \n", + "17031620400 NaN NaN \n", + "17031630100 NaN NaN \n", + "17031630300 NaN NaN \n", + "17031630400 NaN NaN \n", + "17031630500 NaN NaN \n", + "17031110300 NaN NaN \n", + "17031110400 NaN NaN \n", + "17031120100 NaN NaN \n", + "17031120200 NaN NaN \n", + "17031271400 NaN NaN \n", + "17031280100 NaN NaN \n", + "17031280800 NaN NaN \n", + "17031281900 NaN NaN \n", + "17031550100 NaN NaN \n", + "17031611500 NaN NaN \n", + "17031611800 NaN NaN \n", + "17031611900 NaN NaN \n", + "17031612000 NaN NaN \n", + "17031620100 NaN NaN \n", + "17031620200 NaN NaN \n", + "17031070200 NaN NaN \n", + "17031070400 NaN NaN \n", + "17031070500 NaN NaN \n", + "17031071000 NaN NaN \n", + "17031071200 NaN NaN \n", + "17031130300 NaN NaN \n", + "17031292200 NaN NaN \n", + "17031630900 NaN NaN \n", + "\n", + "[801 rows x 6 columns]" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "accessM.calculate(upper_threshold=40,\n", + " normalize=True,\n", + " category_weight_dict=dict)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
all_categories_scoreFederally Qualified Health Centers_scoreOther Health Providers_scoreSchool-Based Health Centers_scoreAll Free Health Clinics_scoreHospitals_score
170318424000.0NaNNaN0.0NaNNaN
170318403000.0NaNNaN0.0NaNNaN
170318411000.0NaNNaN0.0NaNNaN
170318412000.0NaNNaN0.0NaNNaN
170318382000.0NaNNaN0.0NaNNaN
\n", + "
" + ], + "text/plain": [ + " all_categories_score Federally Qualified Health Centers_score \\\n", + "17031842400 0.0 NaN \n", + "17031840300 0.0 NaN \n", + "17031841100 0.0 NaN \n", + "17031841200 0.0 NaN \n", + "17031838200 0.0 NaN \n", + "\n", + " Other Health Providers_score School-Based Health Centers_score \\\n", + "17031842400 NaN 0.0 \n", + "17031840300 NaN 0.0 \n", + "17031841100 NaN 0.0 \n", + "17031841200 NaN 0.0 \n", + "17031838200 NaN 0.0 \n", + "\n", + " All Free Health Clinics_score Hospitals_score \n", + "17031842400 NaN NaN \n", + "17031840300 NaN NaN \n", + "17031841100 NaN NaN \n", + "17031841200 NaN NaN \n", + "17031838200 NaN NaN " + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview the results\n", + "accessM.model_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "accessM.model_results.to_csv('data/output_data/FQHC.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## AccessTime: Measures the closest destination for each source per category \n", + "\n", + "### Specifications for AccessTime\n", + "\n", + "**name = AccessTime( )**\n", + "* network_type ('walk', 'bike', 'drive', 'otp') \n", + "* sources_filename (primary input data)\n", + "* destinations_filename (secondary input data)\n", + "* source_column_names (dictionary that map column names to expected values)\n", + "* dest_column_names (dictionary that map column names to expected values)\n", + "* transit_matrix_filename (sources-destination travel time matrix)\n", + "\n", + "**Column Inputs**\n", + "* Standard Inputs\n", + "\n", + "**name.calculate()**\n", + "* no input\n", + "\n", + "**Functions within the AccessTime class** (use as name.function()) \n", + "- calculate () \n", + "- aggregate() \n", + "- set.focus.categories()\n", + "- plot_cdf()\n", + "- plot_chlorepleth\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### **Quick Note**: \n", + "For the following models, the examples will specify source_column_names and dest_column_names so that the user does not need to input the expected values each time" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.p2p:Approx area of bounding box: 2,445.05 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 16.77 seconds\n" + ] + } + ], + "source": [ + "accessT = AccessTime(network_type='walk',\n", + " transit_matrix_filename = None,\n", + " sources_filename='data/input_data/sources/tracts2010.csv',\n", + " destinations_filename='data/input_data/destinations/health_chicago.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'ID', 'capacity': 'skip', 'category': 'category', 'lat': 'lat', 'lon': 'lon'}\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time_to_nearest_All Free Health Clinicstime_to_nearest_School-Based Health Centerstime_to_nearest_Federally Qualified Health Centerstime_to_nearest_Other Health Providerstime_to_nearest_Hospitalstime_to_nearest_all_categories
17031842400358017182472483132431718
170318403003289177751533292760515
17031841100177452513761741376174
17031841200286453665220171222536
170318382001437853562590246246
17031650301251520221636610026201636
170315305039598723328791128528192819
17031760803994384726173990530283028
1703154010210624847417731038627761773
1703154010121675892823921986273262392
17031440201424319423522340521751942
17031839000179323122175246723841793
17031030601257593711501526363363
170310306042819100915211902739739
17031020801377173758523531224377
1703184330015689512211551384221
170310802023593344280143461100801
17031070102508427586492349691649
1703103150140983223001046301300
170310315024230187165647376165
170318349001463267592340711850923
17031834800523314452332371199523
170311605023717821128628441549821
17031140702322725179634591353251
1703184200030098852485661203248
17031150402681239311050467912951050
170318344002692171519982781384278
17031040201157711064863217598486
1703104020288712565672766691567
170310207026632513132423421901663
.....................
17031291200195273372617631292726
170316203003050312049949433730499
170316204002338240835448623018354
17031630100127629931297423032381276
170316303002495238095347213192953
17031630400179318771112535725001112
17031630500143424111180478524241180
17031110300652545392954597222362236
17031110400596239382429537125732429
17031120100481856345181651444154415
17031120200372145564337541742153721
1703127140090116097152629327327
17031280100174616361568249919191568
1703128080072848343912511251439
17031281900145318802012222318741453
1703155010013240385718041142769431804
170316115001157285786043153928860
17031611800492324532834513451328
17031611900691281647830223022478
170316120001116243790326432643903
17031620100308526291056432137651056
170316202003420326758544804100585
17031070200489427577652459937765
17031070400453023908702478855855
17031070500434022801032273611521032
170310710003977296053030161393530
17031071200435432851096301014291096
17031130300132516581558344015311325
170312922002597112549012141361490
17031630900177718511137542524631137
\n", + "

801 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time_to_nearest_All Free Health Clinics \\\n", + "17031842400 3580 \n", + "17031840300 3289 \n", + "17031841100 1774 \n", + "17031841200 2864 \n", + "17031838200 1437 \n", + "17031650301 2515 \n", + "17031530503 9598 \n", + "17031760803 9943 \n", + "17031540102 10624 \n", + "17031540101 21675 \n", + "17031440201 4243 \n", + "17031839000 1793 \n", + "17031030601 2575 \n", + "17031030604 2819 \n", + "17031020801 377 \n", + "17031843300 1568 \n", + "17031080202 3593 \n", + "17031070102 5084 \n", + "17031031501 4098 \n", + "17031031502 4230 \n", + "17031834900 1463 \n", + "17031834800 523 \n", + "17031160502 3717 \n", + "17031140702 3227 \n", + "17031842000 3009 \n", + "17031150402 6812 \n", + "17031834400 2692 \n", + "17031040201 1577 \n", + "17031040202 887 \n", + "17031020702 663 \n", + "... ... \n", + "17031291200 1952 \n", + "17031620300 3050 \n", + "17031620400 2338 \n", + "17031630100 1276 \n", + "17031630300 2495 \n", + "17031630400 1793 \n", + "17031630500 1434 \n", + "17031110300 6525 \n", + "17031110400 5962 \n", + "17031120100 4818 \n", + "17031120200 3721 \n", + "17031271400 901 \n", + "17031280100 1746 \n", + "17031280800 728 \n", + "17031281900 1453 \n", + "17031550100 13240 \n", + "17031611500 1157 \n", + "17031611800 492 \n", + "17031611900 691 \n", + "17031612000 1116 \n", + "17031620100 3085 \n", + "17031620200 3420 \n", + "17031070200 4894 \n", + "17031070400 4530 \n", + "17031070500 4340 \n", + "17031071000 3977 \n", + "17031071200 4354 \n", + "17031130300 1325 \n", + "17031292200 2597 \n", + "17031630900 1777 \n", + "\n", + " time_to_nearest_School-Based Health Centers \\\n", + "17031842400 1718 \n", + "17031840300 1777 \n", + "17031841100 525 \n", + "17031841200 536 \n", + "17031838200 853 \n", + "17031650301 2022 \n", + "17031530503 7233 \n", + "17031760803 8472 \n", + "17031540102 8474 \n", + "17031540101 8928 \n", + "17031440201 1942 \n", + "17031839000 2312 \n", + "17031030601 937 \n", + "17031030604 1009 \n", + "17031020801 1737 \n", + "17031843300 951 \n", + "17031080202 3442 \n", + "17031070102 2758 \n", + "17031031501 322 \n", + "17031031502 187 \n", + "17031834900 2675 \n", + "17031834800 3144 \n", + "17031160502 821 \n", + "17031140702 251 \n", + "17031842000 885 \n", + "17031150402 3931 \n", + "17031834400 1715 \n", + "17031040201 1106 \n", + "17031040202 1256 \n", + "17031020702 2513 \n", + "... ... \n", + "17031291200 733 \n", + "17031620300 3120 \n", + "17031620400 2408 \n", + "17031630100 2993 \n", + "17031630300 2380 \n", + "17031630400 1877 \n", + "17031630500 2411 \n", + "17031110300 4539 \n", + "17031110400 3938 \n", + "17031120100 5634 \n", + "17031120200 4556 \n", + "17031271400 1609 \n", + "17031280100 1636 \n", + "17031280800 483 \n", + "17031281900 1880 \n", + "17031550100 3857 \n", + "17031611500 2857 \n", + "17031611800 3245 \n", + "17031611900 2816 \n", + "17031612000 2437 \n", + "17031620100 2629 \n", + "17031620200 3267 \n", + "17031070200 2757 \n", + "17031070400 2390 \n", + "17031070500 2280 \n", + "17031071000 2960 \n", + "17031071200 3285 \n", + "17031130300 1658 \n", + "17031292200 1125 \n", + "17031630900 1851 \n", + "\n", + " time_to_nearest_Federally Qualified Health Centers \\\n", + "17031842400 2472 \n", + "17031840300 515 \n", + "17031841100 1376 \n", + "17031841200 652 \n", + "17031838200 562 \n", + "17031650301 1636 \n", + "17031530503 2879 \n", + "17031760803 6173 \n", + "17031540102 1773 \n", + "17031540101 2392 \n", + "17031440201 3522 \n", + "17031839000 2175 \n", + "17031030601 1150 \n", + "17031030604 1521 \n", + "17031020801 585 \n", + "17031843300 221 \n", + "17031080202 801 \n", + "17031070102 649 \n", + "17031031501 300 \n", + "17031031502 165 \n", + "17031834900 923 \n", + "17031834800 523 \n", + "17031160502 1286 \n", + "17031140702 796 \n", + "17031842000 248 \n", + "17031150402 1050 \n", + "17031834400 1998 \n", + "17031040201 486 \n", + "17031040202 567 \n", + "17031020702 1324 \n", + "... ... \n", + "17031291200 726 \n", + "17031620300 499 \n", + "17031620400 354 \n", + "17031630100 1297 \n", + "17031630300 953 \n", + "17031630400 1112 \n", + "17031630500 1180 \n", + "17031110300 2954 \n", + "17031110400 2429 \n", + "17031120100 5181 \n", + "17031120200 4337 \n", + "17031271400 715 \n", + "17031280100 1568 \n", + "17031280800 439 \n", + "17031281900 2012 \n", + "17031550100 1804 \n", + "17031611500 860 \n", + "17031611800 328 \n", + "17031611900 478 \n", + "17031612000 903 \n", + "17031620100 1056 \n", + "17031620200 585 \n", + "17031070200 765 \n", + "17031070400 870 \n", + "17031070500 1032 \n", + "17031071000 530 \n", + "17031071200 1096 \n", + "17031130300 1558 \n", + "17031292200 490 \n", + "17031630900 1137 \n", + "\n", + " time_to_nearest_Other Health Providers \\\n", + "17031842400 4831 \n", + "17031840300 3329 \n", + "17031841100 174 \n", + "17031841200 2017 \n", + "17031838200 590 \n", + "17031650301 6100 \n", + "17031530503 11285 \n", + "17031760803 9905 \n", + "17031540102 10386 \n", + "17031540101 19862 \n", + "17031440201 3405 \n", + "17031839000 2467 \n", + "17031030601 1526 \n", + "17031030604 1902 \n", + "17031020801 2353 \n", + "17031843300 1551 \n", + "17031080202 4346 \n", + "17031070102 2349 \n", + "17031031501 1046 \n", + "17031031502 647 \n", + "17031834900 4071 \n", + "17031834800 3237 \n", + "17031160502 2844 \n", + "17031140702 3459 \n", + "17031842000 566 \n", + "17031150402 4679 \n", + "17031834400 278 \n", + "17031040201 3217 \n", + "17031040202 2766 \n", + "17031020702 2342 \n", + "... ... \n", + "17031291200 1763 \n", + "17031620300 4943 \n", + "17031620400 4862 \n", + "17031630100 4230 \n", + "17031630300 4721 \n", + "17031630400 5357 \n", + "17031630500 4785 \n", + "17031110300 5972 \n", + "17031110400 5371 \n", + "17031120100 6514 \n", + "17031120200 5417 \n", + "17031271400 2629 \n", + "17031280100 2499 \n", + "17031280800 1251 \n", + "17031281900 2223 \n", + "17031550100 11427 \n", + "17031611500 4315 \n", + "17031611800 3451 \n", + "17031611900 3022 \n", + "17031612000 2643 \n", + "17031620100 4321 \n", + "17031620200 4480 \n", + "17031070200 2459 \n", + "17031070400 2478 \n", + "17031070500 2736 \n", + "17031071000 3016 \n", + "17031071200 3010 \n", + "17031130300 3440 \n", + "17031292200 1214 \n", + "17031630900 5425 \n", + "\n", + " time_to_nearest_Hospitals time_to_nearest_all_categories \n", + "17031842400 3243 1718 \n", + "17031840300 2760 515 \n", + "17031841100 1376 174 \n", + "17031841200 1222 536 \n", + "17031838200 246 246 \n", + "17031650301 2620 1636 \n", + "17031530503 2819 2819 \n", + "17031760803 3028 3028 \n", + "17031540102 2776 1773 \n", + "17031540101 7326 2392 \n", + "17031440201 2175 1942 \n", + "17031839000 2384 1793 \n", + "17031030601 363 363 \n", + "17031030604 739 739 \n", + "17031020801 1224 377 \n", + "17031843300 384 221 \n", + "17031080202 1100 801 \n", + "17031070102 691 649 \n", + "17031031501 301 300 \n", + "17031031502 376 165 \n", + "17031834900 1850 923 \n", + "17031834800 1199 523 \n", + "17031160502 1549 821 \n", + "17031140702 1353 251 \n", + "17031842000 1203 248 \n", + "17031150402 1295 1050 \n", + "17031834400 1384 278 \n", + "17031040201 598 486 \n", + "17031040202 691 567 \n", + "17031020702 1901 663 \n", + "... ... ... \n", + "17031291200 1292 726 \n", + "17031620300 3730 499 \n", + "17031620400 3018 354 \n", + "17031630100 3238 1276 \n", + "17031630300 3192 953 \n", + "17031630400 2500 1112 \n", + "17031630500 2424 1180 \n", + "17031110300 2236 2236 \n", + "17031110400 2573 2429 \n", + "17031120100 4415 4415 \n", + "17031120200 4215 3721 \n", + "17031271400 327 327 \n", + "17031280100 1919 1568 \n", + "17031280800 1251 439 \n", + "17031281900 1874 1453 \n", + "17031550100 6943 1804 \n", + "17031611500 3928 860 \n", + "17031611800 3451 328 \n", + "17031611900 3022 478 \n", + "17031612000 2643 903 \n", + "17031620100 3765 1056 \n", + "17031620200 4100 585 \n", + "17031070200 937 765 \n", + "17031070400 855 855 \n", + "17031070500 1152 1032 \n", + "17031071000 1393 530 \n", + "17031071200 1429 1096 \n", + "17031130300 1531 1325 \n", + "17031292200 1361 490 \n", + "17031630900 2463 1137 \n", + "\n", + "[801 rows x 6 columns]" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#calculate Access Time\n", + "accessT.calculate()" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time_to_nearest_All Free Health Clinicstime_to_nearest_School-Based Health Centerstime_to_nearest_Federally Qualified Health Centerstime_to_nearest_Other Health Providerstime_to_nearest_Hospitalstime_to_nearest_all_categories
17031842400358017182472483132431718
170318403003289177751533292760515
17031841100177452513761741376174
17031841200286453665220171222536
170318382001437853562590246246
\n", + "
" + ], + "text/plain": [ + " time_to_nearest_All Free Health Clinics \\\n", + "17031842400 3580 \n", + "17031840300 3289 \n", + "17031841100 1774 \n", + "17031841200 2864 \n", + "17031838200 1437 \n", + "\n", + " time_to_nearest_School-Based Health Centers \\\n", + "17031842400 1718 \n", + "17031840300 1777 \n", + "17031841100 525 \n", + "17031841200 536 \n", + "17031838200 853 \n", + "\n", + " time_to_nearest_Federally Qualified Health Centers \\\n", + "17031842400 2472 \n", + "17031840300 515 \n", + "17031841100 1376 \n", + "17031841200 652 \n", + "17031838200 562 \n", + "\n", + " time_to_nearest_Other Health Providers \\\n", + "17031842400 4831 \n", + "17031840300 3329 \n", + "17031841100 174 \n", + "17031841200 2017 \n", + "17031838200 590 \n", + "\n", + " time_to_nearest_Hospitals time_to_nearest_all_categories \n", + "17031842400 3243 1718 \n", + "17031840300 2760 515 \n", + "17031841100 1376 174 \n", + "17031841200 1222 536 \n", + "17031838200 246 246 " + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview the results\n", + "accessT.model_results.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Write Data Frame to CSV**" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [], + "source": [ + "accessT.model_results.to_csv('data/output_data/accessTime2010.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Aggregate Data to the Community Area Level**" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time_to_nearest_All Free Health Clinicstime_to_nearest_School-Based Health Centerstime_to_nearest_Federally Qualified Health Centerstime_to_nearest_Other Health Providerstime_to_nearest_Hospitalstime_to_nearest_all_categories
spatial_index
ALBANY PARK3160.909091759.5454551020.5454553787.8181821666.727273734.272727
ARCHER HEIGHTS4226.8000002647.200000886.8000003563.2000004692.200000886.800000
ARMOUR SQUARE2600.6000001041.6000001108.800000826.6000001509.200000765.400000
ASHBURN3996.8750003354.3750002955.8750008258.7500002287.0000002236.375000
AUBURN GRESHAM3638.5333331179.4000001132.4666675745.8666673260.133333911.333333
AUSTIN4301.3333331670.2916671232.1250004345.3750001662.0416671129.208333
AVALON PARK5176.0000002090.0000002328.5000003363.0000001235.0000001235.000000
AVONDALE4087.6000002226.1000001714.7000001264.7000001303.1000001004.500000
BELMONT CRAGIN5651.6470593257.4705881140.0588243214.0000001726.1764711028.411765
BEVERLY6459.4285714404.1428572527.7142868925.0000001922.2857141720.142857
BRIDGEPORT2600.1000001706.1000001592.2000001551.8000002442.1000001376.200000
BRIGHTON PARK3112.6000001112.9000001266.4000003974.1000003558.600000942.300000
BURNSIDE6355.0000003520.0000003581.0000004864.0000002526.0000002526.000000
CALUMET HEIGHTS6412.6000003326.6000001867.8000004613.0000001240.0000001240.000000
CHATHAM4742.4000002419.3000003154.5000004175.3000002767.7000002326.800000
CHICAGO LAWN1027.818182989.727273712.9090916282.7272731111.090909673.090909
CLEARING4596.4285714560.4285712030.1428577603.2857144720.0000002030.142857
DOUGLAS2642.700000750.200000790.800000769.6000001456.200000537.800000
DUNNING8892.5454556337.1818182604.6363646534.4545451603.2727271576.909091
EAST GARFIELD PARK797.0833331293.666667811.2500002266.166667802.416667486.333333
EAST SIDE10074.8333336127.333333911.6666678261.8333333717.166667911.666667
EDGEWATER2536.647059936.2941181008.1764711420.411765759.941176570.058824
EDISON PARK7595.3333337669.3333336531.3333339291.3333331849.0000001849.000000
ENGLEWOOD1132.0909092518.363636842.6363643306.9090911469.272727833.727273
FOREST GLEN3856.2500004081.7500003882.5000005413.0000003832.0000003410.000000
FULLER PARK1781.500000976.5000001062.5000001439.5000001719.500000905.500000
GAGE PARK1650.3750002181.2500001081.0000005058.3750002559.7500001078.375000
GARFIELD RIDGE5589.8181824817.909091954.9090915754.0909094971.727273954.909091
GRAND BOULEVARD1364.133333668.800000920.1333331083.9333331270.600000536.333333
GREATER GRAND CROSSING2676.0833331371.1666671990.8333332622.3333331580.0000001172.000000
.....................
NEAR NORTH SIDE3213.4210533059.578947770.6842113814.7368421042.947368683.315789
NEAR SOUTH SIDE2418.666667909.3333331326.3333331283.0000001326.333333909.333333
NEAR WEST SIDE1087.000000907.4500001036.1500001370.9500001078.350000665.900000
NEW CITY985.4117652650.000000698.0000003187.9411763152.529412666.117647
NORTH CENTER3715.4285711524.0714291115.9285712292.0714291535.7857141097.071429
NORTH LAWNDALE2315.9333331081.400000673.4666671505.2000001278.333333561.200000
NORTH PARK2010.2500001971.0000001895.7500004057.2500001963.0000001675.250000
NORWOOD PARK7005.8571436031.8571434598.7142867564.1428571440.5714291440.571429
OAKLAND1644.0000001176.500000580.5000001616.5000002335.500000580.500000
OHARE12224.25000010171.0000006689.00000011194.5000004729.5000004629.250000
PORTAGE PARK6476.6428573810.2142861324.7857144122.0714291225.0000001170.357143
PULLMAN8116.3333335916.6666672493.0000007410.6666672086.3333332086.333333
RIVERDALE16149.5000008701.0000002082.50000015124.0000005051.0000002082.500000
ROGERS PARK2541.9090911013.181818512.3636361252.0909091542.000000460.272727
ROSELAND6843.9285714767.6428571365.4285717198.6428571778.2857141350.000000
SOUTH CHICAGO6827.9000003760.400000823.5000004967.4000001417.100000692.500000
SOUTH DEERING8841.0000005755.0000002530.5000007028.0000002514.5000002303.500000
SOUTH LAWNDALE3321.6111111320.944444651.3333331274.6666671764.555556510.777778
SOUTH SHORE4730.5000001845.666667958.4166672517.666667891.583333671.916667
UPTOWN3736.750000798.083333526.6666671210.083333602.166667444.250000
WASHINGTON HEIGHTS5369.8750002707.7500001135.2500007017.1250002642.5000001135.250000
WASHINGTON PARK768.3333331609.666667951.5000001231.6666671059.333333703.500000
WEST ELSDON2973.2500002856.000000623.5000004651.5000003653.250000623.500000
WEST ENGLEWOOD1516.3157892491.1578951273.7368424499.7368422184.1052631217.263158
WEST GARFIELD PARK2122.6000001755.700000888.2000002886.5000001282.600000888.200000
WEST LAWN2470.6666672109.3333331575.0000006172.5000002566.8333331573.500000
WEST PULLMAN9250.5000006897.8750001924.00000010293.5000002119.2500001853.375000
WEST RIDGE960.2857141981.214286914.2142862020.2142861768.214286647.714286
WEST TOWN1405.1333331042.666667652.8333332120.433333936.033333605.666667
WOODLAWN2403.8181821840.0909091592.181818988.0000001029.454545742.909091
\n", + "

77 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " time_to_nearest_All Free Health Clinics \\\n", + "spatial_index \n", + "ALBANY PARK 3160.909091 \n", + "ARCHER HEIGHTS 4226.800000 \n", + "ARMOUR SQUARE 2600.600000 \n", + "ASHBURN 3996.875000 \n", + "AUBURN GRESHAM 3638.533333 \n", + "AUSTIN 4301.333333 \n", + "AVALON PARK 5176.000000 \n", + "AVONDALE 4087.600000 \n", + "BELMONT CRAGIN 5651.647059 \n", + "BEVERLY 6459.428571 \n", + "BRIDGEPORT 2600.100000 \n", + "BRIGHTON PARK 3112.600000 \n", + "BURNSIDE 6355.000000 \n", + "CALUMET HEIGHTS 6412.600000 \n", + "CHATHAM 4742.400000 \n", + "CHICAGO LAWN 1027.818182 \n", + "CLEARING 4596.428571 \n", + "DOUGLAS 2642.700000 \n", + "DUNNING 8892.545455 \n", + "EAST GARFIELD PARK 797.083333 \n", + "EAST SIDE 10074.833333 \n", + "EDGEWATER 2536.647059 \n", + "EDISON PARK 7595.333333 \n", + "ENGLEWOOD 1132.090909 \n", + "FOREST GLEN 3856.250000 \n", + "FULLER PARK 1781.500000 \n", + "GAGE PARK 1650.375000 \n", + "GARFIELD RIDGE 5589.818182 \n", + "GRAND BOULEVARD 1364.133333 \n", + "GREATER GRAND CROSSING 2676.083333 \n", + "... ... \n", + "NEAR NORTH SIDE 3213.421053 \n", + "NEAR SOUTH SIDE 2418.666667 \n", + "NEAR WEST SIDE 1087.000000 \n", + "NEW CITY 985.411765 \n", + "NORTH CENTER 3715.428571 \n", + "NORTH LAWNDALE 2315.933333 \n", + "NORTH PARK 2010.250000 \n", + "NORWOOD PARK 7005.857143 \n", + "OAKLAND 1644.000000 \n", + "OHARE 12224.250000 \n", + "PORTAGE PARK 6476.642857 \n", + "PULLMAN 8116.333333 \n", + "RIVERDALE 16149.500000 \n", + "ROGERS PARK 2541.909091 \n", + "ROSELAND 6843.928571 \n", + "SOUTH CHICAGO 6827.900000 \n", + "SOUTH DEERING 8841.000000 \n", + "SOUTH LAWNDALE 3321.611111 \n", + "SOUTH SHORE 4730.500000 \n", + "UPTOWN 3736.750000 \n", + "WASHINGTON HEIGHTS 5369.875000 \n", + "WASHINGTON PARK 768.333333 \n", + "WEST ELSDON 2973.250000 \n", + "WEST ENGLEWOOD 1516.315789 \n", + "WEST GARFIELD PARK 2122.600000 \n", + "WEST LAWN 2470.666667 \n", + "WEST PULLMAN 9250.500000 \n", + "WEST RIDGE 960.285714 \n", + "WEST TOWN 1405.133333 \n", + "WOODLAWN 2403.818182 \n", + "\n", + " time_to_nearest_School-Based Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 759.545455 \n", + "ARCHER HEIGHTS 2647.200000 \n", + "ARMOUR SQUARE 1041.600000 \n", + "ASHBURN 3354.375000 \n", + "AUBURN GRESHAM 1179.400000 \n", + "AUSTIN 1670.291667 \n", + "AVALON PARK 2090.000000 \n", + "AVONDALE 2226.100000 \n", + "BELMONT CRAGIN 3257.470588 \n", + "BEVERLY 4404.142857 \n", + "BRIDGEPORT 1706.100000 \n", + "BRIGHTON PARK 1112.900000 \n", + "BURNSIDE 3520.000000 \n", + "CALUMET HEIGHTS 3326.600000 \n", + "CHATHAM 2419.300000 \n", + "CHICAGO LAWN 989.727273 \n", + "CLEARING 4560.428571 \n", + "DOUGLAS 750.200000 \n", + "DUNNING 6337.181818 \n", + "EAST GARFIELD PARK 1293.666667 \n", + "EAST SIDE 6127.333333 \n", + "EDGEWATER 936.294118 \n", + "EDISON PARK 7669.333333 \n", + "ENGLEWOOD 2518.363636 \n", + "FOREST GLEN 4081.750000 \n", + "FULLER PARK 976.500000 \n", + "GAGE PARK 2181.250000 \n", + "GARFIELD RIDGE 4817.909091 \n", + "GRAND BOULEVARD 668.800000 \n", + "GREATER GRAND CROSSING 1371.166667 \n", + "... ... \n", + "NEAR NORTH SIDE 3059.578947 \n", + "NEAR SOUTH SIDE 909.333333 \n", + "NEAR WEST SIDE 907.450000 \n", + "NEW CITY 2650.000000 \n", + "NORTH CENTER 1524.071429 \n", + "NORTH LAWNDALE 1081.400000 \n", + "NORTH PARK 1971.000000 \n", + "NORWOOD PARK 6031.857143 \n", + "OAKLAND 1176.500000 \n", + "OHARE 10171.000000 \n", + "PORTAGE PARK 3810.214286 \n", + "PULLMAN 5916.666667 \n", + "RIVERDALE 8701.000000 \n", + "ROGERS PARK 1013.181818 \n", + "ROSELAND 4767.642857 \n", + "SOUTH CHICAGO 3760.400000 \n", + "SOUTH DEERING 5755.000000 \n", + "SOUTH LAWNDALE 1320.944444 \n", + "SOUTH SHORE 1845.666667 \n", + "UPTOWN 798.083333 \n", + "WASHINGTON HEIGHTS 2707.750000 \n", + "WASHINGTON PARK 1609.666667 \n", + "WEST ELSDON 2856.000000 \n", + "WEST ENGLEWOOD 2491.157895 \n", + "WEST GARFIELD PARK 1755.700000 \n", + "WEST LAWN 2109.333333 \n", + "WEST PULLMAN 6897.875000 \n", + "WEST RIDGE 1981.214286 \n", + "WEST TOWN 1042.666667 \n", + "WOODLAWN 1840.090909 \n", + "\n", + " time_to_nearest_Federally Qualified Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 1020.545455 \n", + "ARCHER HEIGHTS 886.800000 \n", + "ARMOUR SQUARE 1108.800000 \n", + "ASHBURN 2955.875000 \n", + "AUBURN GRESHAM 1132.466667 \n", + "AUSTIN 1232.125000 \n", + "AVALON PARK 2328.500000 \n", + "AVONDALE 1714.700000 \n", + "BELMONT CRAGIN 1140.058824 \n", + "BEVERLY 2527.714286 \n", + "BRIDGEPORT 1592.200000 \n", + "BRIGHTON PARK 1266.400000 \n", + "BURNSIDE 3581.000000 \n", + "CALUMET HEIGHTS 1867.800000 \n", + "CHATHAM 3154.500000 \n", + "CHICAGO LAWN 712.909091 \n", + "CLEARING 2030.142857 \n", + "DOUGLAS 790.800000 \n", + "DUNNING 2604.636364 \n", + "EAST GARFIELD PARK 811.250000 \n", + "EAST SIDE 911.666667 \n", + "EDGEWATER 1008.176471 \n", + "EDISON PARK 6531.333333 \n", + "ENGLEWOOD 842.636364 \n", + "FOREST GLEN 3882.500000 \n", + "FULLER PARK 1062.500000 \n", + "GAGE PARK 1081.000000 \n", + "GARFIELD RIDGE 954.909091 \n", + "GRAND BOULEVARD 920.133333 \n", + "GREATER GRAND CROSSING 1990.833333 \n", + "... ... \n", + "NEAR NORTH SIDE 770.684211 \n", + "NEAR SOUTH SIDE 1326.333333 \n", + "NEAR WEST SIDE 1036.150000 \n", + "NEW CITY 698.000000 \n", + "NORTH CENTER 1115.928571 \n", + "NORTH LAWNDALE 673.466667 \n", + "NORTH PARK 1895.750000 \n", + "NORWOOD PARK 4598.714286 \n", + "OAKLAND 580.500000 \n", + "OHARE 6689.000000 \n", + "PORTAGE PARK 1324.785714 \n", + "PULLMAN 2493.000000 \n", + "RIVERDALE 2082.500000 \n", + "ROGERS PARK 512.363636 \n", + "ROSELAND 1365.428571 \n", + "SOUTH CHICAGO 823.500000 \n", + "SOUTH DEERING 2530.500000 \n", + "SOUTH LAWNDALE 651.333333 \n", + "SOUTH SHORE 958.416667 \n", + "UPTOWN 526.666667 \n", + "WASHINGTON HEIGHTS 1135.250000 \n", + "WASHINGTON PARK 951.500000 \n", + "WEST ELSDON 623.500000 \n", + "WEST ENGLEWOOD 1273.736842 \n", + "WEST GARFIELD PARK 888.200000 \n", + "WEST LAWN 1575.000000 \n", + "WEST PULLMAN 1924.000000 \n", + "WEST RIDGE 914.214286 \n", + "WEST TOWN 652.833333 \n", + "WOODLAWN 1592.181818 \n", + "\n", + " time_to_nearest_Other Health Providers \\\n", + "spatial_index \n", + "ALBANY PARK 3787.818182 \n", + "ARCHER HEIGHTS 3563.200000 \n", + "ARMOUR SQUARE 826.600000 \n", + "ASHBURN 8258.750000 \n", + "AUBURN GRESHAM 5745.866667 \n", + "AUSTIN 4345.375000 \n", + "AVALON PARK 3363.000000 \n", + "AVONDALE 1264.700000 \n", + "BELMONT CRAGIN 3214.000000 \n", + "BEVERLY 8925.000000 \n", + "BRIDGEPORT 1551.800000 \n", + "BRIGHTON PARK 3974.100000 \n", + "BURNSIDE 4864.000000 \n", + "CALUMET HEIGHTS 4613.000000 \n", + "CHATHAM 4175.300000 \n", + "CHICAGO LAWN 6282.727273 \n", + "CLEARING 7603.285714 \n", + "DOUGLAS 769.600000 \n", + "DUNNING 6534.454545 \n", + "EAST GARFIELD PARK 2266.166667 \n", + "EAST SIDE 8261.833333 \n", + "EDGEWATER 1420.411765 \n", + "EDISON PARK 9291.333333 \n", + "ENGLEWOOD 3306.909091 \n", + "FOREST GLEN 5413.000000 \n", + "FULLER PARK 1439.500000 \n", + "GAGE PARK 5058.375000 \n", + "GARFIELD RIDGE 5754.090909 \n", + "GRAND BOULEVARD 1083.933333 \n", + "GREATER GRAND CROSSING 2622.333333 \n", + "... ... \n", + "NEAR NORTH SIDE 3814.736842 \n", + "NEAR SOUTH SIDE 1283.000000 \n", + "NEAR WEST SIDE 1370.950000 \n", + "NEW CITY 3187.941176 \n", + "NORTH CENTER 2292.071429 \n", + "NORTH LAWNDALE 1505.200000 \n", + "NORTH PARK 4057.250000 \n", + "NORWOOD PARK 7564.142857 \n", + "OAKLAND 1616.500000 \n", + "OHARE 11194.500000 \n", + "PORTAGE PARK 4122.071429 \n", + "PULLMAN 7410.666667 \n", + "RIVERDALE 15124.000000 \n", + "ROGERS PARK 1252.090909 \n", + "ROSELAND 7198.642857 \n", + "SOUTH CHICAGO 4967.400000 \n", + "SOUTH DEERING 7028.000000 \n", + "SOUTH LAWNDALE 1274.666667 \n", + "SOUTH SHORE 2517.666667 \n", + "UPTOWN 1210.083333 \n", + "WASHINGTON HEIGHTS 7017.125000 \n", + "WASHINGTON PARK 1231.666667 \n", + "WEST ELSDON 4651.500000 \n", + "WEST ENGLEWOOD 4499.736842 \n", + "WEST GARFIELD PARK 2886.500000 \n", + "WEST LAWN 6172.500000 \n", + "WEST PULLMAN 10293.500000 \n", + "WEST RIDGE 2020.214286 \n", + "WEST TOWN 2120.433333 \n", + "WOODLAWN 988.000000 \n", + "\n", + " time_to_nearest_Hospitals \\\n", + "spatial_index \n", + "ALBANY PARK 1666.727273 \n", + "ARCHER HEIGHTS 4692.200000 \n", + "ARMOUR SQUARE 1509.200000 \n", + "ASHBURN 2287.000000 \n", + "AUBURN GRESHAM 3260.133333 \n", + "AUSTIN 1662.041667 \n", + "AVALON PARK 1235.000000 \n", + "AVONDALE 1303.100000 \n", + "BELMONT CRAGIN 1726.176471 \n", + "BEVERLY 1922.285714 \n", + "BRIDGEPORT 2442.100000 \n", + "BRIGHTON PARK 3558.600000 \n", + "BURNSIDE 2526.000000 \n", + "CALUMET HEIGHTS 1240.000000 \n", + "CHATHAM 2767.700000 \n", + "CHICAGO LAWN 1111.090909 \n", + "CLEARING 4720.000000 \n", + "DOUGLAS 1456.200000 \n", + "DUNNING 1603.272727 \n", + "EAST GARFIELD PARK 802.416667 \n", + "EAST SIDE 3717.166667 \n", + "EDGEWATER 759.941176 \n", + "EDISON PARK 1849.000000 \n", + "ENGLEWOOD 1469.272727 \n", + "FOREST GLEN 3832.000000 \n", + "FULLER PARK 1719.500000 \n", + "GAGE PARK 2559.750000 \n", + "GARFIELD RIDGE 4971.727273 \n", + "GRAND BOULEVARD 1270.600000 \n", + "GREATER GRAND CROSSING 1580.000000 \n", + "... ... \n", + "NEAR NORTH SIDE 1042.947368 \n", + "NEAR SOUTH SIDE 1326.333333 \n", + "NEAR WEST SIDE 1078.350000 \n", + "NEW CITY 3152.529412 \n", + "NORTH CENTER 1535.785714 \n", + "NORTH LAWNDALE 1278.333333 \n", + "NORTH PARK 1963.000000 \n", + "NORWOOD PARK 1440.571429 \n", + "OAKLAND 2335.500000 \n", + "OHARE 4729.500000 \n", + "PORTAGE PARK 1225.000000 \n", + "PULLMAN 2086.333333 \n", + "RIVERDALE 5051.000000 \n", + "ROGERS PARK 1542.000000 \n", + "ROSELAND 1778.285714 \n", + "SOUTH CHICAGO 1417.100000 \n", + "SOUTH DEERING 2514.500000 \n", + "SOUTH LAWNDALE 1764.555556 \n", + "SOUTH SHORE 891.583333 \n", + "UPTOWN 602.166667 \n", + "WASHINGTON HEIGHTS 2642.500000 \n", + "WASHINGTON PARK 1059.333333 \n", + "WEST ELSDON 3653.250000 \n", + "WEST ENGLEWOOD 2184.105263 \n", + "WEST GARFIELD PARK 1282.600000 \n", + "WEST LAWN 2566.833333 \n", + "WEST PULLMAN 2119.250000 \n", + "WEST RIDGE 1768.214286 \n", + "WEST TOWN 936.033333 \n", + "WOODLAWN 1029.454545 \n", + "\n", + " time_to_nearest_all_categories \n", + "spatial_index \n", + "ALBANY PARK 734.272727 \n", + "ARCHER HEIGHTS 886.800000 \n", + "ARMOUR SQUARE 765.400000 \n", + "ASHBURN 2236.375000 \n", + "AUBURN GRESHAM 911.333333 \n", + "AUSTIN 1129.208333 \n", + "AVALON PARK 1235.000000 \n", + "AVONDALE 1004.500000 \n", + "BELMONT CRAGIN 1028.411765 \n", + "BEVERLY 1720.142857 \n", + "BRIDGEPORT 1376.200000 \n", + "BRIGHTON PARK 942.300000 \n", + "BURNSIDE 2526.000000 \n", + "CALUMET HEIGHTS 1240.000000 \n", + "CHATHAM 2326.800000 \n", + "CHICAGO LAWN 673.090909 \n", + "CLEARING 2030.142857 \n", + "DOUGLAS 537.800000 \n", + "DUNNING 1576.909091 \n", + "EAST GARFIELD PARK 486.333333 \n", + "EAST SIDE 911.666667 \n", + "EDGEWATER 570.058824 \n", + "EDISON PARK 1849.000000 \n", + "ENGLEWOOD 833.727273 \n", + "FOREST GLEN 3410.000000 \n", + "FULLER PARK 905.500000 \n", + "GAGE PARK 1078.375000 \n", + "GARFIELD RIDGE 954.909091 \n", + "GRAND BOULEVARD 536.333333 \n", + "GREATER GRAND CROSSING 1172.000000 \n", + "... ... \n", + "NEAR NORTH SIDE 683.315789 \n", + "NEAR SOUTH SIDE 909.333333 \n", + "NEAR WEST SIDE 665.900000 \n", + "NEW CITY 666.117647 \n", + "NORTH CENTER 1097.071429 \n", + "NORTH LAWNDALE 561.200000 \n", + "NORTH PARK 1675.250000 \n", + "NORWOOD PARK 1440.571429 \n", + "OAKLAND 580.500000 \n", + "OHARE 4629.250000 \n", + "PORTAGE PARK 1170.357143 \n", + "PULLMAN 2086.333333 \n", + "RIVERDALE 2082.500000 \n", + "ROGERS PARK 460.272727 \n", + "ROSELAND 1350.000000 \n", + "SOUTH CHICAGO 692.500000 \n", + "SOUTH DEERING 2303.500000 \n", + "SOUTH LAWNDALE 510.777778 \n", + "SOUTH SHORE 671.916667 \n", + "UPTOWN 444.250000 \n", + "WASHINGTON HEIGHTS 1135.250000 \n", + "WASHINGTON PARK 703.500000 \n", + "WEST ELSDON 623.500000 \n", + "WEST ENGLEWOOD 1217.263158 \n", + "WEST GARFIELD PARK 888.200000 \n", + "WEST LAWN 1573.500000 \n", + "WEST PULLMAN 1853.375000 \n", + "WEST RIDGE 647.714286 \n", + "WEST TOWN 605.666667 \n", + "WOODLAWN 742.909091 \n", + "\n", + "[77 rows x 6 columns]" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "accessT.aggregate(aggregation_type = 'mean', shapefile='data/chicago_boundaries/chicago_boundaries.shp',\n", + " spatial_index='community', projection='epsg:4326')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time_to_nearest_All Free Health Clinicstime_to_nearest_School-Based Health Centerstime_to_nearest_Federally Qualified Health Centerstime_to_nearest_Other Health Providerstime_to_nearest_Hospitalstime_to_nearest_all_categories
spatial_index
ALBANY PARK3160.909091759.5454551020.5454553787.8181821666.727273734.272727
ARCHER HEIGHTS4226.8000002647.200000886.8000003563.2000004692.200000886.800000
ARMOUR SQUARE2600.6000001041.6000001108.800000826.6000001509.200000765.400000
ASHBURN3996.8750003354.3750002955.8750008258.7500002287.0000002236.375000
AUBURN GRESHAM3638.5333331179.4000001132.4666675745.8666673260.133333911.333333
\n", + "
" + ], + "text/plain": [ + " time_to_nearest_All Free Health Clinics \\\n", + "spatial_index \n", + "ALBANY PARK 3160.909091 \n", + "ARCHER HEIGHTS 4226.800000 \n", + "ARMOUR SQUARE 2600.600000 \n", + "ASHBURN 3996.875000 \n", + "AUBURN GRESHAM 3638.533333 \n", + "\n", + " time_to_nearest_School-Based Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 759.545455 \n", + "ARCHER HEIGHTS 2647.200000 \n", + "ARMOUR SQUARE 1041.600000 \n", + "ASHBURN 3354.375000 \n", + "AUBURN GRESHAM 1179.400000 \n", + "\n", + " time_to_nearest_Federally Qualified Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 1020.545455 \n", + "ARCHER HEIGHTS 886.800000 \n", + "ARMOUR SQUARE 1108.800000 \n", + "ASHBURN 2955.875000 \n", + "AUBURN GRESHAM 1132.466667 \n", + "\n", + " time_to_nearest_Other Health Providers \\\n", + "spatial_index \n", + "ALBANY PARK 3787.818182 \n", + "ARCHER HEIGHTS 3563.200000 \n", + "ARMOUR SQUARE 826.600000 \n", + "ASHBURN 8258.750000 \n", + "AUBURN GRESHAM 5745.866667 \n", + "\n", + " time_to_nearest_Hospitals time_to_nearest_all_categories \n", + "spatial_index \n", + "ALBANY PARK 1666.727273 734.272727 \n", + "ARCHER HEIGHTS 4692.200000 886.800000 \n", + "ARMOUR SQUARE 1509.200000 765.400000 \n", + "ASHBURN 2287.000000 2236.375000 \n", + "AUBURN GRESHAM 3260.133333 911.333333 " + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "accessT.aggregated_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [], + "source": [ + "#write aggregated to csv\n", + "accessT.write_aggregated_results(filename = 'data/output_data/accessTime_aggregated.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Plot Aggregated Data**" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Plot was saved to: data/output_data/accessTime_CDFplot_allcat\n" + ] + }, + { + "data": { + "image/png": "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NnybfejTp882sT788EM89NBDlJWV0adPH6644kp23HHHOv27vP32P7jmmmvYtGkT7dq1Zdq0O1i/fh2//vXFbNq0CYALLriQwYMHc9NNU1m+fDnHHz+Go446ihNOODFjm1RWVnL11b9j4cLX6dWrF5WVzqhRx3D44YezYMECbrjhOioqKhg0aBAXXfRr2rVrx8iRIxg1ahSvvvoKxx8/lpdffpmDDvouhx9+OMuXf8B1113Hpk2ldOnShcmTL2eXXXZh5sz7mTt3Lm3atKZfvz2YMuWaOu17NrJN8KVm1g54w8yuIRp4p6fJiUiLMHHiRN5/fxmzZ8+hqGgN55xz9pbP3n9/GQ88MJsvv/ySUaOO4pxzJjJr1hyuvfb3PPHE45x00o+44orLuOiiX7P77rvz1ltv8rvfXcn06Xdus53Bgwdz8MGHbEkOAGPGjOb88ycxdOhQbr31FqZNu53zzjt/u7GWl1dw330zeemll5g27XamTZvOo48+QqdOnbj//pls3ryZ8ePHccABB7Drrv/BddfdQKdOnVi7di3jxp3MIYccAsCHH37IpZdexkUXXczatWu54447mDZtGjvu2IG77/4j9957D2PHnsD8+c/zyCOPYWaUlGygc+edttmHTA47bDjHHvtDAG655WYeffQRTjjhxKz/TcrKyrjggvOZMuUaBg3ai40bN9K+fXu6du3GbbdNo3379qxYsYILL5zEzJkPcM45E7nnnhncdNPNADz00NyMbfLOO0spKiriwQcf4rPPPuPYY49h1Khj+PLLL7nkkt8wbdp0dt+9L7/+9cU8+OAcTjrpRwC0b9+eu++eAcDLL7+8JcYZM2Zw++3T6datG08//RduueUPXHrpZdx99908+eRTtGvXjpKSDVnvd11km+BPJjrvfhZwLtAH+GEsEYmINCNDh+5Hx44d6dixI506deLggw8GYM899+S9996jtLSUJUuWcP75521Zpqxsc1brLikpoaSkhKFDhwJw1FFHc/75v6pxmeHDhwMwcODALffQeOWVV3jvvX/x7LPPArBxYwkrV66koGBXbr75JhYtWoRZK4qLi7ecrigsLGTvvfcG4K233mT58g8YP358iL+Mvffem44dO9KuXXsmT76Ugw46iO9+9+Cs9gtg2bJl3HrrzZSUlFBaWsoBBxyY9bIQ/QDp0WMXBg3aC4BO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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "accessT.plot_cdf(plot_type = 'time_to_nearest_all_categories', \n", + " title = 'Time to Nearest', xlabel = 'time (s)', ylabel = 'population',\n", + " filename = 'data/output_data/accessTime_CDFplot_allcat'\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Figure was saved to: data/output_data/accessTime_choropleth\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEICAYAAACwISoLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsnWd4HNXVgN8zs1WrVa+WbFnuDTea6b3aoYRACDUJPSGUtC+UBBJaCKGGBEgIAULvEIwxpprqAtjgXiXbkiyrl+27c78fs5JW0q4kN2zwvH70eGfmzr1nZvee2845V5RSWFhY7Jlou1oACwuLXYelACws9mAsBWBhsQdjKQALiz0YSwFYWOzBWArAwmIPxlIASRCRa0Xk4V0th8X2ISLni8is+GebiCgRGRo/flhErt2V8u0O7JEKQETaE/4MEQkkHJ+tlLpVKXXhNyDH0PiP0raN9x8ev//vPc5/JCI/3iFC7iBE5H0RSflOE95F4nezeHvKVEo9ppQ6IcW1C5VSt8bLPlpEKranrG8r2/TD+7ajlErv+Bz/4i9USr296yTaLnzAeSJyh1KqYmcWJCI2pVR0Z5YBZH0DZVjE2SN7AP0hIjeKyBPxzx0t009EZKOINInIpSKyr4h8JSLNInJ/j/t/KiLL42lni0hZiqLmxv9vjrd4B4iIJiLXi0iliGwRkcdFJLMPcZuBR4Eb+nielPKIyL3x52oVkc9F5JAe7+EFEXlCRFqBH8fl+52IrBWRBhF5TkRy4uld8bQN8feyQEQKReQW4BDg/vhz3t9LyD4QkZEi8l4833oR+W/iOxGRMhF5RUTq4tfvjZ+/UETeT5HnE/HnywT+BwxJ6HmUiYhfRLIS0u8vIpu3tbe2u2IpgIGzPzAS+CFwD3AdcDQwHjhDRA4DEJFTgGuB7wP5wIfA0ynyPDT+f5ZSKl0p9Snw4/jfEcAwIB3or8LcApwmIqN7XhiAPAuAyUAO8BTwvIi4Eq6fDLwAZAFPAlcApwCHAYOAJqBjCHI+kAkMBnKBS4GAUuq6eLmXx5/z8n6ep9djADcDxcA4zPfy+/jz2YCZwBpgaLzs5waasVKqBfgesCEuW7pSqhL4CDg9Iek5wNPfud6JUmqP/gMqgKN7nLsReCL+eSiggJKE6w3ADxOOXwSuin+eBVyQcE0D/EBZkrI78rYlnHsH+FnC8Wggkpgm4drhwKb4578Az8Y/fwT8eGvliV9vAiYlvIe5Pa4vB45KOC7ukA/4KfAJMDFJvu9jDrVSfQ8d76I54e/XKdL+AFgQ/3wIsBnQk6S7EHg//tkWz39o/PgJ4Mb456OBih73ng18kHDvFmDqrv697ug/qwcwcGoTPgeSHHfMK5QB98a7wM1AI2YLVjLAcgYBlQnHlZg/wMJ+7rsdOE5EJvU436c8IvKr+PCgJX49E8hLuH9jkvxeTshvORCLy/dfYDbwjIhUi8hfRMQ+sMfuJE8plRX/+2tcxqL4UKMqPhR5NEHGwZiVN7aV5fTHy8AkERkCHA/UKaW+2MFl7HIsBbDj2QhckvAjzlJKuZVSnyRJm8wVsxqzknUwBIjSXeH0zkipBsyhyU0DlSc+3v8/4AwgWymVBbRgKohUMm4ETuiRn0spVaWUiiil/qiUGgccCMwAzuvjWQfK7UAI2EsplYE5ROqQcSNQJiL6duTfSzallB+zZ3c2cC6mcvvOYSmAHc+DwDUiMh5ARDJF5PQUaesAA3NM28HTwNUiUi4i6cCtmF37gYw978KseGMHKI8XU7nUATYR+QOQMYDnu6VjIlFE8kXk5PjnI0Rkr3hlbMUcGnS0zLU9nnNr8GKudrSIyGDg1wnXPsUckt0qImki4haRg7Yy/1ogT0S8Pc4/jjmsmY45ZPjOYSmAHYxS6mXMFuuZeHd1CZBqLdqPOYH3cbxLPQ14BLO1mQusB4LALwZYdivmXEDOAOWZjTlHsApzqBGkd5e/J/cCrwFviUgb8BnmBClAEeaEYSvm0OADuirOvcAP4isR9w3keRK4AdgPs3fyGmbL3PF8Ucyexti47Bsw5wgGjFJqSTzPivj3UBC/NBfQgXlKqU1bKfO3AolPclhYWCRBROYCjyilHt3VsuwMLAVgYZGCeI/sDWCwUsq3q+XZGVhDAAuLJIjIk8CbwJXf1coPVg/AwmKPxuoBWFjswex2ds3Z2dmquHjQrhbDwmKXsXz5snqlVP43UdZupwCKiwfx1FOpTOctLL77TJkyqbL/VDsGawhgYbEHYykAC4s9GEsBWFjswVgKwMJiD8ZSABYWezCWArCw2IOxFICFxR7MbmcHYPHtxhlaS37j0zhD6wk6R1Cf8yNCzqG7WiyLFFgKwGKHkdU8kyE1f0JUBCGGx/8luc2vUDnoVloyj9rV4lkkwRoCWOwQ9FgLQ2r+iKaCSDwIkEYMTQUpq74WzfDvYgktkmEpAIsdQmbr26SKMatEI6Pt/W9WIIsBYSkAix2CLdaKqEjyiyqGLdb6zQpkMSAsBWCxQ/C5J6FSRgAXfO6e0cotdgcsBWCxQ/ClTSHkLMeguxIwxEHAPZ6Ae2yKOy12JZYCsNgxiLC27CFavQdjiIOY5sEQBy3ph7Nu8N92tXQWKbCWAS12GDE9g4rB96BHG3FEagnbi4nZsvq/0WKXYSkAix1OzJZDwJbTf0KLXY41BLCw2IOxegA7CEd4E1kts9CMAG3pB+NLmwIi/d9oYbELsRTADiCn8TlKa/8KykCIkN/4FO2e/Vg/+G7Yrj0rLSx2LtYQYDuxh6sprf0rmgqhEUEAXQVI980np+mVXS2ehUWfWApgO8lqnQPK6HVeVwHyml/YBRJZWAwcSwFsJ5oRREi+c7dmBL5haSwstg5LAWwnrd6DMMTZ67whDpozjtkFEllYDBxLAWwnAfcEWr2HExN35zlDHERtudTlnrsLJdv12CM15DS9SFbLm4jVG9otsVYBdgCVJbeR3fIGuU3Poxs+mjOOoT7nR8T0jF0t2i4jv/4/FNc9gEJANAbXaKwp+ycB9/hdLZpFApYC2BGIRlPWDJqyZuxqSXYLnKG1FNc9gKZC5on4BtTlG69m2cjZln3EboSlACx2OJmt7yGq98SoPVDHmMtmIJVR7PX1GOnp1J11NrUXXAiaNRrdFVgKwGKHo8SGQusMDdaJYeCq2ISqBQG05mYKHnkYFQiw5Yord4msezqW2rXY4bRkHAPS46cVA6kD4pW/Az0YouDppyDWQ1lYfCNYPYBdyMoty8ClUCiI/ykU7rCXoXnDdrV4fdLU1kBOnunqKyLmsF4EEcG5rgn1iA11VghigIC0A3cmz0sPBtGbmojl5X1T4lvEsRTALqQ91kbOYC/d20QwKpMbFiUjEomwono1e5WN28HS9U16uoehw8t6XwiF8O7/c7QmH3wIjAICwFo6JwN7IcKos85k9TPPEs3J3WkyW/TGGgLsQvKdBSmuDHyWvK6pnodW7T4mx7Z35yLReHc+BHwNrAGVqvIDohT2xkYKH3zwmxDRIgGrB7ALqWvdQg7eXuelj8oSiUS4/8PHaHaYcfYj0Qg+e4QbP76fcZ5yzpg8fWeJ211GLYWSCodS3qNcTgia13vercViZL7zDlXXXreDJLQYCN/qHsCayrWovpoWYP2mSgBq6jbzj1cfZc789wmGgt+EeP3iyEulf1P3AOx2OydPOJYt0WbWa1vY5Ggi5lCsk8282fwZVfXV+AI+vqxcwuLKZdS3NOwU2VMpgOgRh0K09xBGud1E7vwLK397KtFUj53uwef37UApLfpjwApARHQR+VJEXo8fPykiK0VkiYg8IpI8JrSInC8iq+N/5+8owQFueuoeIpEUsejjfLFsEQCbG+r410fP8dvn/8L0P57Pr/91E7M+eZu6xvodKdJWoVIOivtmWMEQLiw/FT3SvRJGHYqnls9kfd1G7q56hjurnuKr2pU7QtSUyCbBebML96Vp2F6xgycD/38eQLldGB4PhseDcrtYdv3vqLpkOlNunsVNI+FY4DDgPqANiLh05PJL8Qfb8fksJfBNsTVDgCuB5UCHfeuTwDnxz08BFwIPJN4gIjnADcA+mFNAn4vIa0qppu0RuoNxxSPwBfxs3FzF8CHlnecfeu1x3l32KbFYlNaAj8c+fQV/2LRFL3bm0BYN8M6qT3ln1aecNuEYxpeP5sgpB5Pp/YZNd1M09AOZASjLGsQIo5iVVHc7/5VWQXBVkPSATntuDKfu2H45k6CJoC/U8RyXARGQkGB/zkH0wCj+175H25oDsc18E4DojBMINzTzbPBRQtND3FzZNR+4EPgr8Gk4RvF/n8JZPhLPiMKdIrNFbwakAESkFJgO3AL8EkAp9UbC9flAaZJbjwPmKKUa4+nmAMcDT2+P0E0tTfj9fmLhKBfc/xsyXenkZ+QypWwcY4aMYH3tRlY1VHbdkDAsrQk2UOYuIldPZ8qIvSjMzMMX8uMP+r95BZCCdp+PWr2acDBCrjefcCRMOBxEKYiKwezKj/mk9WuOyN6LYRQwy7+o814RYXVaLaSZx82tzSilkJ1gfuu+3IO0d+UrPg3bJ3Zsb9mJHp9L5PyzO68Ny8nmtbteRS1QkLBNoB8IA9fZ4T8lSzlw/Y8J2MbRmHUyTZnHQ8rNRix2BAPtAdwD/BZ6z1jFu/7nYvYQelICbEw43hQ/1zOPi4GLAYqLi/sV5rL7ryEajVLvb6HFiHcXN8OcVZ/0ey8iVAZrAQis/5LBLcWU5BTiC/oZUVzOlJETyMnM7j+fHUCqIUDUESZ3rPmq6zfVY8vQySnIQCnFhjVVjC0uZe+hwxlUVMDqyg1QsShpPgDP+N5j3odLObpoGgcN3wdd3zEhygRBW9Q7L/EJ+gc2osd3H5qJCJsfq+1W+TvweuD3NwFZCpvTh9e/gLTAEnKbXmBt2b9Q2s7pxVgMQAGIyAxgi1LqcxE5PEmSfwBzlVIfJrs9yblev3ql1D+BfwKMGze+34Hx3RfdyA1P3cna9ur+kvbJlkATW6qa+LxqWee5E8ceyi0//d125TtQfFv8GCEDV6wdXUVoiqRRMC4PLaG1zivtUkYiQtnIUsrina2li1ayvHINZaFsIkYMm65RQysRR1eEItGECq2Of9W9xszquQzPGIJZfeNfjoCGRs+vRQUiHDJqEg6ns/s1gdaGdqZN3h+Vq5D6xK9Yofg7zrtuwnlPA7Fp+xD4x10YY8cAYPcn/7nd8H0ozene2OsqgDu4gpzmV2jIOWPgL9ViqxhID+Ag4CQRORFwARki8oRS6hwRuQHIBy5Jce8m4PCE41Lg/W0X16SpvYUFG5dAqqWo7WDxxuVc/dANHDR6H35w+Pd2eP4dtLS2sM+4fMau/TOelmUgQkjPZO7S89GLpw0oj7JhpUSMGJGmCKFcg/ZNbaQ12Wmh91KciFDjaKEm+HW/+RqGwUVDjiF7TO8lSoCWSBPZuVmEfhfAdW0aEu74Hv6D8H+AHwzQP52P5/ATaVu9CDIyOPSwQ3n26ecwYt1DqJ1zMDiT9PR1FSS36UVLAexE+l0FUEpdo5QqVUoNBc4E3o1X/gsxx/g/UipJUDyT2cCxIpItItmYk7+zt1foe199eKdUfoCq9jreX7OAFz59o98lxu0hHGln0tKr8LQsQVMRNCOMO1LH0e33Myw39Vp6IukZHiZPHcfkbLOF9W2J0C4Du7cvjnVPYOyU1KbIRcML2FCxkfDlIZQ38R3dRmIfX5RCIhHsL74GwC9/exU2Z+82x9VHM6QpK5DIzmR77AAeBAqBT0VkkYj8AUBE9hGRhwHik383AQvif3/qmBDcHjTbzrdfWtlQwaKV/beWfr9/mxRFbnQ+tkgbmuruBKMZYQoqn92qvDrKL5yag6dRsLdDeTiXovZ00kNbN34+yj6OIw7ep89JQ03TaGhtMG38fYnpmnvLFgpR+9Uyvvr8awK+EGP/OxbGYfYl00DLg8Vmh6EXBnZa0w/dKvktto6tqklKqfeJd+GVUknvVUotxFwS7Dh+BHhkmyVMgv5N+I6LMOerj5gyZmKfyd7+Yi73vP4IHlcaeRk5lOYUUZJbRGmuObk4orQcb3rvrrQ7Vo2o3jYMgoHbV7FVohqGgvh83PCDSwk2+knLS8cw0qj5aDNtBQai9/3O8vwujh+2LxP3HjWgicIt7bUopTCGxtBXdPwUZmCuDnc9l9gdFF5wPgUTJwAwpGkwi5csNgeHITCGwaUt8MlbkJ6gCw0EQ3OzJXeHmo5Y9OBbaQqsfUPBI2Ytfp8jJxzIPuMmp0wzf/VimmLtNPna2eTbwqKaFd2uD/MWc//vr0eiGsQ0iAjENDIcJSixkVhZAAyx4cvYuq20jYQRmKZppOWld34uOXQQsriRmrS2PvP4yf7HUVQ+8PX39FI31VU1lN3gIO2CdMQvwB3Axyg2AwY4Y0R+dQUqXvkBjqg/gnfz3sM3uMvY5+tsOPQYuPdz4eA6QHQCOYfzYdupFNnzByyTxdbzrVQA30gPAGgOt1PduLnPNGX5vVY1uyG6BoYQqjNwu5w0hrfgcDmQ/CkEA6W42yvQ4j0BBSjNQW1Z35NeK5euwxfuGnpsaK2GPjxpM9IdVIcMxG6+N6MxzOlDD6bNCKKUQtc1XB5Xn2X2xJORxteLvyYo89nr4GuxeWuhwoZadDqR7B9SddJCiv7vdIxhQ/mYj/lIPqKYYvZWe7NfbF8+0+cRkK7x/crsNF468iKmxG4AhEg0inPekq2SyWLr+XYqgJ7BJnYin636kpMOPj7ptWg0SlVD3woCFK1NbWRlZWMQpdheRqY3kxpjPav2vo/BK+8lZ/M7iIrSnrUXG8b8ioir75Z4fcNG1mbUdC2y9uNGnz48ndLFEarsrQDEdINJU0fiyfD0I3tvavUtLHR9gaaEfSMeplTdDmeAuIFAFDY+jT57JYUPvU8Mg/O185ktbxEgQBpuhpXqzPrkUGxtXj7JNLhpfIzWrDJ+E/s1Z6kzO+MF6qFa7OFqUNlWDMGdyLdSAcg3qQDWLMLn9+NJS+t2PhqNcsOjd/DGirn9/ECF4ZOGEo1GqV5Tixa047fZceY6iNm9VEy4norx1wGqdxSdFMRSLrqkJi1dJ+aPorts6G4boUB4qxSAgcF9Wf9gjuddNGXK+dWCEIwE6ZhndIMMAd3xBVJZyZyhK3hL5uAXc2WgoN3P3NmQHp2JTcEpLRqnbHISOPTvyNzN2J/4ERJdifa9LZAV4gBNJ9jgYUvJ9bRkHrXVz2zRP99Kb8CdYdaainMOODmpxd71/7m978pvgNPQcSid2rX1LH5vKSoEhjdMXbQab1bCxKBIZ+VXSvW7qrAtCkDPlE6nfM1ho2VdO61rfLSt8dO2xo9vbRDf2hCNG8yZ/IYVzehVTurXmIs2L6a/wjtp7zNpYYQ3jg7R6Akx0pNQ+TtwAZNBm/02s+RNfNI11v/915AeAVv88QQDMQK4Hj4B11k/wbboTfQz1iPZPkSi6CqEh0bKqq/F25bMzsxie/lW9gC21YtuaxidU4Y3LZ26pnoe/9/ToGm4bA5yvJkoBcuqVgOQqXtoibb3UgS57kzGl4zgp0f9kBJXOcGsKJ4MJ6FACLfy0LTUTyQSwVasaF7lI7vD/FgJ4cx2ispTBQuBmLH18fOc6U6cLULEYa4I7DtxP8qGDumV7tOPPwWgILOIyRMn0d4+kqqqKp4peIGJC0O8dwR4Opb6twBD6N6MRDDj/hW2UqgKcCgHYQkDcFB98h+clCozBsKpQBKDIE0FGVR7Fyu9h2z1c1v0zbdSAXwTXDnjAg7Ya5+U16dN3pev16/gyKkHc8U/fs+nGxcDcMjQqfz0qDNZsOJLXvz8Td789F0mjZrA8EEjzRt7tJhra1dSkFtEdlaXyW9NrG/jl5jaegVgczmYdMhwFn++nmiGae2XjMlTJ7O5upaskkzADP1ljDZos7fx118lVH6A14BJQMfOaIb5JxVg//LfnPPbWdzNvYQxFcBKL4xs7d1pkg7LkHF0Lmf2xBVejxhhyy9gB/PtVAA7vwPQzR4/GcX5RRTnFxGLxVhStarzvNeTzuQxE5g8ZgIXndL/1mDD80b3OudvDlFvNBELGNj0eJOY8MyugIspoSI0ETQRRDR0TTcddERoa2tnaetqoiqKYRhkOLxooqGJxmh9ELqys+irxTQ2NXVGH8rJyWbosKG43W7Khw/tJs8l9ksBOOCzHoKuB/4M6kcgpZittwIuBNE2UL7sNV4Z9zI/03/OetZz53g7M9YHuxQGmJ6az8U/B4HMVG9KYaB1znu2tbVRXV3F6NFjUt1gMQC+nQoAyHdnUZSex9d1a3ZK/gO1NQhHwhgJtXN51Vr++N+7iBlRokaMwvRcrjz94q0qe3iuqRScRgX5jf/BHVhG2DGYutxz8Lv34uBhdsom9+01OZ2jAVK6Alev38zg4V0e3KsWryErN4uszKxu6aqoYq2sBYGAG+w9zQlWAQ9hOorb6ezCC+BY/icOCd7O0vfOJ6SCcMr3UY8fhxxbD4OARuBZTBtRME3MTif5zJTYsbls+H0BQoEQGzZsZPDg3kMYi63jW6kApu99JJdPPx9EePSt53hlyTu7TJbPVy7GZ3SFGFvfXMX65qrO40lFo7YpX2/7JwzdeDWiImjESAsuJ7PtfaoKr6JOO3LA+aSaMK2t2dJNAYyaNIJN6zZRvamGceO7DJFiHXG9gcfOg4seBldPd4MTQdl6u35KLIBzzpXwJzt2peBPdxI94Tj402y0YPewbAqQNyF6POgZvYcJRvYURowaTktLCw6Hg3GTxrDsq1VYbB/fSgVw+NSDOj8XZO+kWPIDtO//ePnCPq9v04qFilJW9Tt01VVJBANRQUpq72J90VTMJnTbUSgq1lQydERXaO/SYYPwtfmYN38+Nt2OKFCiyJucR5W7iutuVRz6IZSvg4x2iNo0RLcR2j+HNFtyewgpUBA25wCIRNBef4O1+41m8MJlKAyUpuGK6RjHHkvV/Jl4NEgMDK4UKAPW5lzBkv+9RbrHi24XXC4XTkfvbdktto5vpQJI5MR9jqAgM5d1mzfy1PzXcGh27JoNXywwYAMSW0yIoVAJE1DGABTAyoo1vPzFnD7ThKMRNvjXoYV0SrOTxNFPgse/OOneemDayOvNr2LOmG07peWDcNh7T6h5vB5GTx7R7dzD6kHOUucS9kY4dGGMY1+P8KvZezEq6wDazzyZrLaHUJteQZItT/YIuagcNm67eBXzHjQ48l0IuA3mnOTm4+qfoc+eSban+9cmAhElKJsHm65hc+i4HG7S3N3tMiy2jW+9AigbNISyQUNob2/nqc9eZVTxUB7+xR2sqFjNrM/f49kvZ/Wbx39/fjfF+UVU1GygrrWBZl8rQ4uSRTjrzuvz5xAywnEbXmXa8ojWTZEoZZBV7qGpsmXAz6SpYMoOiGDgcW+/+UZBcT4rF60mt6D/jThGGiP42PcBH+kf0yptHHTMAeQfnd/p+9fSej7p1W8gsR7d+hDIq93zikiU5vQYy8bDsvhO4Y5YmKbbfs2IiZDMZ0lEUdj6Km2DfoHtG/AE3ZP4zrxNh8PBJYefSUt7G06nk0mjJ2AoNSAFoOkamRkZTMqY0G/aRC4+8Ry+P+0EHHY7blcaLqeTx+Y8xz8/eq5XWqUPfOliecDLUFJEOxaNLWkTKE92KRbGu+olPNUfEskppXXEGYS9w1OWk1eaS21VLYUl/TsBOXBwZOyIpNciGaOpm3Qb+YuvJWaY71OMCLyjwbxgt7mBqE3xxgndewphPYLWUoMRpfsKQRy7DkbbehpjjRTkpraPsNh6vlMK4NKTf9ztXGF2LkcO24+S/GJW1axndc16GsMJC9HxZnZbA39407140718ufIrNlesIGJEWbd5Q7c0HUZLDredja3rzKP42pvqWINL+F+JwjMsi42e0xm84QV0o2vGLaY5aczZBykdz1crv+6cdWttaWWf0mLGf/hDRAsgblAbIGvTMzSM+TlNI5OvQuTm5VCxciOFffszDQhfyQmsjY4hP7iEDK+TYN5+2IbUUvj+JWjNpg+CkZHOay+cidj/ibnmZ+JRHnxHnoQ79njSvGPiIK3sMLKiySMUWWw73xkFkIxBhYO487IbO48Nw2DdxvXEDANd09FFw2G3U5i/7WGoDcPgmidupzaYPNJ5JGaO5dNzPd1nt/phw9DzCDvyKKt8EkeonqgtnaqSU9g49Cycmo38wV2ZeXM8DHv9UiQ7gMS/UfP/GDkrH8BfcAihzOQuxj11n8RCpNW+ix6sI5wxhmDuvgOeS2luClM8+aTOmEDhvbLZuOx9HF+bLtLhCaPZTzPYu/1zvsz40iwfxXHqWEb94A64bzZGQS09bX20mBAZ8iNKDA/rllXiTd89ojd/F/hOK4CeaJrGiLLUXeJtQUTITs9KqQDC/Wxc0kfGbC6ZzuaS6eY0eB+OQm5blLSs6s7K3y0bI0LGhuep2+sPyW9O0ADOhs8pmn8JohQYYQx0/Ho+n+bfRETv2Am4M+eeJbG5upaxk3sY5ogQntilfGxo3LHudoJ7BVnGMiaqiUxiIujQ/ouFeJ46GhVeCdF4WUHMsLP/vpjlN16H05m208Kc74nsUQpgZyAizJh6JCve+nfS6y2hdj58ZwGHHLXvdhTS96SfXQWTx9QCRAdbcEu/RWiRVornXYwW63Le0YjgjdVweOhv1B3yfL95DCkroaGugdz8fro6CvZWU9mbqT2EdSF/3ILsj7mr8CbgJZD2EOkrPqb8xf+xavoMwq4wORl5lhLYAXwrvQF3N6YO3wuM5PMIrRE/X69YvVPLDzuyUSq5Eb0RsxHI3S/lvR1bq6Vv+h/Q28dAVBR781L09op+5cjOzaZhc/+bPqWac7E/+yBybROcAIzHjCd9J1AEGAbD/vEgI96cjd8XYMPGyqR5WGwdlgLYAYwdNorReanX+IMdhjA7C9FZ7joV1cNCTxmgnB5aB5+S9DbDMAj4A7S3+4jVr0SLpdg0VbNj829Mfq0HXm86NRv6DpJipHBndlXeingwXYrBXBFIAy4AGQRybYwRU+/h2OZzGKO9NyB5LPoF8r3DAAAgAElEQVTGGgLsIK474woenPUEhlLYdB1d17GJjq7bGJxZTPN6H6I6Vh/M/zqOlTdKZmHXDHf1V7XkZOVght0VM1xA/F9jQyP5+fHub/w8Ag1jLqViSxZD6h43DXI08KWNYHXZ7wlujiDSGE9PZ54gEBX0iB2VMY7oZie2ZHsKGGGinqEDeg9Dhg2mrraOjRVVDB6afHkhaQdAGTAs0LtJ0oDRmDtMppmjISctjGh7kE3NeTRl7by9G/YELAWwg9hr+Dj+fvmt23TvsvpFRGJhs3IqITsjh9Hjk/sQVG9wU1qWYt1u9DVUG7/C1l6JYc/AcBfSX0hNX7Of/IJcJPtHaOvuhGh3BaDETihnb2KewQN+nvzCfIzNio9mf8K0o/brZbyjksYzkL69PHW6KQddBcnf8i9LAWwnlgLYDRiTM7Gb92ErqcfRKsVcQyeag2iGGXvAvmgJjs+/wsjLJXDc4eDqbWXTYfKs7Ok0H/Icng/OxB4NIOGw2V3YFGXpK2k8OvM2oiIceNg08vO71Irf5+etmXNY/MVXFA0q5HunzqBksKmghg4pZ+PyKhrbmklzOzuXENobfXy58EuzziuzGCUwMTaVbOOL7vuBRoFqIInzo0R770NgsXVYCmA3oJfr8XbGO5B2H3k/uBDHF1+bNcymg2jUPf8vwgd1X41InJCLZk8k+u4MbJ8/h5YOVMJDlYqreBtDBOx2Hn3ocf705xu56LILqa+r57D9j6SpqYmAP4DNZmP2zLd5/JlHOfq4rhh+mzZV097eSvnIvn0homMeJfbuSej+ajDC5rbjzcB/gB7bNSrNTlOaFSFoe7EmAb8lSLQdifoGpBuyr/4DjgWL0PwBtEAQrc2H1tpG/mkXIC09Hfq7ctQ2VJH23xfQv4jAXNhcCVdhLsWHlSIcDhMMBvn9726guqqGP998B3Vb6gj4zQhG0WiUgD/Azy68vFvEodLSQdjExqola2isT70xlHJm03D8BzQf/DDtE64htOYo1B9cqA1OjDdsKEPH0NMwbB5inqGsz7kwZV4WA8PqAeyOJLTKWqiRvM9/iathHgDpnqkESh7AcGQlvVXafaS9NAsJJVl5MAzSXvgfvgvO6ioqQQE43vkApemdJj6zSB6hS9M03pr1FjNfndm5jJiIz+dj9co1jB7bNY8xYrTpYbhi6QqcLiee9ISIxOEwjg/Mrd3Dhx1IuPAIwoVHwB9+Br8LozW1YORkoUW24KifR8xdTCRvf1hpLQVuL1YPYDeksaGJJV8sxTAM8hdcjqthHqKiiIqS1f4FuQuvSHmv1tCESrENmOYPoG+s6n4ysUuhad0M/Bwk399dEw2Hw4E7zZ20HCNmpLw2auwoVi1dS93mOsLhMPrKNeSP2JfMcy4j85zLyB+5H/rKhChPDgdGYT7Y7RhpJQSHfJ9I/gEgGmkeF7VbapOWYzEwLAWwG5KZlcmoSSOpWrUIe+OibrEBNKI4G+ajhZNPgMWK8lPa7hvpHqLjesQgTOhthI89Aol2zdDPIMWmnYbBid87gQsu+Qlud/eKrmkao8aMZEhZ8lUDTdOYduD+ZHizWL1kLZ4f/wJpaEJra0dra0fqG8m86Oqk9/akqKSQ5tb+DY8sUmMpgN0QpcyKUlpWhCTdBl3MdfNkOJ20XXY+Ro8WWGkaypOG/+Tjup9P6AIYxYX4f3EhRny1IBN4CUgH0nTQvEKaJ41H//13Cl6dyRXBMEfvMwW3202a2026y0Vxbg6PP93/XrAZGRlM3WcKrsVLTN+DjidTCtvniyEcxvnyTLxXX4/nlrvQ11X0ykPTNJQWTToMsRgY1hzADsa5bh2D7r0H77zPULpO8zHHUvOLK4jmboUrYLw+xFwFhL0jcLau6Iy2o9BpsQ9j6ao6oL7LuKfrA3LaDEZtrKHk5Tcw7HYkGsVXUsSSv/6BQbre55ceOXga7vseMmP0AccAy7JhzP2g0mCt6wkKzzgPDANCYV51OlhcmM/CTdUMctg51u9HZpxB8LdXYX9rDoifyEmnEzn1ZHD0cPMTQeXlIvUN3U4bOVnkTjkCra4Brd2Hstvx3PkA7df/Ev8vL+uWduq0SSz/fC1lg4cO/P1adCLb6gu/sxg3brx66qmnd7UY24Rz/XpGnXMWWiDQ2aoZuk40N5eVz79ILGNgbqyN7XWUTTLX0vVADcXzL8Met8UPe4ezeb8HiLn6D4yhNbXgWLGGWF4OkZHlRKNR6msbiISiRMMxUIqa6s0MLhoCSqGUwbTTz8NdXdMtH18a/PoOmHneINYM8eNo6j786FAWicd8H2Q6oIPyQ3h2EYt/9TiGx9NpvQiQ/+rrlN9xNxJfSTDcLmJDB2NbvR6Jdg+LptLcNM56lui+U7qdb2ttZ9PaGuZ9PJ/jjjmh3/eyuzNlyqTPlVKpN6XYgVg9gB1I8d/u61b5AbRYDFtLC7nPPcuWCy8aUD6JOjnmLmbTYa9g85uTd9G0gUfvMLIzCR6wd+exzWajqEf0H0eag73HxH9r4TCuzb0n1Tx+OPZdjTMnXo49fHOv670cg48CptNp0y+Z4Dh5M5Pf/jeh6x/snnjCWAIH7If9wYcB+GqvcUy5/Z5elR9ABYPE7vg76266rmvgohR+XwAjKBx95LEp3oRFKiwFsAPxzvusW+XvQAuFyHrnnQErADE0Nq2u6apYChRavGmt6TyXcBmbW6O4bFsCmyRkZLdDRgY0d2/hw06NfcecT/6XDvD5u9+uAVOAwUAtsBBz9rDHbuPiALv/RUL0UABA7MjDiB15GO+/M5cxsTA4nV2RhBOLMhQ5TS04xnUPiFq5bgMqmGJLIYs+GbACEBEd8+utUkrNEJHLMe1EhgP5Sqn6FPfdjtkeANyklHp2O2XebVH2JBvbxTGSmOGmIidzK+YL4jQHGvpPlJTuIXjD1/4Gx423IH6zoivA7vSQc9H/YT/i+O6tfQZwI6gMECfmLj/n0Gv7s85ixkVBxcwgBUkoKS0mIzsDSTGppxx2ovtM6XU+Jy+byhVVpKdbIcO2lq1ZBbgSWJ5w/DFwNJDSGkNEpgNTgcnA/sBvROQ7G8+p6YQTMZIogZjbTcOpp+3cwvvzEUhBzxXD6FWXE/7LLRiDS1EuF7EjDiPwwRzw+5HaHsODnwK5IG7MX5IblBczrEAScZQOem1qN15NNEIOB+Fzz0S5Xb0T2OyEf2b2oqShEcejT+J47CkywmEy29+htOoGSmpuJbv5dcToe39FC5MB9QBEpBSzFb8F+CWAUurL+LW+bh0HfKCUigJREVkMHE/XbnDfKTZfehkZH87FXt+AFjJ962NuN/7xE2g6YedOTm3zXG6vnTqFyCU/Ze4l46iSKg5Q0yilFFmyDLSEllvH7Pr3+AWJTtLIvgBhG0jzBhyP/BXbcy+ivOlEfn4J0R+eBiIMHzWcTz/6DO+dtyCtbdhfeR0cDlOX2G34n34EY+gQbO/OxXPaOSgRKInhtl3BhMQym56ltOYW1pX9HV/a1OTCWAADHwLcA/wW2No+1mLgBhG5CzO0wxHAsp6JRORi4GKA4uK+97zbnYllZrLy2efJefUVsmbPRjnsNJ5yKk3HHQ87KZ69LVJHdvNMctoqseWfQCD/wH5DiCVixGIYhtHpkNREEyfq01lPBQAhFWRk0Ev7qAhfO4J0dt+E5GaCYLb+GzC3Dk8cYWga9isfRvt0PRLfGkxfsozwkqWEb74BgH2m7c1XXy5Brrqc8t9cSc7adajMDKKHHGi+w1iMtHMvQvx+Mwbi/5F0yKErP8M2XM6SUe+gtORWiRYDUAAiMgPYopT6XEQO35rMlVJvici+wCdAHfAppoNnz3T/BP4J5jLg1pSxu2F4PNSfdTb1Z52908vytn1IeeVV5oy5DZj7EmHXSDad8ALoA9tGOz3DQ1NzE7k55rzD77U/sJJVhCXMMTXw8DzIDzahKfBdCep2ED/mt7gOcwaopzNjK8QeANvvzW4/NgjZoVU7nPwF8zorP4D4/Djue5Dwr66E7CzsNjtT48t869asZ/2QoSilmBRXoNra9Ugg3r3fD7O3kUIRiYri3PIGm11HEYvFSEtz47Z2FOrGQJqKg4CTRKQCeAY4UkSeGGgBSqlblFKTlVLHYH5VOzdA3h6CGEHKK3+JpkURh9noixMcwdXkzLsPn2pnzYInaXjmXrRVqV+5brMRDHRVyNfkf4QlzPhmeHkuDPGD2wCnguwykN8k3PwIEALVMWcXBYLQ/sRpvDNmEPOegLer4eGhuSw85n4yl+4P7T564XCgrey90eewEeVM2XsSoDrdllVuDnQsEQ4jdS8EEBWhKN9g9JRhTD5wPIaWLBDJnk2/PQCl1DXANQDxHsCvlVLnDCTz+MpBllKqQUQmAhOBt7ZdXIsOvL75psdfj96tOMGz4lH8Nz7CQUtMQ1899iAbzjgQ+30P9xrzezPS2bCkipIS074gDTeNwK+Wg7OHtbHYMbv1pZgRezdgDgyPAzXMhmzKhTf/hrf2dI4DAq4AocoQ034N6GAMfx7SPb2UgBEKYKTwHQCYMHE88z9ewL4H7oOWm0Pk1O9hf3Um0hw0lU6qX7HYWF2XSW39IgDsuo3W1jbyswusLcbibLMvgIhcISKbMH8OX4nIw/Hz+3R8xtwt/kMRWYbZxT8nPiFosZ1oAV/KwCH2SIy9FyjS28HbDmkBKH3hE+rfStFxS8jnZ8bPSFNpjG4DW7L8Y9ARZ0wByu8iMu4PhMtbUc/XQO3p8YQLccXuwrPfv5F6Myx59NTvEcn0EEmoe343vPB9g5+WXo+R4HoUjUbx+/2Ew2E0TWPshDF8scDcTMT/r78RvPJnGKvyUk5+KgUNRh4rWgqwiwOPMx27zYnL5kLXLZuBDixT4N0NZeBt/wSP/0titgyaM44nYu9t4ONeu5RRrWeZ6++JhEG90ntTToC3zx5E+QPv9Dr/5QdfUVBYAAgKg3+W/Iu9a57l56sMnD1/HmHg16CaNHzjx7HuphsIlZWhaUL221kU31+Ms+IihFeBIMphRwGVd9xC69GHc6XzTC67dg3TZ0LADQ9eAjf9AZwRD39ZfRuHph+GYDr66LqGr82HoSA7O5OqTVXkFeWzbsM605wYoaR9NuObHkIjgkaXLmtyjmTN/ndRtTpIW62fQFuQUSNHk52VvVVfx67AMgXeQ9GjzYyo+AmOyGY05UeJg+It91NV+Esacn7ULW1oUDnqbzpyfsxckrNhhu6pBXmzd94RHSpzmpNuKlpaNojyEUM7j+/iLxiB83D4TkQ5VafdjgqBzAMVcENeOvrrLzGyYBD6yzraLB01WKGuegbj/17GFp/ok5AZZLTod7/h+U3XMC9rI3Of6S1D1O7j1frXOSf7bFRRgtYp6vqYm5/LrPdmUTa5a+dmP6expH1vija9jLu9gqC7iM2Dv48/w3R7TlN2ysckD7BqYSmA3Yoh1dfjDG9Aiy+UiDLNYUtq78HvnkzA3bXFluFOo678PPJuehL9wLDpu7sYmEeSdRYIO+GNC0s4PEm5ieG7Okh/7G141I6cGoYJQAB4Rycqx2Dcciixc8+D9Cwcx7jQvtAQn6AcCqL/RYze+wtEdMUXL/6ZQ2zgjkLOOPDmwgcF8HW8Ua7LqcPxNxehW1Ib8bi9vZf0AulDWT+mK4ZAW2M7/tUNOAJp5GRsvVXlnoSlAHYT9GgjXt+8zsrfDRUmr/EpNpbc1O10zS+uwHC5KPjv42ZLq2sYRtj8Up1AFqh6aE6HC55wcMjIi5Mqh2ShBeyLlyIbw3Bfh4DABaAf+ja6Ngd98TvEah9F+6IE8cUdksMCKbY1f3MMPKgMbAZ43CDrIboOwnZ4YTBcMsXO0XOOxj7T0acCQOt/yNpY0cKY4r3MQAYWfWIpgN0Ee7QBJXZQSZxgMHCGk+zMo2nUXnIptRdeRNOmCspHZ1M6bTrqRD9ybLxiG9D8CdgPPprvRaf3zoOu0OCJhI86BMfbH6DF3XQ5HZgWMxcRFGi1c5GGsxDf3B53nkPQ+RGuUNeS28eDYMZl4OkxX2EXsMfgtE3wdo7OFfddgerPyznS/36AGQN0u7awIgLtNoTtxd1CfyViYCPgGpP0GgC6TjTdS6ykCHWq1/TQcIC4QNJg6CHw8K2R+MRZb5qaekfqDZx7BtFxozHSPcTsdtRhdJtwFBVBsuahcup63Hkea4Zn0haP+RnVIXI6pPVhl5Qehfuf34eSphIiP02xPVkcrzODUKDvrdaU7F4T27szlgLYTTD0dJoyTsDoNa0PSmzU5Z7V+yalcK1ZjbOiAhVTaDVbsE2qRXq64tohPfZuH6UnUQwuF03vv0rLkw8SzfAmX3JUUbB1/wmpNDsfXfZHLnnMyePnwj8uh4P2ThmmsJOMmCI2Mkb43N5bkyWy9+SpNFe39JkmlaKz6I01BNiN2FR8LbrRQkb7xyix0VExK0puJ+wY0i2te8Vyyq+6Cr21BZSirKCQzXddk9wRR6O3VU8CGRmmi8fKpatRMYMxE+OBQzUNIy8Xm8+PvI3p59+RfwRYoQg9EcNxdQxZroEbopcF2H+/vfjHlBG89P01HFQb4tI5fT+3AqrG1uK9qqWXYVMnBkizoDIUeiy12zWk3n3YojeWAtiNUJqTisH34AhvwONfTEz30uY5EKV17z9LOMzwSy/B1tLVEro2bmDQr25CnehC9g+aJlgd+QYh3DwyZbnNDS3UrNvCXuP2ompjNeuWmR7e/kCAwk8/J0PT0F/GzPOY+P8LIfK0jZ+c+T1a3vPwl8+DjKtdgM2IMukVWHBxEf++7Tj+N/Vtwro/aYiAzucBVuatpTitmhIG9bpuf9SJ67o0pFXAAaO/P5aGP9ck7b+2NrZTU7MZT2EGLkcaLmcSt2KLTiwFsBOxRespaHgMd2AlrenTaMg5E0Pr3xkl7BjSq8VPJH3evF4hszSlsNXWU1HwE8rrHoJsc/1eGaBW6nx9/O8IVMa37VbE/YcFBWSkZzBi1HAAhg5L2L4rEsE+ew62QMC859n4X5ygN8LMUfNZ/QYUBOnc00/Gg3PsZi67fDbnPj0Td9pPMNo30nMHtM5iDPgwX1Dac/zSuKr7O3zVgftqD+KPd+vDMOzZ4YjA6gtM/4GOHY8BCosKmTR9MkopZr04hzHjR+H3+8l05mLvI2DLnoqlAHYSerSZ0Wt/gB5rRyOCJ7CI7NbZrCp/eqvcdZOhhZOPk0W3ER12ECvSjmLQO3fjCm/E551I9QlXYissxJvCCDuSliQ/pXCd8kP0jz9NGubM54HbfgfXL4eCUI8xvmC2zheHcN71AL4HXyftrfOR0CLQes8H2ILw6+MMGgv/ge36UURPOrHzmusmd1fl70gfsjH8xZF47/ck37oI2FRZzcSxk4nag7Q3+8krLUqecA/HUgA7iZzml9ANP1p8XVxTIZzhDaT75tGefsB25d223/5IrLdnm9Jt+MeNA5uN9SMeGHiGyeIYzl+I/slnndF6O5MCYa+DG68P89ffQO1LKRzyBKQEtBfWoNJKeOyUSzl0yqUMOwb0yZj2CAK0g9wD6ZshfXMj6vxLCDx4L5Efft/MZqOWULbiAz7gMz4jP5DP2M0jcZW4Kaao18SfO81NfW0TXm8a2QWZA38XexiWAthJOMMb0VSPllUpHJGa5DdsBYbXS+XNt1J23TUoXSe+wTbr77p7mwKPJJs00+cvhGT7C6a5ef/O6fz9wpkgAdL6cO1SAjU5GXz51Uf8bOoVZL4HD14KJz8BWilIG2ZMgQTEH0C/5kaWT5qMiDBypB3vggzaaOMojmI5ywkQQDkUxmQD+8t2So8q5R/h+5isJnfmk5OXxbKFKygYPpamLc3J4xRaWApgZ9GWfgjZLbPQVVcLKhi0e/bt466B03LUUSzdZw4ZH32IstloPeRQjLRtC3aRzBBIW/A5/mgUJz1+JJrOpPJTEd4AUm9QBEATlL79MVqkltyXbNQUhDntJbj6TrjlenCnWPK319Uxdpxp96DdraGOVfzS/0u+4itCxJVq/LVGTo2wvmY959jO5KPNr5KVNxxsNupq6ygfMpzm+hZcLmsiMBWWHcBOosV7OC0ZR2OIk6jmwRAHNfk/J+xI7fe+tcQyM2maPoPm447f5soPvXsAc/43k/HPvkgmpjXteUAzZvffKC7CP2pv/rr6L2RFspBUCiAK8giIYTDovVUsK/dTVmFeeu6HZu8gFTVTusbrxv4G/jfbeEJ7oqvy9+CSGVB9vI+RvzmWgmPG4rn5TgoL8vDFWtFten9xK/doLAWwsxCNDSU3s2LY82wo+TPLRs6iLu/8XS1VUlRCROEP3vuAs8++gNVKEcOM9P0scDgQE2HpFT+j8YOPuegnT9Do9ZM2V+hlwBgDHgBM930EyGiBu+P+OlWlcMZz0JBjWgp2lB60Q1s6zL3vB92yC04OEia59V+ZA/5yOjjOA/0UA+2iIB7nvaRf9WtKyoup29RAzG/ZBaTCGgLsZMLOMsLOsv4T7kISvQFvuP6PBILd++ZhYC3wnlIcdePNSINpOiyAPAmqDFQRiMKs/LdBPKZoJ5qCY98Cj/KgUMyc7qewFoathWmfwVHvQuUQePwiB7MHXdYp14LPF9Lma6OgIJ/NSXYtuvs8SMukazXADdpghXPBC9B2CZk5mXid1iRgKiwFYNG5CLByxSq+XrwkaZoA5q4wRzc0dp9v94FcB5SBcgFrQFKE3nOl5fBX42YUBjbsXKVfxbpRYVaPjvHf88BpODlnw9msXLiClfoyxCbkj8gjU/Pwg5+cxsN3P0IwMaAocNwksPVcCnSCNg3e+uwGJo66bVteyR6DpQAs8Pv9VKytYNiwcvLy86iuqu6Vxg0Moo8YnJXxtQi3GxUOQczovmGo20Xs4gs5LyGc5MTYXtyj3cv80AJyfTn8WJ3HtIx9IYkz33lXnUXx0EL+/qcHqanejGbXUJEYgQikJTF/NoLwbtpnlDY04C3OGvjL2MOw5gAsaM9o4+FR/2aG+yQGX1mKK633rLkGDGRvI5WdRXD+RxiTJ6I0DZXuQbmcxE6aQfT6/+uWdi8m8K/oQ9yz6E4e5G9Mk9QrJLquc/xpx/Lgy/czb8knHHTQgRgK/vUe+HvMDYaCEHsH3jzOoHVSG5EUW41ZWD2AbwX2SC25jc/iDq3C75pAQ87pRG07JtJNpbOC8yecT0QihCWMfrUOS8HxrAOHzY6EI9jCYV7HXBHouRV4IspuJ3b+2aiJEwgt+Ijlb7/PeLuOKh+K9tUSHGf9GPH5iM04kei5PwKv6YSk2QY+S19UVoivMoDdYZr1/uF5GJILp+4DoSg4bfDuq7BpAkTS7DQ7m9k4fwP5ufl4vVacgJ5YCmA3xxVcyciKnyBGGI0IXt888hufZNWwJ/v0Fxgo9xTfg1/zd/rQx2wxeBRG/34UV394FTlZWRxbuYG0Rx4z4wIMLkV/fVZXbP4ObDaMQw4kcu1vO09FcnMxJozBefLp8NGn6B0benz4CeqPt7LoPw8RLsgn2BokabDCJCilUMrgrPPO5LO33sMXU5z9dyjMNBXBqhp4OgDHDgUbNiYxEecQN011LZYCSIKlAHZzBtfcjGb4OltdTYURFaVk8x2sH/K37c5/YfoCVJIwW8uHreDMsh+ixUeJwZ9f0nlNvlqC7dH/IitWogryUePHEzv6CNSUSZ1pDMNgXcV68p59lvIPP0FPmLzTg0G0SISpd9+Lb/bLNDYWs3jZYsrG9W8joWkaDQ31fG/GcdyjFF/Hz9e2mH8CXAIsr4DDIwexzyovAaewNNlmoxaWAtitUTHSAl/36nILBl7f/B1SREYsg3Zbe6/zHjwpA2uoiROI3HV7r/NNzU2sWbUWJQZOj4PikkLKX329W+XvQGIxbJ8uQOrqycnPY9rEaXz25WeU7dW3EmhraWPChPHEREgSJA0FNAJP2jReH/o10nIobsNg6ojhrLzlNvQhu/eS7DeNNQm4W6Px/+ydd3gUVdvGf2dmtqYTQu+92UCQIlIEO6KoqICKiAoWQEAQfV87KIoNGwooIFX5LKAURRReBJTQVECE0AklhbTtO3O+PybZtF1IEBU093UFsrOnzWbPM895yv1IET6I3VDOzBNtQNod2PXiYzmkg8FyUJmYddbv+pFJKa/wbsq7HMk5TOMLGtD0gsbUa1TXTAjKKE03FoLVgsg4Yc7pcNCmVRuOHSxJMVaii9WK1+tl374DBCLkPbiAr3WJcuSYWUTU68W54zeaDnv4D5RR/meiQgM4myEEmfG9qJS1CKUIWagubKQn3HKSjmXHrem3cVA9yKfV/g8bNnz4uEH25mnjqYh9AoEAWzZvZUbtmcxtOg9rvpBSUZjue5+OhpntqCgK+nktUFavDT+QrmPUqRl6GRsbiwxDUV4UmtVCbloeCZUSCKpKWJZjBYgXshiNmaLrONPTCG5KRmtzZvIx/gmoEABnOQ5XHY3Vf5ho9yaksCBkgNzozhxLuv/UncsABYXRRx5ldHAEruou6lCXJCqXard3z17SM9LJys2hes0q7Gr9OwtsH+MX/mJhunfaBvGTZy2VSMDn95E18iEqJ28unVbscOC7dyCUyGGQp6jfqWkqx06k0aJVc1q0asGWTVtL5TKoGtwTRjAICc1+3cx2pwNr81Ynn+hfgorSYOcIbL592Pz78Noa4bfWOnWHcsIZZ6FW7eLjbt+2HZfHhWbVqFazCtGx0aT8vof6jetxne0GNqmbS43jkHYeDzzGPcG7cblc7Nyyi0YrV9Ho9beRigpSIvQgad27svOJMQhNwTAkQlGQhsGxjOPExEcBAiHyfyD0GgS7d+2ieZPmHDxwmCH3DsUT9JihigJwQu2rYPsyiC5RiFgCRDkxAkFyunZj//gJp5U+/WejojRYBUrBZ6uHz1bvjI6Zln2UuMQY/H8RomsAACAASURBVAE/whuPYRhs2rQFKQwsdo2adapT216zWJ+C58VRUTouH8AjvKQKk/MgKioKi1Oj2jOPk/foMLRvVyE8HoKdOuCoXZMLw45waggUml/YjIYtGvDl6sVcseRK9BU6VAWGwMHL4PsbFK791o5wuUMnAQHgcqMCsau+p+qMDzk2+N7TXMU/AxUC4F8MR5SDWg1qous6G1Yn49PdND6vPkok8j4InavbGBdxVBzFKJEPHCWjaGNcVHhBUZBSIqKjCfYOU5jE48HyxVcoBw6hN2lE8Nor4VTcfflsSFarleox1fjP2Cd4edwk3MINEpw4+W3hk/SYFYfl7fcQP/+CUoJBSfX5SJw7p0IA/N0LqMDfg4Dfj+43z+WqqlK3UV1q1SnNyFsSBUfGkYERrFBX4qHwbG+RFqrIKvTUe4SuOexW/H4/NlvpgH31x2SievUF3QCPB5wOpNOJ6+svMJo1BilRV61BW78Bo25tAjdcBw4HgWDhZjak5FE5mjZGa2aKWaioDPL04/LBc1A/W2w+9sPQpwFouWaY8L+ZLLRCAPyLEAgEyPNkU+erxdSZNgPtRDZ6zWrkTPgPxsWtyzRGwRGg5a+SHVM6c+jwWuZdl8dHd2t0t13N8/5nsRThJI+OjcHnCyMA3G6irr0ZkVskBiE3D/JcRF17E7m/bcTZ9y60VWvA4wWnA/u4Z8hb+w2apuHCxWOWJ1jUYDEWYWGQvJvpxjQ0NKz33Yv62eJQZeKIqNqaHHcWiXFJZbr3fyIq4gD+RcjOzuLCLeuo/9Z7WDKzEFKiHTpC/P2jiFv1Q5nGkFJiXbmGxK69qTPzWzotz2PyWAdpHRrzTu4kKpFQrH1sXAxeT+lin/bHnzE3fAkIKRFZOVgnvIK26geEy40wDESeC3E8DftjT+HzeRhmeYTF6pf4FT8u4WKamM7zyng4cQLt/z4/9ebHgbRPpOWFzcjMSS/Tvf8TUSEA/kXQLBZiJrxRWPAzH4rHS823ppVtEGkQN2wcitsTYiZW3B60lP04Fn4ZtovfXyIbLy8P69RZkcOMpIG24nuEq7gZX+g62jffIZwq36jf4BOFm9wjPHwgPsC//RsOjfbjmQ5pr8LxziWGBoJKZSTL0Vt2xOFw0Kh5A3Lzcsp2//8wlFkACCFUIcRmIcSX+a8fEkLsFkJIIURpx3Fhv5eEENuEEDuEEJNFBUHb3waLqqEeCx9pZz18BG3Lr8Rf1Zek2ucTf+3taL/uKNXOcLlQDxwqdV1xu7GG0SJSduyhZq3itgX1p02gn+T0KQSyfh1kmLO5TEhAUZWwpQrrZAWw7r2Pms0kDjskVYWogXCkZ5GhgUO1DHBeim+cKQjj4mJxxNrwek9SlvwfivJoAMOBot+IHzDr0O6P1EEI0RHoBJwPtALaAl3Kv8wKnAlYbTb89UtnEErAU68OCVfcjG31OpSME1i/W0PC5X1QjhS6+9KOpfHLzhSCYVh2dauVw1FRbNn4M79s3s4vW7bxy5bt5LldbNy8ie++/z5EPSayqkakE5ZCwahaBe9T40p5A6TTgW/sCByGna5GF6yy8H1HwMELMxKxKkaxCkRRdoi+iVAOswGkNPHgWp6D0brQONi4WUNiq0SRlXPiFJ/iPwtlMgIKIWoB1wLjgZEAUsrN+e+drKsE7Jis7AKzqlx4B3IF/nRomsaBcSNoOPxxFI+ZoCMxN5anQV1itu8MtRUAfj/2OQvZfPUVCEOlevWqtLywFXmjhxD38ruho4QEhM2KbewQmlcJrwwe3n8k5F4UJ87D5BgKc06Pqo5ryf8h69XBtXgBjgdHoezchUyIx/f4KAJ33o7YvJWpPw/n5+m78aTt54veKrG5/WmVsxxL1dJDOpyY30Af+G3wyQNVsdq2wtYi95r/S647m/jYhNKD/ENRVi/A68AYIKY8g0sp1wkhvgOOYH7Ob0kpS+uVFYgIj9eN2+dGUZT8Gnj5QleAc88ean76BZasLNIu70Z69y4IVTHbFD1hi8L6eY5re5JZuwYxz7+GtnsPgQtbkfvfUcjJ08BfgnnX7yf7t700G9EsxK2/Z/9eskfdj2G3EffaVNSsbHxtLyTj1acwImz+gjWgg2NgNJZFVsLV9JLY8A94AlnP1FL0SzuQt3WtyT2gqqGaYpV+2kidcU9T1+dH6ND3YzuCTPYPaIOv/kFsJb7VrlyIy5c1ig7X1r2H5i2ahF3mnp37wpdC/4filAJACHEdcFxKuVEI0bU8gwshGgHNgYIY02+EEJdJKVeXaHcfcB9A9erVyzPFPxoZOcepWq8KdSuX9s/bln1Lwv0PInx+hK6T+NMGfBt/4sTsU5cE81/WgYyvi5cnO9H9MpIWLSueuquo1Fj+DbLLVfgeHUHw5htQNXMj5j50N7kP3V3me1FVgfaBFcuXVoRXAC2A/xVvpGgEbmtYunOJcN3GE18vZsgUuIDl1F4yG9dlX6KKYIgo1O0D/9wi65CCHu/8juut8OusXK0S+3YeQpEq8XH/fE2gLBpAJ+B6IcQ1mOp8rBBitpRF2B0j40ZgvZQyD0AIsRRoDxQTAFLK94H3wcwFKMf6/9GwOqxUqhyG0FJK4h9+vNgmUFxubMu/w7LpZwKtzy/3XLtr16XKwAFU/vAjsFpMF52uo2RkQkYmjsEP4dt/ENG1fHUNhceLkpNLUtXKBN8zihT6fAm4HPMYoGNoDlxtWrE91ol382YwlPziIdKsIiIkQgpEIEDnI0fDzKSjZB7E8Z9fOXTzIGKbbcCdESB+MyRdDQwEDoI6V6LuPxBxvbFxscRXjiU7M7dc93mu4pQCQEo5DhgHkK8BjC7j5gc4ANwrhHgBUwnsgnmcqEBZEEEUitw8lONhfNeGxLJh82kJgGo1qmOb/BJ5T4zGdv9wLMtXFCtAKtxubM9PRGm/4CSjFF27JP7Z14h960OQEl+leHzxs4ECk3x74CckrxBI3MORUe04cfv1OKMcBA9JmjRvFHFcmRCPyCxprLMAjdGON6XeOz8grWtIaNYTMcILBTFITUE+Dnp6hLEBv99P9rE8EhLODOfi2Y7TjgMQQgwTQhzCVO9/FkJMy79+ccHvwELMmhK/YJpctkopF//BNf9rEClRU0Y5kWGYe9FU9Ab1TnMuczJZtQrqnr1hqw+jKFgPHC7TeFEfLyb2nZkoXh+Kz4/jyHFi992E4Sga/NMS6ZzK0Q+n4xk6AHt8bH5Y7kmUQCFwPT0Ww+koXLvFihR1kM4eSItEOiXBLm2RA7XCzV8ACygXRNYALBYLhnKKnOR/EMoVCiyl/B74Pv/3ycDkMG2SgcH5v+uYFG0VOB1E4sZQVXIfG07M86+GjgGGzYpepxa+yztH6HRyFC0PZtSvh/Lb76UDdfwBglUjGPoMiFoYQ+w7cSjpGkreZ6UCjqRmkNvrM2I/72e+VuD400dwdy4e8FNM8AWDWBctxz5zCTiseO67DnllFP7EHmhLtxD4XwBx4414H34U60oPIkMheGkAvW2Q2C8sUCIGSSiQtnc99789iN59etGrz3XFcgGEEMRUcnAiPZOEhEpl+OTObVTkApzFyMrKYlPyZrMop+mwA6TJjNv+Amo9ci+N53+BJdfFoc5t2X7XTfh/Wpv//JQY0kAaEqEIJCabrkSao0iJIaS524TEneHluNs8Wydc15mOK79HK1IeXLdaONKpDTuyjmHdlYZAEr/uJ6I3bcVXpzbxq+8jbm0SqkfNnz2q1P1IQ5Jzq5djr2xHO64RqBYEa+mnfahasddLQqe+qDt2IKQLWQ+shxdAmgoWHXldFJZrwdPlekiMwX+naerftXMXvq0BWmoNiQ8kFxNkAR2WJeeyZNFSvvvmeyZPeos335+MpmkhT4tuGKiaht27C4d3Jx5rfdz25ifPkjxHUSEAzmIELH5yq0bm1Mu+oyXb7mhZ5IoOlI6vj4SiGyNaRJHQKJ82u9El/K6NodF/3kbNcSGQpN3QjX0THiY6JZ3mLZrg6D8Yy7JvEC43ht1Btv0thr7agya7LuHuGXeTmDkKWAO4AZCqSjDaibtjG9AkgTonKdaRLwCcr0xH3b4NgQc0EI+BKVdMFV3oLhTA/v1NuHrvAM1kF3K73Jx30XkodSbC972Qhg8hdfxB0ysw/gtzGo/Hw56Uvaxbu44hD91XOL8RhBX9iMtbD0JFGjpux3nsrfsOUglThugcxj9PpP2DoITxlf9ZMEpE5qX3uoz1m+exYd1M1m5byO+vjcZw2DAwUH/aGNr8AIrXg92bRfVjC3nyuSdpsKcBGy5OAN5HitpIi41gt84kT59UJgaeAnuE47055uYHaE3Ex5XAIHXNW2zauJlNyZs4nGqWNtPjW5HdfTn+2n04kJvAB6vggsdhX5FoaI/Hw9yZxRmobHtnk+D+CVX6UA03Gj6ivb9QJePDU3+Q5xgqNICzGMpfKZ/DheYqCv5qxa3hUkrUzT+bOfxF4PDCFZvAsdND8xwPa1/tTps+vyB8+3BPdRG80Y9n64ayLaXACOgrYkOoAkRI21ell6oJLixNzHgJ4SzUbYzYJrjavsUT0x9h9oy5YfvrJQye1v3zEXqJhCnpo1LWYo4lDSnTPZwrqNAAzmII+df9eYwyckMqqOgtm5mReUXg7wTtbobR26H3YXhwfx5yUjNo/iV6u2D+HGWzrst8YeTv1KHQH3CUUga9UHvVSSCqkO8/XHR675uuxxnlLHXdbrdz0619il9UwlOxS/HPIw45J0hBzXJQ+r+O0l03dPQivNeiyL+ngpCname+b6CbemBQollP/QXX/UEcdifieBr4fAgpkQqIhAhLkwIjqgag4PP70CynVjr1gI7FakFJPYIowv5DJSI8shSCjqrI/AXoQR2LZgkJAsOQeINeck7kEPQHQ0cMIQSKopCYmIhQChevGl4sRg5F3ZESga7GYCjRp1z/H0Va2nF/UlLSkTM0nAH8Cgxu06bN8ZJvnhNHANObqKAo4lTJR/8oqKpGaUf2mYXb58LQDXMzaKfWOAIBsFitULMGwax0cnNTUZ2SOEza7dIQGNKFtCXiD/pRyyAADF1i9QdQs3KgaJ0AD1Ad0BQzICifKdgfVQ9VLRRemkXD6/FhtVjBKtkj9+F3+BHRYJyQaGkqFsNCVHQ0NWpUL27dNwyUvWkINRdi86MQFZDWSuQRhab++VvG5XIHq1WznBGWEimlkNJoIaUxDbi+5PvniADgX7f5/ypomoZqK89RI3+XC4GWkERmpTxi3TkIbyT1TCJkML9X2f5+Usp8Hr8S7QPAEQt605oEvLkIzQ72uLDj2h02AoEAu9mDruiANEOLK4FeySBG2klwxZdy7SmHDiNycs0vXRZgAanZMJrWxiElHrcXpETTzo3jgBBCgpItpRG2EMI5YwOo2PxnB4QiihXiqC/roWoxEWOWQEGq5S9jJqMLipEXmxwjIR530IrhSAJ7PCcTKm6rBymMUuNIDLJEFkEZNOsU+LNQPEcRvgxE1olCg6gB+CTC7YdAACEEDoctvJHhLIYpBCIdnipQgXKgoIBH6DWCBK0+ioigTCoq0nIaZblVxQxrVlTzRyjIKCdG9WoYhoGqntpF6hEejAiiSaCA4kHN3obiPoDwHkXxHIaahpnyVgwytOmFEEhphMhNznWcE0eAkmjZozmWjDOnggUSA2xbcWqagpUrv2XUqJF8+unn1K9vFrRPTT3MsGEPs3DhpyQnb2DWrJlMnlw81zQ5eQOPPDKCGjXMIhvx8fG89977Z2z9BejYsT1r164PvV606Au2b9/GY489HrlTBGNh8oZkZs+YzaQ3JpH8YzKOKAcXXHgBqqrwxONP0LV7N6688kqzsRAYMY1Q8vaYQTT5SDuRx4S3PubXX3dgsVqoVq0aYx8fi2axMOyBh/m/Lz5l26/b+HLRYsY+/ljppcXGEDy/BcLtod89g5mzYF7+dGV7AlukBSEUZBghIKVBgj8dZJEaYtIwH4lVgYOYGoAQyJjowvgFIYiKjsLr9RHUg3+JTeDPxDm5+jO5+csz3rJly7joootYvnwZQ4YMLdccF110USnBUBTBYBDtLCxTFQwE2bAxGafdQdOmTU0rfpj9J1U7elwLRDAPDD9SWHlo6L30vqE3k141E0A3b95ERkYmVasV0va0bNWSlq1alh6wAIqCjI4KbX4o7bePhDgZx9GwBFSCRL8FQYRxhIBYATkg4+Mxatcs1cRut2EYBn5/AEM3Q659fi92u+OcEgrnzkr/ZrjdbrZs2czUqdMYMWJ4uQVAODz55H+JjY1l587faNasOQ888AATJ77Irl270fUg998/lG7duqHrOpMnv0FycjKBgJ++fW/l5pvLVx04MzOT8eOf5+hRM97/0Ucf5cILL2Lbtm28/tqreH1e7DY7Tz73JPXq1wv1O5J6hMWfLkJRFL5Z/g3DRg7DHwywdu0PfDB9OhkZmQx9+AG6Xd612HzJG9YhBfS4ticZuRlIoH6DBtisNlJTU5ESAt4AGzduZPasj3j9zTd4b8p7HD16lMOHDnPs6FFu79+P2/vdTsAfoFuXrny7ciUWu4V58+ay5KslKEKhU+dOjBg5gjmz57BwwUJUTaVBwwa8NOklNFTqGLU5oBwEzLO/goKKRoInCimzw1sQhERWS8SoVxXFl47iOYC0RCOtlUAUHj0URcFuL/TSROHE7/cT9J+dwjwczo1VngX47ruVdOzYibp16xEbG8eOHTto3rx5mftv3ryZW2/tC0DPnj0ZnF+S6sCB/UyZ8j6qqvLmm5Np27YdTz/9LLm5OQwY0J/27S9hyZIlREdHM2fOXPx+PwMH3kWHDh2oWbN4MU+fzxeaAyAnJ5suXUwO1pdffokBAwZw0UWtOXLkCA8+OJRPP/2cenXr8v6M99E0jR/X/cjbk9/m5ddeDo1RvUYNrr/pehxRDm6783YAlny1hLTMdN6c8RYH9h7g8UfG0eWqy4qtZc++FJq2bIK0FBrgLIYFm92G1WZFEQK7w47VakFRFWw2G5qqcmD/fj6Y8SEul4te11xHv/79iIo2E4s0q4WffvyRVd+vYva82TgcDrKzsgH4cNqHLPl6CVarlZycQorvGBlNM70J2SKHoAhil3aijSh0kYUQ2eEzj4UCQkHN2ZGflyARwVzwHkePbQol7B3BYBCfz48eDGLRrOfM5ocKAVBmLFu2jP79+wNw5ZVXsmzZ0nIJgEhHgB49rggZtNatW8eqVd8za9YswCSnOHLkKOvWrWPXrt9ZsWIFAHl5uRw4cKCUALDZbCxY8HHodYENAODHH9ezZ8+e0Ht5eXm4XC5ycnJ48un/cujgYYSAYFAnz+PC4/MS1HUCMnz4Xedul6IoCvUa1iMzI3LCUlHIcLstqCOCQYTXzORr16UdKfYUAvYA0YnRHMg8QMOqJk2YIgTr162n9w29cThMPoC4+DgAGjdpzLgx4+h2eTe6d+9eZE5QpEK8EYeU5hoMKQkIO1KoiDAh0FKC9GUXf08aICVG7mG8WhWESYWK4vFgz8jE5vEiNRVffDyBuDhUVTsnPFcVAqAMyMrKYsOGn9i9ezdCCAxDRwjBiBGP/OGxC77IJiSTJr1KvXr1irWRUjJ27GN07NjptOeRUjJz5qwQuWcBJrwwnovatWb86xM4knqEEYOHIywCoQmEAopVCXvmt1iKhMuG2df1G9Zn1YrvSyyi+Et1/0HUfQfA7UX7bRdkZuKppRHIj/kVqmC/vp8awozxN6SB1+fD7fNyIjercEgpeWbis/y85WfW/m8t777zLtNnf5DPXwgIQX5lcRACq24hOjoKv6yL1bUfIfVigUUyuj5Kbkq4TxGLdKPkk5GI3DyUA4dCbkOhB7GnpWHTg3irVkXXgyBFmTwWfxcq3IBlwIoV33DdddexdOkylixZyrJlX1OjRk02b958Rufp0KEj8+fPDfnZf/vN9Ex07NiRTz75hEDA3Bj79+/D43GXa+z27TuwYMH80OudO38DwJXnIimfzXfZoqVh+zqdTtyu8hXNaN2uNYFAgMWfFhJAbdu2jQ0b8hOCgkGUrOz8x60EaaD4A8RmlfTZQzpmUJyqqFzc6WKWfvUVXt0LVsj15CAtkvSsdNp0bMPQkUNx5bnwSz+aXUOzaWhWFdWiomoqqqqgKqq50RUrvpjG+B21CNqrEHBUJ1urR1A4iBRfIIvaAA4Wbv4QDAORcQKrAIfTgdVuMQXBWYpzUgAEEk+SS/4njLds2TK6dbu82LXLL7+cpUuXnNF13HvvfQSDQfr2vZmbb+7DO++8DcCNN/ahQYMG9Ot3Gzff3Ifnn3+OYLB8tFVjxoxl+/Zt9O17M3363Mgnn3wCwB133MH7b77PgwMfwNDD+7Y7dunE/75bzT23DmLrpq1lmk8IwfOvjCd5fTK397qNu266k2nvT6VKUhWzga4XD/PNR1QpuSYJiPy/j4BLOl1Cx8s6cf+A+7jntntYMGs+hm4w/j/jubvvQAb3G8zN/W8hJiYyg31J1dywRBO0JWJY47A5bXh9XoJaHKW2h1CQ9vxCooYO3gj1BwWIXJNUVFVVk6r9LMU5kQyk68H8uPgKnGkEggE8qrusUbp/CJaghZgoc2Naftlu8v2HwabWheEJAoUasjqJMjHf7WayFOUEclAtp6da2w07dsfJcyz0YBCbJxXNcJtuQSkx7FWQjmpmA2mgbvklPHGjomLUrY1MMBmdfT5fuTI7U1J2uxs2bHRG62foeqBymzZt6pW8XrGr/uVQhIKU8i8xWPkNP4ZhoCgKRmwsSuYJShoGPFFKftCdRCBw4KSSNLn5TLebacPI9mZH5Ac4Fcry0FM1jWBMHdxuN3aLimp1FnMBIhRkbCwiu3jWYP4EuFQVmWdyHQaDwZBEs9lsZxW1WIUA+JdDCBHiDfzT57IKsvOyiYuOQ9SoipKTa6rShpHvehNYajegrgzixYsDB9EyQvptgDAhu2WDx/Bi1a2oJVRzM+1cIg3zf0NKpKKR6w2g+tzExBY/Vhi1aqC63EXuwbQ0Gg3q4izS1jAMfB7fWanFnn0rqsBfi6L7XuY/HfMfaEWZgksUG4twLRxjgUAaRqGGISA7J5uE+ASCLZogMk+Y1GJ2G0blRKSmESMh5qRV6CQWzYKuGyhq2QVXQfCRUAXZOdnEREUXX22REmpCUdDyy7BZbVZAkpeXh91uR9M0ROoRlGNpoeOBdDiQ8XHIyomlipoqinLWcllUCIB/OQQCp4yCgPllF/muMCHyXYFn4GjgC/oQxY7ckpzcHGJjYpFJlSEJDEPHMAx0nx9pmOzFZg6OGTBUctVWqwWhKLiDHhStbGsMeoMht6auGui6cUpbgBJ0ofkyEDKIxRKHJyggLR3b8bT82ID8Ffl8SE0rtfkB/D5fKc7FswUVAuBfDiGESZzxZ84R5opqV8nJyUFKid1uQygKQghUi4JAzbcDCHyeCJZ2BDabFbzg1t0oZbC0C0WEFiOEIC/owmpYIp7J1UAuFvdhCgo0aLqfKC0PMoOlPRiGgXIsDT2poG6CxJ1fF8FqtWCxaRiGjtQ5q+ICKgRABQBQ9Ry0wHEU6UcKjYBWGV1NKF/uu5QohgdFejCEDUOJithfCIGwCuyq/aShs4Y0cLvdpTSRAkOezW5F+EzarwLohk6AAKKIZiClRApZ/NCigdvjJToMVyCA5j1G8eosBoruQUYSNrpJPOJyeVDU4pqLkr/pPS4v6l/I9nwqnJMCoEfL7mRYMs7YeImBRFZsW3nSNtOmTWXp0iWmX1co/Oc//+G888LX4CtTGm4Zcc01VzNnzlwSEopXql206Atee+01qlSpQjAYoH79Bjz33PMlIgvLBjWYhTVwhIIvu5ABrIFjBGWAgMXM3Jsy5V2cTid33nlXsb6h63fcidV/ANVw073PQ/zfBxOIq1QZn7Ve5Hk1Fb/PX0wA3DNwECNHj6Jlq5ZMe38qg+8bjOJyc/hQKg+OGcOnX3wGgO4ujIMwz+iFWPzFYmZ8MAMj/yhxde9r6DugL/mxfsXaeqQHe8Aalqvw8OFUNv+yk15XFI/AlDF2hMdVwgUokHExuFweHOHKtp2lOCcFwJnc/GUZb+vWraxevZp58xZgtVo5ceJEKCrv78SVV14REjLjxj3G118vp3fvG8o3iJRYgiWfdAAGWjCTgFa5uPsrAlQ9G9VwFxnHQDH8aMEM/CKeSPX+pCojpkJPe38aD3a41KTgSktD8fpQ0zPQK0cu3Lnmf2uYO3su7059lypVqpCTk8uiRYsIeoIo9tL3IVSBy+NG8xfOX5CzcODoCb78em1xASAlgcQqWDMPmoSl0vRgGIrAUykBwzi36gqekwLgr0Z6ehoJCfFYreaTpujTeNu2X3nppZfweDxYrRbee28qAGlpaTz44FAOHjxE9+7dQ3kDS5cu5YMPpiGlpHPnzgwffvLrZUEwGMTj8RAbazLvrFr1PdOmTSUQCBAXF8+ECS+QmJhIcnIyL7/8EmBq5tOnf0iU08YHsz9n6bfr8QcC9OjSlmGDbwZgyozP+GzZOqpWq05CQgItWrSIuAZVzyGcEPnqq8XM+mQFAT1Ay/NaMeaJMaiqysTnXmT7tu34fD66devG8EdGFOv5xsuv4PN6uWHMGBrVqsmIvreiGwbPPP0cm/btIbFKFd54+41SuQ0fTPuAR0Y/QpUqZsRhbGwM/Qf0x53nZv+B/bzx8utkZWVhs9l59IlHqVuvLhOen4DT6eT3nTvJzMjk/uFD6dqjK5Penc+Bvfu44a5x3HB1ZwbccjUvTvmEDZu2E/AHuOW6a7i1Zw/W/7aD9+cuoFJSInt+38OCTxYweuQojh07hqEb3D/0fq66+moC/kBYX8rfiQoBUAZ06NCR999/n969e3HJJe254oorufjiiwkEAowdO4aJE1+iZctW5OXlYbOZ/8LtygAAIABJREFUVuWdO3eGNIYbbujNbbfdjqIoTJ78OnPmzCM2NpYHHhjCd9+tpGXLVmGvd+vW/aTrWr78azZv3kJ6ehp169blssvM1N+LLmrNrFmzEULw6aefMmPGh4waNZqPPprJuHHjuPDCi3C73VitVtat+5F9B4/yyfTnkFIydMwrbNi8A4fDxlcr1jJ/7hyCUqVfv9siCoDZsz9iyZefhwg20tLN0t0p+w6zbMU6pk6bjhat8tLzE1n+1TKuuf5ahgwbSlxcHLqu8+DgB0qlV4/q14/58+bz+QsvAHAoLY39R4/yyoMP8WyL5jz09lt8+823XNvr2mJrSdmVQvMWxbM0BWaYwasTX2H0E49Su25ttv2yjddffo3JU99EUQSZGRm8+cHbHNh3gMdHjKNrj67cO2wIH8+axxuvPYkiDWZ9vgJrXCXemzMVv9/PQ3c/yIU9LsUX6+S37b/x4SczaFijIWv+t4YqVarwzpR3AcjNDwuWUp5VBkCoEABlgtPpZO7ceWzevIkNGzbw2GNjGDZsOM2bt6By5SRatjQJV6OjC4NW2rW7JBSP3qBBA44cSSUrK5s2bS6mUiUzsu3qq69h48aNgAh7/VQCoOAIIKXkhRcmMHPmDAYNuodjx44xduyjpKenEwgEqFnTZLS54IILeeWVSVx99TVcfnkPqlatyrr16/lhw6/cONA8SrjdXvYfOorL7aVHl/bYo8x02wLhEg4DBtzBXQNuxe7bCxh07zMMgHXJ29i2cw8D77oTFPB5fSRUMrWnb5ev4POFn6PrOunp6eza+XsxASA83lLz1EpKonm9euDz07RZM1LzS4CVBXluF79s/YX/Pvqf0LWix7hOl+WnNzeox4nMwvRmicCtmn/X9T9uZs+uFFatWAWAKy+PQwcOoVksNGvVnOo1a6DrBo2bNOaVlyfx6iuv0qVLF9pc3IZgIIAeNFBEhRfgnISqqlx8cVsuvrgtjRo15ssvF9GsWfOIRnJrkSIbqqrk01hFps4+FRYsmM+nn34KwJtvFucVEEJw2WVdmD9/HoMG3cPEiS8yYMAddO3aleTkDUyZMgWAQYPuoXPny1iz5n/ceecApkx5Hykld989mP7Xt0MxCjfdjAXL0DVz8xdY3A1D5qdCK6Wt8oodn7V2vjERJBp+Ec3V117HkCFDUKMKv/Sphw4zZ+YcPpw3g9jYWJ79zzN4/d5iWXPSXtqQZs33sUurGcVXkBdQFA0bNWTH9h20u6RdseuGYRATE8OMj2eG/XyL/r0iBu1IybAxI2jXsfjYm5M3h44iugxSr149FnzyMatXr+aN11+nQ8eODLp7ENpZyBFw9gQln8XYt28f+/fvD73+/fedVK9enfr165OWlsa2bb8C4HK5zLjvCGjV6jw2btzIiRMn0HWdZcuW0abNxRGvF8Wtt97GggUfs2DBx6HzbVFs2bKZWrVMgpC8vNxQm8WLF4XaHDx4kMaNG3P33YNo0aIl+/btpWPHjnyxaBEn9Kp4bfU4eEIjNS+a89tdyXffr8Lr9XIw/TArV60kV8/liDcNXyC8b95Qo/HaGyOFhdyoOlx06aWs/G6lGbcPZGdncyT1CHkuF3aHnejoaDIyMli7Zh2KpuIrWo48qRKaqhEo+XkqCsFqSRE/47sH383rr7xOerqZQuz3+5nz0RyiYp1Ur1GdlV+b3h4pJbt27irsGGbTO51OPO7C9MS2HdrxxcLPCQbMNR3cfxCPp3iatCpU0g4eJCo9gxubNefu63rx26+/olpUvN7ypVT/FTgnNYDEQOIZdwOeDG63m4kTXyQ3NxdNU6lduzb/+c+TWCwWJk58iYkTX8Tr9WG325gyJTLbb1JSEsOGDeO++wYjpeTSSzvTrVs3gIjXT4YCG4CUBlWqVOXZZ58F4P77hzJmzGiqVKnCeeedz+HDpqo8Z85skpM3oCgqDRo0oFOnS7Farezdu5e77roDAIfDyfjxE2jeogVXXHElt93Wl8pVk2h14XkgFISm4Da82MsQiN+gYQOGPDSEYUMeRhoSVdN49PFHOe+C82jarCm333gbNWrV5IKLTHeqVIyQtiFtNm7qcwO9xz1Gi/r1GXHrbQAEq1XBiIslUvpi58s6k5mRyZDBQ0JJTtdcew2KpvDkC08xafwkZk6biR4McvmVl9O4aeOI62/YuCGqqnLPrXdzVa+ruanfzRxNPcq9/e9BSohPiOf5V8aH2kvdwOn28et3q3l5zmwUoaBpKk8Nugc1J4+AYaAFA1jOoqIiZU4HFkKoQDJwWEp5nRDiIWAE0BBIklKWKmUkhOgGvFbkUjPgNinl55HmqUgHPvuQ6c3CqxQ+ne2GlQRbXP5mlfiDQfzSjzQkdosVQxqoYVxuZYHu1YmKiiq8ICWKy03Q7ydotyPzo/YMQ8d2ijDeArjcbjhJsGPAGwBFFAscOh1E6XZidu8Jy3OAohA4vyUet++UAuBsTQceDuwACqo8/AB8CXwfqYOU8jvgQgAhRCVgN/B1OeaswFmAkq4rLz5SvUXotoVAKAIFcNhsfyjSTRElSTgERnQUPo+CzV50F5f9qxsuAKgAelA3k4D+4OYHsHg8RCZWECi5eQj17Hn6QxltAEKIWsC1wLSCa1LKzVLKfeWY62ZgqZSyfFxWFfjbUcpwpQiEqhT+5KcS/9GMNykNk8cv/CoidDLCP3GLNolQHUgP6GZhVMuZMYX5vF5OatA9C6sJlVWMvg6MgZPmaJ4KtwGv/oH+FfibUPbgFfNIYFL8GaH8+nwC3SLXC9qKIv+bG9JmteEPBChVz8+Q2IowgIhAAOvRQyh2kxsQKQhqsQSiq1H0ueb1+sJucD1oZh+eqc0PQGw05MdAlIKUZr1D398fQVoUpxQAQojrgONSyo1CiK6nM4kQojpwHrA8wvv3AfcBVK9e/XSmqMCfiLJuf0NI8Jilu13Cg1BEoZtUmiMJFUpcLPzfIvBR2rUHoAaKl/C2HdiLqKwXLk5IND0bJdeLL6Z+aNW6oYdV742AgShXVeRTQ2oWjKRKKOmZxZ/2ioKRVBmpqcizTACU5RPoBFwvhNgHzAe6CyFml3OevsBnUoYnmZdSvi+lvFhKeXF8fEK4JhX4G1FmDUAIFFXBYrGgKObvQin6I067sm5RfUA9kY1I0EtLJgGK4UcJuor0K62SB7wBhPXP8cfrNWug16wBFisgkFYreq0a6DWq/Snz/VGcUgOQUo4DxgHkawCjpZQDyjnP7QVjVODcQ1kFgBBmwA2mEnCGo94LN7LqdhWaokstQmLJTccfbUP4Azgzs5B2C744J1Ix+Q8lZS8wejowKlfCqFypxNXCo87ZhNP2rQkhhmHaBaoBPwshlkgpBwshLgaGSCkH57erB9QGVv3x5Zpo2aM7lowzFwcQSExk24qTpwO3aXMRjRoV+oxfe+21ULXfU+HJJ/9L586X0bNnzz+0TiieahwpRTcSpJRMmzaVxYsXIwRUrpzE2LGPUbNeLbyGj6LPy5A/nnwjWhjb3DdfLmf3jt8Z+ujDLPl0MVarlWuvuZpD+w/x3BPPIQQ8/dKzvPDf8bw1450y3+OMKR/icDq49c7bil2f8vYUnE4ng665KrSc7n2G8X8fPE9CfKFEUFwe7AdSQIBNSqQQOI9lkdWwGr6gRLGZG3H4vcMY+sgDNGvRjNnTP2LAPWYsxJHUI4wb/hgzPgkfNVgUy79cxryZ8/INHHBTnz4MuuEGRG4eaBpG5UpkBXwElSBIsMvw6dqpqYfZunUrV199TZk/pzOBcgkAKeX35Lv9pJSTgclh2iQDg4u83geUbaeUEWdy85d1vJJlt/5M/FmVghcsmM/WrVtZsOBjHA4H69atZfjwYcyYNws9PCdGmXFd7+tRURGq5IfVP9CpSyfuHjoIoFybPxKKKvJ6pQQsWRkQLgxAArn5vxTQdUmJ0A2cx7LwJcUR7kk8+4PZIQFQVvz4w3oWzv2ESe+8QuWkyqi5Ot/NmY96KDXfBiBQ0jNxJsbjqmLmE4hAeC0gNTWVpUuXlEsAnInvSUV0zR9ApKq9UkomTnyBn37aQM2aNYvRUG/fvp1XXpmEx+MmPj6eZ555jqSkJAYPvocLLriALVu20KVLF+rWrRs2pTccDh48yJgxo5k3bwEA+/fvZ9y4scydO79YuxkzPmTq1Okh0pAOHTrSpk1rViz/hm439uSmrr34v+/NSj5rvl3NTz+sZ+STY/jxf+uY/+FcgoEAMXGxPPrMOBISi9hqpOTj6fOIj40nqU4SC+cuRFUUft68ldfef4OrO13F0h+WATB/5jy+/+Y7Av4Al3brHBISH02dxddffU2VqknExcfRpFkTjEARQ1oQAoEggUAAdyCIriQSZRQX3IuWruGjBcsIeHXOb9SQp+4ehKooPP3BdH7ZswdvIMClV/cIzVmA9yZPwe/zcc9tg6jfsB73PHgvhq7z8nMvsW3rr1SuUpnxr76AzV5c4sz5YDZDRzxA5XwasPgT2fTt0hUMgwPHjvHsjA/JzMnBYbMx6tnHqd2kIc8+8zQxMbFs376djIx0hg9/hJ49ezJ58hvs3buXW2/tS/v2l2gPPzycF1+cUGvLli0xgUBQ9OnT5/hddw1MX716dczUqe9Vr1QpMZCSkuKcP3/BjhEjhjVIT0+3GoYhBg68O7VPn5siuCJKo0IAlBFFK+/WrFmDV199nc8//yxs1d7ffvuNffv288knC8nIyOCmm/rQu/cNBAIBJk58kddee51KlSqxfPky3n77TZ5+2gzhzc3NZfr0DwDIyckJm9IbDrVr1yY6OpqdO3+jadNmLFr0Bb16XV+sTV5eHh6Ph9q1axe73qJFS/bv249T2gFBVP7/dqxYpEaMdHLJ+W25fFp3FKGw+ItFfDbrEwY9ch9IsEqNeBGDJT/ApVun7qTcmILT6aT/gAF4A4Xx7xvWbeDQgUO8+9F7SCl5YsTjbN24FbvDznfLVzJz/kwMw2Dg7XfR8rxWOEuwGwkN5s9fwPLl+c4kKTmenoUhNVJ2HGbJ0nXMfeJpLJrGMx9+wOIf1nBD58sY0fdW4qOj8dgsDHxhPCm/p9CwScPQuPcPG8JnCz5j+nzzsz+SeoRDBw/z3xee4tH/juHpsU+x6ttVXHHtFcXWszdlL02aNzXXZhhYXB4K1I4np0/j6UGDqFetOlt3p/DyhFd4LV8TSk9P58MPZ7B3714eeWQ4PXv2ZNiw4cyaNZPJk98iJWV3cO7cOZWjo6P1hQs/3eH1ekX//v2aXXZZlxyAXbt2Rc2b9/y2+vXr+xct+iI+MbFyYNq0D3YDZGdnlSsKq0IAlBHhjgCRqvZu2rSJq666ClVVqVKlCu3atQXMmn4pKbsZOnQIYIazVq5cOTTeFVdcGfo9UkpvJNx4Yx+++OILRo1qzNdfL+ejj+aU6b6klGiKRrwtFgHE2cyztENzYFEtxNiiOZp1hOeefCa0lirVqqLqAkUKVEXFaXWGjGp2ix1N1dBUDZvFVixxKHn9BpLXJ3Pv7eYJ0eP2cOjgITwuN527dsYZbZ5DOnftHHG9tw24jf4D+xfe91U3kBNdizU//si23Xu55b//BcAb8FMp1sxmXLZ+PQu+W4lfEaRnZrJv775iAiAcqteoFsoTaNK8CUePHDlpe2FIpAAhweX1svn33xnxRuEJ2ScLs0G7deuGoig0bNiQjAjHz/Xr18fu27fXuWrVqgQAl8ut7tmTYrdYrLJx48au+vXr+wGaNWvueeutt2qPH/98za5du2V36tQp76QLLYEKAfAHEKlq75o1a8JamaWEBg0aMmvWR2HHK8rnFymlNxIuv7wH7703hbZt29G8eQvi4+OLvR8dHY3D4eDQoUOhrEGAHTt20KFDB6C4ZdzvL9y44dZS1ZFEnDWGw6eoclP0+COlpN/d/bn+5uLaycI5n/xhq7wvIYZeV/bk0T43I4XAE+1EaIJ9u/cxfdkSps98H1tcPBOen4DfFz7WoCgs1sKwY0VRzJDhEqjXoD6/79hJ63ZtMDQFqSgIXUcaBrFRUSEyE6ko5NashJlsLYpVVo6ciyPFyJGjD/To0SOn6NXVq1fH2O320NmoSZMmvvnz529fsWJF3FtvTa7544/rc0aOHHVyaVUEFenAfwCRqva2bt2a5cuXoes6aWlpoYq49erVIyvrBFu3mgU2A4EAKSm7w44dKaU3Emw2Gx06dGTChPFcf33vsG3uvPMuXnrpRbxe86u4fv169uxJoUcP0zuRmJjInj17MAyDlSsLvSLlXUuxdWFDAI6gnUvbdWL5F8uQORJH0MGJgydwHXXR7oJLWLNqDV6vF5fLxZpVa8o1B8DF7dvy9bp17KkSQ3azOhyxCPYEvRxJjMIaE429cgKZGZn89MOPYftrmhpK8y0r+g/qz5Q3ppCRngEI0mPtzFq+nGink5pJSSz7cT1SCHRVYVvq4ZNGCTudUbhchVHy7dt3yF648OMkv98vAH7//XdbXl5eqf2amppqcTicRt++t2b273/Hsd9/31kuc+45qQEEEhPPuBvwdHDjjX1ITU2lX7/bkFKSkJDAq6++Tvful7Nhw0/ccsvN1K1bN5Tbb7FYePnlSUycOJG8vDx0PUj//gNo2LBRqbEjpfSeDNdccy0rV34beqKXxO239yM3N5e+fW8hGDQNagsX/l+Ixuzhh4czfPjDVK1ajUaNGoZ47U9nLQWwW820YZvFzmWdu3Lo4GHuG2weAQpSj88/73x69OzJXbfcSbUa1big9YVlHr8A9RvW5/6H7mfEkOEYhoGqqox8fBStzm9Fk6aNueOmAVSvUZ2W57cK279Xn14MunUgTZo34Z4H7y3TnO0v7cCJjBOMGjoyPxFC0PuqnugWjUkPPMTTH07nnUWL8AtJ9yt7mMeOCIpO48aN0TSVvn1voUOH9tqwYSPSU1MP22655abmUkoRFxcXeOutt1NK9tu+fbvjzTcn11IUgaqqcty4J/aHGz8SKqoD/4Mwa9ZMcnNzefDBh07Z1u12M3LkI7Rs2ZKHHx72F6zu5PAGvWArWWTT/Kcgd0CUsaim3+NHtSmE2226X0cXRpkKiZQbAYlqVQFp2gQUUWwNhmEQJaNPSQl2tqYDV+AsxsiRIzh06FCIlfhUcDqdTJny3p+8qrLDIizo3sJzdqjKoDAjEYN6EJxl5K6g+MYrCtWqIr0SqZx+RWTDr5sEyBYREiR6UEcLbWyRv/nPflQIgH8IXn319b97CX8Iqqqe9MloSAODP8q5L7HmeYnK8xKQ4E2MwoiYfhwZCgqqQyXoDYaNkIw8/V9Thr08qBAAFfjzIc0iI6qejRQaQa0yhhp16n5FUJ5tI0UYTUFK4vYfR/P4EYaBXQiis3LY3QjyohWiglHEBmMRsuwzqVaVgC+IalNRNRUZlOUTCGcBKrwAFfjTYfUfwhJMQ5FeVCMPm/8Ail42d7XH78al5+FXIrjupMTwGeADw2cQ9Jvlv0vCfiIPze1DGAXlzySKAQ32gBQGeZY80mxplIWhuQBCEVisKtJnYOjGKbtK+ecmIZ0OKjSACvypEIYf1XBRssimJXgcnxodqVthf0XkG9ZKQ+oGIqDg0BwIIZBSkuU6gTWmNAGgPcuFCGPwFgY43eB2SoIigNtwYwucnPBUKaKPCEVBsysYQQNd18+qwp9lQYUAqMCfCiHD+9YjXS8JBfMJK/PdbIjCiDsVS7HS5kIInDYnQUqPHUmzF0Xek0Lic/iJUctPfKVoCopWhhLlFRrAH0ePHt0jhlCeDhITE1lxinTgY8eO8cILE9izZw9SGnTufBmPPDISi8XCzp2/cfx4Gp07myGs5U3TPRXCpRN37NietWvXn9Z4BRWHNU1l6dKl9O17KwDJyRtC8einWs/GjclER8egKILHHnucCy64IGxbQwn3NBXoSumn/zvvvE3r1m1o37596JpVs5Z5XQB6BP4/b0K0ef4voQUEVfAUSTk4u7bnn49z0gZwJjd/WcaTUjJq1CN069aNRYsW8/nni3C73bz11puAWQfwhx/+d8bWY1YR+vORm5vLxx8vOK2+I0aMZMGCjxk2bDjjxz9X6v1QgRSh4LPWwvyqmT+GsIXKjhfFAw88WGzzlxdSSnQRDFucxRcfhT/GiRQCKUBXQFchpUgMlpACR7D85dXPZZyTGsBfjZ9++gmr1RYqva2qKqNHP8p1113Dvffex7vvvoPX62Pz5i0MGmSmmu7Zk8Lgwfdw9OgR+vXrT79+ZgLLV199ybx5cwkEgpx3XivGjXsCVVXp2LE9Awbcwbp1axk5chQXXdS6zOubOXMGX3/9NYGAn27dujN06AMAPPLICI4dO4rP56Nfv/7cdNPNxfq98cYbHDp0KD8FtT2dO3fG7fYwevQoUlJ207x5C8aPn3BStbV16zYcPHgQoFRKc48ePXnmmac4ceIECfHxPPvUWKKj47jl9jv58sslKAI8Hg833tibxYu/4rnnng1pOj/88AOTJr1EfHw8zZoV1gz0eMwiLbt27UbXg9x//9B8wfwFq1evxuvz4PZ6eOqFp3hq7JO48lzous7oJ0ZzQesL0Tx+DG8O2TY3J+IlMv8RKBBYpQ2r20oZap6cFs5G7aJCAJQBKSm7S1XGjY6Oplq1aqSmpjJ06AMhlh4wjwB79+5j6tRpuFwubryxN7fc0peDBw/y9dfL+fDDmVgsFiZMGM+SJUvo1asXHo+HRo0a8cADD4Zdw+uvv8q0aaWDfNatW8uBAweYPXsOUkpGjBjGxo0badOmDU8//QxxcXF4vV4GDOjH5Zf3KJYkNHz4cFJSdoeyHJOTN7Bz528sXPgpSUlJDBx4F1u2bD6pMFq9ehWNGhU+RoumNA8f/jDXXtuL66+/ns8//4wXJ73Na6+9TpMmTdm4MZm2bduxevUqOnToiMVSyPjr8/l47rlneO+9qdSpU4exY8eE3ps2bRpt27bj6aefJTc3hwED+tO+/SUA/PLLz3z88UKUKMGCeQto1+ES7rr3LnRdz6fshqDDCo7KaIoHC9kE8KNIhRg9hthgLNgkRsBAOZNswSGcfSKgQgD8AZzMrdO5c2esVitWq5VKlSqRmZnJTz/9yPbtOxgwwNQGfD5vqCKwqqpcfnmPiHONGDGylA0AzJTkdevWcdtt5jne43Fz4MB+2rRpw7x5c0NJPceOHePAgQOlsgRLomXLVlStaqrnTZs2JTU1NawAKBBICQkJPPXU06HrRVOaf/75ZyZNMpngr732Ot54wwxWuvLKK1m+fDlt27Zj+fJlIRtEAfbt20uNGjWpW7cuYOY4fPrpwtD9rlr1PbNmzQLM2n9HjhwFoH379sTFxZHtzaJp0yZMfG4iAb+fS7t0pnHTxuiBwqOVFStVfEmFEYcUEqIZQeMUe9U0SIYjHD1pr6A863bcWbacsxMNGjQM5fwXIC8vj2PHjlKrVi127Nheqo+1ZDqpHkRKSa9evRg2bHjY9qdTNlpKyaBBg7j55luKXU9O3sCPP65n5sxZOBwOBg++p1iKbySEr2pcGiUFUgEcjpOdoc1d1aVLVyZPnkx2djY7duygbdt2pVtGPHZIJk16lXr16hW7+uuvv4TmjrPH07ldF5pOb86aNf/jxadf4M47B9KrV6+TrK0I/qxd8f/tnX9wVNUVxz9n82MJIoQQQBkVlBbGIiRMA5RfpRNa2qQmRQwxRis6VSjG0tpCo0OKjDOOg4xAOyMItbYw4mBRC0hAIFJmWqdosVLxV1CxBpMCHZBAgJD9cfrHe1k2ySbZJLvJ2+z9zLzJ3r33vvfd7L7z7rvvnnMceLbF5CRgdzNp0iTq6+t57TUrXJbP52PVqqfJy8snJSWlhStna0ycOImKigrOnLEmHWtrazuU4z4UU6ZMYfv2bVy0s9ieOnWSM2dOc/58Hf379yclJYXPP/+cI0fea9E3XN2dZdy4DPbssUKB7d69i/HjM+3j9uWWW25h5coVTJ/+7RaGb8SIG6mpqQ7MLbz++u5A3eTJU9iy5cWAH/3HH4f2mampqSEtLY05c25n9uzbWm0X78SkAWgtNl609icirFq1moqKveTn5zF7dj7JyckBL7oJEyZw7Ngx7rijMPCDD8XIkSMpKSlh4cKFFBYWsHDhgkAa684yefIUcnJymTfvx8ydezuLFy/mwoWLTJ06Fa/XR2FhAWvXPsPYseNa9E1NTSUzM5OCgjmsXh35pE2lpaXs2LGdwsICyst3smRJaaBu1qzvU15e3uSWoRG3201Z2TIWLXqI++6b1yRZzAMPzMfr9VJYWEBBwRzWrn0m5LEPHTpEUVEhRUWFvPFGBcXFxRH/fL0B4w5sMHQErxfxetGkJOjELVs4GHdgg8Fp+H0k19SQcP68lQFFwZs2EM+QoZ3OduQEjAEwxBequOrqEI8Hdbvx9+0b1gmc/GU1CRfq7AQg1qg58cxXqMuFd/CQaKuOGsYAGOIGqa/H/cUXiF7x3PMnJ3N5+HBoI8GGeDxXTv5g1E/S6dN40wfH7CggJicBDYYOo4q76gvE57Wy9qi1uS5fxl39ZZtdpaEBpJVTxa9NMwHHGMYAGOIC14ULgVgATVFcFy8intbTdvuTky2DEaq3ywVhxip0IrGr3GDoAOLxtB6wQ1wQwoEoQFISvqv7txwFiAtvenrMDv8hRucAxlRmk+SLYFjwhEF8MLptd+Dm7rfBWXojxbx597Bx46awM8XW1FSzaNHPePnlVyOmobfi79OGh4/60eSWQUSCaRg2jKQTJ0isrbXeEPAMSscb4TUp3U1MjgAiefJHY3+dZeNGa317Y6ZYQ+TQlBT8fdwtr9biwps6sP1n+i4XnmHDuDR6NPUjR3Jp1Gi8g2N38q+RmBwBOI2amporbq8DB7J8+eNce+217Nu3l/Xrn8XlSqBfv348//wf2bFjO/v378dJyjOBAAAHJElEQVTjaaC6upqcnFwWLLByBTaOMoIzxebl5ZGdnU1Z2VIuXbISdZSWPkpmZtPkGZ999imPPbYMj8eLqp+VK58OONM4HZevjkTvaQQvPld/vIlpIJFfZHP5huHWs/y6oGf5A1PxDL2mA2Jd7Y4WYgljAMIkODswwLlztcyYMQOAFSuebOL2+tRTK1i9eg0bNqxn7dp1DBkylPPnr6R4++CD99m69RX69OnD3XcXM23adMaMGROoD84UC5bP/Lp163G73Xbq70dovlpy69atFBffRW7uD/F4PN0WVKSrJHjPkuz5L40xA13+BhL857icfFPkr64JCTRcf323rOaLFYwBCJPm2YEb5wCgdbfXjIxMli1bxqxZs8jOnhnoO2nStwJuudnZMzl8+N0mBqA5Xq+XFSuepLKyEpcrgaqqltmfMjIyeO6533Py5Emys2fGxtVflSTvSZoHDHX5G3D56/B3IjZfWCQmom08948nYnIOwPlYV66yst9QUlLCiRMnKCoq5OzZs1Ztsytbe4EiN29+gbS0Qbz00lY2b34xkIw0mJycXNas+R1ut5uSkoW8/XboJJjOwo9oqJGK4vLXd7uaeCRsAyAiCSLyrojstMsPicinIqIikt5GvxtEZK+IfCQiH4rIiK7Ldhatub0eP36csWPH8eCDJaSmpnLypBW44uDBg9TW1lJfX8+BA38lI6Pp/XxzN926ujrS09NxuVyUl+8MObxvTPtdXHwXM2Z8h08++SRaHzeCuNCQ9/rSSjBRQ6TpyDjo58BHQH+7/CawEzjQTr9NwBOquk9E+kErYVs7gCdhUMQfA3aF0tJSli9/jE2bNgYmAcGKmlNVVYWqMnHiJEaNGk1lZSXjx4+nrGwpx49XkZOT22L4H5wpNj8/n7lzC1my5FdUVOwjK2tCyKAbe/bsYdeunSQmJpGePoj58xd06TN1CyJ4Eoc2mQMAwS/J+ENEDTZEnrDcgUXkOmAj8ATwS1W9NajuP0CWqrZwbBeRbwAbVHVauIJ6uztwNNYPxDqBpwDqxZcQvacAsYIT3YHXAL8GOjorMwo4KyKvAjcCFcAjqk1v/ERkPjAfaBL8wRAf+BP60RBGliBD5Gl3DkBEbgVOqeo7ndh/IjAdWAxMAG4C7m3eSFU3qGqWqmalpg7sxGFih/z8H5mrv8ExhDMJOBXIt4f6W4BsEXkhzP1/CbyrqsdU1QtsA8IPeB+E0yIXGQyxgqoKrcy9tWsAVPVRVb1OVUcARcB+Vb07zGP/ExgoIoPtcjbQMoRuO4hYBsAYAYOhY6iqqPoHAO+Hqu/0zJqILMKaF7gGeE9Edqnq/SKSBfxUVe9XVZ+ILAbeEOth9ztAy+wW7R4rAVVfLLtdGwxhc9VVfRN9Pk+rj9Y7iB/r5L8/VGVMBAU1GOKJ8eMz3lHVrO44llkJaDDEMcYAGAxxjDEABkMc47g5ABH5H9DS3S3ypANdS8vTPRidkSUWdA5X1cHtN+s6jjMA3YWIHOquiZauYHRGlljR2V2YWwCDIY4xBsBgiGPi2QBs6GkBYWJ0RpZY0dktxO0cgMFgiO8RgMEQ9xgDYDDEMb3aAIhIpogcFJHDInJIRCba7y+x3zssIu+LiE9E0kL0zxaRf9ltNopIVMISRUDnTFvnYRH5u4h8zaE6/xbUrkZEtjlUp4jIEyJy1I5luSgaOh1Bo5ttb9yAvUCO/ToXOBCiTR6Wi3Pz913AcWCUXX4c+InTdNp1R4Gb7dcPAn9yos5m7V4B7nGiTuA+rFiWLrs8JBo6nbD16hEAVjrIxiCmA4CaEG3uBEK5Hw4CLqvqUbu8D7g94gotuqIz3P6RoKs6ARCRq7FiQ0RlBEDXdS4EHle1UgKr6qmIK3QKPW2BorkBNwNVWFfyaqwllsH1fYEzQFqIvoK1JDnLLv8WOOI0nXb9dOA0VgSmD4H+TtQZ1O4e4GUnfu92/WlgKXAI2A18vbt+s929xXyoXRGpwApK0pylwEzgYVV9RUQKgT8A3w1qkwe8qapnmndWVRWRImC1iLixhpVt5JDuGZ02DwO5qvqWiCwBVtFKAIge1tnIncBzndHXTTrdQL2qZonIHOB5LCPb++hpCxTNDajlyloHAc41q/8LUBzmvmYBf3aaTmAw8FlQ+QbgQ6fpDGozCOsK28ep3zvwMTAiqH9ttLT29Nbb5wBqgBn262wgkC5HRAbYddtb6ywiQ+y/bqAUeNaBOr8CBojIKLv8PawELk7T2chcYKeqRjP3V1d1brP7Ybc92kbb2KanLVA0N2AaVhzCfwNvAd8MqrsX2BKizy5gmP16JdbJVAn8wsE6bwOO2P0PADc5UaddPgD8wOHfeypQbv9P/wFk9PRvOVqbWQpsMMQxvf0WwGAwtIExAAZDHGMMgMEQxxgDYDDEMcYAGAxxjDEABkMcYwyAwRDH/B99aypT78RFfwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "accessT.plot_choropleth(column = 'time_to_nearest_all_categories', title = 'Time to Nearest Facility', filename = 'data/output_data/accessTime_choropleth')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Subset Data to Focus Categories**\n", + "If the user only needs to focus on one category, they can subset their data." + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "#sets focus category to FQHC, can have multiple focus categories separated by commas \n", + "accessT.set_focus_categories(['Federally Qualified Health Centers'])" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time_to_nearest_Federally Qualified Health Centerstime_to_nearest_all_categories
1703184240024722472
17031840300515515
1703184110013761376
17031841200652652
17031838200562562
1703165030116361636
1703153050328792879
1703176080361736173
1703154010217731773
1703154010123922392
1703144020135223522
1703183900021752175
1703103060111501150
1703103060415211521
17031020801585585
17031843300221221
17031080202801801
17031070102649649
17031031501300300
17031031502165165
17031834900923923
17031834800523523
1703116050212861286
17031140702796796
17031842000248248
1703115040210501050
1703183440019981998
17031040201486486
17031040202567567
1703102070213241324
.........
17031291200726726
17031620300499499
17031620400354354
1703163010012971297
17031630300953953
1703163040011121112
1703163050011801180
1703111030029542954
1703111040024292429
1703112010051815181
1703112020043374337
17031271400715715
1703128010015681568
17031280800439439
1703128190020122012
1703155010018041804
17031611500860860
17031611800328328
17031611900478478
17031612000903903
1703162010010561056
17031620200585585
17031070200765765
17031070400870870
1703107050010321032
17031071000530530
1703107120010961096
1703113030015581558
17031292200490490
1703163090011371137
\n", + "

801 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " time_to_nearest_Federally Qualified Health Centers \\\n", + "17031842400 2472 \n", + "17031840300 515 \n", + "17031841100 1376 \n", + "17031841200 652 \n", + "17031838200 562 \n", + "17031650301 1636 \n", + "17031530503 2879 \n", + "17031760803 6173 \n", + "17031540102 1773 \n", + "17031540101 2392 \n", + "17031440201 3522 \n", + "17031839000 2175 \n", + "17031030601 1150 \n", + "17031030604 1521 \n", + "17031020801 585 \n", + "17031843300 221 \n", + "17031080202 801 \n", + "17031070102 649 \n", + "17031031501 300 \n", + "17031031502 165 \n", + "17031834900 923 \n", + "17031834800 523 \n", + "17031160502 1286 \n", + "17031140702 796 \n", + "17031842000 248 \n", + "17031150402 1050 \n", + "17031834400 1998 \n", + "17031040201 486 \n", + "17031040202 567 \n", + "17031020702 1324 \n", + "... ... \n", + "17031291200 726 \n", + "17031620300 499 \n", + "17031620400 354 \n", + "17031630100 1297 \n", + "17031630300 953 \n", + "17031630400 1112 \n", + "17031630500 1180 \n", + "17031110300 2954 \n", + "17031110400 2429 \n", + "17031120100 5181 \n", + "17031120200 4337 \n", + "17031271400 715 \n", + "17031280100 1568 \n", + "17031280800 439 \n", + "17031281900 2012 \n", + "17031550100 1804 \n", + "17031611500 860 \n", + "17031611800 328 \n", + "17031611900 478 \n", + "17031612000 903 \n", + "17031620100 1056 \n", + "17031620200 585 \n", + "17031070200 765 \n", + "17031070400 870 \n", + "17031070500 1032 \n", + "17031071000 530 \n", + "17031071200 1096 \n", + "17031130300 1558 \n", + "17031292200 490 \n", + "17031630900 1137 \n", + "\n", + " time_to_nearest_all_categories \n", + "17031842400 2472 \n", + "17031840300 515 \n", + "17031841100 1376 \n", + "17031841200 652 \n", + "17031838200 562 \n", + "17031650301 1636 \n", + "17031530503 2879 \n", + "17031760803 6173 \n", + "17031540102 1773 \n", + "17031540101 2392 \n", + "17031440201 3522 \n", + "17031839000 2175 \n", + "17031030601 1150 \n", + "17031030604 1521 \n", + "17031020801 585 \n", + "17031843300 221 \n", + "17031080202 801 \n", + "17031070102 649 \n", + "17031031501 300 \n", + "17031031502 165 \n", + "17031834900 923 \n", + "17031834800 523 \n", + "17031160502 1286 \n", + "17031140702 796 \n", + "17031842000 248 \n", + "17031150402 1050 \n", + "17031834400 1998 \n", + "17031040201 486 \n", + "17031040202 567 \n", + "17031020702 1324 \n", + "... ... \n", + "17031291200 726 \n", + "17031620300 499 \n", + "17031620400 354 \n", + "17031630100 1297 \n", + "17031630300 953 \n", + "17031630400 1112 \n", + "17031630500 1180 \n", + "17031110300 2954 \n", + "17031110400 2429 \n", + "17031120100 5181 \n", + "17031120200 4337 \n", + "17031271400 715 \n", + "17031280100 1568 \n", + "17031280800 439 \n", + "17031281900 2012 \n", + "17031550100 1804 \n", + "17031611500 860 \n", + "17031611800 328 \n", + "17031611900 478 \n", + "17031612000 903 \n", + "17031620100 1056 \n", + "17031620200 585 \n", + "17031070200 765 \n", + "17031070400 870 \n", + "17031070500 1032 \n", + "17031071000 530 \n", + "17031071200 1096 \n", + "17031130300 1558 \n", + "17031292200 490 \n", + "17031630900 1137 \n", + "\n", + "[801 rows x 2 columns]" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#calculate Access Time for focus categories\n", + "accessT.calculate()" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time_to_nearest_Federally Qualified Health Centerstime_to_nearest_all_categories
1703184240024722472
17031840300515515
1703184110013761376
17031841200652652
17031838200562562
\n", + "
" + ], + "text/plain": [ + " time_to_nearest_Federally Qualified Health Centers \\\n", + "17031842400 2472 \n", + "17031840300 515 \n", + "17031841100 1376 \n", + "17031841200 652 \n", + "17031838200 562 \n", + "\n", + " time_to_nearest_all_categories \n", + "17031842400 2472 \n", + "17031840300 515 \n", + "17031841100 1376 \n", + "17031841200 652 \n", + "17031838200 562 " + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview results\n", + "accessT.model_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [], + "source": [ + "accessT.write_results(filename = 'data/output_data/accessTime_subsetFQHC.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## AccessCount: Measures the number of destinations within a catchment area\n", + "\n", + "##### (e.g. number of providers within 30 min walk of housing blocks)\n", + "\n", + "### Specifications for AccessCount\n", + "**name = AccessCount( )**\n", + "* network_type ('walk', 'bike', 'drive', 'otp') \n", + "* sources_filename (primary input data)\n", + "* destinations_filename (secondary input data)\n", + "* source_column_names (dictionary that map column names to expected values)\n", + "* dest_column_names (dictionary that map column names to expected values)\n", + "* transit_matrix_filename (sources-destination travel time matrix)\n", + "\n", + "**Column Inputs**\n", + "* Standard inputs\n", + "\n", + "**name.calculate()**\n", + "* upper_threshold (max time in seconds)\n", + "\n", + "**Functions within the AccessTime class** (use as name.function()) \n", + "- calculate () \n", + "- aggregate() \n", + "- set.focus.categories()\n", + "- plot_cdf()\n", + "- plot_chlorepleth" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.p2p:Approx area of bounding box: 2,445.05 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 16.60 seconds\n" + ] + } + ], + "source": [ + "accessC = AccessCount(network_type='walk',\n", + " transit_matrix_filename=None,\n", + " sources_filename = 'data/input_data/sources/tracts2010.csv',\n", + " destinations_filename='data/input_data/destinations/health_chicago.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'ID', 'capacity': 'skip', 'category': 'category', 'lat': 'lat', 'lon': 'lon'}\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count_in_range_All Free Health Clinicscount_in_range_School-Based Health Centerscount_in_range_Federally Qualified Health Centerscount_in_range_Other Health Providerscount_in_range_Hospitalscount_in_range_all_categories
17031842400010001
17031840300012003
17031841100121217
170318412000470415
170318382001441616
17031650301001001
17031530503000000
17031760803000000
17031540102002002
17031540101000000
17031440201000000
17031839000100001
17031030601013127
17031030604013037
17031020801214018
170318433001351616
17031080202002035
17031070102003025
170310315010151411
170310315020251412
17031834900102003
17031834800102014
17031160502021014
17031140702022015
170318420000432110
17031150402001012
17031834400010113
170310402011260312
170310402022250211
17031020702201003
.....................
170312912000171413
17031620300002002
17031620400003003
17031630100203005
17031630300003003
17031630400103004
17031630500202004
17031110300000000
17031110400000000
17031120100000000
17031120200000000
17031271400113027
17031280100111003
170312808003221412
17031281900200002
17031550100000000
17031611500203005
17031611800203005
17031611900204006
17031612000205007
17031620100003003
17031620200002002
17031070200005027
17031070400004026
17031070500004015
17031071000004015
17031071200004026
17031130300214018
170312922000181313
17031630900104005
\n", + "

801 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " count_in_range_All Free Health Clinics \\\n", + "17031842400 0 \n", + "17031840300 0 \n", + "17031841100 1 \n", + "17031841200 0 \n", + "17031838200 1 \n", + "17031650301 0 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 0 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 1 \n", + "17031030601 0 \n", + "17031030604 0 \n", + "17031020801 2 \n", + "17031843300 1 \n", + "17031080202 0 \n", + "17031070102 0 \n", + "17031031501 0 \n", + "17031031502 0 \n", + "17031834900 1 \n", + "17031834800 1 \n", + "17031160502 0 \n", + "17031140702 0 \n", + "17031842000 0 \n", + "17031150402 0 \n", + "17031834400 0 \n", + "17031040201 1 \n", + "17031040202 2 \n", + "17031020702 2 \n", + "... ... \n", + "17031291200 0 \n", + "17031620300 0 \n", + "17031620400 0 \n", + "17031630100 2 \n", + "17031630300 0 \n", + "17031630400 1 \n", + "17031630500 2 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 1 \n", + "17031280100 1 \n", + "17031280800 3 \n", + "17031281900 2 \n", + "17031550100 0 \n", + "17031611500 2 \n", + "17031611800 2 \n", + "17031611900 2 \n", + "17031612000 2 \n", + "17031620100 0 \n", + "17031620200 0 \n", + "17031070200 0 \n", + "17031070400 0 \n", + "17031070500 0 \n", + "17031071000 0 \n", + "17031071200 0 \n", + "17031130300 2 \n", + "17031292200 0 \n", + "17031630900 1 \n", + "\n", + " count_in_range_School-Based Health Centers \\\n", + "17031842400 1 \n", + "17031840300 1 \n", + "17031841100 2 \n", + "17031841200 4 \n", + "17031838200 4 \n", + "17031650301 0 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 0 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 0 \n", + "17031030601 1 \n", + "17031030604 1 \n", + "17031020801 1 \n", + "17031843300 3 \n", + "17031080202 0 \n", + "17031070102 0 \n", + "17031031501 1 \n", + "17031031502 2 \n", + "17031834900 0 \n", + "17031834800 0 \n", + "17031160502 2 \n", + "17031140702 2 \n", + "17031842000 4 \n", + "17031150402 0 \n", + "17031834400 1 \n", + "17031040201 2 \n", + "17031040202 2 \n", + "17031020702 0 \n", + "... ... \n", + "17031291200 1 \n", + "17031620300 0 \n", + "17031620400 0 \n", + "17031630100 0 \n", + "17031630300 0 \n", + "17031630400 0 \n", + "17031630500 0 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 1 \n", + "17031280100 1 \n", + "17031280800 2 \n", + "17031281900 0 \n", + "17031550100 0 \n", + "17031611500 0 \n", + "17031611800 0 \n", + "17031611900 0 \n", + "17031612000 0 \n", + "17031620100 0 \n", + "17031620200 0 \n", + "17031070200 0 \n", + "17031070400 0 \n", + "17031070500 0 \n", + "17031071000 0 \n", + "17031071200 0 \n", + "17031130300 1 \n", + "17031292200 1 \n", + "17031630900 0 \n", + "\n", + " count_in_range_Federally Qualified Health Centers \\\n", + "17031842400 0 \n", + "17031840300 2 \n", + "17031841100 1 \n", + "17031841200 7 \n", + "17031838200 4 \n", + "17031650301 1 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 2 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 0 \n", + "17031030601 3 \n", + "17031030604 3 \n", + "17031020801 4 \n", + "17031843300 5 \n", + "17031080202 2 \n", + "17031070102 3 \n", + "17031031501 5 \n", + "17031031502 5 \n", + "17031834900 2 \n", + "17031834800 2 \n", + "17031160502 1 \n", + "17031140702 2 \n", + "17031842000 3 \n", + "17031150402 1 \n", + "17031834400 0 \n", + "17031040201 6 \n", + "17031040202 5 \n", + "17031020702 1 \n", + "... ... \n", + "17031291200 7 \n", + "17031620300 2 \n", + "17031620400 3 \n", + "17031630100 3 \n", + "17031630300 3 \n", + "17031630400 3 \n", + "17031630500 2 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 3 \n", + "17031280100 1 \n", + "17031280800 2 \n", + "17031281900 0 \n", + "17031550100 0 \n", + "17031611500 3 \n", + "17031611800 3 \n", + "17031611900 4 \n", + "17031612000 5 \n", + "17031620100 3 \n", + "17031620200 2 \n", + "17031070200 5 \n", + "17031070400 4 \n", + "17031070500 4 \n", + "17031071000 4 \n", + "17031071200 4 \n", + "17031130300 4 \n", + "17031292200 8 \n", + "17031630900 4 \n", + "\n", + " count_in_range_Other Health Providers count_in_range_Hospitals \\\n", + "17031842400 0 0 \n", + "17031840300 0 0 \n", + "17031841100 2 1 \n", + "17031841200 0 4 \n", + "17031838200 1 6 \n", + "17031650301 0 0 \n", + "17031530503 0 0 \n", + "17031760803 0 0 \n", + "17031540102 0 0 \n", + "17031540101 0 0 \n", + "17031440201 0 0 \n", + "17031839000 0 0 \n", + "17031030601 1 2 \n", + "17031030604 0 3 \n", + "17031020801 0 1 \n", + "17031843300 1 6 \n", + "17031080202 0 3 \n", + "17031070102 0 2 \n", + "17031031501 1 4 \n", + "17031031502 1 4 \n", + "17031834900 0 0 \n", + "17031834800 0 1 \n", + "17031160502 0 1 \n", + "17031140702 0 1 \n", + "17031842000 2 1 \n", + "17031150402 0 1 \n", + "17031834400 1 1 \n", + "17031040201 0 3 \n", + "17031040202 0 2 \n", + "17031020702 0 0 \n", + "... ... ... \n", + "17031291200 1 4 \n", + "17031620300 0 0 \n", + "17031620400 0 0 \n", + "17031630100 0 0 \n", + "17031630300 0 0 \n", + "17031630400 0 0 \n", + "17031630500 0 0 \n", + "17031110300 0 0 \n", + "17031110400 0 0 \n", + "17031120100 0 0 \n", + "17031120200 0 0 \n", + "17031271400 0 2 \n", + "17031280100 0 0 \n", + "17031280800 1 4 \n", + "17031281900 0 0 \n", + "17031550100 0 0 \n", + "17031611500 0 0 \n", + "17031611800 0 0 \n", + "17031611900 0 0 \n", + "17031612000 0 0 \n", + "17031620100 0 0 \n", + "17031620200 0 0 \n", + "17031070200 0 2 \n", + "17031070400 0 2 \n", + "17031070500 0 1 \n", + "17031071000 0 1 \n", + "17031071200 0 2 \n", + "17031130300 0 1 \n", + "17031292200 1 3 \n", + "17031630900 0 0 \n", + "\n", + " count_in_range_all_categories \n", + "17031842400 1 \n", + "17031840300 3 \n", + "17031841100 7 \n", + "17031841200 15 \n", + "17031838200 16 \n", + "17031650301 1 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 2 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 1 \n", + "17031030601 7 \n", + "17031030604 7 \n", + "17031020801 8 \n", + "17031843300 16 \n", + "17031080202 5 \n", + "17031070102 5 \n", + "17031031501 11 \n", + "17031031502 12 \n", + "17031834900 3 \n", + "17031834800 4 \n", + "17031160502 4 \n", + "17031140702 5 \n", + "17031842000 10 \n", + "17031150402 2 \n", + "17031834400 3 \n", + "17031040201 12 \n", + "17031040202 11 \n", + "17031020702 3 \n", + "... ... \n", + "17031291200 13 \n", + "17031620300 2 \n", + "17031620400 3 \n", + "17031630100 5 \n", + "17031630300 3 \n", + "17031630400 4 \n", + "17031630500 4 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 7 \n", + "17031280100 3 \n", + "17031280800 12 \n", + "17031281900 2 \n", + "17031550100 0 \n", + "17031611500 5 \n", + "17031611800 5 \n", + "17031611900 6 \n", + "17031612000 7 \n", + "17031620100 3 \n", + "17031620200 2 \n", + "17031070200 7 \n", + "17031070400 6 \n", + "17031070500 5 \n", + "17031071000 5 \n", + "17031071200 6 \n", + "17031130300 8 \n", + "17031292200 13 \n", + "17031630900 5 \n", + "\n", + "[801 rows x 6 columns]" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#walking radius of 30 minutes\n", + "\n", + "accessC.calculate(upper_threshold=1800)" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count_in_range_All Free Health Clinicscount_in_range_School-Based Health Centerscount_in_range_Federally Qualified Health Centerscount_in_range_Other Health Providerscount_in_range_Hospitalscount_in_range_all_categories
17031842400010001
17031840300012003
17031841100121217
170318412000470415
170318382001441616
\n", + "
" + ], + "text/plain": [ + " count_in_range_All Free Health Clinics \\\n", + "17031842400 0 \n", + "17031840300 0 \n", + "17031841100 1 \n", + "17031841200 0 \n", + "17031838200 1 \n", + "\n", + " count_in_range_School-Based Health Centers \\\n", + "17031842400 1 \n", + "17031840300 1 \n", + "17031841100 2 \n", + "17031841200 4 \n", + "17031838200 4 \n", + "\n", + " count_in_range_Federally Qualified Health Centers \\\n", + "17031842400 0 \n", + "17031840300 2 \n", + "17031841100 1 \n", + "17031841200 7 \n", + "17031838200 4 \n", + "\n", + " count_in_range_Other Health Providers count_in_range_Hospitals \\\n", + "17031842400 0 0 \n", + "17031840300 0 0 \n", + "17031841100 2 1 \n", + "17031841200 0 4 \n", + "17031838200 1 6 \n", + "\n", + " count_in_range_all_categories \n", + "17031842400 1 \n", + "17031840300 3 \n", + "17031841100 7 \n", + "17031841200 15 \n", + "17031838200 16 " + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview the results\n", + "accessC.model_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [], + "source": [ + "#writes output to csv file\n", + "accessC.model_results.to_csv('data/output_data/accessCount2010.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Aggregate Data to the Community Area Level**" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count_in_range_All Free Health Clinicscount_in_range_School-Based Health Centerscount_in_range_Federally Qualified Health Centerscount_in_range_Other Health Providerscount_in_range_Hospitalscount_in_range_all_categories
spatial_index
ALBANY PARK0.0000001.8181822.2727270.0000000.9090915.000000
ARCHER HEIGHTS0.0000000.0000002.6000000.0000000.0000002.600000
ARMOUR SQUARE0.2000002.6000001.6000002.6000000.8000007.800000
ASHBURN0.0000000.0000000.0000000.0000000.1250000.125000
AUBURN GRESHAM0.0000000.8666671.0666670.0000000.0000001.933333
AUSTIN0.0000000.7083332.4166670.0000000.7083333.833333
AVALON PARK0.0000000.0000000.0000000.0000002.0000002.000000
AVONDALE0.0000000.1000000.5000001.4000000.7000002.700000
BELMONT CRAGIN0.0000000.0588241.2941180.0000000.6470592.000000
BEVERLY0.0000000.0000000.1428570.0000000.5714290.714286
BRIDGEPORT0.0000000.9000001.2000001.0000000.2000003.300000
BRIGHTON PARK0.0000000.9000001.7000000.0000000.0000002.600000
BURNSIDE0.0000000.0000000.0000000.0000000.0000000.000000
CALUMET HEIGHTS0.0000000.0000000.6000000.0000001.0000001.600000
CHATHAM0.0000000.2000000.0000000.0000000.1000000.300000
CHICAGO LAWN0.8181820.9090912.5454550.0000000.9090915.181818
CLEARING0.0000000.0000000.4285710.0000000.0000000.428571
DOUGLAS0.0000003.1000002.9000001.9000000.7000008.600000
DUNNING0.0000000.0000000.1818180.0000000.6363640.818182
EAST GARFIELD PARK1.0833331.6666674.5000000.1666673.08333310.500000
EAST SIDE0.0000000.0000001.3333330.0000000.0000001.333333
EDGEWATER0.1176472.0588243.0588240.7647062.2352948.235294
EDISON PARK0.0000000.0000000.0000000.0000000.3333330.333333
ENGLEWOOD1.1818180.0909092.1818180.0000000.8181824.272727
FOREST GLEN0.0000000.0000000.0000000.0000000.0000000.000000
FULLER PARK0.5000002.0000001.5000001.0000000.5000005.500000
GAGE PARK1.1250000.1250002.6250000.0000000.0000003.875000
GARFIELD RIDGE0.0000000.0000001.4545450.0000000.0000001.454545
GRAND BOULEVARD1.2666672.4666673.8000001.3333331.0000009.866667
GREATER GRAND CROSSING0.1666670.6666670.5833330.0000000.6666672.083333
.....................
NEAR NORTH SIDE0.0000000.0000001.7368420.0000002.5789474.315789
NEAR SOUTH SIDE0.3333332.0000001.0000001.3333330.6666675.333333
NEAR WEST SIDE1.5000002.5000002.5000000.8000003.65000010.950000
NEW CITY1.7058820.1176473.5882350.0588240.0588245.529412
NORTH CENTER0.0000000.8571431.7142860.0000000.9285713.500000
NORTH LAWNDALE0.2666671.1333335.9333330.6666672.80000010.800000
NORTH PARK0.7500000.7500002.0000000.0000000.5000004.000000
NORWOOD PARK0.0000000.0000000.0000000.0000000.8571430.857143
OAKLAND1.0000001.5000003.5000000.5000000.0000006.500000
OHARE0.0000000.0000000.0000000.0000000.0000000.000000
PORTAGE PARK0.0000000.0000000.8571430.0000001.0000001.857143
PULLMAN0.0000000.0000000.6666670.0000000.3333331.000000
RIVERDALE0.0000000.0000001.0000000.0000000.0000001.000000
ROGERS PARK0.0000001.3636364.3636360.8181820.8181827.363636
ROSELAND0.0000000.0000001.5000000.0000000.5714292.071429
SOUTH CHICAGO0.0000000.0000001.8000000.0000001.2000003.000000
SOUTH DEERING0.0000000.0000000.5000000.0000000.2500000.750000
SOUTH LAWNDALE0.0000001.0000006.3333330.8333331.2777789.444444
SOUTH SHORE0.0000000.5000001.0833330.2500002.0000003.833333
UPTOWN0.0000002.4166675.3333330.9166673.83333312.500000
WASHINGTON HEIGHTS0.0000000.0000001.1250000.0000000.0000001.125000
WASHINGTON PARK1.3333330.8333333.1666671.0000002.3333338.666667
WEST ELSDON0.0000000.0000002.5000000.0000000.0000002.500000
WEST ENGLEWOOD1.3684210.0526322.1578950.0000000.1578953.736842
WEST GARFIELD PARK0.2000000.8000002.6000000.0000001.4000005.000000
WEST LAWN0.3333330.1666671.1666670.0000000.0000001.666667
WEST PULLMAN0.0000000.0000000.8750000.0000000.2500001.125000
WEST RIDGE1.6428570.5714292.7857140.3571430.5000005.857143
WEST TOWN0.9000001.3666675.6666670.2000002.43333310.566667
WOODLAWN0.2727270.4545450.8181821.0000001.1818183.727273
\n", + "

77 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " count_in_range_All Free Health Clinics \\\n", + "spatial_index \n", + "ALBANY PARK 0.000000 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 0.200000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 0.000000 \n", + "AUSTIN 0.000000 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 0.000000 \n", + "BELMONT CRAGIN 0.000000 \n", + "BEVERLY 0.000000 \n", + "BRIDGEPORT 0.000000 \n", + "BRIGHTON PARK 0.000000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHATHAM 0.000000 \n", + "CHICAGO LAWN 0.818182 \n", + "CLEARING 0.000000 \n", + "DOUGLAS 0.000000 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 1.083333 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 0.117647 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 1.181818 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 0.500000 \n", + "GAGE PARK 1.125000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 1.266667 \n", + "GREATER GRAND CROSSING 0.166667 \n", + "... ... \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 0.333333 \n", + "NEAR WEST SIDE 1.500000 \n", + "NEW CITY 1.705882 \n", + "NORTH CENTER 0.000000 \n", + "NORTH LAWNDALE 0.266667 \n", + "NORTH PARK 0.750000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 1.000000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 0.000000 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH DEERING 0.000000 \n", + "SOUTH LAWNDALE 0.000000 \n", + "SOUTH SHORE 0.000000 \n", + "UPTOWN 0.000000 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 1.333333 \n", + "WEST ELSDON 0.000000 \n", + "WEST ENGLEWOOD 1.368421 \n", + "WEST GARFIELD PARK 0.200000 \n", + "WEST LAWN 0.333333 \n", + "WEST PULLMAN 0.000000 \n", + "WEST RIDGE 1.642857 \n", + "WEST TOWN 0.900000 \n", + "WOODLAWN 0.272727 \n", + "\n", + " count_in_range_School-Based Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 1.818182 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 2.600000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 0.866667 \n", + "AUSTIN 0.708333 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 0.100000 \n", + "BELMONT CRAGIN 0.058824 \n", + "BEVERLY 0.000000 \n", + "BRIDGEPORT 0.900000 \n", + "BRIGHTON PARK 0.900000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHATHAM 0.200000 \n", + "CHICAGO LAWN 0.909091 \n", + "CLEARING 0.000000 \n", + "DOUGLAS 3.100000 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 1.666667 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 2.058824 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 0.090909 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 2.000000 \n", + "GAGE PARK 0.125000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 2.466667 \n", + "GREATER GRAND CROSSING 0.666667 \n", + "... ... \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 2.000000 \n", + "NEAR WEST SIDE 2.500000 \n", + "NEW CITY 0.117647 \n", + "NORTH CENTER 0.857143 \n", + "NORTH LAWNDALE 1.133333 \n", + "NORTH PARK 0.750000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 1.500000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 1.363636 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH DEERING 0.000000 \n", + "SOUTH LAWNDALE 1.000000 \n", + "SOUTH SHORE 0.500000 \n", + "UPTOWN 2.416667 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 0.833333 \n", + "WEST ELSDON 0.000000 \n", + "WEST ENGLEWOOD 0.052632 \n", + "WEST GARFIELD PARK 0.800000 \n", + "WEST LAWN 0.166667 \n", + "WEST PULLMAN 0.000000 \n", + "WEST RIDGE 0.571429 \n", + "WEST TOWN 1.366667 \n", + "WOODLAWN 0.454545 \n", + "\n", + " count_in_range_Federally Qualified Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 2.272727 \n", + "ARCHER HEIGHTS 2.600000 \n", + "ARMOUR SQUARE 1.600000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 1.066667 \n", + "AUSTIN 2.416667 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 0.500000 \n", + "BELMONT CRAGIN 1.294118 \n", + "BEVERLY 0.142857 \n", + "BRIDGEPORT 1.200000 \n", + "BRIGHTON PARK 1.700000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 0.600000 \n", + "CHATHAM 0.000000 \n", + "CHICAGO LAWN 2.545455 \n", + "CLEARING 0.428571 \n", + "DOUGLAS 2.900000 \n", + "DUNNING 0.181818 \n", + "EAST GARFIELD PARK 4.500000 \n", + "EAST SIDE 1.333333 \n", + "EDGEWATER 3.058824 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 2.181818 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 1.500000 \n", + "GAGE PARK 2.625000 \n", + "GARFIELD RIDGE 1.454545 \n", + "GRAND BOULEVARD 3.800000 \n", + "GREATER GRAND CROSSING 0.583333 \n", + "... ... \n", + "NEAR NORTH SIDE 1.736842 \n", + "NEAR SOUTH SIDE 1.000000 \n", + "NEAR WEST SIDE 2.500000 \n", + "NEW CITY 3.588235 \n", + "NORTH CENTER 1.714286 \n", + "NORTH LAWNDALE 5.933333 \n", + "NORTH PARK 2.000000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 3.500000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 0.857143 \n", + "PULLMAN 0.666667 \n", + "RIVERDALE 1.000000 \n", + "ROGERS PARK 4.363636 \n", + "ROSELAND 1.500000 \n", + "SOUTH CHICAGO 1.800000 \n", + "SOUTH DEERING 0.500000 \n", + "SOUTH LAWNDALE 6.333333 \n", + "SOUTH SHORE 1.083333 \n", + "UPTOWN 5.333333 \n", + "WASHINGTON HEIGHTS 1.125000 \n", + "WASHINGTON PARK 3.166667 \n", + "WEST ELSDON 2.500000 \n", + "WEST ENGLEWOOD 2.157895 \n", + "WEST GARFIELD PARK 2.600000 \n", + "WEST LAWN 1.166667 \n", + "WEST PULLMAN 0.875000 \n", + "WEST RIDGE 2.785714 \n", + "WEST TOWN 5.666667 \n", + "WOODLAWN 0.818182 \n", + "\n", + " count_in_range_Other Health Providers \\\n", + "spatial_index \n", + "ALBANY PARK 0.000000 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 2.600000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 0.000000 \n", + "AUSTIN 0.000000 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 1.400000 \n", + "BELMONT CRAGIN 0.000000 \n", + "BEVERLY 0.000000 \n", + "BRIDGEPORT 1.000000 \n", + "BRIGHTON PARK 0.000000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHATHAM 0.000000 \n", + "CHICAGO LAWN 0.000000 \n", + "CLEARING 0.000000 \n", + "DOUGLAS 1.900000 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 0.166667 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 0.764706 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 0.000000 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 1.000000 \n", + "GAGE PARK 0.000000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 1.333333 \n", + "GREATER GRAND CROSSING 0.000000 \n", + "... ... \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 1.333333 \n", + "NEAR WEST SIDE 0.800000 \n", + "NEW CITY 0.058824 \n", + "NORTH CENTER 0.000000 \n", + "NORTH LAWNDALE 0.666667 \n", + "NORTH PARK 0.000000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 0.500000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 0.818182 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH DEERING 0.000000 \n", + "SOUTH LAWNDALE 0.833333 \n", + "SOUTH SHORE 0.250000 \n", + "UPTOWN 0.916667 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 1.000000 \n", + "WEST ELSDON 0.000000 \n", + "WEST ENGLEWOOD 0.000000 \n", + "WEST GARFIELD PARK 0.000000 \n", + "WEST LAWN 0.000000 \n", + "WEST PULLMAN 0.000000 \n", + "WEST RIDGE 0.357143 \n", + "WEST TOWN 0.200000 \n", + "WOODLAWN 1.000000 \n", + "\n", + " count_in_range_Hospitals \\\n", + "spatial_index \n", + "ALBANY PARK 0.909091 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 0.800000 \n", + "ASHBURN 0.125000 \n", + "AUBURN GRESHAM 0.000000 \n", + "AUSTIN 0.708333 \n", + "AVALON PARK 2.000000 \n", + "AVONDALE 0.700000 \n", + "BELMONT CRAGIN 0.647059 \n", + "BEVERLY 0.571429 \n", + "BRIDGEPORT 0.200000 \n", + "BRIGHTON PARK 0.000000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 1.000000 \n", + "CHATHAM 0.100000 \n", + "CHICAGO LAWN 0.909091 \n", + "CLEARING 0.000000 \n", + "DOUGLAS 0.700000 \n", + "DUNNING 0.636364 \n", + "EAST GARFIELD PARK 3.083333 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 2.235294 \n", + "EDISON PARK 0.333333 \n", + "ENGLEWOOD 0.818182 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 0.500000 \n", + "GAGE PARK 0.000000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 1.000000 \n", + "GREATER GRAND CROSSING 0.666667 \n", + "... ... \n", + "NEAR NORTH SIDE 2.578947 \n", + "NEAR SOUTH SIDE 0.666667 \n", + "NEAR WEST SIDE 3.650000 \n", + "NEW CITY 0.058824 \n", + "NORTH CENTER 0.928571 \n", + "NORTH LAWNDALE 2.800000 \n", + "NORTH PARK 0.500000 \n", + "NORWOOD PARK 0.857143 \n", + "OAKLAND 0.000000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 1.000000 \n", + "PULLMAN 0.333333 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 0.818182 \n", + "ROSELAND 0.571429 \n", + "SOUTH CHICAGO 1.200000 \n", + "SOUTH DEERING 0.250000 \n", + "SOUTH LAWNDALE 1.277778 \n", + "SOUTH SHORE 2.000000 \n", + "UPTOWN 3.833333 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 2.333333 \n", + "WEST ELSDON 0.000000 \n", + "WEST ENGLEWOOD 0.157895 \n", + "WEST GARFIELD PARK 1.400000 \n", + "WEST LAWN 0.000000 \n", + "WEST PULLMAN 0.250000 \n", + "WEST RIDGE 0.500000 \n", + "WEST TOWN 2.433333 \n", + "WOODLAWN 1.181818 \n", + "\n", + " count_in_range_all_categories \n", + "spatial_index \n", + "ALBANY PARK 5.000000 \n", + "ARCHER HEIGHTS 2.600000 \n", + "ARMOUR SQUARE 7.800000 \n", + "ASHBURN 0.125000 \n", + "AUBURN GRESHAM 1.933333 \n", + "AUSTIN 3.833333 \n", + "AVALON PARK 2.000000 \n", + "AVONDALE 2.700000 \n", + "BELMONT CRAGIN 2.000000 \n", + "BEVERLY 0.714286 \n", + "BRIDGEPORT 3.300000 \n", + "BRIGHTON PARK 2.600000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 1.600000 \n", + "CHATHAM 0.300000 \n", + "CHICAGO LAWN 5.181818 \n", + "CLEARING 0.428571 \n", + "DOUGLAS 8.600000 \n", + "DUNNING 0.818182 \n", + "EAST GARFIELD PARK 10.500000 \n", + "EAST SIDE 1.333333 \n", + "EDGEWATER 8.235294 \n", + "EDISON PARK 0.333333 \n", + "ENGLEWOOD 4.272727 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 5.500000 \n", + "GAGE PARK 3.875000 \n", + "GARFIELD RIDGE 1.454545 \n", + "GRAND BOULEVARD 9.866667 \n", + "GREATER GRAND CROSSING 2.083333 \n", + "... ... \n", + "NEAR NORTH SIDE 4.315789 \n", + "NEAR SOUTH SIDE 5.333333 \n", + "NEAR WEST SIDE 10.950000 \n", + "NEW CITY 5.529412 \n", + "NORTH CENTER 3.500000 \n", + "NORTH LAWNDALE 10.800000 \n", + "NORTH PARK 4.000000 \n", + "NORWOOD PARK 0.857143 \n", + "OAKLAND 6.500000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 1.857143 \n", + "PULLMAN 1.000000 \n", + "RIVERDALE 1.000000 \n", + "ROGERS PARK 7.363636 \n", + "ROSELAND 2.071429 \n", + "SOUTH CHICAGO 3.000000 \n", + "SOUTH DEERING 0.750000 \n", + "SOUTH LAWNDALE 9.444444 \n", + "SOUTH SHORE 3.833333 \n", + "UPTOWN 12.500000 \n", + "WASHINGTON HEIGHTS 1.125000 \n", + "WASHINGTON PARK 8.666667 \n", + "WEST ELSDON 2.500000 \n", + "WEST ENGLEWOOD 3.736842 \n", + "WEST GARFIELD PARK 5.000000 \n", + "WEST LAWN 1.666667 \n", + "WEST PULLMAN 1.125000 \n", + "WEST RIDGE 5.857143 \n", + "WEST TOWN 10.566667 \n", + "WOODLAWN 3.727273 \n", + "\n", + "[77 rows x 6 columns]" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Aggregate Access Count Data to the Chicago Community Area Level\n", + "accessC.aggregate()" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count_in_range_All Free Health Clinicscount_in_range_School-Based Health Centerscount_in_range_Federally Qualified Health Centerscount_in_range_Other Health Providerscount_in_range_Hospitalscount_in_range_all_categories
spatial_index
ALBANY PARK0.01.8181822.2727270.00.9090915.000000
ARCHER HEIGHTS0.00.0000002.6000000.00.0000002.600000
ARMOUR SQUARE0.22.6000001.6000002.60.8000007.800000
ASHBURN0.00.0000000.0000000.00.1250000.125000
AUBURN GRESHAM0.00.8666671.0666670.00.0000001.933333
\n", + "
" + ], + "text/plain": [ + " count_in_range_All Free Health Clinics \\\n", + "spatial_index \n", + "ALBANY PARK 0.0 \n", + "ARCHER HEIGHTS 0.0 \n", + "ARMOUR SQUARE 0.2 \n", + "ASHBURN 0.0 \n", + "AUBURN GRESHAM 0.0 \n", + "\n", + " count_in_range_School-Based Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 1.818182 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 2.600000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 0.866667 \n", + "\n", + " count_in_range_Federally Qualified Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 2.272727 \n", + "ARCHER HEIGHTS 2.600000 \n", + "ARMOUR SQUARE 1.600000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 1.066667 \n", + "\n", + " count_in_range_Other Health Providers \\\n", + "spatial_index \n", + "ALBANY PARK 0.0 \n", + "ARCHER HEIGHTS 0.0 \n", + "ARMOUR SQUARE 2.6 \n", + "ASHBURN 0.0 \n", + "AUBURN GRESHAM 0.0 \n", + "\n", + " count_in_range_Hospitals count_in_range_all_categories \n", + "spatial_index \n", + "ALBANY PARK 0.909091 5.000000 \n", + "ARCHER HEIGHTS 0.000000 2.600000 \n", + "ARMOUR SQUARE 0.800000 7.800000 \n", + "ASHBURN 0.125000 0.125000 \n", + "AUBURN GRESHAM 0.000000 1.933333 " + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview results\n", + "accessC.aggregated_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [], + "source": [ + "#Write results to a csv file\n", + "accessC.write_aggregated_results(filename='data/output_data/accessCount_aggregated.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Plot Aggregated Data**" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Plot was saved to: data/output_data/accessCount_CDFplot\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "accessC.plot_cdf(filename = 'data/output_data/accessCount_CDFplot', xlabel = 'Access Count', ylabel = 'Population', title = 'Access Count by Population')" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Figure was saved to: data/output_data/accessCount_choropleth\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "accessC.plot_choropleth(column='count_in_range_all_categories', filename = 'data/output_data/accessCount_choropleth', title= 'Access Count in Chicago')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Subset Data for Focus Categories**" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [], + "source": [ + "#Limit catgeory to for FQHC\n", + "accessC.set_focus_categories(['Federally Qualified Health Centers'])" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count_in_range_Federally Qualified Health Centerscount_in_range_all_categories
1703184240000
1703184030022
1703184110011
1703184120077
1703183820044
1703165030111
1703153050300
1703176080300
1703154010222
1703154010100
1703144020100
1703183900000
1703103060133
1703103060433
1703102080144
1703184330055
1703108020222
1703107010233
1703103150155
1703103150255
1703183490022
1703183480022
1703116050211
1703114070222
1703184200033
1703115040211
1703183440000
1703104020166
1703104020255
1703102070211
.........
1703129120077
1703162030022
1703162040033
1703163010033
1703163030033
1703163040033
1703163050022
1703111030000
1703111040000
1703112010000
1703112020000
1703127140033
1703128010011
1703128080022
1703128190000
1703155010000
1703161150033
1703161180033
1703161190044
1703161200055
1703162010033
1703162020022
1703107020055
1703107040044
1703107050044
1703107100044
1703107120044
1703113030044
1703129220088
1703163090044
\n", + "

801 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " count_in_range_Federally Qualified Health Centers \\\n", + "17031842400 0 \n", + "17031840300 2 \n", + "17031841100 1 \n", + "17031841200 7 \n", + "17031838200 4 \n", + "17031650301 1 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 2 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 0 \n", + "17031030601 3 \n", + "17031030604 3 \n", + "17031020801 4 \n", + "17031843300 5 \n", + "17031080202 2 \n", + "17031070102 3 \n", + "17031031501 5 \n", + "17031031502 5 \n", + "17031834900 2 \n", + "17031834800 2 \n", + "17031160502 1 \n", + "17031140702 2 \n", + "17031842000 3 \n", + "17031150402 1 \n", + "17031834400 0 \n", + "17031040201 6 \n", + "17031040202 5 \n", + "17031020702 1 \n", + "... ... \n", + "17031291200 7 \n", + "17031620300 2 \n", + "17031620400 3 \n", + "17031630100 3 \n", + "17031630300 3 \n", + "17031630400 3 \n", + "17031630500 2 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 3 \n", + "17031280100 1 \n", + "17031280800 2 \n", + "17031281900 0 \n", + "17031550100 0 \n", + "17031611500 3 \n", + "17031611800 3 \n", + "17031611900 4 \n", + "17031612000 5 \n", + "17031620100 3 \n", + "17031620200 2 \n", + "17031070200 5 \n", + "17031070400 4 \n", + "17031070500 4 \n", + "17031071000 4 \n", + "17031071200 4 \n", + "17031130300 4 \n", + "17031292200 8 \n", + "17031630900 4 \n", + "\n", + " count_in_range_all_categories \n", + "17031842400 0 \n", + "17031840300 2 \n", + "17031841100 1 \n", + "17031841200 7 \n", + "17031838200 4 \n", + "17031650301 1 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 2 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 0 \n", + "17031030601 3 \n", + "17031030604 3 \n", + "17031020801 4 \n", + "17031843300 5 \n", + "17031080202 2 \n", + "17031070102 3 \n", + "17031031501 5 \n", + "17031031502 5 \n", + "17031834900 2 \n", + "17031834800 2 \n", + "17031160502 1 \n", + "17031140702 2 \n", + "17031842000 3 \n", + "17031150402 1 \n", + "17031834400 0 \n", + "17031040201 6 \n", + "17031040202 5 \n", + "17031020702 1 \n", + "... ... \n", + "17031291200 7 \n", + "17031620300 2 \n", + "17031620400 3 \n", + "17031630100 3 \n", + "17031630300 3 \n", + "17031630400 3 \n", + "17031630500 2 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 3 \n", + "17031280100 1 \n", + "17031280800 2 \n", + "17031281900 0 \n", + "17031550100 0 \n", + "17031611500 3 \n", + "17031611800 3 \n", + "17031611900 4 \n", + "17031612000 5 \n", + "17031620100 3 \n", + "17031620200 2 \n", + "17031070200 5 \n", + "17031070400 4 \n", + "17031070500 4 \n", + "17031071000 4 \n", + "17031071200 4 \n", + "17031130300 4 \n", + "17031292200 8 \n", + "17031630900 4 \n", + "\n", + "[801 rows x 2 columns]" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Calculate Access Time for FQHC\n", + "accessC.calculate(upper_threshold = 1800)" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count_in_range_Federally Qualified Health Centerscount_in_range_all_categories
1703184240000
1703184030022
1703184110011
1703184120077
1703183820044
\n", + "
" + ], + "text/plain": [ + " count_in_range_Federally Qualified Health Centers \\\n", + "17031842400 0 \n", + "17031840300 2 \n", + "17031841100 1 \n", + "17031841200 7 \n", + "17031838200 4 \n", + "\n", + " count_in_range_all_categories \n", + "17031842400 0 \n", + "17031840300 2 \n", + "17031841100 1 \n", + "17031841200 7 \n", + "17031838200 4 " + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview subsetted results\n", + "accessC.model_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [], + "source": [ + "#Write subsetted results to csv\n", + "accessC.write_results(filename = 'data/output_data/accessCount_subsetFQHC.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Access Sum: Captures the sum of an attribute within a catchment area\n", + "\n", + "##### (e.g. number of doctors within 30 min walk of housing blocks)\n", + "\n", + "### Specifications for Access Sum\n", + "**name = AccessSum( )**\n", + "* network_type ('walk', 'bike', 'drive', 'otp') \n", + "* sources_filename (primary input data)\n", + "* destinations_filename (secondary input data)\n", + "* source_column_names (dictionary that map column names to expected values)\n", + "* dest_column_names (dictionary that map column names to expected values)\n", + "\n", + "**Column Inputs**\n", + "* Standard inputs as well as the capacity for each facility\n", + "\n", + "**name.calculate()**\n", + "* upper_threshold (max time in seconds)\n", + "\n", + "**Functions within the AccessSum class** (use as name.function()) \n", + "- calculate () \n", + "- aggregate() \n", + "- set.focus.categories()\n", + "- plot_cdf()\n", + "- plot_chlorepleth" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.p2p:Approx area of bounding box: 2,445.05 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 14.88 seconds\n" + ] + } + ], + "source": [ + "accessS = AccessSum(network_type='walk',\n", + " transit_matrix_filename=None,\n", + " sources_filename='data/input_data/sources/tracts2010.csv',\n", + " destinations_filename='data/input_data/destinations/health_chicago.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'ID', 'capacity': 'target', 'category': 'category', 'lat': 'lat', 'lon': 'lon'},\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sum_in_range_All Free Health Clinicssum_in_range_School-Based Health Centerssum_in_range_Federally Qualified Health Centerssum_in_range_Other Health Providerssum_in_range_Hospitalssum_in_range_all_categories
170318424000120000000120000
17031840300016300033700000500000
170318411001430002680001930003290001310001064000
17031841200065400096000005480002162000
170318382001960007210005430001920009600002612000
170316503010014300000143000
17031530503000000
17031760803000000
170315401020022800000228000
17031540101000000
17031440201000000
170318390001430000000143000
1703103060102000004370001900003750001202000
17031030604020000043700005010001138000
1703102080129500012400049900001170001035000
170318433001280005300007280001920009230002501000
17031080202003050000486000791000
17031070102004800000262000742000
1703103150101520007530001270006420001674000
1703103150202620007530001270006420001784000
17031834900131000028200000413000
1703183480013100002820000195000608000
1703116050203290001710000176000676000
1703114070203290002780000176000783000
1703184200005080005280003450001310001512000
17031150402001340000184000318000
1703183440001830000165000129000477000
1703104020117200032300080200004250001722000
1703104020229500032300067000002930001581000
17031020702295000011600000411000
.....................
1703129120001400009640001660005480001818000
170316203000024900000249000
170316204000035400000354000
17031630100257000032800000585000
170316303000037700000377000
17031630400198000033600000534000
17031630500317000023100000548000
17031110300000000
17031110400000000
17031120100000000
17031120200000000
170312714001280001190003860000248000881000
1703128010019600019300011400000503000
170312808004790003910002890001920005200001871000
170312819003390000000339000
17031550100000000
17031611500257000041600000673000
17031611800257000041600000673000
17031611900257000053800000795000
17031612000257000065800000915000
170316201000037700000377000
170316202000024900000249000
170310702000077200002620001034000
17031070400005810000262000843000
17031070500005810000147000728000
17031071000005840000147000731000
17031071200005840000262000846000
1703113030029500019900056300001170001174000
17031292200014000011300001660004460001882000
17031630900198000047900000677000
\n", + "

801 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " sum_in_range_All Free Health Clinics \\\n", + "17031842400 0 \n", + "17031840300 0 \n", + "17031841100 143000 \n", + "17031841200 0 \n", + "17031838200 196000 \n", + "17031650301 0 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 0 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 143000 \n", + "17031030601 0 \n", + "17031030604 0 \n", + "17031020801 295000 \n", + "17031843300 128000 \n", + "17031080202 0 \n", + "17031070102 0 \n", + "17031031501 0 \n", + "17031031502 0 \n", + "17031834900 131000 \n", + "17031834800 131000 \n", + "17031160502 0 \n", + "17031140702 0 \n", + "17031842000 0 \n", + "17031150402 0 \n", + "17031834400 0 \n", + "17031040201 172000 \n", + "17031040202 295000 \n", + "17031020702 295000 \n", + "... ... \n", + "17031291200 0 \n", + "17031620300 0 \n", + "17031620400 0 \n", + "17031630100 257000 \n", + "17031630300 0 \n", + "17031630400 198000 \n", + "17031630500 317000 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 128000 \n", + "17031280100 196000 \n", + "17031280800 479000 \n", + "17031281900 339000 \n", + "17031550100 0 \n", + "17031611500 257000 \n", + "17031611800 257000 \n", + "17031611900 257000 \n", + "17031612000 257000 \n", + "17031620100 0 \n", + "17031620200 0 \n", + "17031070200 0 \n", + "17031070400 0 \n", + "17031070500 0 \n", + "17031071000 0 \n", + "17031071200 0 \n", + "17031130300 295000 \n", + "17031292200 0 \n", + "17031630900 198000 \n", + "\n", + " sum_in_range_School-Based Health Centers \\\n", + "17031842400 120000 \n", + "17031840300 163000 \n", + "17031841100 268000 \n", + "17031841200 654000 \n", + "17031838200 721000 \n", + "17031650301 0 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 0 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 0 \n", + "17031030601 200000 \n", + "17031030604 200000 \n", + "17031020801 124000 \n", + "17031843300 530000 \n", + "17031080202 0 \n", + "17031070102 0 \n", + "17031031501 152000 \n", + "17031031502 262000 \n", + "17031834900 0 \n", + "17031834800 0 \n", + "17031160502 329000 \n", + "17031140702 329000 \n", + "17031842000 508000 \n", + "17031150402 0 \n", + "17031834400 183000 \n", + "17031040201 323000 \n", + "17031040202 323000 \n", + "17031020702 0 \n", + "... ... \n", + "17031291200 140000 \n", + "17031620300 0 \n", + "17031620400 0 \n", + "17031630100 0 \n", + "17031630300 0 \n", + "17031630400 0 \n", + "17031630500 0 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 119000 \n", + "17031280100 193000 \n", + "17031280800 391000 \n", + "17031281900 0 \n", + "17031550100 0 \n", + "17031611500 0 \n", + "17031611800 0 \n", + "17031611900 0 \n", + "17031612000 0 \n", + "17031620100 0 \n", + "17031620200 0 \n", + "17031070200 0 \n", + "17031070400 0 \n", + "17031070500 0 \n", + "17031071000 0 \n", + "17031071200 0 \n", + "17031130300 199000 \n", + "17031292200 140000 \n", + "17031630900 0 \n", + "\n", + " sum_in_range_Federally Qualified Health Centers \\\n", + "17031842400 0 \n", + "17031840300 337000 \n", + "17031841100 193000 \n", + "17031841200 960000 \n", + "17031838200 543000 \n", + "17031650301 143000 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 228000 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 0 \n", + "17031030601 437000 \n", + "17031030604 437000 \n", + "17031020801 499000 \n", + "17031843300 728000 \n", + "17031080202 305000 \n", + "17031070102 480000 \n", + "17031031501 753000 \n", + "17031031502 753000 \n", + "17031834900 282000 \n", + "17031834800 282000 \n", + "17031160502 171000 \n", + "17031140702 278000 \n", + "17031842000 528000 \n", + "17031150402 134000 \n", + "17031834400 0 \n", + "17031040201 802000 \n", + "17031040202 670000 \n", + "17031020702 116000 \n", + "... ... \n", + "17031291200 964000 \n", + "17031620300 249000 \n", + "17031620400 354000 \n", + "17031630100 328000 \n", + "17031630300 377000 \n", + "17031630400 336000 \n", + "17031630500 231000 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 386000 \n", + "17031280100 114000 \n", + "17031280800 289000 \n", + "17031281900 0 \n", + "17031550100 0 \n", + "17031611500 416000 \n", + "17031611800 416000 \n", + "17031611900 538000 \n", + "17031612000 658000 \n", + "17031620100 377000 \n", + "17031620200 249000 \n", + "17031070200 772000 \n", + "17031070400 581000 \n", + "17031070500 581000 \n", + "17031071000 584000 \n", + "17031071200 584000 \n", + "17031130300 563000 \n", + "17031292200 1130000 \n", + "17031630900 479000 \n", + "\n", + " sum_in_range_Other Health Providers sum_in_range_Hospitals \\\n", + "17031842400 0 0 \n", + "17031840300 0 0 \n", + "17031841100 329000 131000 \n", + "17031841200 0 548000 \n", + "17031838200 192000 960000 \n", + "17031650301 0 0 \n", + "17031530503 0 0 \n", + "17031760803 0 0 \n", + "17031540102 0 0 \n", + "17031540101 0 0 \n", + "17031440201 0 0 \n", + "17031839000 0 0 \n", + "17031030601 190000 375000 \n", + "17031030604 0 501000 \n", + "17031020801 0 117000 \n", + "17031843300 192000 923000 \n", + "17031080202 0 486000 \n", + "17031070102 0 262000 \n", + "17031031501 127000 642000 \n", + "17031031502 127000 642000 \n", + "17031834900 0 0 \n", + "17031834800 0 195000 \n", + "17031160502 0 176000 \n", + "17031140702 0 176000 \n", + "17031842000 345000 131000 \n", + "17031150402 0 184000 \n", + "17031834400 165000 129000 \n", + "17031040201 0 425000 \n", + "17031040202 0 293000 \n", + "17031020702 0 0 \n", + "... ... ... \n", + "17031291200 166000 548000 \n", + "17031620300 0 0 \n", + "17031620400 0 0 \n", + "17031630100 0 0 \n", + "17031630300 0 0 \n", + "17031630400 0 0 \n", + "17031630500 0 0 \n", + "17031110300 0 0 \n", + "17031110400 0 0 \n", + "17031120100 0 0 \n", + "17031120200 0 0 \n", + "17031271400 0 248000 \n", + "17031280100 0 0 \n", + "17031280800 192000 520000 \n", + "17031281900 0 0 \n", + "17031550100 0 0 \n", + "17031611500 0 0 \n", + "17031611800 0 0 \n", + "17031611900 0 0 \n", + "17031612000 0 0 \n", + "17031620100 0 0 \n", + "17031620200 0 0 \n", + "17031070200 0 262000 \n", + "17031070400 0 262000 \n", + "17031070500 0 147000 \n", + "17031071000 0 147000 \n", + "17031071200 0 262000 \n", + "17031130300 0 117000 \n", + "17031292200 166000 446000 \n", + "17031630900 0 0 \n", + "\n", + " sum_in_range_all_categories \n", + "17031842400 120000 \n", + "17031840300 500000 \n", + "17031841100 1064000 \n", + "17031841200 2162000 \n", + "17031838200 2612000 \n", + "17031650301 143000 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 228000 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 143000 \n", + "17031030601 1202000 \n", + "17031030604 1138000 \n", + "17031020801 1035000 \n", + "17031843300 2501000 \n", + "17031080202 791000 \n", + "17031070102 742000 \n", + "17031031501 1674000 \n", + "17031031502 1784000 \n", + "17031834900 413000 \n", + "17031834800 608000 \n", + "17031160502 676000 \n", + "17031140702 783000 \n", + "17031842000 1512000 \n", + "17031150402 318000 \n", + "17031834400 477000 \n", + "17031040201 1722000 \n", + "17031040202 1581000 \n", + "17031020702 411000 \n", + "... ... \n", + "17031291200 1818000 \n", + "17031620300 249000 \n", + "17031620400 354000 \n", + "17031630100 585000 \n", + "17031630300 377000 \n", + "17031630400 534000 \n", + "17031630500 548000 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 881000 \n", + "17031280100 503000 \n", + "17031280800 1871000 \n", + "17031281900 339000 \n", + "17031550100 0 \n", + "17031611500 673000 \n", + "17031611800 673000 \n", + "17031611900 795000 \n", + "17031612000 915000 \n", + "17031620100 377000 \n", + "17031620200 249000 \n", + "17031070200 1034000 \n", + "17031070400 843000 \n", + "17031070500 728000 \n", + "17031071000 731000 \n", + "17031071200 846000 \n", + "17031130300 1174000 \n", + "17031292200 1882000 \n", + "17031630900 677000 \n", + "\n", + "[801 rows x 6 columns]" + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Calculate results\n", + "accessS.calculate(upper_threshold=1800)" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sum_in_range_All Free Health Clinicssum_in_range_School-Based Health Centerssum_in_range_Federally Qualified Health Centerssum_in_range_Other Health Providerssum_in_range_Hospitalssum_in_range_all_categories
170318424000120000000120000
17031840300016300033700000500000
170318411001430002680001930003290001310001064000
17031841200065400096000005480002162000
170318382001960007210005430001920009600002612000
\n", + "
" + ], + "text/plain": [ + " sum_in_range_All Free Health Clinics \\\n", + "17031842400 0 \n", + "17031840300 0 \n", + "17031841100 143000 \n", + "17031841200 0 \n", + "17031838200 196000 \n", + "\n", + " sum_in_range_School-Based Health Centers \\\n", + "17031842400 120000 \n", + "17031840300 163000 \n", + "17031841100 268000 \n", + "17031841200 654000 \n", + "17031838200 721000 \n", + "\n", + " sum_in_range_Federally Qualified Health Centers \\\n", + "17031842400 0 \n", + "17031840300 337000 \n", + "17031841100 193000 \n", + "17031841200 960000 \n", + "17031838200 543000 \n", + "\n", + " sum_in_range_Other Health Providers sum_in_range_Hospitals \\\n", + "17031842400 0 0 \n", + "17031840300 0 0 \n", + "17031841100 329000 131000 \n", + "17031841200 0 548000 \n", + "17031838200 192000 960000 \n", + "\n", + " sum_in_range_all_categories \n", + "17031842400 120000 \n", + "17031840300 500000 \n", + "17031841100 1064000 \n", + "17031841200 2162000 \n", + "17031838200 2612000 " + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview results\n", + "accessS.model_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [], + "source": [ + "#Write model to csv\n", + "accessS.model_results.to_csv('data/output_data/accessSum2010.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Aggregate Data to the Community Area Level**" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sum_in_range_All Free Health Clinicssum_in_range_School-Based Health Centerssum_in_range_Federally Qualified Health Centerssum_in_range_Other Health Providerssum_in_range_Hospitalssum_in_range_all_categories
spatial_index
ALBANY PARK0.000000299090.909091326181.8181820.000000133181.8181827.584545e+05
ARCHER HEIGHTS0.0000000.000000333000.0000000.0000000.0000003.330000e+05
ARMOUR SQUARE28600.000000335400.000000313600.000000443800.000000104800.0000001.226200e+06
ASHBURN0.0000000.0000000.0000000.00000014875.0000001.487500e+04
AUBURN GRESHAM0.000000104000.000000148200.0000000.0000000.0000002.522000e+05
AUSTIN0.000000128666.666667310583.3333330.00000096375.0000005.356250e+05
AVALON PARK0.0000000.0000000.0000000.000000333000.0000003.330000e+05
AVONDALE0.00000010900.00000099000.000000198800.000000130900.0000004.396000e+05
BELMONT CRAGIN0.0000006411.764706216882.3529410.000000102058.8235293.253529e+05
BEVERLY0.0000000.00000024857.1428570.00000068000.0000009.285714e+04
BRIDGEPORT0.000000135000.000000205700.000000168800.00000026200.0000005.357000e+05
BRIGHTON PARK0.000000146700.000000266100.0000000.0000000.0000004.128000e+05
BURNSIDE0.0000000.0000000.0000000.0000000.0000000.000000e+00
CALUMET HEIGHTS0.0000000.00000079800.0000000.000000117200.0000001.970000e+05
CHATHAM0.00000030300.0000000.0000000.00000019500.0000004.980000e+04
CHICAGO LAWN162000.000000163636.363636265818.1818180.000000180000.0000007.714545e+05
CLEARING0.0000000.00000051857.1428570.0000000.0000005.185714e+04
DOUGLAS0.000000379900.000000504400.000000325900.00000091700.0000001.301900e+06
DUNNING0.0000000.00000024363.6363640.000000116636.3636361.410000e+05
EAST GARFIELD PARK140916.666667258416.666667613166.66666732000.000000419750.0000001.464250e+06
EAST SIDE0.0000000.000000239666.6666670.0000000.0000002.396667e+05
EDGEWATER20235.294118362588.235294443941.176471145294.117647369529.4117651.341588e+06
EDISON PARK0.0000000.0000000.0000000.00000050666.6666675.066667e+04
ENGLEWOOD157000.00000010909.090909300454.5454550.000000159545.4545456.279091e+05
FOREST GLEN0.0000000.0000000.0000000.0000000.0000000.000000e+00
FULLER PARK80000.000000236000.000000182000.000000149000.00000067000.0000007.140000e+05
GAGE PARK185625.00000022500.000000307625.0000000.0000000.0000005.157500e+05
GARFIELD RIDGE0.0000000.000000179000.0000000.0000000.0000001.790000e+05
GRAND BOULEVARD168666.666667297933.333333607666.666667183866.666667133333.3333331.391467e+06
GREATER GRAND CROSSING21833.333333116750.00000073666.6666670.000000130000.0000003.422500e+05
.....................
NEAR NORTH SIDE0.0000000.000000246210.5263160.000000415157.8947376.613684e+05
NEAR SOUTH SIDE47666.666667268666.666667195000.000000228333.33333387333.3333338.270000e+05
NEAR WEST SIDE250800.000000467450.000000337850.000000153600.000000561450.0000001.771150e+06
NEW CITY222882.35294111882.352941483000.0000006588.2352947882.3529417.322353e+05
NORTH CENTER0.00000096285.714286223642.8571430.000000156357.1428574.762857e+05
NORTH LAWNDALE34133.333333166000.000000822866.666667112400.000000390200.0000001.525600e+06
NORTH PARK116750.000000132000.000000279250.0000000.00000058500.0000005.865000e+05
NORWOOD PARK0.0000000.0000000.0000000.000000139142.8571431.391429e+05
OAKLAND109000.000000177500.000000570500.00000093000.0000000.0000009.500000e+05
OHARE0.0000000.0000000.0000000.0000000.0000000.000000e+00
PORTAGE PARK0.0000000.000000118000.0000000.000000184500.0000003.025000e+05
PULLMAN0.0000000.00000093666.6666670.00000060333.3333331.540000e+05
RIVERDALE0.0000000.000000114000.0000000.0000000.0000001.140000e+05
ROGERS PARK0.000000245727.272727597181.818182155454.545455126090.9090911.124455e+06
ROSELAND0.0000000.000000217357.1428570.000000103428.5714293.207857e+05
SOUTH CHICAGO0.0000000.000000274400.0000000.000000155700.0000004.301000e+05
SOUTH DEERING0.0000000.00000078250.0000000.00000028000.0000001.062500e+05
SOUTH LAWNDALE0.000000140222.222222871222.222222138333.333333184555.5555561.334333e+06
SOUTH SHORE0.00000091500.000000118000.00000041250.000000322250.0000005.730000e+05
UPTOWN0.000000337333.333333798083.333333116416.666667616583.3333331.868417e+06
WASHINGTON HEIGHTS0.0000000.000000187500.0000000.0000000.0000001.875000e+05
WASHINGTON PARK203666.666667111166.666667476833.333333120833.333333338166.6666671.250667e+06
WEST ELSDON0.0000000.000000307250.0000000.0000000.0000003.072500e+05
WEST ENGLEWOOD189263.1578959473.684211263578.9473680.00000031263.1578954.935789e+05
WEST GARFIELD PARK25600.000000102300.000000324800.0000000.000000173600.0000006.263000e+05
WEST LAWN66000.00000030000.000000148000.0000000.0000000.0000002.440000e+05
WEST PULLMAN0.0000000.000000112625.0000000.00000045250.0000001.578750e+05
WEST RIDGE237071.428571101071.428571364071.42857167857.14285766214.2857148.362857e+05
WEST TOWN150433.333333242566.666667865200.00000030900.000000317600.0000001.606700e+06
WOODLAWN43636.36363683181.818182115000.000000165000.000000163909.0909095.707273e+05
\n", + "

77 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " sum_in_range_All Free Health Clinics \\\n", + "spatial_index \n", + "ALBANY PARK 0.000000 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 28600.000000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 0.000000 \n", + "AUSTIN 0.000000 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 0.000000 \n", + "BELMONT CRAGIN 0.000000 \n", + "BEVERLY 0.000000 \n", + "BRIDGEPORT 0.000000 \n", + "BRIGHTON PARK 0.000000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHATHAM 0.000000 \n", + "CHICAGO LAWN 162000.000000 \n", + "CLEARING 0.000000 \n", + "DOUGLAS 0.000000 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 140916.666667 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 20235.294118 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 157000.000000 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 80000.000000 \n", + "GAGE PARK 185625.000000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 168666.666667 \n", + "GREATER GRAND CROSSING 21833.333333 \n", + "... ... \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 47666.666667 \n", + "NEAR WEST SIDE 250800.000000 \n", + "NEW CITY 222882.352941 \n", + "NORTH CENTER 0.000000 \n", + "NORTH LAWNDALE 34133.333333 \n", + "NORTH PARK 116750.000000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 109000.000000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 0.000000 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH DEERING 0.000000 \n", + "SOUTH LAWNDALE 0.000000 \n", + "SOUTH SHORE 0.000000 \n", + "UPTOWN 0.000000 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 203666.666667 \n", + "WEST ELSDON 0.000000 \n", + "WEST ENGLEWOOD 189263.157895 \n", + "WEST GARFIELD PARK 25600.000000 \n", + "WEST LAWN 66000.000000 \n", + "WEST PULLMAN 0.000000 \n", + "WEST RIDGE 237071.428571 \n", + "WEST TOWN 150433.333333 \n", + "WOODLAWN 43636.363636 \n", + "\n", + " sum_in_range_School-Based Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 299090.909091 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 335400.000000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 104000.000000 \n", + "AUSTIN 128666.666667 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 10900.000000 \n", + "BELMONT CRAGIN 6411.764706 \n", + "BEVERLY 0.000000 \n", + "BRIDGEPORT 135000.000000 \n", + "BRIGHTON PARK 146700.000000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHATHAM 30300.000000 \n", + "CHICAGO LAWN 163636.363636 \n", + "CLEARING 0.000000 \n", + "DOUGLAS 379900.000000 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 258416.666667 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 362588.235294 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 10909.090909 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 236000.000000 \n", + "GAGE PARK 22500.000000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 297933.333333 \n", + "GREATER GRAND CROSSING 116750.000000 \n", + "... ... \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 268666.666667 \n", + "NEAR WEST SIDE 467450.000000 \n", + "NEW CITY 11882.352941 \n", + "NORTH CENTER 96285.714286 \n", + "NORTH LAWNDALE 166000.000000 \n", + "NORTH PARK 132000.000000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 177500.000000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 245727.272727 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH DEERING 0.000000 \n", + "SOUTH LAWNDALE 140222.222222 \n", + "SOUTH SHORE 91500.000000 \n", + "UPTOWN 337333.333333 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 111166.666667 \n", + "WEST ELSDON 0.000000 \n", + "WEST ENGLEWOOD 9473.684211 \n", + "WEST GARFIELD PARK 102300.000000 \n", + "WEST LAWN 30000.000000 \n", + "WEST PULLMAN 0.000000 \n", + "WEST RIDGE 101071.428571 \n", + "WEST TOWN 242566.666667 \n", + "WOODLAWN 83181.818182 \n", + "\n", + " sum_in_range_Federally Qualified Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 326181.818182 \n", + "ARCHER HEIGHTS 333000.000000 \n", + "ARMOUR SQUARE 313600.000000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 148200.000000 \n", + "AUSTIN 310583.333333 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 99000.000000 \n", + "BELMONT CRAGIN 216882.352941 \n", + "BEVERLY 24857.142857 \n", + "BRIDGEPORT 205700.000000 \n", + "BRIGHTON PARK 266100.000000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 79800.000000 \n", + "CHATHAM 0.000000 \n", + "CHICAGO LAWN 265818.181818 \n", + "CLEARING 51857.142857 \n", + "DOUGLAS 504400.000000 \n", + "DUNNING 24363.636364 \n", + "EAST GARFIELD PARK 613166.666667 \n", + "EAST SIDE 239666.666667 \n", + "EDGEWATER 443941.176471 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 300454.545455 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 182000.000000 \n", + "GAGE PARK 307625.000000 \n", + "GARFIELD RIDGE 179000.000000 \n", + "GRAND BOULEVARD 607666.666667 \n", + "GREATER GRAND CROSSING 73666.666667 \n", + "... ... \n", + "NEAR NORTH SIDE 246210.526316 \n", + "NEAR SOUTH SIDE 195000.000000 \n", + "NEAR WEST SIDE 337850.000000 \n", + "NEW CITY 483000.000000 \n", + "NORTH CENTER 223642.857143 \n", + "NORTH LAWNDALE 822866.666667 \n", + "NORTH PARK 279250.000000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 570500.000000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 118000.000000 \n", + "PULLMAN 93666.666667 \n", + "RIVERDALE 114000.000000 \n", + "ROGERS PARK 597181.818182 \n", + "ROSELAND 217357.142857 \n", + "SOUTH CHICAGO 274400.000000 \n", + "SOUTH DEERING 78250.000000 \n", + "SOUTH LAWNDALE 871222.222222 \n", + "SOUTH SHORE 118000.000000 \n", + "UPTOWN 798083.333333 \n", + "WASHINGTON HEIGHTS 187500.000000 \n", + "WASHINGTON PARK 476833.333333 \n", + "WEST ELSDON 307250.000000 \n", + "WEST ENGLEWOOD 263578.947368 \n", + "WEST GARFIELD PARK 324800.000000 \n", + "WEST LAWN 148000.000000 \n", + "WEST PULLMAN 112625.000000 \n", + "WEST RIDGE 364071.428571 \n", + "WEST TOWN 865200.000000 \n", + "WOODLAWN 115000.000000 \n", + "\n", + " sum_in_range_Other Health Providers \\\n", + "spatial_index \n", + "ALBANY PARK 0.000000 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 443800.000000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 0.000000 \n", + "AUSTIN 0.000000 \n", + "AVALON PARK 0.000000 \n", + "AVONDALE 198800.000000 \n", + "BELMONT CRAGIN 0.000000 \n", + "BEVERLY 0.000000 \n", + "BRIDGEPORT 168800.000000 \n", + "BRIGHTON PARK 0.000000 \n", + "BURNSIDE 0.000000 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHATHAM 0.000000 \n", + "CHICAGO LAWN 0.000000 \n", + "CLEARING 0.000000 \n", + "DOUGLAS 325900.000000 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 32000.000000 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 145294.117647 \n", + "EDISON PARK 0.000000 \n", + "ENGLEWOOD 0.000000 \n", + "FOREST GLEN 0.000000 \n", + "FULLER PARK 149000.000000 \n", + "GAGE PARK 0.000000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 183866.666667 \n", + "GREATER GRAND CROSSING 0.000000 \n", + "... ... \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 228333.333333 \n", + "NEAR WEST SIDE 153600.000000 \n", + "NEW CITY 6588.235294 \n", + "NORTH CENTER 0.000000 \n", + "NORTH LAWNDALE 112400.000000 \n", + "NORTH PARK 0.000000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 93000.000000 \n", + "OHARE 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 155454.545455 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH DEERING 0.000000 \n", + "SOUTH LAWNDALE 138333.333333 \n", + "SOUTH SHORE 41250.000000 \n", + "UPTOWN 116416.666667 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 120833.333333 \n", + "WEST ELSDON 0.000000 \n", + "WEST ENGLEWOOD 0.000000 \n", + "WEST GARFIELD PARK 0.000000 \n", + "WEST LAWN 0.000000 \n", + "WEST PULLMAN 0.000000 \n", + "WEST RIDGE 67857.142857 \n", + "WEST TOWN 30900.000000 \n", + "WOODLAWN 165000.000000 \n", + "\n", + " sum_in_range_Hospitals sum_in_range_all_categories \n", + "spatial_index \n", + "ALBANY PARK 133181.818182 7.584545e+05 \n", + "ARCHER HEIGHTS 0.000000 3.330000e+05 \n", + "ARMOUR SQUARE 104800.000000 1.226200e+06 \n", + "ASHBURN 14875.000000 1.487500e+04 \n", + "AUBURN GRESHAM 0.000000 2.522000e+05 \n", + "AUSTIN 96375.000000 5.356250e+05 \n", + "AVALON PARK 333000.000000 3.330000e+05 \n", + "AVONDALE 130900.000000 4.396000e+05 \n", + "BELMONT CRAGIN 102058.823529 3.253529e+05 \n", + "BEVERLY 68000.000000 9.285714e+04 \n", + "BRIDGEPORT 26200.000000 5.357000e+05 \n", + "BRIGHTON PARK 0.000000 4.128000e+05 \n", + "BURNSIDE 0.000000 0.000000e+00 \n", + "CALUMET HEIGHTS 117200.000000 1.970000e+05 \n", + "CHATHAM 19500.000000 4.980000e+04 \n", + "CHICAGO LAWN 180000.000000 7.714545e+05 \n", + "CLEARING 0.000000 5.185714e+04 \n", + "DOUGLAS 91700.000000 1.301900e+06 \n", + "DUNNING 116636.363636 1.410000e+05 \n", + "EAST GARFIELD PARK 419750.000000 1.464250e+06 \n", + "EAST SIDE 0.000000 2.396667e+05 \n", + "EDGEWATER 369529.411765 1.341588e+06 \n", + "EDISON PARK 50666.666667 5.066667e+04 \n", + "ENGLEWOOD 159545.454545 6.279091e+05 \n", + "FOREST GLEN 0.000000 0.000000e+00 \n", + "FULLER PARK 67000.000000 7.140000e+05 \n", + "GAGE PARK 0.000000 5.157500e+05 \n", + "GARFIELD RIDGE 0.000000 1.790000e+05 \n", + "GRAND BOULEVARD 133333.333333 1.391467e+06 \n", + "GREATER GRAND CROSSING 130000.000000 3.422500e+05 \n", + "... ... ... \n", + "NEAR NORTH SIDE 415157.894737 6.613684e+05 \n", + "NEAR SOUTH SIDE 87333.333333 8.270000e+05 \n", + "NEAR WEST SIDE 561450.000000 1.771150e+06 \n", + "NEW CITY 7882.352941 7.322353e+05 \n", + "NORTH CENTER 156357.142857 4.762857e+05 \n", + "NORTH LAWNDALE 390200.000000 1.525600e+06 \n", + "NORTH PARK 58500.000000 5.865000e+05 \n", + "NORWOOD PARK 139142.857143 1.391429e+05 \n", + "OAKLAND 0.000000 9.500000e+05 \n", + "OHARE 0.000000 0.000000e+00 \n", + "PORTAGE PARK 184500.000000 3.025000e+05 \n", + "PULLMAN 60333.333333 1.540000e+05 \n", + "RIVERDALE 0.000000 1.140000e+05 \n", + "ROGERS PARK 126090.909091 1.124455e+06 \n", + "ROSELAND 103428.571429 3.207857e+05 \n", + "SOUTH CHICAGO 155700.000000 4.301000e+05 \n", + "SOUTH DEERING 28000.000000 1.062500e+05 \n", + "SOUTH LAWNDALE 184555.555556 1.334333e+06 \n", + "SOUTH SHORE 322250.000000 5.730000e+05 \n", + "UPTOWN 616583.333333 1.868417e+06 \n", + "WASHINGTON HEIGHTS 0.000000 1.875000e+05 \n", + "WASHINGTON PARK 338166.666667 1.250667e+06 \n", + "WEST ELSDON 0.000000 3.072500e+05 \n", + "WEST ENGLEWOOD 31263.157895 4.935789e+05 \n", + "WEST GARFIELD PARK 173600.000000 6.263000e+05 \n", + "WEST LAWN 0.000000 2.440000e+05 \n", + "WEST PULLMAN 45250.000000 1.578750e+05 \n", + "WEST RIDGE 66214.285714 8.362857e+05 \n", + "WEST TOWN 317600.000000 1.606700e+06 \n", + "WOODLAWN 163909.090909 5.707273e+05 \n", + "\n", + "[77 rows x 6 columns]" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Aggregate Access Sum Data to the Chicago Community Area Level\n", + "accessS.aggregate()" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sum_in_range_All Free Health Clinicssum_in_range_School-Based Health Centerssum_in_range_Federally Qualified Health Centerssum_in_range_Other Health Providerssum_in_range_Hospitalssum_in_range_all_categories
spatial_index
ALBANY PARK0.0299090.909091326181.8181820.0133181.8181827.584545e+05
ARCHER HEIGHTS0.00.000000333000.0000000.00.0000003.330000e+05
ARMOUR SQUARE28600.0335400.000000313600.000000443800.0104800.0000001.226200e+06
ASHBURN0.00.0000000.0000000.014875.0000001.487500e+04
AUBURN GRESHAM0.0104000.000000148200.0000000.00.0000002.522000e+05
\n", + "
" + ], + "text/plain": [ + " sum_in_range_All Free Health Clinics \\\n", + "spatial_index \n", + "ALBANY PARK 0.0 \n", + "ARCHER HEIGHTS 0.0 \n", + "ARMOUR SQUARE 28600.0 \n", + "ASHBURN 0.0 \n", + "AUBURN GRESHAM 0.0 \n", + "\n", + " sum_in_range_School-Based Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 299090.909091 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 335400.000000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 104000.000000 \n", + "\n", + " sum_in_range_Federally Qualified Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 326181.818182 \n", + "ARCHER HEIGHTS 333000.000000 \n", + "ARMOUR SQUARE 313600.000000 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 148200.000000 \n", + "\n", + " sum_in_range_Other Health Providers sum_in_range_Hospitals \\\n", + "spatial_index \n", + "ALBANY PARK 0.0 133181.818182 \n", + "ARCHER HEIGHTS 0.0 0.000000 \n", + "ARMOUR SQUARE 443800.0 104800.000000 \n", + "ASHBURN 0.0 14875.000000 \n", + "AUBURN GRESHAM 0.0 0.000000 \n", + "\n", + " sum_in_range_all_categories \n", + "spatial_index \n", + "ALBANY PARK 7.584545e+05 \n", + "ARCHER HEIGHTS 3.330000e+05 \n", + "ARMOUR SQUARE 1.226200e+06 \n", + "ASHBURN 1.487500e+04 \n", + "AUBURN GRESHAM 2.522000e+05 " + ] + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview results\n", + "accessS.aggregated_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [], + "source": [ + "#Write results to a csv file\n", + "accessS.write_aggregated_results(filename='data/output_data/accessSum_aggregated.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Plot Aggregated Data**" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Plot was saved to: data/output_data/accessSum_cdfplot\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "accessS.plot_cdf(filename= 'data/output_data/accessSum_cdfplot', title = 'Access Sum CDF Plot', xlabel = 'Access Sum', ylabel = 'Population')" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Figure was saved to: data/output_data/accessSum_choropleth\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "accessS.plot_choropleth(column= 'sum_in_range_All Free Health Clinics',\n", + " filename= 'data/output_data/accessSum_choropleth',\n", + " title = 'Access Sum in Chicago')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **Subset Data for Focus Categories**" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [], + "source": [ + "#Limit catgeory to for FQHC\n", + "accessS.set_focus_categories(['Federally Qualified Health Centers'])" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sum_in_range_Federally Qualified Health Centerssum_in_range_all_categories
1703184240000
17031840300337000337000
17031841100193000193000
17031841200960000960000
17031838200543000543000
17031650301143000143000
1703153050300
1703176080300
17031540102228000228000
1703154010100
1703144020100
1703183900000
17031030601437000437000
17031030604437000437000
17031020801499000499000
17031843300728000728000
17031080202305000305000
17031070102480000480000
17031031501753000753000
17031031502753000753000
17031834900282000282000
17031834800282000282000
17031160502171000171000
17031140702278000278000
17031842000528000528000
17031150402134000134000
1703183440000
17031040201802000802000
17031040202670000670000
17031020702116000116000
.........
17031291200964000964000
17031620300249000249000
17031620400354000354000
17031630100328000328000
17031630300377000377000
17031630400336000336000
17031630500231000231000
1703111030000
1703111040000
1703112010000
1703112020000
17031271400386000386000
17031280100114000114000
17031280800289000289000
1703128190000
1703155010000
17031611500416000416000
17031611800416000416000
17031611900538000538000
17031612000658000658000
17031620100377000377000
17031620200249000249000
17031070200772000772000
17031070400581000581000
17031070500581000581000
17031071000584000584000
17031071200584000584000
17031130300563000563000
1703129220011300001130000
17031630900479000479000
\n", + "

801 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " sum_in_range_Federally Qualified Health Centers \\\n", + "17031842400 0 \n", + "17031840300 337000 \n", + "17031841100 193000 \n", + "17031841200 960000 \n", + "17031838200 543000 \n", + "17031650301 143000 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 228000 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 0 \n", + "17031030601 437000 \n", + "17031030604 437000 \n", + "17031020801 499000 \n", + "17031843300 728000 \n", + "17031080202 305000 \n", + "17031070102 480000 \n", + "17031031501 753000 \n", + "17031031502 753000 \n", + "17031834900 282000 \n", + "17031834800 282000 \n", + "17031160502 171000 \n", + "17031140702 278000 \n", + "17031842000 528000 \n", + "17031150402 134000 \n", + "17031834400 0 \n", + "17031040201 802000 \n", + "17031040202 670000 \n", + "17031020702 116000 \n", + "... ... \n", + "17031291200 964000 \n", + "17031620300 249000 \n", + "17031620400 354000 \n", + "17031630100 328000 \n", + "17031630300 377000 \n", + "17031630400 336000 \n", + "17031630500 231000 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 386000 \n", + "17031280100 114000 \n", + "17031280800 289000 \n", + "17031281900 0 \n", + "17031550100 0 \n", + "17031611500 416000 \n", + "17031611800 416000 \n", + "17031611900 538000 \n", + "17031612000 658000 \n", + "17031620100 377000 \n", + "17031620200 249000 \n", + "17031070200 772000 \n", + "17031070400 581000 \n", + "17031070500 581000 \n", + "17031071000 584000 \n", + "17031071200 584000 \n", + "17031130300 563000 \n", + "17031292200 1130000 \n", + "17031630900 479000 \n", + "\n", + " sum_in_range_all_categories \n", + "17031842400 0 \n", + "17031840300 337000 \n", + "17031841100 193000 \n", + "17031841200 960000 \n", + "17031838200 543000 \n", + "17031650301 143000 \n", + "17031530503 0 \n", + "17031760803 0 \n", + "17031540102 228000 \n", + "17031540101 0 \n", + "17031440201 0 \n", + "17031839000 0 \n", + "17031030601 437000 \n", + "17031030604 437000 \n", + "17031020801 499000 \n", + "17031843300 728000 \n", + "17031080202 305000 \n", + "17031070102 480000 \n", + "17031031501 753000 \n", + "17031031502 753000 \n", + "17031834900 282000 \n", + "17031834800 282000 \n", + "17031160502 171000 \n", + "17031140702 278000 \n", + "17031842000 528000 \n", + "17031150402 134000 \n", + "17031834400 0 \n", + "17031040201 802000 \n", + "17031040202 670000 \n", + "17031020702 116000 \n", + "... ... \n", + "17031291200 964000 \n", + "17031620300 249000 \n", + "17031620400 354000 \n", + "17031630100 328000 \n", + "17031630300 377000 \n", + "17031630400 336000 \n", + "17031630500 231000 \n", + "17031110300 0 \n", + "17031110400 0 \n", + "17031120100 0 \n", + "17031120200 0 \n", + "17031271400 386000 \n", + "17031280100 114000 \n", + "17031280800 289000 \n", + "17031281900 0 \n", + "17031550100 0 \n", + "17031611500 416000 \n", + "17031611800 416000 \n", + "17031611900 538000 \n", + "17031612000 658000 \n", + "17031620100 377000 \n", + "17031620200 249000 \n", + "17031070200 772000 \n", + "17031070400 581000 \n", + "17031070500 581000 \n", + "17031071000 584000 \n", + "17031071200 584000 \n", + "17031130300 563000 \n", + "17031292200 1130000 \n", + "17031630900 479000 \n", + "\n", + "[801 rows x 2 columns]" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#calculate subset data\n", + "accessS.calculate(upper_threshold = 1800)" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sum_in_range_Federally Qualified Health Centerssum_in_range_all_categories
1703184240000
17031840300337000337000
17031841100193000193000
17031841200960000960000
17031838200543000543000
\n", + "
" + ], + "text/plain": [ + " sum_in_range_Federally Qualified Health Centers \\\n", + "17031842400 0 \n", + "17031840300 337000 \n", + "17031841100 193000 \n", + "17031841200 960000 \n", + "17031838200 543000 \n", + "\n", + " sum_in_range_all_categories \n", + "17031842400 0 \n", + "17031840300 337000 \n", + "17031841100 193000 \n", + "17031841200 960000 \n", + "17031838200 543000 " + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#preview results\n", + "accessS.model_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [], + "source": [ + "#write subset results to csv\n", + "accessS.write_results(filename= 'data/output_data/accessSum_subsetFQHC.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Destination Sum: Captures the sum of an attribute of the provider within a community area \n", + "\n", + "##### (e.g. number of doctors within a community area)\n", + "\n", + "### Specifications for Destination Sum\n", + "\n", + "**name = DestSum( )**\n", + "* network_type ('walk', 'bike', 'drive', 'otp') \n", + "* sources_filename (primary input data)\n", + "* destinations_filename (secondary input data)\n", + "* source_column_names (dictionary that map column names to expected values)\n", + "* dest_column_names (dictionary that map column names to expected values)\n", + "\n", + "**Column Inputs**\n", + "* Standard inputs as well as the capacity for each facility\n", + "\n", + "**name.calculate()**\n", + "* shapefile (shape file of desired area, default is chicago community areas)\n", + "* spatial_index (index of geospatial area in shapefile, default is community)\n", + "* projection (default to 'epsg:4326')\n", + "\n", + "**Functions within the DestSum class** (use as name.function()) \n", + "- calculate () \n", + "- set.focus.categories()\n", + "- plot_cdf()\n", + "- plot_chlorepleth" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [], + "source": [ + "d_sum = DestSum(network_type='walk',\n", + " sources_filename='data/input_data/sources/tracts2010.csv',\n", + " destinations_filename='data/input_data/destinations/health_chicago.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'ID', 'capacity': 'target', 'category': 'category', 'lat': 'lat', 'lon': 'lon'}\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
All Free Health ClinicsSchool-Based Health CentersFederally Qualified Health CentersOther Health ProvidersHospitalsall_categoriesAll Free Health Clinics_per_capitaSchool-Based Health Centers_per_capitaFederally Qualified Health Centers_per_capitaOther Health Providers_per_capitaHospitals_per_capitaall_categories_per_capita
spatial_index
ALBANY PARK0.0329000.0171000.00.00.0500000.00.0000006.2157573.2306820.0000000.0000009.446439
ARCHER HEIGHTS0.00.0106000.00.00.0106000.00.0000000.0000007.5725100.0000000.0000007.572510
ARMOUR SQUARE0.00.00.0170000.00.0170000.00.0000000.0000000.00000017.7249500.00000017.724950
AUBURN GRESHAM0.0120000.0141000.00.00.0261000.00.0000002.5204262.9615000.0000000.0000005.481926
AUSTIN0.0190000.0378000.00.0125000.0693000.00.0000001.8491483.6788320.0000001.2165456.744526
BELMONT CRAGIN0.00.0178000.00.00.0178000.00.0000000.0000002.2046070.0000000.0000002.204607
BRIGHTON PARK0.0163000.0128000.00.00.0291000.00.0000003.6223032.8445080.0000000.0000006.466810
CALUMET HEIGHTS0.00.00.00.0112000.0112000.00.0000000.0000000.0000000.0000008.3582098.358209
CHICAGO LAWN198000.0180000.0206000.00.0198000.0782000.03.6221283.2928443.7684770.0000003.62212814.305576
DOUGLAS0.0363000.0199000.0345000.00.0907000.00.0000009.4901965.2026149.0196080.00000023.712418
DUNNING0.00.00.00.0183000.0183000.00.0000000.0000000.0000000.0000004.2505754.250575
EAST GARFIELD PARK128000.00.00.00.0102000.0230000.03.4058860.0000000.0000000.0000002.7140656.119951
EAST SIDE0.00.0180000.00.00.0180000.00.0000000.0000007.5824590.0000000.0000007.582459
EDGEWATER0.0200000.00.0190000.0183000.0573000.00.0000003.6182070.0000003.4372963.31065910.366163
ENGLEWOOD131000.00.0282000.00.0195000.0608000.03.8281710.0000008.2407950.0000005.69842217.767387
FULLER PARK0.00.0120000.00.00.0120000.00.0000000.00000013.5715900.0000000.00000013.571590
GAGE PARK0.00.0103000.00.00.0103000.00.0000000.0000002.5750000.0000000.0000002.575000
GARFIELD RIDGE0.00.0260000.00.00.0260000.00.0000000.0000005.6907720.0000000.0000005.690772
GRAND BOULEVARD0.0101000.0157000.0112000.0134000.0504000.00.0000002.6629404.1394222.9529643.53301013.288336
GREATER GRAND CROSSING0.0183000.00.00.00.0183000.00.0000005.2890170.0000000.0000000.0000005.289017
HEGEWISCH0.00.0179000.00.00.0179000.00.0000000.00000019.1689870.0000000.00000019.168987
HUMBOLDT PARK0.0238000.0708000.00.0146000.01092000.00.0000003.82704311.3846500.0000002.34768217.559375
HYDE PARK0.00.0151000.00.0129000.0280000.00.0000000.0000006.5271890.0000005.57620812.103398
IRVING PARK0.00.00.00.0187000.0187000.00.0000000.0000000.0000000.0000003.3103203.310320
KENWOOD109000.0155000.0191000.00.00.0455000.09.02691512.83643915.8178050.0000000.00000037.681159
LAKE VIEW0.0110000.0480000.00.0262000.0852000.00.0000001.0584454.6186710.0000002.5210258.198141
LINCOLN PARK0.00.0101000.00.00.0101000.00.0000000.0000001.4605510.0000000.0000001.460551
LINCOLN SQUARE0.0124000.0383000.00.0293000.0800000.00.0000002.8899718.9262820.0000006.82872318.644976
LOGAN SQUARE0.0109000.0198000.0284000.00.0591000.00.0000001.3624832.4749693.5499560.0000007.387408
LOWER WEST SIDE0.0322000.0369000.00.00.0691000.00.0000008.76452810.0438230.0000000.00000018.808351
MCKINLEY PARK0.00.0200000.00.00.0200000.00.0000000.00000010.8008860.0000000.00000010.800886
MONTCLARE0.00.00.00.0111000.0111000.00.0000000.0000000.0000000.00000013.03428813.034288
NEAR NORTH SIDE0.00.0305000.00.0486000.0791000.00.0000000.0000003.3340620.0000005.3126378.646699
NEAR SOUTH SIDE0.0145000.0193000.00.0131000.0469000.00.0000005.5053537.3278150.0000004.97380217.806971
NEAR WEST SIDE339000.0583000.0292000.0192000.0614000.02020000.04.7212518.1194384.0666822.6739838.55117528.132529
NEW CITY257000.00.0538000.00.00.0795000.05.0565670.00000010.5853420.0000000.00000015.641909
NORTH CENTER0.00.0132000.00.00.0132000.00.0000000.0000003.4618410.0000000.0000003.461841
NORTH LAWNDALE0.0140000.0556000.00.0346000.01042000.00.0000002.4512389.7349160.0000006.05805918.244213
NORWOOD PARK0.00.00.00.0152000.0152000.00.0000000.0000000.0000000.0000004.1659814.165981
OAKLAND0.00.0297000.00.00.0297000.00.0000000.00000091.9504640.0000000.00000091.950464
PORTAGE PARK0.00.0134000.00.0184000.0318000.00.0000000.0000001.9951160.0000002.7395634.734679
PULLMAN0.00.0111000.00.00.0111000.00.0000000.00000015.9253950.0000000.00000015.925395
RIVERDALE0.0192000.0144000.00.00.0336000.00.00000026.70375520.0278160.0000000.00000046.731572
ROGERS PARK0.0173000.0551000.00.00.0724000.00.0000003.44607810.9756580.0000000.00000014.421736
ROSELAND0.00.0281000.00.0181000.0462000.00.0000000.0000006.3515740.0000004.09122810.442802
SOUTH CHICAGO0.00.0301000.00.0138000.0439000.00.0000000.0000009.2085540.0000004.22186213.430416
SOUTH LAWNDALE0.0141000.0859000.0166000.0100000.01266000.00.0000001.72106510.4850722.0262191.22061415.452970
SOUTH SHORE0.00.0104000.00.0195000.0299000.00.0000000.0000002.7610380.0000005.1769457.937983
UPTOWN0.0152000.0753000.0127000.0642000.01674000.00.0000002.86300914.1831952.39211912.09244531.530768
WASHINGTON HEIGHTS0.00.0174000.00.00.0174000.00.0000000.0000006.5821830.0000000.0000006.582183
WASHINGTON PARK160000.00.00.00.00.0160000.08.5156210.0000000.0000000.0000000.0000008.515621
WEST ELSDON0.00.0143000.00.00.0143000.00.0000000.0000007.4615180.0000000.0000007.461518
WEST GARFIELD PARK0.00.0102000.00.00.0102000.00.0000000.0000005.4011120.0000000.0000005.401112
WEST RIDGE295000.00.0246000.00.00.0541000.04.0400440.0000003.3689860.0000000.0000007.409031
WEST TOWN155000.0171000.0911000.00.0397000.01634000.01.9178422.11581311.2719620.0000004.91215020.217768
WOODLAWN0.00.00.0165000.0126000.0291000.00.0000000.0000000.0000006.7043195.11966211.823981
\n", + "
" + ], + "text/plain": [ + " All Free Health Clinics School-Based Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 0.0 329000.0 \n", + "ARCHER HEIGHTS 0.0 0.0 \n", + "ARMOUR SQUARE 0.0 0.0 \n", + "AUBURN GRESHAM 0.0 120000.0 \n", + "AUSTIN 0.0 190000.0 \n", + "BELMONT CRAGIN 0.0 0.0 \n", + "BRIGHTON PARK 0.0 163000.0 \n", + "CALUMET HEIGHTS 0.0 0.0 \n", + "CHICAGO LAWN 198000.0 180000.0 \n", + "DOUGLAS 0.0 363000.0 \n", + "DUNNING 0.0 0.0 \n", + "EAST GARFIELD PARK 128000.0 0.0 \n", + "EAST SIDE 0.0 0.0 \n", + "EDGEWATER 0.0 200000.0 \n", + "ENGLEWOOD 131000.0 0.0 \n", + "FULLER PARK 0.0 0.0 \n", + "GAGE PARK 0.0 0.0 \n", + "GARFIELD RIDGE 0.0 0.0 \n", + "GRAND BOULEVARD 0.0 101000.0 \n", + "GREATER GRAND CROSSING 0.0 183000.0 \n", + "HEGEWISCH 0.0 0.0 \n", + "HUMBOLDT PARK 0.0 238000.0 \n", + "HYDE PARK 0.0 0.0 \n", + "IRVING PARK 0.0 0.0 \n", + "KENWOOD 109000.0 155000.0 \n", + "LAKE VIEW 0.0 110000.0 \n", + "LINCOLN PARK 0.0 0.0 \n", + "LINCOLN SQUARE 0.0 124000.0 \n", + "LOGAN SQUARE 0.0 109000.0 \n", + "LOWER WEST SIDE 0.0 322000.0 \n", + "MCKINLEY PARK 0.0 0.0 \n", + "MONTCLARE 0.0 0.0 \n", + "NEAR NORTH SIDE 0.0 0.0 \n", + "NEAR SOUTH SIDE 0.0 145000.0 \n", + "NEAR WEST SIDE 339000.0 583000.0 \n", + "NEW CITY 257000.0 0.0 \n", + "NORTH CENTER 0.0 0.0 \n", + "NORTH LAWNDALE 0.0 140000.0 \n", + "NORWOOD PARK 0.0 0.0 \n", + "OAKLAND 0.0 0.0 \n", + "PORTAGE PARK 0.0 0.0 \n", + "PULLMAN 0.0 0.0 \n", + "RIVERDALE 0.0 192000.0 \n", + "ROGERS PARK 0.0 173000.0 \n", + "ROSELAND 0.0 0.0 \n", + "SOUTH CHICAGO 0.0 0.0 \n", + "SOUTH LAWNDALE 0.0 141000.0 \n", + "SOUTH SHORE 0.0 0.0 \n", + "UPTOWN 0.0 152000.0 \n", + "WASHINGTON HEIGHTS 0.0 0.0 \n", + "WASHINGTON PARK 160000.0 0.0 \n", + "WEST ELSDON 0.0 0.0 \n", + "WEST GARFIELD PARK 0.0 0.0 \n", + "WEST RIDGE 295000.0 0.0 \n", + "WEST TOWN 155000.0 171000.0 \n", + "WOODLAWN 0.0 0.0 \n", + "\n", + " Federally Qualified Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 171000.0 \n", + "ARCHER HEIGHTS 106000.0 \n", + "ARMOUR SQUARE 0.0 \n", + "AUBURN GRESHAM 141000.0 \n", + "AUSTIN 378000.0 \n", + "BELMONT CRAGIN 178000.0 \n", + "BRIGHTON PARK 128000.0 \n", + "CALUMET HEIGHTS 0.0 \n", + "CHICAGO LAWN 206000.0 \n", + "DOUGLAS 199000.0 \n", + "DUNNING 0.0 \n", + "EAST GARFIELD PARK 0.0 \n", + "EAST SIDE 180000.0 \n", + "EDGEWATER 0.0 \n", + "ENGLEWOOD 282000.0 \n", + "FULLER PARK 120000.0 \n", + "GAGE PARK 103000.0 \n", + "GARFIELD RIDGE 260000.0 \n", + "GRAND BOULEVARD 157000.0 \n", + "GREATER GRAND CROSSING 0.0 \n", + "HEGEWISCH 179000.0 \n", + "HUMBOLDT PARK 708000.0 \n", + "HYDE PARK 151000.0 \n", + "IRVING PARK 0.0 \n", + "KENWOOD 191000.0 \n", + "LAKE VIEW 480000.0 \n", + "LINCOLN PARK 101000.0 \n", + "LINCOLN SQUARE 383000.0 \n", + "LOGAN SQUARE 198000.0 \n", + "LOWER WEST SIDE 369000.0 \n", + "MCKINLEY PARK 200000.0 \n", + "MONTCLARE 0.0 \n", + "NEAR NORTH SIDE 305000.0 \n", + "NEAR SOUTH SIDE 193000.0 \n", + "NEAR WEST SIDE 292000.0 \n", + "NEW CITY 538000.0 \n", + "NORTH CENTER 132000.0 \n", + "NORTH LAWNDALE 556000.0 \n", + "NORWOOD PARK 0.0 \n", + "OAKLAND 297000.0 \n", + "PORTAGE PARK 134000.0 \n", + "PULLMAN 111000.0 \n", + "RIVERDALE 144000.0 \n", + "ROGERS PARK 551000.0 \n", + "ROSELAND 281000.0 \n", + "SOUTH CHICAGO 301000.0 \n", + "SOUTH LAWNDALE 859000.0 \n", + "SOUTH SHORE 104000.0 \n", + "UPTOWN 753000.0 \n", + "WASHINGTON HEIGHTS 174000.0 \n", + "WASHINGTON PARK 0.0 \n", + "WEST ELSDON 143000.0 \n", + "WEST GARFIELD PARK 102000.0 \n", + "WEST RIDGE 246000.0 \n", + "WEST TOWN 911000.0 \n", + "WOODLAWN 0.0 \n", + "\n", + " Other Health Providers Hospitals all_categories \\\n", + "spatial_index \n", + "ALBANY PARK 0.0 0.0 500000.0 \n", + "ARCHER HEIGHTS 0.0 0.0 106000.0 \n", + "ARMOUR SQUARE 170000.0 0.0 170000.0 \n", + "AUBURN GRESHAM 0.0 0.0 261000.0 \n", + "AUSTIN 0.0 125000.0 693000.0 \n", + "BELMONT CRAGIN 0.0 0.0 178000.0 \n", + "BRIGHTON PARK 0.0 0.0 291000.0 \n", + "CALUMET HEIGHTS 0.0 112000.0 112000.0 \n", + "CHICAGO LAWN 0.0 198000.0 782000.0 \n", + "DOUGLAS 345000.0 0.0 907000.0 \n", + "DUNNING 0.0 183000.0 183000.0 \n", + "EAST GARFIELD PARK 0.0 102000.0 230000.0 \n", + "EAST SIDE 0.0 0.0 180000.0 \n", + "EDGEWATER 190000.0 183000.0 573000.0 \n", + "ENGLEWOOD 0.0 195000.0 608000.0 \n", + "FULLER PARK 0.0 0.0 120000.0 \n", + "GAGE PARK 0.0 0.0 103000.0 \n", + "GARFIELD RIDGE 0.0 0.0 260000.0 \n", + "GRAND BOULEVARD 112000.0 134000.0 504000.0 \n", + "GREATER GRAND CROSSING 0.0 0.0 183000.0 \n", + "HEGEWISCH 0.0 0.0 179000.0 \n", + "HUMBOLDT PARK 0.0 146000.0 1092000.0 \n", + "HYDE PARK 0.0 129000.0 280000.0 \n", + "IRVING PARK 0.0 187000.0 187000.0 \n", + "KENWOOD 0.0 0.0 455000.0 \n", + "LAKE VIEW 0.0 262000.0 852000.0 \n", + "LINCOLN PARK 0.0 0.0 101000.0 \n", + "LINCOLN SQUARE 0.0 293000.0 800000.0 \n", + "LOGAN SQUARE 284000.0 0.0 591000.0 \n", + "LOWER WEST SIDE 0.0 0.0 691000.0 \n", + "MCKINLEY PARK 0.0 0.0 200000.0 \n", + "MONTCLARE 0.0 111000.0 111000.0 \n", + "NEAR NORTH SIDE 0.0 486000.0 791000.0 \n", + "NEAR SOUTH SIDE 0.0 131000.0 469000.0 \n", + "NEAR WEST SIDE 192000.0 614000.0 2020000.0 \n", + "NEW CITY 0.0 0.0 795000.0 \n", + "NORTH CENTER 0.0 0.0 132000.0 \n", + "NORTH LAWNDALE 0.0 346000.0 1042000.0 \n", + "NORWOOD PARK 0.0 152000.0 152000.0 \n", + "OAKLAND 0.0 0.0 297000.0 \n", + "PORTAGE PARK 0.0 184000.0 318000.0 \n", + "PULLMAN 0.0 0.0 111000.0 \n", + "RIVERDALE 0.0 0.0 336000.0 \n", + "ROGERS PARK 0.0 0.0 724000.0 \n", + "ROSELAND 0.0 181000.0 462000.0 \n", + "SOUTH CHICAGO 0.0 138000.0 439000.0 \n", + "SOUTH LAWNDALE 166000.0 100000.0 1266000.0 \n", + "SOUTH SHORE 0.0 195000.0 299000.0 \n", + "UPTOWN 127000.0 642000.0 1674000.0 \n", + "WASHINGTON HEIGHTS 0.0 0.0 174000.0 \n", + "WASHINGTON PARK 0.0 0.0 160000.0 \n", + "WEST ELSDON 0.0 0.0 143000.0 \n", + "WEST GARFIELD PARK 0.0 0.0 102000.0 \n", + "WEST RIDGE 0.0 0.0 541000.0 \n", + "WEST TOWN 0.0 397000.0 1634000.0 \n", + "WOODLAWN 165000.0 126000.0 291000.0 \n", + "\n", + " All Free Health Clinics_per_capita \\\n", + "spatial_index \n", + "ALBANY PARK 0.000000 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 0.000000 \n", + "AUBURN GRESHAM 0.000000 \n", + "AUSTIN 0.000000 \n", + "BELMONT CRAGIN 0.000000 \n", + "BRIGHTON PARK 0.000000 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHICAGO LAWN 3.622128 \n", + "DOUGLAS 0.000000 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 3.405886 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 0.000000 \n", + "ENGLEWOOD 3.828171 \n", + "FULLER PARK 0.000000 \n", + "GAGE PARK 0.000000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 0.000000 \n", + "GREATER GRAND CROSSING 0.000000 \n", + "HEGEWISCH 0.000000 \n", + "HUMBOLDT PARK 0.000000 \n", + "HYDE PARK 0.000000 \n", + "IRVING PARK 0.000000 \n", + "KENWOOD 9.026915 \n", + "LAKE VIEW 0.000000 \n", + "LINCOLN PARK 0.000000 \n", + "LINCOLN SQUARE 0.000000 \n", + "LOGAN SQUARE 0.000000 \n", + "LOWER WEST SIDE 0.000000 \n", + "MCKINLEY PARK 0.000000 \n", + "MONTCLARE 0.000000 \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 0.000000 \n", + "NEAR WEST SIDE 4.721251 \n", + "NEW CITY 5.056567 \n", + "NORTH CENTER 0.000000 \n", + "NORTH LAWNDALE 0.000000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 0.000000 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH LAWNDALE 0.000000 \n", + "SOUTH SHORE 0.000000 \n", + "UPTOWN 0.000000 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 8.515621 \n", + "WEST ELSDON 0.000000 \n", + "WEST GARFIELD PARK 0.000000 \n", + "WEST RIDGE 4.040044 \n", + "WEST TOWN 1.917842 \n", + "WOODLAWN 0.000000 \n", + "\n", + " School-Based Health Centers_per_capita \\\n", + "spatial_index \n", + "ALBANY PARK 6.215757 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 0.000000 \n", + "AUBURN GRESHAM 2.520426 \n", + "AUSTIN 1.849148 \n", + "BELMONT CRAGIN 0.000000 \n", + "BRIGHTON PARK 3.622303 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHICAGO LAWN 3.292844 \n", + "DOUGLAS 9.490196 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 0.000000 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 3.618207 \n", + "ENGLEWOOD 0.000000 \n", + "FULLER PARK 0.000000 \n", + "GAGE PARK 0.000000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 2.662940 \n", + "GREATER GRAND CROSSING 5.289017 \n", + "HEGEWISCH 0.000000 \n", + "HUMBOLDT PARK 3.827043 \n", + "HYDE PARK 0.000000 \n", + "IRVING PARK 0.000000 \n", + "KENWOOD 12.836439 \n", + "LAKE VIEW 1.058445 \n", + "LINCOLN PARK 0.000000 \n", + "LINCOLN SQUARE 2.889971 \n", + "LOGAN SQUARE 1.362483 \n", + "LOWER WEST SIDE 8.764528 \n", + "MCKINLEY PARK 0.000000 \n", + "MONTCLARE 0.000000 \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 5.505353 \n", + "NEAR WEST SIDE 8.119438 \n", + "NEW CITY 0.000000 \n", + "NORTH CENTER 0.000000 \n", + "NORTH LAWNDALE 2.451238 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 26.703755 \n", + "ROGERS PARK 3.446078 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH LAWNDALE 1.721065 \n", + "SOUTH SHORE 0.000000 \n", + "UPTOWN 2.863009 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 0.000000 \n", + "WEST ELSDON 0.000000 \n", + "WEST GARFIELD PARK 0.000000 \n", + "WEST RIDGE 0.000000 \n", + "WEST TOWN 2.115813 \n", + "WOODLAWN 0.000000 \n", + "\n", + " Federally Qualified Health Centers_per_capita \\\n", + "spatial_index \n", + "ALBANY PARK 3.230682 \n", + "ARCHER HEIGHTS 7.572510 \n", + "ARMOUR SQUARE 0.000000 \n", + "AUBURN GRESHAM 2.961500 \n", + "AUSTIN 3.678832 \n", + "BELMONT CRAGIN 2.204607 \n", + "BRIGHTON PARK 2.844508 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHICAGO LAWN 3.768477 \n", + "DOUGLAS 5.202614 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 0.000000 \n", + "EAST SIDE 7.582459 \n", + "EDGEWATER 0.000000 \n", + "ENGLEWOOD 8.240795 \n", + "FULLER PARK 13.571590 \n", + "GAGE PARK 2.575000 \n", + "GARFIELD RIDGE 5.690772 \n", + "GRAND BOULEVARD 4.139422 \n", + "GREATER GRAND CROSSING 0.000000 \n", + "HEGEWISCH 19.168987 \n", + "HUMBOLDT PARK 11.384650 \n", + "HYDE PARK 6.527189 \n", + "IRVING PARK 0.000000 \n", + "KENWOOD 15.817805 \n", + "LAKE VIEW 4.618671 \n", + "LINCOLN PARK 1.460551 \n", + "LINCOLN SQUARE 8.926282 \n", + "LOGAN SQUARE 2.474969 \n", + "LOWER WEST SIDE 10.043823 \n", + "MCKINLEY PARK 10.800886 \n", + "MONTCLARE 0.000000 \n", + "NEAR NORTH SIDE 3.334062 \n", + "NEAR SOUTH SIDE 7.327815 \n", + "NEAR WEST SIDE 4.066682 \n", + "NEW CITY 10.585342 \n", + "NORTH CENTER 3.461841 \n", + "NORTH LAWNDALE 9.734916 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 91.950464 \n", + "PORTAGE PARK 1.995116 \n", + "PULLMAN 15.925395 \n", + "RIVERDALE 20.027816 \n", + "ROGERS PARK 10.975658 \n", + "ROSELAND 6.351574 \n", + "SOUTH CHICAGO 9.208554 \n", + "SOUTH LAWNDALE 10.485072 \n", + "SOUTH SHORE 2.761038 \n", + "UPTOWN 14.183195 \n", + "WASHINGTON HEIGHTS 6.582183 \n", + "WASHINGTON PARK 0.000000 \n", + "WEST ELSDON 7.461518 \n", + "WEST GARFIELD PARK 5.401112 \n", + "WEST RIDGE 3.368986 \n", + "WEST TOWN 11.271962 \n", + "WOODLAWN 0.000000 \n", + "\n", + " Other Health Providers_per_capita \\\n", + "spatial_index \n", + "ALBANY PARK 0.000000 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 17.724950 \n", + "AUBURN GRESHAM 0.000000 \n", + "AUSTIN 0.000000 \n", + "BELMONT CRAGIN 0.000000 \n", + "BRIGHTON PARK 0.000000 \n", + "CALUMET HEIGHTS 0.000000 \n", + "CHICAGO LAWN 0.000000 \n", + "DOUGLAS 9.019608 \n", + "DUNNING 0.000000 \n", + "EAST GARFIELD PARK 0.000000 \n", + "EAST SIDE 0.000000 \n", + "EDGEWATER 3.437296 \n", + "ENGLEWOOD 0.000000 \n", + "FULLER PARK 0.000000 \n", + "GAGE PARK 0.000000 \n", + "GARFIELD RIDGE 0.000000 \n", + "GRAND BOULEVARD 2.952964 \n", + "GREATER GRAND CROSSING 0.000000 \n", + "HEGEWISCH 0.000000 \n", + "HUMBOLDT PARK 0.000000 \n", + "HYDE PARK 0.000000 \n", + "IRVING PARK 0.000000 \n", + "KENWOOD 0.000000 \n", + "LAKE VIEW 0.000000 \n", + "LINCOLN PARK 0.000000 \n", + "LINCOLN SQUARE 0.000000 \n", + "LOGAN SQUARE 3.549956 \n", + "LOWER WEST SIDE 0.000000 \n", + "MCKINLEY PARK 0.000000 \n", + "MONTCLARE 0.000000 \n", + "NEAR NORTH SIDE 0.000000 \n", + "NEAR SOUTH SIDE 0.000000 \n", + "NEAR WEST SIDE 2.673983 \n", + "NEW CITY 0.000000 \n", + "NORTH CENTER 0.000000 \n", + "NORTH LAWNDALE 0.000000 \n", + "NORWOOD PARK 0.000000 \n", + "OAKLAND 0.000000 \n", + "PORTAGE PARK 0.000000 \n", + "PULLMAN 0.000000 \n", + "RIVERDALE 0.000000 \n", + "ROGERS PARK 0.000000 \n", + "ROSELAND 0.000000 \n", + "SOUTH CHICAGO 0.000000 \n", + "SOUTH LAWNDALE 2.026219 \n", + "SOUTH SHORE 0.000000 \n", + "UPTOWN 2.392119 \n", + "WASHINGTON HEIGHTS 0.000000 \n", + "WASHINGTON PARK 0.000000 \n", + "WEST ELSDON 0.000000 \n", + "WEST GARFIELD PARK 0.000000 \n", + "WEST RIDGE 0.000000 \n", + "WEST TOWN 0.000000 \n", + "WOODLAWN 6.704319 \n", + "\n", + " Hospitals_per_capita all_categories_per_capita \n", + "spatial_index \n", + "ALBANY PARK 0.000000 9.446439 \n", + "ARCHER HEIGHTS 0.000000 7.572510 \n", + "ARMOUR SQUARE 0.000000 17.724950 \n", + "AUBURN GRESHAM 0.000000 5.481926 \n", + "AUSTIN 1.216545 6.744526 \n", + "BELMONT CRAGIN 0.000000 2.204607 \n", + "BRIGHTON PARK 0.000000 6.466810 \n", + "CALUMET HEIGHTS 8.358209 8.358209 \n", + "CHICAGO LAWN 3.622128 14.305576 \n", + "DOUGLAS 0.000000 23.712418 \n", + "DUNNING 4.250575 4.250575 \n", + "EAST GARFIELD PARK 2.714065 6.119951 \n", + "EAST SIDE 0.000000 7.582459 \n", + "EDGEWATER 3.310659 10.366163 \n", + "ENGLEWOOD 5.698422 17.767387 \n", + "FULLER PARK 0.000000 13.571590 \n", + "GAGE PARK 0.000000 2.575000 \n", + "GARFIELD RIDGE 0.000000 5.690772 \n", + "GRAND BOULEVARD 3.533010 13.288336 \n", + "GREATER GRAND CROSSING 0.000000 5.289017 \n", + "HEGEWISCH 0.000000 19.168987 \n", + "HUMBOLDT PARK 2.347682 17.559375 \n", + "HYDE PARK 5.576208 12.103398 \n", + "IRVING PARK 3.310320 3.310320 \n", + "KENWOOD 0.000000 37.681159 \n", + "LAKE VIEW 2.521025 8.198141 \n", + "LINCOLN PARK 0.000000 1.460551 \n", + "LINCOLN SQUARE 6.828723 18.644976 \n", + "LOGAN SQUARE 0.000000 7.387408 \n", + "LOWER WEST SIDE 0.000000 18.808351 \n", + "MCKINLEY PARK 0.000000 10.800886 \n", + "MONTCLARE 13.034288 13.034288 \n", + "NEAR NORTH SIDE 5.312637 8.646699 \n", + "NEAR SOUTH SIDE 4.973802 17.806971 \n", + "NEAR WEST SIDE 8.551175 28.132529 \n", + "NEW CITY 0.000000 15.641909 \n", + "NORTH CENTER 0.000000 3.461841 \n", + "NORTH LAWNDALE 6.058059 18.244213 \n", + "NORWOOD PARK 4.165981 4.165981 \n", + "OAKLAND 0.000000 91.950464 \n", + "PORTAGE PARK 2.739563 4.734679 \n", + "PULLMAN 0.000000 15.925395 \n", + "RIVERDALE 0.000000 46.731572 \n", + "ROGERS PARK 0.000000 14.421736 \n", + "ROSELAND 4.091228 10.442802 \n", + "SOUTH CHICAGO 4.221862 13.430416 \n", + "SOUTH LAWNDALE 1.220614 15.452970 \n", + "SOUTH SHORE 5.176945 7.937983 \n", + "UPTOWN 12.092445 31.530768 \n", + "WASHINGTON HEIGHTS 0.000000 6.582183 \n", + "WASHINGTON PARK 0.000000 8.515621 \n", + "WEST ELSDON 0.000000 7.461518 \n", + "WEST GARFIELD PARK 0.000000 5.401112 \n", + "WEST RIDGE 0.000000 7.409031 \n", + "WEST TOWN 4.912150 20.217768 \n", + "WOODLAWN 5.119662 11.823981 " + ] + }, + "execution_count": 126, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# calculates DestSum for Chicago\n", + "d_sum.calculate()" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
All Free Health ClinicsSchool-Based Health CentersFederally Qualified Health CentersOther Health ProvidersHospitalsall_categoriesAll Free Health Clinics_per_capitaSchool-Based Health Centers_per_capitaFederally Qualified Health Centers_per_capitaOther Health Providers_per_capitaHospitals_per_capitaall_categories_per_capita
spatial_index
ALBANY PARK0.0329000.0171000.00.00.0500000.00.06.2157573.2306820.000000.0000009.446439
ARCHER HEIGHTS0.00.0106000.00.00.0106000.00.00.0000007.5725100.000000.0000007.572510
ARMOUR SQUARE0.00.00.0170000.00.0170000.00.00.0000000.00000017.724950.00000017.724950
AUBURN GRESHAM0.0120000.0141000.00.00.0261000.00.02.5204262.9615000.000000.0000005.481926
AUSTIN0.0190000.0378000.00.0125000.0693000.00.01.8491483.6788320.000001.2165456.744526
\n", + "
" + ], + "text/plain": [ + " All Free Health Clinics School-Based Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 0.0 329000.0 \n", + "ARCHER HEIGHTS 0.0 0.0 \n", + "ARMOUR SQUARE 0.0 0.0 \n", + "AUBURN GRESHAM 0.0 120000.0 \n", + "AUSTIN 0.0 190000.0 \n", + "\n", + " Federally Qualified Health Centers Other Health Providers \\\n", + "spatial_index \n", + "ALBANY PARK 171000.0 0.0 \n", + "ARCHER HEIGHTS 106000.0 0.0 \n", + "ARMOUR SQUARE 0.0 170000.0 \n", + "AUBURN GRESHAM 141000.0 0.0 \n", + "AUSTIN 378000.0 0.0 \n", + "\n", + " Hospitals all_categories All Free Health Clinics_per_capita \\\n", + "spatial_index \n", + "ALBANY PARK 0.0 500000.0 0.0 \n", + "ARCHER HEIGHTS 0.0 106000.0 0.0 \n", + "ARMOUR SQUARE 0.0 170000.0 0.0 \n", + "AUBURN GRESHAM 0.0 261000.0 0.0 \n", + "AUSTIN 125000.0 693000.0 0.0 \n", + "\n", + " School-Based Health Centers_per_capita \\\n", + "spatial_index \n", + "ALBANY PARK 6.215757 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 0.000000 \n", + "AUBURN GRESHAM 2.520426 \n", + "AUSTIN 1.849148 \n", + "\n", + " Federally Qualified Health Centers_per_capita \\\n", + "spatial_index \n", + "ALBANY PARK 3.230682 \n", + "ARCHER HEIGHTS 7.572510 \n", + "ARMOUR SQUARE 0.000000 \n", + "AUBURN GRESHAM 2.961500 \n", + "AUSTIN 3.678832 \n", + "\n", + " Other Health Providers_per_capita Hospitals_per_capita \\\n", + "spatial_index \n", + "ALBANY PARK 0.00000 0.000000 \n", + "ARCHER HEIGHTS 0.00000 0.000000 \n", + "ARMOUR SQUARE 17.72495 0.000000 \n", + "AUBURN GRESHAM 0.00000 0.000000 \n", + "AUSTIN 0.00000 1.216545 \n", + "\n", + " all_categories_per_capita \n", + "spatial_index \n", + "ALBANY PARK 9.446439 \n", + "ARCHER HEIGHTS 7.572510 \n", + "ARMOUR SQUARE 17.724950 \n", + "AUBURN GRESHAM 5.481926 \n", + "AUSTIN 6.744526 " + ] + }, + "execution_count": 127, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Preview the results\n", + "d_sum.aggregated_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [], + "source": [ + "# writes result to csv\n", + "d_sum.write_aggregated_results('data/output_data/destsum2010.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": {}, + "outputs": [ + { + "ename": "UnrecognizedCategoriesException", + "evalue": "a,H,i,n,s,d, ,l,h,u,y,t,C,Q,F,e,f,r", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mUnrecognizedCategoriesException\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0md_sum\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_focus_categories\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Federally Qualified Health Centers'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/spatial_access/spatial_access/BaseModel.py\u001b[0m in \u001b[0;36mset_focus_categories\u001b[0;34m(self, categories)\u001b[0m\n\u001b[1;32m 639\u001b[0m \u001b[0munrecognized_categories\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcategories\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mall_categories\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 640\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munrecognized_categories\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 641\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mUnrecognizedCategoriesException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m','\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcategory\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mcategory\u001b[0m \u001b[0;32min\u001b[0m \u001b[0munrecognized_categories\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 642\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 643\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mUnrecognizedCategoriesException\u001b[0m: a,H,i,n,s,d, ,l,h,u,y,t,C,Q,F,e,f,r" + ] + } + ], + "source": [ + "d_sum.set_focus_categories('Federally Qualified Health Centers')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/3_coverage_score.ipynb b/docs/notebooks/3_coverage_score.ipynb new file mode 100755 index 0000000..41371b6 --- /dev/null +++ b/docs/notebooks/3_coverage_score.ipynb @@ -0,0 +1,768 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Coverage Scores" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Calculating the Coverage Score\n", + "---\n", + "#### **Column Inputs for Each Model**\n", + "Each model takes in inputs from both the sources and destination csv files. Each model takes in the standard inputs indicated below as well as additional inputs specified under each model\n", + "\n", + "* Source File\n", + " * Unique index identifier (geoid10) (integer or real) \n", + " * Latitude and longitude coordinates (real)\n", + " * To aggregate: larger areal ID\n", + " * Population within the areal unit\n", + "* Destination File\n", + " * Unique index identifier (ID) (integer or real)\n", + " * Latitude and longitude coordinates (real)\n", + " * Category for each type of facility\n", + " * To aggregate: larger areal ID\n", + " * Capacity for each facility\n", + "\n", + " \n", + "\n", + "**Specifications for Coverage Model:** \n", + "\n", + "**name.Coverage( ):** \n", + "- network_type ('walk', 'bike', 'drive', or 'otp')\n", + "- sources_filename (primary input data)\n", + "- destinations_filename (secondary input data)\n", + "- transit_matrix_filename (origin-destination transit matrix)\n", + " \n", + "**name.calculate():**\n", + "- upper_threshold (the time (in seconds) in which the origin and destinations are considered to be out of range of each other)\n", + "\n", + "Functions within the Coverage Model class (use as name.function()): \n", + "- calculate () \n", + "- model_results (results of the TSFCA calculations)\n", + "- write_csv (filename='name') \n", + "- aggregate ()\n", + "- write_aggregated_results()\n", + "- plot_cdf()\n", + "- plot_choropleth()\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from spatial_access.Models import *" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "#View sources and destinations for Chicago Health Facilities\n", + "sources=pd.read_csv('/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", + "dest=pd.read_csv('/Users/whlu/spatial_access/data/input_data/health_chicago.csv')\n", + "dest= dest.rename(index=str, columns={\"target\": \"capacity\"})\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geoid10lonlatPop2014Pov14communityID
017031842400-87.63004041.7424755157769441
117031840300-87.68188241.83209458811021592
217031841100-87.63509841.85100633632742343
317031841200-87.68334241.85556237101819314
417031838200-87.67507941.8704163296361285
\n", + "
" + ], + "text/plain": [ + " geoid10 lon lat Pop2014 Pov14 community ID\n", + "0 17031842400 -87.630040 41.742475 5157 769 44 1\n", + "1 17031840300 -87.681882 41.832094 5881 1021 59 2\n", + "2 17031841100 -87.635098 41.851006 3363 2742 34 3\n", + "3 17031841200 -87.683342 41.855562 3710 1819 31 4\n", + "4 17031838200 -87.675079 41.870416 3296 361 28 5" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sources.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IDFacilitylatlonTypecapacitycategorycommunity
01American Indian Health Service of Chicago, Inc.41.956676-87.6518795127000Other Health Providers3
12Hamdard Center for Health and Human Services41.997852-87.6695355190000Other Health Providers77
23Infant Welfare Society of Chicago41.924904-87.7172705137000Other Health Providers22
34Mercy Family - Henry Booth House Family Health...41.841694-87.6247905159000Other Health Providers35
46Cook County - Dr. Jorge Prieto Health Center41.847143-87.7249755166000Other Health Providers30
\n", + "
" + ], + "text/plain": [ + " ID Facility lat \\\n", + "0 1 American Indian Health Service of Chicago, Inc. 41.956676 \n", + "1 2 Hamdard Center for Health and Human Services 41.997852 \n", + "2 3 Infant Welfare Society of Chicago 41.924904 \n", + "3 4 Mercy Family - Henry Booth House Family Health... 41.841694 \n", + "4 6 Cook County - Dr. Jorge Prieto Health Center 41.847143 \n", + "\n", + " lon Type capacity category community \n", + "0 -87.651879 5 127000 Other Health Providers 3 \n", + "1 -87.669535 5 190000 Other Health Providers 77 \n", + "2 -87.717270 5 137000 Other Health Providers 22 \n", + "3 -87.624790 5 159000 Other Health Providers 35 \n", + "4 -87.724975 5 166000 Other Health Providers 30 " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dest.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "dest_updated = pd.read_csv('/Users/whlu/spatial_access/data/input_data/health_chicago.csv').rename(index=str, columns={\"target\": \"capacity\"})\n", + "dest_updated.to_csv('/Users/whlu/spatial_access/data/input_data/health_chicago_updated.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:spatial_access.p2p:You should use tmx instead of csv for significantly better performance\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> geoid10\n", + "> lon\n", + "> lat\n", + "> Pop2014\n", + "> Pov14\n", + "> community\n", + "> ID\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the unique index variable: geoid10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no population variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the population variable: Pop2014\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> Unnamed: 0\n", + "> ID\n", + "> Facility\n", + "> lat\n", + "> lon\n", + "> Type\n", + "> capacity\n", + "> category\n", + "> community\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the unique index variable: ID\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no capacity variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the capacity variable: capacity\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no category variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the category variable: category\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" + ] + } + ], + "source": [ + "coverage = Coverage(network_type=\"walk\",\n", + " transit_matrix_filename='/Users/whlu/spatial_access/data/output_1_walk.csv',\n", + " sources_filename='/Users/whlu/spatial_access/data/input_data/tracts2010.csv',\n", + " destinations_filename='/Users/whlu/spatial_access/data/input_data/health_chicago_updated.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_poppercap_spendingcategory
141008921.001070Federally Qualified Health Centers
15498532.226546Federally Qualified Health Centers
16518022.721903Federally Qualified Health Centers
17742692.113937Federally Qualified Health Centers
18419584.004004Federally Qualified Health Centers
\n", + "
" + ], + "text/plain": [ + " service_pop percap_spending category\n", + "14 100892 1.001070 Federally Qualified Health Centers\n", + "15 49853 2.226546 Federally Qualified Health Centers\n", + "16 51802 2.721903 Federally Qualified Health Centers\n", + "17 74269 2.113937 Federally Qualified Health Centers\n", + "18 41958 4.004004 Federally Qualified Health Centers" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coverage.calculate(upper_threshold=1800).head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "#Writes output to csv\n", + "\n", + "coverage.model_results.to_csv('/Users/whlu/spatial_access/data/coverage score/coverage_results.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aggregation by greater areal units" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_poppercap_spending
spatial_index
ALBANY PARK3050081.638229
ARCHER HEIGHTS596201.777927
ARMOUR SQUARE586712.897513
AUBURN GRESHAM1063402.461102
AUSTIN2481203.094732
\n", + "
" + ], + "text/plain": [ + " service_pop percap_spending\n", + "spatial_index \n", + "ALBANY PARK 305008 1.638229\n", + "ARCHER HEIGHTS 59620 1.777927\n", + "ARMOUR SQUARE 58671 2.897513\n", + "AUBURN GRESHAM 106340 2.461102\n", + "AUSTIN 248120 3.094732" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coverage.aggregate(aggregation_type=None, shapefile='/Users/whlu/spatial_access/data/chicago_boundaries/chi_comm_boundaries.shp', \n", + " spatial_index='community', projection='epsg:4326').head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "#For community areas write to csv\n", + "\n", + "coverage.write_aggregated_results(filename = \"/Users/whlu/spatial_access/data/coverage score/coverage_aggregated.csv\", output_type = 'csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot\n", + "The following cumulative distribution function shows the number of tracts that fall below a certain level of per capita spending.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Plot was saved to: /Users/whlu/spatial_access/data/coverage score/coverage_cdf_plot.png\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "coverage.plot_cdf(filename = '/Users/whlu/spatial_access/data/coverage score/coverage_cdf_plot.png', \n", + " plot_type = \"percap\", title = 'CDF of Coverage Score',\n", + " xlabel = 'Per Capita Spending (USD)', \n", + " ylabel = 'Number of Tracts')\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Choropleth Mapping" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Figure was saved to: /Users/whlu/spatial_access/data/coverage score/coverage_choropleth.png\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "coverage.plot_choropleth(column = \"percap_spending\", \n", + " shapefile='/Users/whlu/spatial_access/data/chicago_boundaries/chi_comm_boundaries.shp',\n", + " title = 'Per Capita Spending (USD), Chicago Community Areas',\n", + " include_destinations = False,\n", + " filename = '/Users/whlu/spatial_access/data/coverage score/coverage_choropleth.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/4_tsfca.ipynb b/docs/notebooks/4_tsfca.ipynb new file mode 100755 index 0000000..9d0e5ea --- /dev/null +++ b/docs/notebooks/4_tsfca.ipynb @@ -0,0 +1,1547 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Two Stage Floating Catchment Area" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the following lines, the access to per capita spending for each category of health services will be calculated using the Two Stage Floating Catchment Area method. \n", + "\n", + "#### **Column Inputs for the TSFCA Model**\n", + "Each model takes in inputs from both the sources and destination csv files. Each model takes in the standard inputs indicated below as well as additional inputs specified under each model\n", + "\n", + "* Source File\n", + " * Unique index identifier (ID) (integer or real) \n", + " * Latitude and longitude coordinates (real)\n", + " * To aggregate: larger areal ID\n", + "* Destination File\n", + " * Population within a certain buffer \n", + " * Capacity for each facility\n", + " * Category for each type of facility\n", + " * To aggregate: larger areal ID\n", + "\n", + "**Specifications for the TSFCA Model:**\n", + "\n", + "**name.tsfca():**\n", + "- network_type ('walk', 'bike', 'drive', or 'otp')\n", + "- sources_filename (primary input data)\n", + "- destinations_filename (secondary input data)\n", + "- source_column_names: (map column names to expected values)\n", + "- dest_column_names (map column names to expected values)\n", + "- configs: defaults to None, else pass in an instance of Configs to override\n", + " default values for p2p.\n", + "- debug (Enables one to see more detailed logging output)\n", + "- transit_matrix_filename (origin-destination transit matrix)\n", + "\n", + "**name.calculate():**\n", + "- upper_threshold (the time (in seconds) in which the origin and destinations are considered to be out of range of each other)\n", + "\n", + "Functions within the TSFCA Model class (use as name.function()): \n", + "- calculate () \n", + "- model_results (results of the TSFCA calculations)\n", + "- write_csv (filename='name') \n", + "- aggregate ()\n", + "- write_aggregated_results()\n", + "- plot_cdf()\n", + "- plot_choropleth()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from spatial_access.Models import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "#View sources and destinations for Chicago Health Facilities\n", + "sources=pd.read_csv('/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", + "dest=pd.read_csv('/Users/whlu/spatial_access/data/input_data/health_chicago.csv')\n", + "dest= dest.rename(index=str, columns={\"target\": \"capacity\"})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geoid10lonlatPop2014Pov14communityID
017031842400-87.63004041.7424755157769441
117031840300-87.68188241.83209458811021592
217031841100-87.63509841.85100633632742343
317031841200-87.68334241.85556237101819314
417031838200-87.67507941.8704163296361285
\n", + "
" + ], + "text/plain": [ + " geoid10 lon lat Pop2014 Pov14 community ID\n", + "0 17031842400 -87.630040 41.742475 5157 769 44 1\n", + "1 17031840300 -87.681882 41.832094 5881 1021 59 2\n", + "2 17031841100 -87.635098 41.851006 3363 2742 34 3\n", + "3 17031841200 -87.683342 41.855562 3710 1819 31 4\n", + "4 17031838200 -87.675079 41.870416 3296 361 28 5" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sources.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IDFacilitylatlonTypecapacitycategorycommunity
01American Indian Health Service of Chicago, Inc.41.956676-87.6518795127000Other Health Providers3
12Hamdard Center for Health and Human Services41.997852-87.6695355190000Other Health Providers77
23Infant Welfare Society of Chicago41.924904-87.7172705137000Other Health Providers22
34Mercy Family - Henry Booth House Family Health...41.841694-87.6247905159000Other Health Providers35
46Cook County - Dr. Jorge Prieto Health Center41.847143-87.7249755166000Other Health Providers30
\n", + "
" + ], + "text/plain": [ + " ID Facility lat \\\n", + "0 1 American Indian Health Service of Chicago, Inc. 41.956676 \n", + "1 2 Hamdard Center for Health and Human Services 41.997852 \n", + "2 3 Infant Welfare Society of Chicago 41.924904 \n", + "3 4 Mercy Family - Henry Booth House Family Health... 41.841694 \n", + "4 6 Cook County - Dr. Jorge Prieto Health Center 41.847143 \n", + "\n", + " lon Type capacity category community \n", + "0 -87.651879 5 127000 Other Health Providers 3 \n", + "1 -87.669535 5 190000 Other Health Providers 77 \n", + "2 -87.717270 5 137000 Other Health Providers 22 \n", + "3 -87.624790 5 159000 Other Health Providers 35 \n", + "4 -87.724975 5 166000 Other Health Providers 30 " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dest.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dest_updated = pd.read_csv('/Users/whlu/spatial_access/data/input_data/health_chicago.csv').rename(index=str, columns={\"target\": \"capacity\"})\n", + "dest_updated.to_csv('/Users/whlu/spatial_access/data/input_data/health_chicago_updated.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> geoid10\n", + "> lon\n", + "> lat\n", + "> Pop2014\n", + "> Pov14\n", + "> community\n", + "> ID\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> Unnamed: 0\n", + "> ID\n", + "> Facility\n", + "> lat\n", + "> lon\n", + "> Type\n", + "> capacity\n", + "> category\n", + "> community\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.p2p:Approx area of bounding box: 2,445.05 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 17.61 seconds\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> geoid10\n", + "> lon\n", + "> lat\n", + "> Pop2014\n", + "> Pov14\n", + "> community\n", + "> ID\n", + "If you have no population variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the population variable: Pop2014\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The variables in your data set are:\n", + "> Unnamed: 0\n", + "> ID\n", + "> Facility\n", + "> lat\n", + "> lon\n", + "> Type\n", + "> capacity\n", + "> category\n", + "> community\n", + "If you have no capacity variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the capacity variable: capacity\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no category variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the category variable: category\n" + ] + } + ], + "source": [ + "#Specify the network type here\n", + "tsfca = TSFCA(network_type='walk',\n", + " sources_filename='/Users/whlu/spatial_access/data/input_data/tracts2010.csv',\n", + " destinations_filename='/Users/whlu/spatial_access/data/input_data/health_chicago_updated.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
percap_spend_Other Health Providerspercap_spend_Hospitalspercap_spend_All Free Health Clinicspercap_spend_School-Based Health Centerspercap_spend_Federally Qualified Health Centerspercap_spend_all_categories
10.0000000.0000000.0000002.2003010.0000002.200301
20.0000000.0000000.0000003.1922605.2720958.464355
35.0505841.7285743.3779003.4961142.54667816.199851
40.0000005.8717180.0000008.77176012.80973727.453215
52.54260911.8543312.49910710.0759977.32365634.295700
60.0000000.0000000.0000000.0000001.8823221.882322
70.0000000.0000000.0000000.0000000.0000000.000000
80.0000000.0000000.0000000.0000000.0000000.000000
90.0000000.0000000.0000000.0000008.8476988.847698
100.0000000.0000000.0000000.0000000.0000000.000000
110.0000000.0000000.0000000.0000000.0000000.000000
120.0000000.0000003.3779000.0000000.0000003.377900
131.6951574.4701490.0000002.0374074.17178312.374496
140.0000005.8089220.0000002.0374074.17178312.018112
150.0000001.3471503.4529771.2756815.45043411.526242
162.54260911.0695151.6140836.5508629.19171430.968783
170.0000005.2071860.0000000.0000002.7822097.989395
180.0000002.3103170.0000000.0000003.7783876.088704
191.1636966.5778070.0000001.4653996.92269816.129600
201.1636966.5778070.0000002.3210116.92269816.985212
210.0000000.0000002.3836820.0000004.9349807.318661
220.0000003.4965662.3836820.0000004.93498010.815228
230.0000001.4776510.0000003.4340511.4806356.392336
240.0000001.4776510.0000003.4340512.5300977.441798
254.3743911.7285740.0000006.9422106.78728419.832459
260.0000002.3475680.0000000.0000001.6385423.986110
273.4848361.9053250.0000003.1673500.0000008.557511
280.0000004.1391361.9340843.1508108.00083917.224869
290.0000002.8248013.4529773.1508106.93106916.359657
300.0000000.0000003.4529770.0000001.1624414.615418
.....................
7721.6647615.6048770.0000001.2697039.71014218.249483
7730.0000000.0000000.0000000.0000003.6602493.660249
7740.0000000.0000000.0000000.0000004.9408774.940877
7750.0000000.0000004.8544040.0000005.57200310.426406
7760.0000000.0000000.0000000.0000005.1600095.160009
7770.0000000.0000002.2092790.0000004.0309506.240229
7780.0000000.0000004.3787530.0000002.7503217.129075
7790.0000000.0000000.0000000.0000000.0000000.000000
7800.0000000.0000000.0000000.0000000.0000000.000000
7810.0000000.0000000.0000000.0000000.0000000.000000
7820.0000000.0000000.0000000.0000000.0000000.000000
7830.0000003.2155641.6140831.7127484.48745511.029849
7840.0000000.0000002.4991072.4337650.9851715.918043
7852.5426096.8483946.2109325.2502263.43607224.288231
7860.0000000.0000005.8770070.0000000.0000005.877007
7870.0000000.0000000.0000000.0000000.0000000.000000
7880.0000000.0000004.8544040.0000008.40002313.254427
7890.0000000.0000004.8544040.0000008.40002313.254427
7900.0000000.0000004.8544040.00000010.62256915.476973
7910.0000000.0000004.8544040.00000012.65127617.505679
7920.0000000.0000000.0000000.0000005.1600095.160009
7930.0000000.0000000.0000000.0000003.6602493.660249
7940.0000002.3103170.0000000.0000006.5764958.886812
7950.0000002.3103170.0000000.0000004.7794577.089774
7960.0000001.1400120.0000000.0000004.7794575.919469
7970.0000001.1400120.0000000.0000005.0898836.229895
7980.0000002.3103170.0000000.0000005.0898837.400200
7990.0000001.3471503.4529771.8751305.88160712.556864
8001.6647614.4162180.0000001.26970311.33874318.689425
8010.0000000.0000002.2092790.0000005.9132728.122551
\n", + "

801 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " percap_spend_Other Health Providers percap_spend_Hospitals \\\n", + "1 0.000000 0.000000 \n", + "2 0.000000 0.000000 \n", + "3 5.050584 1.728574 \n", + "4 0.000000 5.871718 \n", + "5 2.542609 11.854331 \n", + ".. ... ... \n", + "797 0.000000 1.140012 \n", + "798 0.000000 2.310317 \n", + "799 0.000000 1.347150 \n", + "800 1.664761 4.416218 \n", + "801 0.000000 0.000000 \n", + "\n", + " percap_spend_All Free Health Clinics \\\n", + "1 0.000000 \n", + "2 0.000000 \n", + "3 3.377900 \n", + "4 0.000000 \n", + "5 2.499107 \n", + ".. ... \n", + "797 0.000000 \n", + "798 0.000000 \n", + "799 3.452977 \n", + "800 0.000000 \n", + "801 2.209279 \n", + "\n", + " percap_spend_School-Based Health Centers \\\n", + "1 2.200301 \n", + "2 3.192260 \n", + "3 3.496114 \n", + "4 8.771760 \n", + "5 10.075997 \n", + ".. ... \n", + "797 0.000000 \n", + "798 0.000000 \n", + "799 1.875130 \n", + "800 1.269703 \n", + "801 0.000000 \n", + "\n", + " percap_spend_Federally Qualified Health Centers \\\n", + "1 0.000000 \n", + "2 5.272095 \n", + "3 2.546678 \n", + "4 12.809737 \n", + "5 7.323656 \n", + ".. ... \n", + "797 5.089883 \n", + "798 5.089883 \n", + "799 5.881607 \n", + "800 11.338743 \n", + "801 5.913272 \n", + "\n", + " percap_spend_all_categories \n", + "1 2.200301 \n", + "2 8.464355 \n", + "3 16.199851 \n", + "4 27.453215 \n", + "5 34.295700 \n", + ".. ... \n", + "797 6.229895 \n", + "798 7.400200 \n", + "799 12.556864 \n", + "800 18.689425 \n", + "801 8.122551 \n", + "\n", + "[801 rows x 6 columns]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tsfca.calculate(upper_threshold=1800)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
percap_spend_Other Health Providerspercap_spend_Hospitalspercap_spend_All Free Health Clinicspercap_spend_School-Based Health Centerspercap_spend_Federally Qualified Health Centerspercap_spend_all_categories
10.0000000.0000000.0000002.2003010.0000002.200301
20.0000000.0000000.0000003.1922605.2720958.464355
35.0505841.7285743.3779003.4961142.54667816.199851
40.0000005.8717180.0000008.77176012.80973727.453215
52.54260911.8543312.49910710.0759977.32365634.295700
\n", + "
" + ], + "text/plain": [ + " percap_spend_Other Health Providers percap_spend_Hospitals \\\n", + "1 0.000000 0.000000 \n", + "2 0.000000 0.000000 \n", + "3 5.050584 1.728574 \n", + "4 0.000000 5.871718 \n", + "5 2.542609 11.854331 \n", + "\n", + " percap_spend_All Free Health Clinics \\\n", + "1 0.000000 \n", + "2 0.000000 \n", + "3 3.377900 \n", + "4 0.000000 \n", + "5 2.499107 \n", + "\n", + " percap_spend_School-Based Health Centers \\\n", + "1 2.200301 \n", + "2 3.192260 \n", + "3 3.496114 \n", + "4 8.771760 \n", + "5 10.075997 \n", + "\n", + " percap_spend_Federally Qualified Health Centers \\\n", + "1 0.000000 \n", + "2 5.272095 \n", + "3 2.546678 \n", + "4 12.809737 \n", + "5 7.323656 \n", + "\n", + " percap_spend_all_categories \n", + "1 2.200301 \n", + "2 8.464355 \n", + "3 16.199851 \n", + "4 27.453215 \n", + "5 34.295700 " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Output\n", + "tsfca.model_results.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Scores**\n", + "- percap_spend_Federally Qualified Health Centers is the access to per capita spending by Federally Qualified Health Centers\n", + "- percap_spend_School-Based Health Centers is the access to per capita spending by School-based Health Centers\n", + "- percap_spend_All Free Health Clinics is the access to per capita spending by free health clinics\n", + "- percap_spend_Hospitals is the access to per capita spending by hospitals\n", + "- percap_spend_Other Health Providers is the access to per capita spending by all other healthcare providers\n", + "- percap_spend_all_categories is the sum of the above five categories" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Merge the per capita spending data to the origin's shapefile and map them out in order to view the distribution of the access to per capita spending by tract:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "#Writes output to csv\n", + "tsfca.model_results.to_csv('/Users/whlu/spatial_access/data/tsfca/tsfca_results.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aggregation at a greater areal level" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
percap_spend_Other Health Providerspercap_spend_Hospitalspercap_spend_All Free Health Clinicspercap_spend_School-Based Health Centerspercap_spend_Federally Qualified Health Centerspercap_spend_all_categories
spatial_index
ALBANY PARK0.0000001.2840000.000003.1218643.1933657.599230
ARCHER HEIGHTS0.0000000.0000000.000000.0000006.9854606.985460
ARMOUR SQUARE6.2481381.3828590.675584.5951244.00678616.908487
ASHBURN0.0000001.0243780.000000.0000000.0000001.024378
AUBURN GRESHAM0.0000000.0000000.000001.9069272.8536104.760537
\n", + "
" + ], + "text/plain": [ + " percap_spend_Other Health Providers percap_spend_Hospitals \\\n", + "spatial_index \n", + "ALBANY PARK 0.000000 1.284000 \n", + "ARCHER HEIGHTS 0.000000 0.000000 \n", + "ARMOUR SQUARE 6.248138 1.382859 \n", + "ASHBURN 0.000000 1.024378 \n", + "AUBURN GRESHAM 0.000000 0.000000 \n", + "\n", + " percap_spend_All Free Health Clinics \\\n", + "spatial_index \n", + "ALBANY PARK 0.00000 \n", + "ARCHER HEIGHTS 0.00000 \n", + "ARMOUR SQUARE 0.67558 \n", + "ASHBURN 0.00000 \n", + "AUBURN GRESHAM 0.00000 \n", + "\n", + " percap_spend_School-Based Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 3.121864 \n", + "ARCHER HEIGHTS 0.000000 \n", + "ARMOUR SQUARE 4.595124 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 1.906927 \n", + "\n", + " percap_spend_Federally Qualified Health Centers \\\n", + "spatial_index \n", + "ALBANY PARK 3.193365 \n", + "ARCHER HEIGHTS 6.985460 \n", + "ARMOUR SQUARE 4.006786 \n", + "ASHBURN 0.000000 \n", + "AUBURN GRESHAM 2.853610 \n", + "\n", + " percap_spend_all_categories \n", + "spatial_index \n", + "ALBANY PARK 7.599230 \n", + "ARCHER HEIGHTS 6.985460 \n", + "ARMOUR SQUARE 16.908487 \n", + "ASHBURN 1.024378 \n", + "AUBURN GRESHAM 4.760537 " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Gets the output of the aggregation by access to per capita spending by community area\n", + "tsfca.aggregate(aggregation_type=None, shapefile='/Users/whlu/spatial_access/data/chicago_boundaries/chi_comm_boundaries.shp', \n", + " spatial_index='community', projection='epsg:4326').head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#For community areas write to csv\n", + "tsfca.write_aggregated_results(filename = \"/Users/whlu/spatial_access/data/tsfca/tsfca_aggregated.csv\", output_type = 'csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot\n", + "The following cumulative distribution function shows the number of tracts that fall below a certain level of per capita spending.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Plot was saved to: /Users/whlu/spatial_access/data/tsfca/tsfca_cdf_plot.png\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "tsfca.plot_cdf(filename = '/Users/whlu/spatial_access/data/tsfca/tsfca_cdf_plot.png', \n", + " plot_type = \"percap\", title = 'CDF of TSFCA',\n", + " xlabel = 'Per Capita Spending (USD)', \n", + " ylabel = 'Number of Tracts')\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Choropleth Mapping" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Figure was saved to: /Users/whlu/spatial_access/data/tsfca/tsfca_choropleth.png\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "tsfca.plot_choropleth(column = \"percap_spend_all_categories\", \n", + " shapefile='/Users/whlu/spatial_access/data/chicago_boundaries/chi_comm_boundaries.shp',\n", + " title = 'Access to Per Capital Spending (Total), Chicago Community Areas',\n", + " include_destinations = False,\n", + " filename = '/Users/whlu/spatial_access/data/tsfca/tsfca_choropleth.png')" + ] + } + ], + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/README.md b/docs/notebooks/README.md deleted file mode 100755 index 5ff00ec..0000000 --- a/docs/notebooks/README.md +++ /dev/null @@ -1,15 +0,0 @@ -**The repository is organized as follows:** - -Under the **demo** folder, the notebooks run through Chicago's health example: -* [reqs.ipynb](./reqs.ipynb) : This notebook shows the installation and files requirements in order to run the demos. -* [matrix.ipynb](./matrix.ipynb) : This notebook shows how to run the travel time distance matrices. It uses the [p2p](./scripts/p2p.py) script. -* [access_score.ipynb](./access_score.ipynb) : This notebook shows how to run the access score and the specific parameters that might be tweaked depending on the user's interest. It uses the [ScoreModel](./scripts/ScoreModel.py) and [CommunityAnalytics](./scripts/CommunityAnalytics.py) scripts. -* [coverage_score.ipynb](./coverage_score.ipynb) :This notebook shows how to run the coverage score and the specific parameters that might be tweaked depending on the user's interest. It uses the [ScoreModel](./scripts/ScoreModel.py) and [CommunityAnalytics](./scripts/CommunityAnalytics.py) scripts. -* [travel_time_metrics.ipynb](./travel_time_metrics.ipynb) :This notebook shows how to run the travel time distance matrices. It uses the [ScoreModel](./scripts/ScoreModel.py) and [CommunityAnalytics](./scripts/CommunityAnalytics.py) scripts. -* [calibration.ipynb](./calibration.ipynb) : **? Have it as a notebook/within the demos/in this notebook or not at all?** Comparison (validation and calibration) with GoogleMaps. - -The **data** folder contains the files needed for the estimation of the metrics under **ORIG** (for origins) and **DEST** (for destinations). The **matrices** folder contains the estimated symmetric and asymmetric matrices. The **access_score**, **coverage_score**, and **travel_time_metrics** folders contain the results of the analyses. Finally, **figures** contain the results of maps and plots calculated during the process. - -Further editing of the Python scripts is accessible under the folder **scripts**. - -The rest of this notebook describes the reasoning of the Python modules p2p, ScoreModel, and CommunityAnalytics which compose the calculation of the algorithm of travel time **matrices** and the estimation of the **metrics**. Please note that this report stipulates the **_parameters_** specified within the estimations so the users can reproduce the calculations. diff --git a/docs/notebooks/access_score.ipynb b/docs/notebooks/access_score.ipynb deleted file mode 100755 index 811473a..0000000 --- a/docs/notebooks/access_score.ipynb +++ /dev/null @@ -1,982 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Access Scores" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Calculating the Access Score\n", - "---\n", - "In the following lines, first the _total access score_ will be estimated followed by an example of the _aggregation_ of the data. Finally, the score will be calculated for a _subset_ of the data (where one or several categories is selected).\n", - "\n", - "**Specifications for the Access Model:** \n", - "\n", - "**name.AccessModel( ):** \n", - "- network_type ('drive' or 'walk')\n", - "- source_filename (primary input data) \n", - "- dest_filename (secondary input data) \n", - "- sp_matrix_filename (origin-destination travel time matrix) \n", - "- decay_function ('linear', 'root', 'logit') \n", - "- limit_categories (only estimate model for specific categories)\n", - "\n", - "**name.calculate():**\n", - "- custom_weight_dict (Specifies the weights of each facility/establishment defined as a previously generated dictionary. If custom_weight_dict=None, the dictionary will contain [1,1,1,1,1,1,1,1,1,1] weights.)\n", - "- largest_weights_first=True sorts the weight array such that the largest values will be used first. If False, it will do the opposite.\n", - "- limit_categories (None is defined as default, but user can delimit on particular categories of interest to calculate the access score.) \n", - "- upper (is the time (in minutes) in which the origin and destinations are considered to be out of range of each other. As a default, if the travel time distance exceeds 30 minutes, the score will be zero.)\n", - "- custom_threshold=40 (change binning threshold specifying it in calculate() function. Example: model_name.calculate(custom_threshold=40) for changing the percent of population above a certain threshold.)\n", - "- normalize (Default is True and shows both normalized and non-normalized values. False shows only non-normalized results.) \n", - "\n", - "\n", - "Functions within the Access Model class (use as name.function()): \n", - "- calculate () \n", - "- get_aggregate (aggregate_type) Aggregation can be by ('access') score for the lower aral unit. If the user wants to modify the level of aggregation, change 'community' with other spatial unit of analysis in code. \n", - "- write_aggregate (aggregate_type, filename='name')\n", - "- plot_cdf (title='CDF Access Score')\n", - "- write_csv (filename='name') \n", - "\n", - "In the **scripts**, the user can specify: The default weights set before as [1,1,1,1,1,1,1,1,1,1] weights, different standarizations, and other modifications to the access score. \n", - "\n", - "Dictionary weights should be set as the following example: \n", - "**dict = { \n", - "\"Hospitals\": [10,10,10,10,10], \n", - "\"Federally Qualified Health Centers\": [8, 7, 6, 5, 4], \n", - "\"School-Based Health Centers\": [7, 7, 6, 6, 5], \n", - "\"All Free Health Clinics\": [5, 5, 5, 4, 4], \n", - "\"Other Health Providers\": [4,3,2,1,1] \n", - "}**" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import sys, os\n", - "os.chdir('scripts')\n", - "\n", - "from CommunityAnalytics import *\n", - "import pandas as pd\n", - "\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "#View sources and destinations for Chicago Health Facilities\n", - "sources=pd.read_csv('data/ORIG/tracts2010.csv')\n", - "dest=pd.read_csv('data/DEST/health_chicago.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
geoid10lonlatPop2014Pov14community
017031842400-87.63004041.742475515776944
117031840300-87.68188241.8320945881102159
217031841100-87.63509841.8510063363274234
317031841200-87.68334241.8555623710181931
417031838200-87.67507941.870416329636128
\n", - "
" - ], - "text/plain": [ - " geoid10 lon lat Pop2014 Pov14 community\n", - "0 17031842400 -87.630040 41.742475 5157 769 44\n", - "1 17031840300 -87.681882 41.832094 5881 1021 59\n", - "2 17031841100 -87.635098 41.851006 3363 2742 34\n", - "3 17031841200 -87.683342 41.855562 3710 1819 31\n", - "4 17031838200 -87.675079 41.870416 3296 361 28" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sources.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDFacilitylatlonTypetargetcategorycommunity
01American Indian Health Service of Chicago, Inc.41.956676-87.6518795127000Other Health Providers3
12Hamdard Center for Health and Human Services41.997852-87.6695355190000Other Health Providers77
23Infant Welfare Society of Chicago41.924904-87.7172705137000Other Health Providers22
34Mercy Family - Henry Booth House Family Health...41.841694-87.6247905159000Other Health Providers35
46Cook County - Dr. Jorge Prieto Health Center41.847143-87.7249755166000Other Health Providers30
\n", - "
" - ], - "text/plain": [ - " ID Facility lat \\\n", - "0 1 American Indian Health Service of Chicago, Inc. 41.956676 \n", - "1 2 Hamdard Center for Health and Human Services 41.997852 \n", - "2 3 Infant Welfare Society of Chicago 41.924904 \n", - "3 4 Mercy Family - Henry Booth House Family Health... 41.841694 \n", - "4 6 Cook County - Dr. Jorge Prieto Health Center 41.847143 \n", - "\n", - " lon Type target category community \n", - "0 -87.651879 5 127000 Other Health Providers 3 \n", - "1 -87.669535 5 190000 Other Health Providers 77 \n", - "2 -87.717270 5 137000 Other Health Providers 22 \n", - "3 -87.624790 5 159000 Other Health Providers 35 \n", - "4 -87.724975 5 166000 Other Health Providers 30 " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dest.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n", - "If you have no target variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Loaded sp matrix from file: data/matrices/walk_asym_health_tracts.csv\n", - "INFO:ScoreModel:Finished loading sp_matrix in 0.14 seconds\n", - "INFO:ScoreModel:Processing... This could take a while\n", - "INFO:ScoreModel:Finished processing ModelData in 0.06 seconds\n" - ] - } - ], - "source": [ - "#the last already generated a shortest path matrix, so we can reuse that instead of regenerating it.\n", - "#Specify the distance decay function here.\n", - "\n", - "access = AccessModel(network_type='walk',\n", - " sp_matrix_filename='data/matrices/walk_asym_health_tracts.csv',\n", - " source_filename='data/ORIG/tracts2010.csv',\n", - " dest_filename='data/DEST/health_chicago.csv',\n", - " decay_function='logit')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "#Example of density and variety weights:\n", - "dict = {\n", - "\"Hospitals\": [10,10,10,10,10],\n", - "\"Federally Qualified Health Centers\": [8, 7, 6, 5, 4],\n", - "\"School-Based Health Centers\": [7, 7, 6, 6, 5],\n", - "\"All Free Health Clinics\": [5, 5, 5, 4, 4],\n", - "\"Other Health Providers\": [4, 3, 2, 1, 1]\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Finished calculating hssa in 0.13 seconds\n" - ] - } - ], - "source": [ - "access.calculate(custom_threshold=40,\n", - " normalize=True,\n", - " custom_weight_dict=dict,\n", - " largest_weights_first=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
latlonpopulationlower_areal_unitaccessaccess_cataccess_sd
geoid10
1703184240041.742475-87.6300405157.044.00.0543737.00.126241
1703184030041.832094-87.6818825881.059.06.55156522.015.211203
1703184110041.851006-87.6350983363.034.09.28423944.021.555834
1703184120041.855562-87.6833423710.031.020.03426596.046.514881
1703183820041.870416-87.6750793296.028.040.359906111.093.706271
\n", - "
" - ], - "text/plain": [ - " lat lon population lower_areal_unit access \\\n", - "geoid10 \n", - "17031842400 41.742475 -87.630040 5157.0 44.0 0.054373 \n", - "17031840300 41.832094 -87.681882 5881.0 59.0 6.551565 \n", - "17031841100 41.851006 -87.635098 3363.0 34.0 9.284239 \n", - "17031841200 41.855562 -87.683342 3710.0 31.0 20.034265 \n", - "17031838200 41.870416 -87.675079 3296.0 28.0 40.359906 \n", - "\n", - " access_cat access_sd \n", - "geoid10 \n", - "17031842400 7.0 0.126241 \n", - "17031840300 22.0 15.211203 \n", - "17031841100 44.0 21.555834 \n", - "17031841200 96.0 46.514881 \n", - "17031838200 111.0 93.706271 " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#Output\n", - "access.results.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Scores:** \n", - "- access_cat is the count of weights by tract. \n", - "- access is the sum of the final score obtained from multiplying each weight by the distance decay for each establishment. \n", - "- Finally, access_sd is the max-min normalized access score by doing: \n", - "$$access sd=\\frac{access-min}{max-min}$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Merge the scores to the origin's shapefile and map out the scores in order to view the distribution of the access scores by tract:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "By constructing the access model, we can do several things:\n", - "- Write to csv\n", - "- Aggregate\n", - "- Get count of nearby destinations metric\n", - "- Get time to closest destination metric" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [], - "source": [ - "#Write output to csv\n", - "access.write_csv()\n", - "\n", - "#Saved as Access_walk_health_tracts.csv" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Aggregation at a greater areal level" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
access
lower_areal_unit
440.033946
594.633144
345.627126
3115.149919
2816.716169
\n", - "
" - ], - "text/plain": [ - " access\n", - "lower_areal_unit \n", - "44 0.033946\n", - "59 4.633144\n", - "34 5.627126\n", - "31 15.149919\n", - "28 16.716169" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#Get the output of the aggrregation by access by community area\n", - "access._get_aggregate('access').head()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Wrote aggregate to file: data/access_metrics/access_aggregate_0.csv\n" - ] - } - ], - "source": [ - "#For community areas write to csv\n", - "access.write_aggregate('access')\n", - "\n", - "#Saved as access_aggregate_health_tracts_comm.csv" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Plot" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following cumulative distribution function shows the percentage of tracts that fall within an access score." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Bx544GrbbrvtVvbYY09uuOEm5syZzZlnnlnPWYLrrruBHj16NP2NpNq3b09FxeoVh4hg77334eqrr1lt23333c+LL77I008/yahRIxk2bMQaxwGw5ZZbsuWWW3L88cdz0EH9WLBgAVDXo2IiIjjjjDM44YTvfGnLnDmzad9+7VXLFRUVX6r1Z7H22l8c365du2Yd0a7e5veIODDPywndzKwJnnrqSY488kjGjRvP2LHjGD/+CTbfvDsvv5yt8XPAgJP485//zGuvvbpq3dNPP8Unn3zC4sWL6Np1MwDGjBmzanunTuvyn/8sWbW87777MXLkA0Q6Vu6bbybN7LvuuitPPPEEAO+88w7Tp08HYMcdd2Ty5MnMnz+fmpoaxo8fz+6775E3zp122pl//vMVZs6cCSQ14ffff48lS5awePEi+vbty4UXXsTbb7+92rF9+uzG2LF/AZL71RtuuCHrrbde3us9//xzq97PzJkzqaiooHPnzgA8++yzLF26lAULFjB58kv07t2b/fbbjz/96VGWLEnKZe7cfzNvXv2ThHbuvD6dO3dmypTkcxo37i9546lt11135bnnJrB06VKWLFnC888/16jjs8rUUU7SjkAl0HHluoi4pygRWaO5ud2s6TbtVJG5x3rW8+Uzfvw4TjvtjC+tO/jggxk/fhynn356g+ffeOONufrqa7jxxhuYN28e7dq1Y7fddmO//b7GqaeezhVXXMaIEcPo2/eL5t0999yT3/3uLk48sT9nnHEGAwcO4rrrfkX//iewYsUKunfvzi23/Ib+/ftz+eWXc/zx36Jnzx5ss822rLfeemy66aace+55DBp05qqOcnW1FOTq0qULV101lEsvvYTq6mUA/OhHZ9Op07qcf/55LFu2jIjgggt+utqxZ501mCFDrqR//xPo2LEjQ4f+d4Pl8thjj3HdddfSseM6VFRU8Mtf/s+qFoRevXoxcOCZLFiwgIEDB9G1a1e6du3Ku+++y6mnfg+AddbplB5Tf1ezIUOGMmTIlUj6Uke5LHr33pGvf70f/fufwMYbb8x22/Vq8ItKUygamNVA0pVAP5KkPhY4HHghIk4oeDQZVFb2jgceeLBg56uqmk23bt0Ldr5SOG7krFbZ3F4OZd8atfVyr6lZXpIx2JctW0b79u2b/bqNUVNTw/Lly+nQoQOzZs3irLMG8eijY77UnNza3Hrrb+jcuXPBe5nnM33eMrbrsvpnvWTJEjp16sRnn33GD35wBpdffgU77LDDl/ap6/ezT59dJkdE/qaRVJbf7BOAXYApEXG6pM0AT71qZlZmPv/8cwYOPDPtYBdceunPW3VCb2l+8YuhzJgxg2XLlnLUUcesltALIUtS/ywiVkhaLml9YC7Q+qqFZmaW17rrrkshW0JbgoEDB7WYFpL//d+ri36NLEn9JUkbAsNJxoNfDEwsalRmZkUUEZ7UxVqchm6HZ9FgUo+IlUMd/VbSeGD9iHg13zFWXO4YZ9Z00hd/PJ3YraVYOZ/6mv5KNpjUlfzWnwJsExFDJW0laa+I+MeaXdqays+hmzWdVEFEzRrPW914K5r1eWVbqfnLfb21mnZNKfn9XBNZmt9vA1aQDDYzFFgEPAzsuUZXNjMrAUlIzd/7fe7cf7fppw5KpRTlftbYqpJVvLL8Zu8dEbtJmgIQEfMltYxeB22Em9vNzCyLLEm9Wkl7QABI2pSk5m7NxM3tZmaWRZZZ2m4B/gh0lfRL4AXgf4oalZmZmTValt7v90uaDBwMCDguIt4oemRmZmbWKHmTetrsPjUitgfebJ6QzPfQzcysKfIm9YiokfSWpK0iYmZzBdXW+R66mZk1RZaOchsBUyX9A/jPypURcUzRojIzM7NGy5LULy96FGZmZrbGsnSUm5C7LGl/4CRgQt1HWGP5HrqZmRVCpmGVJPUBTga+A7xLMqKcFYjvoZuZWSHUm9Ql/T+SGvlJwMfAKEARcWAzxWZmZmaNkK+m/ibwPHBUREwHkHR+s0RV5tzcbmZmxZAvqR8PDACeSadcHUky+Exmkg4DbgYqgBERUecM8ZK+DTwE7BkRLzXmGq2Rm9vNzKwY6h0mNiIejYgBwPbAM8BPSIaKvV3SNxs6cTpwza3A4UAlcJKkyjr26wycB7zYtLdgZmZmkGHs94j4T0Q8EBFHA1sAU4CLM5x7L2B6RMyIiGUkNf1j69jvF8A1wOfZwzYzM7PaGjWpcETMB4alr4Z0B2blLH8A7J27g6TdgC0j4i+SLqrvRJIGAYMAunbtSlXV7MaEnVd1dXVBz1eX9xZUs3xFrFq+eBcV/ZqtQXOUva3O5V4aLvfSKEW5X7jT8pJ91o1K6oUkqR1wA3BaQ/tGxKovEpWVvaOQE95XVc2mkOery+AJs3wPvQ7NUfa2Opd7abjcS6MU5Z78zS/NZ11v87ukDmt47tlAbibbIl23UmdgR+BZSe8B+wBjJO2xhtc1MzNrk/LdU58IIOneJp57EtBLUk9J7Ul60o9ZuTEiFkbEJhHRIyJ6AH8HjmkLvd/NzMyKIV/ze3tJJwP7STq+9saIeCTfiSNiuaSzgcdJHmm7KyKmShoKvBQRY/Id35r5OXQzMyuFfEn9LOAUYEPg6FrbAsib1AEiYiwwtta6K+rZt19D52st/By6mZmVQr1JPSJeAF6Q9FJE3NmMMZmZmVkTZOn9fq+kc4ED0uUJwG8jorp4YZkPc/+XAAAMgUlEQVSZmVljZUnqtwFrp/8CfA+4HTizWEGZmZlZ42VJ6ntGxC45y3+V9M9iBWRmZmZNkyWp10jaNiLeAZC0DVDTwDFtinu7m5lZS5AlqV9EMlPbDJJZ2rYGTi9qVK2Me7ubmVlL0GBSj4inJfUCvpqueisilhY3LDMzM2usTGO/p0n81SLHYmZmZmugwalXzczMrHUo2SxtrZk7xpmZWUvUYFKX9HREHNzQurbEHePMzKwlqjepS+oIdAI2kbQRSc93gPUBTwpsZmbWwuSrqf8Q+AmwOTCZL5L6p8BvihyXmZmZNVK+CV1uBm6WdE5E/LoZYzIzM7MmyPKc+q8l7Qf0yN0/Iu4pYlxmZmbWSFk6yt0LbAu8whfDwwbgpG5mZtaCZHmkbQ+gMiKi2MG0RLUfXwM/wmZmZi1TlqT+OvAVoKrIsbRIfnzNzMxaiyxJfRNgmqR/AKvGfI+IY4oWlZmZmTValqQ+pNhBmJmZ2ZrL0vt9gqStgV4R8ZSkToBvKpuZmbUwDU7oImkg8BBwR7qqO/BoMYMyMzOzxsvS/P5jYC/gRYCI+JekrkWNqoQ8WYuZmbVWWZL60ohYJiWjxEpai+Q59bLk3u5mZtZaZZlPfYKknwHrSDoE+APw5+KGZWZmZo2VJalfAnwEvEYyyctY4LJiBmVmZmaNl6X5fR3grogYDiCpIl23pJiBmZmZWeNkqak/TZLEV1oHeKo44ZiZmVlTZUnqHSNi8cqF9OdOxQvJzMzMmiJLUv+PpN1WLkjaHfiseCGZmZlZU2S5p34e8AdJcwCRTO5yYlGjMjMzs0bLm9QltQPaA9sDX01XvxUR1cUOzMzMzBonb/N7RKwAbo2I6oh4PX1lTuiSDpP0lqTpki6pY/sFkqZJelXS0+kY82ZmZtYEmXq/S/q2Vg4pl1H66NutwOFAJXCSpMpau00B9oiInUnGl/9VY65hZmZmX8iS1H9IMorcMkmfSlok6dMMx+0FTI+IGRGxDBgJHJu7Q0Q8ExErn3f/O7BFI2I3MzOzHFmmXu3cxHN3B2blLH8A7J1n/x8A4+raIGkQMAiga9euVFXNbmJIq1v82TKen/ruquWLd1FBz2/1q66udlmXgMu9NFzupVGKcr9wp+Ul+6wbTOpps/spQM+I+IWkLYFuEfGPQgUh6bvAHsDX69oeEcOAYQCVlb2jW7fuhbo0z099l769exbsfJZdVdVsCvlZWjYu99JwuZdGKcp98IRZPDqgNJ91lub324B9gZPT5cUk98obMhvIne5si3Tdl0j6BvBz4JiIWJrhvGZmZlaHLEl974j4MfA5QETMJ3nMrSGTgF6SekpqDwwAxuTuIKkPcAdJQp/bqMjNzMzsS7Ik9eq0J3sASNoUWNHQQRGxHDgbeBx4AxgdEVMlDZV0TLrbtcB6JIPbvCJpTD2nMzMzswZkGVHuFuCPQFdJvwROIOPUqxExlmSq1tx1V+T8/I3soZqZmVk+WXq/3y9pMnAwyTCxx0XEG0WPzMzMzBql3qQuqSNwFrAd8BpwR9qkbmZmZi1Qvnvqd5M8ZvYayahw1zVLRGZmZtYk+ZrfKyNiJwBJdwIFey7dzMzMCi9fTX3VxC1udjczM2v58tXUd8kZ413AOumygIiI9YsenZmZmWVWb1KPiIrmDMTMzMzWTJbBZ8zMzKwVcFI3MzMrE07qZmZmZcJJ3czMrEw4qZuZmZUJJ3UzM7My4aRuZmZWJpzUzczMyoSTupmZWZlwUjczMysTTupmZmZlwkndzMysTDipm5mZlQkndTMzszLhpG5mZlYmnNTNzMzKhJO6mZlZmXBSNzMzKxNO6mZmZmXCSd3MzKxMOKmbmZmVCSd1MzOzMuGkbmZmViac1M3MzMqEk7qZmVmZcFI3MzMrE0VN6pIOk/SWpOmSLqljewdJo9LtL0rqUcx4zMzMylnRkrqkCuBW4HCgEjhJUmWt3X4AzI+I7YAbgWuKFY+ZmVm5K2ZNfS9gekTMiIhlwEjg2Fr7HAvcnf78EHCwJBUxJjMzs7K1VhHP3R2YlbP8AbB3fftExHJJC4GNgY9zd5I0CBiULi7u02eXtwoY5ya1r2fNxmVfGi730nC5l0ZJyr1PYdudt866YzGTesFExDBgWDHOLemliNijGOe2/Fz2peFyLw2Xe2m0tXIvZvP7bGDLnOUt0nV17iNpLWAD4JMixmRmZla2ipnUJwG9JPWU1B4YAIyptc8Y4NT05xOAv0ZEFDEmMzOzslW05vf0HvnZwONABXBXREyVNBR4KSLGAHcC90qaDswjSfzNrSjN+paJy740XO6l4XIvjTZV7nLF2MzMrDx4RDkzM7My4aRuZmZWJtp0Um9oGFsrDEl3SZor6fWcdV0kPSnpX+m/G5UyxnIkaUtJz0iaJmmqpPPS9S77IpPUUdI/JP0zLfur0vU90yGxp6dDZLcvdazlRlKFpCmSHkuX21SZt9mknnEYWyuM3wOH1Vp3CfB0RPQCnk6XrbCWAxdGRCWwD/Dj9HfcZV98S4GDImIXYFfgMEn7kAyFfWM6NPZ8kqGyrbDOA97IWW5TZd5mkzrZhrG1AoiI50iebsiVO0Tw3cBxzRpUGxARVRHxcvrzIpI/dN1x2RddJBani2unrwAOIhkSG1z2BSdpC+BIYES6LNpYmbflpF7XMLbdSxRLW7RZRFSlP38IbFbKYMpdOgNiH+BFXPbNIm0GfgWYCzwJvAMsiIjl6S7+m1N4NwH/BaxIlzemjZV5W07q1kKkAw752coikbQe8DDwk4j4NHeby754IqImInYlGU1zL2D7EodU1iQdBcyNiMmljqWUWsXY70WSZRhbK55/S+oWEVWSupHUZqzAJK1NktDvj4hH0tUu+2YUEQskPQPsC2woaa205ui/OYX1NeAYSUcAHYH1gZtpY2XelmvqWYaxteLJHSL4VOBPJYylLKX3E+8E3oiIG3I2ueyLTNKmkjZMf14HOISkT8MzJENig8u+oCLi0ojYIiJ6kPw9/2tEnEIbK/M2PaJc+o3uJr4YxvaXJQ6pLEl6EOhHMgXiv4ErgUeB0cBWwPtA/4io3ZnO1oCk/YHngdf44h7jz0juq7vsi0jSziSdsipIKk+jI2KopG1IOuV2AaYA342IpaWLtDxJ6gf8NCKOamtl3qaTupmZWTlpy83vZmZmZcVJ3czMrEw4qZuZmZUJJ3UzM7My4aRuZmZWJpzUzVoRScdJCkktYnQySZtJeiydjWyapLGljsmsLXNSN2tdTgJeSP9tCYYCT0bELulscGs845uktjzSpdkacVI3ayXSMdz3J5k6ckCtbRdLei2tMV+drttO0lPpupclbZuuv0jSJEmv5szzva6kv6T7vi7pxHT91WkN/FVJ19URVjeSSTIAiIhXG4hpV0l/T8/3x5VzuUt6VtJNkl4CzktHZHs4jXOSpK8VriTNype/EZu1HscC4yPibUmfSNo9IiZLOjzdtndELJHUJd3/fuDqiPijpI5AO0nfBHqRTDAiYIykA4BNgTkRcSSApA0kbQx8C9g+ImLlsKe13AqMknQ28BTwu4iYkyeme4BzImKCpKEkowv+JN3WPiL2SK//AMkc2C9I2gp4HNihMMVoVr5cUzdrPU4iGe6S9N+VTfDfIEmmSwAiYp6kzkD3iPhjuu7zdPs309cU4GWSmcN6kQwle4ikayT1jYiFwELgc+BOSccDS2oHFBGPA9sAw9NzTZG0aT0xbQBsGBET0sPvBg7IOd2onJ+/Afwmnbp0DLB+2lJhZnm4pm7WCqQ13YOAnSQFyZjiIemixp4K+N+IuKOOa+wGHAH8t6Sn07HK9wIOJpkQ4+w0hi9Jx41/AHhA0mN8OVE3xn9yfm4H7BMRnzfxXGZtkmvqZq3DCcC9EbF1RPSIiC2Bd4G+wJPA6ZI6QfIFICIWAR9IOi5d1yHd/jhwxspar6TukrpK2hxYEhH3AdcCu6X7bBARY4HzgV1qByXpoJzrdga2BWbWE9NCYL6kvunh3wMm1D5n6gngnJzr7NqkUjNrY1xTN2sdTgKuqbXuYeCkiBicJr2XJC0DxpLMxvY94I703nU18J2IeELSDsDEZGZWFgPfBbYDrpW0It13MNAZ+FN6P17ABXXEtTtJM/lykkrCiIiYBKsSce2YTgV+myb7GcDp9bzfc4FbJb1K8nfqOeCs7MVl1jZ5ljYzM7My4eZ3MzOzMuGkbmZmViac1M3MzMqEk7qZmVmZcFI3MzMrE07qZmZmZcJJ3czMrEz8f29Fyw+J9/rQAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Plot was saved to: data/figures/fig_5.png\n" - ] - } - ], - "source": [ - "access.plot_cdf('CDF of Access Score')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Subsetting the data to calculate the Access Score" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n", - "If you have no target variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Loaded sp matrix from file: data/matrices/walk_asym_health_tracts.csv\n", - "INFO:ScoreModel:Finished loading sp_matrix in 0.14 seconds\n", - "INFO:ScoreModel:Processing... This could take a while\n", - "INFO:ScoreModel:Finished processing ModelData in 0.06 seconds\n" - ] - } - ], - "source": [ - "#For Federally Qualified Health Centers (walking)\n", - "access_fed = AccessModel(network_type='walk',\n", - " sp_matrix_filename='data/matrices/walk_asym_health_tracts.csv',\n", - " source_filename='data/ORIG/tracts2010.csv',\n", - " dest_filename='data/DEST/health_chicago.csv',\n", - " decay_function='logit',\n", - " limit_categories=set(['Federally Qualified Health Centers']))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "#Example of density and variety weights:\n", - "dict = {\n", - "\"Federally Qualified Health Centers\": [10,10,10,10,10]\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Finished calculating hssa in 0.02 seconds\n" - ] - } - ], - "source": [ - "access_fed.calculate(custom_threshold=40,\n", - " normalize=True,\n", - " custom_weight_dict=dict,\n", - " largest_weights_first=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
latlonpopulationlower_areal_unitaccessaccess_cataccess_sd
geoid10
1703184240041.742475-87.6300405157.044.00.0000000.00.000000
1703184030041.832094-87.6818825881.059.08.15797920.022.341129
1703184110041.851006-87.6350983363.034.00.65070510.01.781996
1703184120041.855562-87.6833423710.031.016.83667450.046.108270
1703183820041.870416-87.6750793296.028.07.26158240.019.886291
\n", - "
" - ], - "text/plain": [ - " lat lon population lower_areal_unit access \\\n", - "geoid10 \n", - "17031842400 41.742475 -87.630040 5157.0 44.0 0.000000 \n", - "17031840300 41.832094 -87.681882 5881.0 59.0 8.157979 \n", - "17031841100 41.851006 -87.635098 3363.0 34.0 0.650705 \n", - "17031841200 41.855562 -87.683342 3710.0 31.0 16.836674 \n", - "17031838200 41.870416 -87.675079 3296.0 28.0 7.261582 \n", - "\n", - " access_cat access_sd \n", - "geoid10 \n", - "17031842400 0.0 0.000000 \n", - "17031840300 20.0 22.341129 \n", - "17031841100 10.0 1.781996 \n", - "17031841200 50.0 46.108270 \n", - "17031838200 40.0 19.886291 " - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "access_fed.results.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], - "source": [ - "access_fed.results.to_csv('data/access_metrics/FQHC.csv')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "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.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/calibration.ipynb b/docs/notebooks/calibration.ipynb deleted file mode 100755 index 3cbc807..0000000 --- a/docs/notebooks/calibration.ipynb +++ /dev/null @@ -1,249 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## P2P Calibration \n", - "put at the end of p2p in order to import transitmatrix\n", - "\n", - "We use Graphhopper in order to test the p2p calibration. A Graphhopper API is required to run this process and it can be obtained here:\n", - "https://graphhopper.com/api/1/docs/FAQ/\n", - "\n", - "Note: You can also use a GoogleMaps API.\n", - "\n", - "\n", - "Show the mean and stddev of the difference between p2p's route time\n", - "and GraphHopper's route time, in seconds.\n", - "\n", - "IMPORTANT: To use this, must have a valid GraphHopper Matrix API key\n", - "saved in a text file in this directory called GRAPHHOPPER_API_KEY.txt\n", - "\n", - "Positive differences indicate p2p's route was longer, negative times indicates\n", - "that p2p's route was shorter." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# P2P Calibration \n", - "#need this because p2p and graphhopper use synonyms for \n", - "#vehicle/route types\n", - "p2p_to_graphhopper_type_names = {\n", - " 'drive' : 'car',\n", - " 'walk' : 'foot',\n", - " 'bike' : 'bike'\n", - "}\n", - "\n", - "def sample_one_matrix(df, tm, network_type, api_key):\n", - " '''\n", - " Test one ditance matrix\n", - " '''\n", - "\n", - " base_url = \"https://graphhopper.com/api/1/matrix\"\n", - " first = True\n", - " for data in df.itertuples():\n", - " x_data = data[4]\n", - " y_data = data[5]\n", - " if first:\n", - " point_string = \"?point={},{}\".format(x_data, y_data)\n", - " first = False\n", - " else:\n", - " point_string = \"&point={},{}\".format(x_data, y_data)\n", - "\n", - " base_url += point_string\n", - "\n", - " param_string = \"&type=json&vehicle={}&debug=true&out_array=times&key={}\".format(network_type, api_key)\n", - " base_url += param_string\n", - "\n", - "\n", - " try:\n", - " r = requests.get(base_url)\n", - "\n", - " results = r.json()['times']\n", - " except:\n", - " print('there was a problem fetching from GraphHopper. Exiting...')\n", - " sys.exit()\n", - "\n", - "\n", - " already_checked = set()\n", - " diffs = []\n", - " for i, row in enumerate(df.index):\n", - " for j, col in enumerate(df.index):\n", - " if (row, col) not in already_checked and row != col:\n", - " calculated_time = tm.get(row, col)\n", - " actual_time = results[i][j]\n", - " diff = calculated_time - actual_time\n", - " diffs.append(diff)\n", - " already_checked.add((row, col))\n", - " already_checked.add((col, row))\n", - "\n", - " stddev = np.std(diffs)\n", - " mean = np.mean(diffs)\n", - "\n", - "\n", - " print('diffs mean: {}, stddev: {}'.format(mean, stddev))\n", - "\n", - "\n", - "def calibrate(network_type='walk', input_file='resources/LEHD_blocks.csv', \n", - " sl_file='resources/condensed_street_data.csv', n=1):\n", - " '''\n", - " Show the mean and stddev of the difference between p2p's route time\n", - " and GraphHopper's route time, in seconds.\n", - "\n", - " IMPORTANT: To use this, must have a valid GraphHopper Matrix API key\n", - " saved in a text file in this directory called GRAPHHOPPER_API_KEY.txt\n", - "\n", - " Positive differences indicate p2p's route was longer, negative times indicates\n", - " that p2p's route was shorter.\n", - " '''\n", - " if network_type == 'drive':\n", - " assert sl_file is not None, 'must provide sl_file for use with driving network calibration'\n", - " with open('GRAPHHOPPER_API_KEY.txt', 'r') as api_file:\n", - " api_key = api_file.read()\n", - " api_key = api_key.strip()\n", - " gh_type_name = p2p_to_graphhopper_type_names[network_type]\n", - "\n", - " tm = TransitMatrix(network_type=network_type, primary_input=input_file)\n", - " if network_type == 'drive':\n", - " tm.process(speed_limit_filename=sl_file)\n", - " else:\n", - " tm.process()\n", - "\n", - " #extract the column names\n", - " xcol = ''\n", - " ycol = ''\n", - " idx = ''\n", - "\n", - " df = pd.read_csv(input_file)\n", - "\n", - " print('The variables in your data set are:')\n", - " df_cols = df.columns.values\n", - " for var in df_cols:\n", - " print('> ',var)\n", - " while xcol not in df_cols:\n", - " xcol = input('Enter the x coordinate (Latitude): ')\n", - " while ycol not in df_cols:\n", - " ycol = input('Enter the y coordinate (Longitude): ')\n", - " while idx not in df_cols:\n", - " idx = input('Enter the index name: ')\n", - "\n", - " df.rename(columns={xcol:'x',ycol:'y', idx:'idx'},inplace=True)\n", - " df.set_index('idx', inplace=True)\n", - "\n", - " for i in range(n):\n", - "\n", - " sample_one_matrix(df.sample(24), tm, gh_type_name, api_key)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "calibrate(network_type='walk',\n", - " input_file='data/ORIG/tracts2010.csv',\n", - " sl_file='data/DEST/health_chicago.csv',\n", - " n=1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Epsilon Calibration" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(801, 200)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Load the travel time distance matrix and assess dimensions: \n", - "df = pd.read_csv('scripts/data/matrices/walk_asym_health_tracts.csv')\n", - "df.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "#Identify percentage of values outside epsilon:\n", - "p_eps=((df.groupby('1').count()).iloc[0][0])/len(df)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Of the total matrix 0.25% of the values are outside the bounding box. If the value is below 1% it seems epsilon is appropriate for this particular dataset.\n" - ] - } - ], - "source": [ - "print (\"Of the total matrix \",\"{0:.2f}%\".format(p_eps* 100),\"of the values are outside the bounding box. If the value is below 1% it seems epsilon is appropriate for this particular dataset.\")" - ] - } - ], - "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.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/coverage_score.ipynb b/docs/notebooks/coverage_score.ipynb old mode 100755 new mode 100644 index e30156d..369a4be --- a/docs/notebooks/coverage_score.ipynb +++ b/docs/notebooks/coverage_score.ipynb @@ -13,28 +13,43 @@ "source": [ "## Calculating the Coverage Score\n", "---\n", + "#### **Column Inputs for Each Model**\n", + "Each model takes in inputs from both the sources and destination csv files. Each model takes in the standard inputs indicated below as well as additional inputs specified under each model\n", + "\n", + "* Source File\n", + " * Unique index identifier (geoid10) (integer or real) \n", + " * Latitude and longitude coordinates (real)\n", + " * To aggregate: larger areal ID\n", + " * Population within the areal unit\n", + "* Destination File\n", + " * Unique index identifier (ID) (integer or real)\n", + " * Latitude and longitude coordinates (real)\n", + " * Category for each type of facility\n", + " * To aggregate: larger areal ID\n", + " * Capacity for each facility\n", + "\n", + " \n", + "\n", "**Specifications for Coverage Model:** \n", "\n", - "**name.CoverageModel( ):** \n", - "- network_type ('drive' or 'walk')\n", - "- source_filename (primary input data) \n", - "- dest_filename (secondary input data) \n", - "- upper (is the time (in minutes) in which the origin and destinations are considered to be out of range of each other. As a default, if the travel time distance exceeds 30 minutes, the score will be zero.)\n", - "- The prompt will ask for the target which should be specified in the destination file, according to the user's needs. \n", + "**name.Coverage( ):** \n", + "- network_type ('walk', 'bike', 'drive', or 'otp')\n", + "- sources_filename (primary input data)\n", + "- destinations_filename (secondary input data)\n", + "- transit_matrix_filename (origin-destination transit matrix)\n", " \n", "**name.calculate():**\n", - "- Just processes the model specified above. \n", - "\n", - "In the **scripts**, the user can specify further changed to the coverage score.\n", + "- upper_threshold (the time (in seconds) in which the origin and destinations are considered to be out of range of each other)\n", "\n", - "Functions within the PCSpend Model class (use as name_of_model.function()): \n", - "- calculate ()\n", - "- get_aggregate (aggregate_type) Aggregation can be by ('category') or ('lower_areal_unit') for the community level. If the user wants to modify the level of aggregation, change the lower_areal_unit field in destination csv to another unit of analysis.\n", - "- agg_area_cat (aggregate by area and by category)\n", - "- write_aggregate (aggregate_type, filename='name')\n", - "- write_agg_area_cat (write the aggregation by lower areal unit and by category)\n", - "- plot_cdf (title='Coverage Amount')\n", - "- write_csv (filename='name') " + "Functions within the Coverage Model class (use as name.function()): \n", + "- calculate () \n", + "- model_results (results of the TSFCA calculations)\n", + "- write_csv (filename='name') \n", + "- aggregate ()\n", + "- write_aggregated_results()\n", + "- plot_cdf()\n", + "- plot_choropleth()\n", + "\n" ] }, { @@ -46,28 +61,24 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "import sys, os\n", - "os.chdir('scripts')\n", - "\n", - "from CommunityAnalytics import *\n", "import pandas as pd\n", - "\n", - "%matplotlib inline" + "from spatial_access.Models import *" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "#View sources and destinations for Chicago Health Facilities\n", - "sources=pd.read_csv('data/ORIG/tracts2010.csv')\n", - "dest=pd.read_csv('data/DEST/health_chicago.csv')" + "sources=pd.read_csv('/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", + "dest=pd.read_csv('/Users/whlu/spatial_access/data/input_data/health_chicago.csv')\n", + "dest= dest.rename(index=str, columns={\"target\": \"capacity\"})" ] }, { @@ -102,6 +113,7 @@ " Pop2014\n", " Pov14\n", " community\n", + " ID\n", " \n", " \n", " \n", @@ -113,6 +125,7 @@ " 5157\n", " 769\n", " 44\n", + " 1\n", " \n", " \n", " 1\n", @@ -122,6 +135,7 @@ " 5881\n", " 1021\n", " 59\n", + " 2\n", " \n", " \n", " 2\n", @@ -131,6 +145,7 @@ " 3363\n", " 2742\n", " 34\n", + " 3\n", " \n", " \n", " 3\n", @@ -140,6 +155,7 @@ " 3710\n", " 1819\n", " 31\n", + " 4\n", " \n", " \n", " 4\n", @@ -149,18 +165,19 @@ " 3296\n", " 361\n", " 28\n", + " 5\n", " \n", " \n", "\n", "" ], "text/plain": [ - " geoid10 lon lat Pop2014 Pov14 community\n", - "0 17031842400 -87.630040 41.742475 5157 769 44\n", - "1 17031840300 -87.681882 41.832094 5881 1021 59\n", - "2 17031841100 -87.635098 41.851006 3363 2742 34\n", - "3 17031841200 -87.683342 41.855562 3710 1819 31\n", - "4 17031838200 -87.675079 41.870416 3296 361 28" + " geoid10 lon lat Pop2014 Pov14 community ID\n", + "0 17031842400 -87.630040 41.742475 5157 769 44 1\n", + "1 17031840300 -87.681882 41.832094 5881 1021 59 2\n", + "2 17031841100 -87.635098 41.851006 3363 2742 34 3\n", + "3 17031841200 -87.683342 41.855562 3710 1819 31 4\n", + "4 17031838200 -87.675079 41.870416 3296 361 28 5" ] }, "execution_count": 3, @@ -174,7 +191,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -203,7 +220,7 @@ " lat\n", " lon\n", " Type\n", - " target\n", + " capacity\n", " category\n", " community\n", " \n", @@ -276,15 +293,15 @@ "3 4 Mercy Family - Henry Booth House Family Health... 41.841694 \n", "4 6 Cook County - Dr. Jorge Prieto Health Center 41.847143 \n", "\n", - " lon Type target category community \n", - "0 -87.651879 5 127000 Other Health Providers 3 \n", - "1 -87.669535 5 190000 Other Health Providers 77 \n", - "2 -87.717270 5 137000 Other Health Providers 22 \n", - "3 -87.624790 5 159000 Other Health Providers 35 \n", - "4 -87.724975 5 166000 Other Health Providers 30 " + " lon Type capacity category community \n", + "0 -87.651879 5 127000 Other Health Providers 3 \n", + "1 -87.669535 5 190000 Other Health Providers 77 \n", + "2 -87.717270 5 137000 Other Health Providers 22 \n", + "3 -87.624790 5 159000 Other Health Providers 35 \n", + "4 -87.724975 5 166000 Other Health Providers 30 " ] }, - "execution_count": 4, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -295,9 +312,26 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "dest_updated = pd.read_csv('/Users/whlu/spatial_access/data/input_data/health_chicago.csv').rename(index=str, columns={\"target\": \"capacity\"})\n", + "dest_updated.to_csv('/Users/whlu/spatial_access/data/input_data/health_chicago_updated.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:spatial_access.p2p:You should use tmx instead of csv for significantly better performance\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -309,60 +343,96 @@ "> Pop2014\n", "> Pov14\n", "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", + "> ID\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the unique index variable: geoid10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no population variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the population variable: Pop2014\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "The variables in your data set are:\n", + "> Unnamed: 0\n", "> ID\n", "> Facility\n", "> lat\n", "> lon\n", "> Type\n", - "> target\n", + "> capacity\n", "> category\n", - "> community\n", - "If you have no target variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" + "> community\n" ] }, { - "name": "stderr", + "name": "stdin", "output_type": "stream", "text": [ - "INFO:ScoreModel:Loaded sp matrix from file: data/matrices/walk_asym_health_tracts.csv\n", - "INFO:ScoreModel:Finished loading sp_matrix in 0.14 seconds\n", - "INFO:ScoreModel:Processing... This could take a while\n", - "INFO:ScoreModel:Finished processing ModelData in 0.06 seconds\n" + "Enter the unique index variable: ID\n" ] - } - ], - "source": [ - "coverage = CoverageModel(network_type='walk',\n", - " sp_matrix_filename='data/matrices/walk_asym_health_tracts.csv',\n", - " source_filename='data/ORIG/tracts2010.csv',\n", - " dest_filename='data/DEST/health_chicago.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ + }, { - "name": "stderr", + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have no capacity variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the capacity variable: capacity\n" + ] + }, + { + "name": "stdout", "output_type": "stream", "text": [ - "INFO:ScoreModel:Finished calculating CoverageModel in 0.03 seconds\n" + "If you have no category variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the category variable: category\n", + "Enter the latitude variable: lat\n", + "Enter the longitude variable: lon\n" ] } ], "source": [ - "coverage.calculate()" + "coverage = Coverage(network_type=\"walk\",\n", + " transit_matrix_filename='/Users/whlu/spatial_access/data/output_1_walk.csv',\n", + " sources_filename='/Users/whlu/spatial_access/data/input_data/tracts2010.csv',\n", + " destinations_filename='/Users/whlu/spatial_access/data/input_data/health_chicago_updated.csv')" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -386,114 +456,73 @@ " \n", " \n", " \n", - " target\n", + " service_pop\n", + " percap_spending\n", " category\n", - " lat\n", - " lon\n", - " lower_areal_unit\n", - " pop_served\n", - " coverage\n", - " \n", - " \n", - " ID\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", " \n", - " 1\n", - " 127000\n", - " Other Health Providers\n", - " 41.956676\n", - " -87.651879\n", - " 3\n", - " 113180\n", - " 1.122106\n", + " 14\n", + " 100892\n", + " 1.001070\n", + " Federally Qualified Health Centers\n", " \n", " \n", - " 2\n", - " 190000\n", - " Other Health Providers\n", - " 41.997852\n", - " -87.669535\n", - " 77\n", - " 112084\n", - " 1.695157\n", + " 15\n", + " 49853\n", + " 2.226546\n", + " Federally Qualified Health Centers\n", " \n", " \n", - " 3\n", - " 137000\n", - " Other Health Providers\n", - " 41.924904\n", - " -87.717270\n", - " 22\n", - " 106064\n", - " 1.291673\n", + " 16\n", + " 51802\n", + " 2.721903\n", + " Federally Qualified Health Centers\n", " \n", " \n", - " 4\n", - " 159000\n", - " Other Health Providers\n", - " 41.841694\n", - " -87.624790\n", - " 35\n", - " 77870\n", - " 2.041865\n", + " 17\n", + " 74269\n", + " 2.113937\n", + " Federally Qualified Health Centers\n", " \n", " \n", - " 6\n", - " 166000\n", - " Other Health Providers\n", - " 41.847143\n", - " -87.724975\n", - " 30\n", - " 99714\n", - " 1.664761\n", + " 18\n", + " 41958\n", + " 4.004004\n", + " Federally Qualified Health Centers\n", " \n", " \n", "\n", "" ], "text/plain": [ - " target category lat lon lower_areal_unit \\\n", - "ID \n", - "1 127000 Other Health Providers 41.956676 -87.651879 3 \n", - "2 190000 Other Health Providers 41.997852 -87.669535 77 \n", - "3 137000 Other Health Providers 41.924904 -87.717270 22 \n", - "4 159000 Other Health Providers 41.841694 -87.624790 35 \n", - "6 166000 Other Health Providers 41.847143 -87.724975 30 \n", - "\n", - " pop_served coverage \n", - "ID \n", - "1 113180 1.122106 \n", - "2 112084 1.695157 \n", - "3 106064 1.291673 \n", - "4 77870 2.041865 \n", - "6 99714 1.664761 " + " service_pop percap_spending category\n", + "14 100892 1.001070 Federally Qualified Health Centers\n", + "15 49853 2.226546 Federally Qualified Health Centers\n", + "16 51802 2.721903 Federally Qualified Health Centers\n", + "17 74269 2.113937 Federally Qualified Health Centers\n", + "18 41958 4.004004 Federally Qualified Health Centers" ] }, - "execution_count": 15, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "coverage.results.head()" + "coverage.calculate(upper_threshold=1800).head()" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "coverage.write_csv()" + "#Writes output to csv\n", + "\n", + "coverage.model_results.to_csv('/Users/whlu/spatial_access/data/coverage score/coverage_results.csv')" ] }, { @@ -512,7 +541,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -536,95 +565,74 @@ " \n", " \n", " \n", - " target\n", - " lat\n", - " lon\n", - " coverage\n", + " service_pop\n", + " percap_spending\n", " \n", " \n", - " lower_areal_unit\n", - " \n", - " \n", + " spatial_index\n", " \n", " \n", " \n", " \n", " \n", " \n", - " 44\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", + " ALBANY PARK\n", + " 305008\n", + " 1.638229\n", " \n", " \n", - " 59\n", - " 200000.0\n", - " 41.831274\n", - " -87.676580\n", - " 3.231279\n", + " ARCHER HEIGHTS\n", + " 59620\n", + " 1.777927\n", " \n", " \n", - " 34\n", - " 170000.0\n", - " 41.852812\n", - " -87.634843\n", - " 1.996641\n", + " ARMOUR SQUARE\n", + " 58671\n", + " 2.897513\n", " \n", " \n", - " 31\n", - " 691000.0\n", - " 209.274216\n", - " -438.350068\n", - " 10.296501\n", + " AUBURN GRESHAM\n", + " 106340\n", + " 2.461102\n", " \n", " \n", - " 28\n", - " 2020000.0\n", - " 502.477414\n", - " -1052.049515\n", - " 28.417641\n", + " AUSTIN\n", + " 248120\n", + " 3.094732\n", " \n", " \n", "\n", "" ], "text/plain": [ - " target lat lon coverage\n", - "lower_areal_unit \n", - "44 NaN NaN NaN NaN\n", - "59 200000.0 41.831274 -87.676580 3.231279\n", - "34 170000.0 41.852812 -87.634843 1.996641\n", - "31 691000.0 209.274216 -438.350068 10.296501\n", - "28 2020000.0 502.477414 -1052.049515 28.417641" + " service_pop percap_spending\n", + "spatial_index \n", + "ALBANY PARK 305008 1.638229\n", + "ARCHER HEIGHTS 59620 1.777927\n", + "ARMOUR SQUARE 58671 2.897513\n", + "AUBURN GRESHAM 106340 2.461102\n", + "AUSTIN 248120 3.094732" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "coverage._get_aggregate('coverage').head()" + "coverage.aggregate(aggregation_type=None, shapefile='/Users/whlu/spatial_access/data/chicago_boundaries/chi_comm_boundaries.shp', \n", + " spatial_index='community', projection='epsg:4326').head()" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Wrote aggregate to file: data/coverage_metrics/coverage_aggregate_0.csv\n" - ] - } - ], + "outputs": [], "source": [ - "coverage.write_aggregate('coverage')\n", + "#For community areas write to csv\n", "\n", - "#Saved as cov_aggregate_health_tracts_comm.csv" + "coverage.write_aggregated_results(filename = \"/Users/whlu/spatial_access/data/coverage score/coverage_aggregated.csv\", output_type = 'csv')" ] }, { @@ -634,237 +642,90 @@ "" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot\n", + "The following cumulative distribution function shows the number of tracts that fall below a certain level of per capita spending.\n" + ] + }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python3.6/site-packages/pandas/core/reshape/merge.py:544: UserWarning: merging between different levels can give an unintended result (1 levels on the left, 2 on the right)\n", - " warnings.warn(msg, UserWarning)\n" + "INFO:spatial_access.BaseModel:Plot was saved to: /Users/whlu/spatial_access/data/coverage score/coverage_cdf_plot.png\n" ] }, { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
(target, All Free Health Clinics)(target, Federally Qualified Health Centers)(target, Hospitals)(target, Other Health Providers)(target, School-Based Health Centers)(coverage, All Free Health Clinics)(coverage, Federally Qualified Health Centers)(coverage, Hospitals)(coverage, Other Health Providers)(coverage, School-Based Health Centers)
lower_areal_unit
44NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
59NaN200000.0NaNNaNNaNNaN3.231279NaNNaNNaN
34NaNNaNNaN170000.0NaNNaNNaNNaN1.996641NaN
31NaN369000.0NaNNaN322000.0NaN5.464956NaNNaN4.831545
28339000.0292000.0614000.0192000.0583000.05.8527414.3935488.3408392.3849457.445568
\n", - "
" - ], + "image/png": "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\n", "text/plain": [ - " (target, All Free Health Clinics) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 NaN \n", - "34 NaN \n", - "31 NaN \n", - "28 339000.0 \n", - "\n", - " (target, Federally Qualified Health Centers) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 200000.0 \n", - "34 NaN \n", - "31 369000.0 \n", - "28 292000.0 \n", - "\n", - " (target, Hospitals) (target, Other Health Providers) \\\n", - "lower_areal_unit \n", - "44 NaN NaN \n", - "59 NaN NaN \n", - "34 NaN 170000.0 \n", - "31 NaN NaN \n", - "28 614000.0 192000.0 \n", - "\n", - " (target, School-Based Health Centers) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 NaN \n", - "34 NaN \n", - "31 322000.0 \n", - "28 583000.0 \n", - "\n", - " (coverage, All Free Health Clinics) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 NaN \n", - "34 NaN \n", - "31 NaN \n", - "28 5.852741 \n", - "\n", - " (coverage, Federally Qualified Health Centers) \\\n", - "lower_areal_unit \n", - "44 NaN \n", - "59 3.231279 \n", - "34 NaN \n", - "31 5.464956 \n", - "28 4.393548 \n", - "\n", - " (coverage, Hospitals) (coverage, Other Health Providers) \\\n", - "lower_areal_unit \n", - "44 NaN NaN \n", - "59 NaN NaN \n", - "34 NaN 1.996641 \n", - "31 NaN NaN \n", - "28 8.340839 2.384945 \n", - "\n", - " (coverage, School-Based Health Centers) \n", - "lower_areal_unit \n", - "44 NaN \n", - "59 NaN \n", - "34 NaN \n", - "31 4.831545 \n", - "28 7.445568 " + "
" ] }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "coverage.agg_area_cat().head()" + "coverage.plot_cdf(filename = '/Users/whlu/spatial_access/data/coverage score/coverage_cdf_plot.png',\n", + " plot_type = \"percap\", title = 'CDF of Coverage Score',\n", + " xlabel = 'Per Capita Spending (USD)',\n", + " ylabel = 'Number of Tracts')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Choropleth Mapping" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python3.6/site-packages/pandas/core/reshape/merge.py:544: UserWarning: merging between different levels can give an unintended result (1 levels on the left, 2 on the right)\n", - " warnings.warn(msg, UserWarning)\n", - "INFO:ScoreModel:Wrote aggregate to file: data/coverage_metrics/walkagg_area_cat_0.csv\n" + "INFO:spatial_access.BaseModel:Figure was saved to: /Users/whlu/spatial_access/data/coverage score/coverage_choropleth.png\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "coverage.write_agg_area_cat()\n", - "\n", - "#Saved as cov_aggregate_health_tracts_comm_cat.csv" + "coverage.plot_choropleth(column = \"percap_spending\",\n", + " shapefile='/Users/whlu/spatial_access/data/chicago_boundaries/chi_comm_boundaries.shp',\n", + " title = 'Per Capita Spending (USD), Chicago Community Areas',\n", + " include_destinations = False,\n", + " filename = '/Users/whlu/spatial_access/data/coverage score/coverage_choropleth.png')" ] }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "See all results in chicago_boundaries.shp" - ] + "source": [] }, { "cell_type": "code", diff --git a/docs/notebooks/figures/infrastructure.png b/docs/notebooks/figures/infrastructure.png deleted file mode 100755 index 760f957..0000000 Binary files a/docs/notebooks/figures/infrastructure.png and /dev/null differ diff --git a/docs/notebooks/figures/infrastructure2.png b/docs/notebooks/figures/infrastructure2.png deleted file mode 100755 index f6cf263..0000000 Binary files a/docs/notebooks/figures/infrastructure2.png and /dev/null differ diff --git a/docs/notebooks/figures/lucid.png b/docs/notebooks/figures/lucid.png deleted file mode 100755 index 74ffb51..0000000 Binary files a/docs/notebooks/figures/lucid.png and /dev/null differ diff --git a/docs/notebooks/matrix.ipynb b/docs/notebooks/matrix.ipynb old mode 100755 new mode 100644 index 64458a0..3d10650 --- a/docs/notebooks/matrix.ipynb +++ b/docs/notebooks/matrix.ipynb @@ -14,8 +14,10 @@ "outputs": [], "source": [ "import sys, os\n", - "os.chdir('scripts')\n", - "from p2p import *" + "os.chdir('/Users/whlu/spatial_access/spatial_access')\n", + "from p2p import *\n", + "\n", + "import geopandas as gpd" ] }, { @@ -69,90 +71,77 @@ " \n", " \n", " \n", - " ID\n", - " Facility\n", - " lat\n", + " geoid10\n", " lon\n", - " Type\n", - " target\n", - " category\n", + " lat\n", + " Pop2014\n", + " Pov14\n", " community\n", + " ID\n", " \n", " \n", " \n", " \n", " 0\n", + " 17031842400\n", + " -87.630040\n", + " 41.742475\n", + " 5157\n", + " 769\n", + " 44\n", " 1\n", - " American Indian Health Service of Chicago, Inc.\n", - " 41.956676\n", - " -87.651879\n", - " 5\n", - " 127000\n", - " Other Health Providers\n", - " 3\n", " \n", " \n", " 1\n", + " 17031840300\n", + " -87.681882\n", + " 41.832094\n", + " 5881\n", + " 1021\n", + " 59\n", " 2\n", - " Hamdard Center for Health and Human Services\n", - " 41.997852\n", - " -87.669535\n", - " 5\n", - " 190000\n", - " Other Health Providers\n", - " 77\n", " \n", " \n", " 2\n", + " 17031841100\n", + " -87.635098\n", + " 41.851006\n", + " 3363\n", + " 2742\n", + " 34\n", " 3\n", - " Infant Welfare Society of Chicago\n", - " 41.924904\n", - " -87.717270\n", - " 5\n", - " 137000\n", - " Other Health Providers\n", - " 22\n", " \n", " \n", " 3\n", + " 17031841200\n", + " -87.683342\n", + " 41.855562\n", + " 3710\n", + " 1819\n", + " 31\n", " 4\n", - " Mercy Family - Henry Booth House Family Health...\n", - " 41.841694\n", - " -87.624790\n", - " 5\n", - " 159000\n", - " Other Health Providers\n", - " 35\n", " \n", " \n", " 4\n", - " 6\n", - " Cook County - Dr. Jorge Prieto Health Center\n", - " 41.847143\n", - " -87.724975\n", + " 17031838200\n", + " -87.675079\n", + " 41.870416\n", + " 3296\n", + " 361\n", + " 28\n", " 5\n", - " 166000\n", - " Other Health Providers\n", - " 30\n", " \n", " \n", "\n", "" ], "text/plain": [ - " ID Facility lat \\\n", - "0 1 American Indian Health Service of Chicago, Inc. 41.956676 \n", - "1 2 Hamdard Center for Health and Human Services 41.997852 \n", - "2 3 Infant Welfare Society of Chicago 41.924904 \n", - "3 4 Mercy Family - Henry Booth House Family Health... 41.841694 \n", - "4 6 Cook County - Dr. Jorge Prieto Health Center 41.847143 \n", - "\n", - " lon Type target category community \n", - "0 -87.651879 5 127000 Other Health Providers 3 \n", - "1 -87.669535 5 190000 Other Health Providers 77 \n", - "2 -87.717270 5 137000 Other Health Providers 22 \n", - "3 -87.624790 5 159000 Other Health Providers 35 \n", - "4 -87.724975 5 166000 Other Health Providers 30 " + " geoid10 lon lat Pop2014 Pov14 community ID\n", + "0 17031842400 -87.630040 41.742475 5157 769 44 1\n", + "1 17031840300 -87.681882 41.832094 5881 1021 59 2\n", + "2 17031841100 -87.635098 41.851006 3363 2742 34 3\n", + "3 17031841200 -87.683342 41.855562 3710 1819 31 4\n", + "4 17031838200 -87.675079 41.870416 3296 361 28 5" ] }, "execution_count": 3, @@ -161,7 +150,7 @@ } ], "source": [ - "df = pd.read_csv('data/DEST/health_chicago.csv')\n", + "df = pd.read_csv('/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", "df.head()" ] }, @@ -203,13 +192,6 @@ "collapsed": true }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:p2p:Processing network (walk) in format: csv with epsilon: 0.05\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -220,16 +202,17 @@ "> lat\n", "> Pop2014\n", "> Pov14\n", - "> community\n" + "> community\n", + "> ID\n" ] }, { - "name": "stderr", + "name": "stdin", "output_type": "stream", "text": [ - "INFO:p2p:Total number of rows in the dataset: 801\n", - "INFO:p2p:Complete number of rows for computing the matrix: 801\n", - "INFO:p2p:Total number of rows dropped due to missing latitude or longitude values: 0\n" + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" ] }, { @@ -248,135 +231,78 @@ ] }, { - "name": "stderr", + "name": "stdin", "output_type": "stream", "text": [ - "INFO:p2p:Total number of rows in the dataset: 199\n", - "INFO:p2p:Complete number of rows for computing the matrix: 199\n", - "INFO:p2p:Total number of rows dropped due to missing latitude or longitude values: 0\n", - "INFO:osmnet:Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "INFO:osmnet:Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"motor|proposed|construction|abandoned|platform|raceway\"][\"foot\"!~\"no\"][\"pedestrians\"!~\"no\"](41.55758000,-87.95448850,42.11430300,-87.48049640);>;);out;'}\"\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"motor|proposed|construction|abandoned|platform|raceway\"][\"foot\"!~\"no\"][\"pedestrians\"!~\"no\"](41.55758000,-87.95448850,42.11430300,-87.48049640);>;);out;'}\"\n" + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:osmnet:Downloaded 105,557.4KB from www.overpass-api.de in 12.78 seconds\n", - "INFO:osmnet:Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 14.61 seconds\n" + "INFO:p2p:Approx area of bounding box: 2,445.05 sq. km\n", + "INFO:p2p:All operations completed in 15.88 seconds\n" ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloaded 105,557.4KB from www.overpass-api.de in 12.78 seconds\n", - "Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 14.61 seconds\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Returning OSM data with 644,575 nodes and 161,731 ways...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Returning OSM data with 644,575 nodes and 161,731 ways...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Edge node pairs completed. Took 194.62 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Edge node pairs completed. Took 194.62 seconds\n" - ] - }, + } + ], + "source": [ + "# Calculate asymmetric distance matrix for walking (takes ~5 minutes to run) \n", + "\n", + "w_asym_mat = TransitMatrix('walk', \n", + " primary_input='/Users/whlu/spatial_access/data/input_data/tracts2010.csv', \n", + " secondary_input='/Users/whlu/spatial_access/data/input_data/health_chicago.csv')\n", + "w_asym_mat.process()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO:osmnet:Returning processed graph with 264,787 nodes and 401,733 edges...\n", - "INFO:osmnet:Completed OSM data download and Pandana node and edge table creation in 227.61 seconds\n" + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts.csv in 0.04 seconds\n" ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Returning processed graph with 264,787 nodes and 401,733 edges...\n", - "Completed OSM data download and Pandana node and edge table creation in 227.61 seconds\n", - "Number of islands initially found: 227\n", - "Number of disconnected nodes removed: 930\n" - ] - }, + } + ], + "source": [ + "w_asym_mat.write_csv(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts.csv\")\n", + "\n", + "#Saved as walk_asym_health_tracts.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO:p2p:Prepared raw network in 23.45 seconds and wrote to: data/matrices/raw_network_0.csv\n", - "/Users/irene/Documents/GitHub/access/travel_times/scripts/p2p.py:892: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n", - " node_array = pd.DataFrame.as_matrix(nodes)\n", - "INFO:p2p:Nearest Neighbor matching completed in 0.29 seconds\n", - "INFO:p2p:Nearest Neighbor matching completed in 0.12 seconds\n", - "INFO:p2p:Writing to file: data/matrices/walk_full_results_0.csv\n", - "INFO:p2p:Shortest path matrix computed in 13.68 seconds\n", - "INFO:p2p:All operations completed in 271.54 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cleaned up calculation artifacts\n" + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts.tmx in 0.00 seconds\n" ] } ], "source": [ - "# Calculate asymmetric distance matrix for walking (takes ~5 minutes to run) \n", + "w_asym_mat.write_tmx(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts.tmx\")\n", "\n", - "w_asym_mat = TransitMatrix(network_type='walk',\n", - " primary_input='data/ORIG/tracts2010.csv',\n", - " secondary_input='data/DEST/health_chicago.csv', \n", - " write_to_file=True)\n", - "\n", - "w_asym_mat.process()\n", - "\n", - "#The output is walk_asym_health_tracts.csv (used in the calculation of the metrics)" + "# Saved as walk_asym_health_tracts.tmx" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": { "code_folding": [] }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:p2p:Processing network (drive) in format: csv with epsilon: 0.05\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -387,16 +313,17 @@ "> lat\n", "> Pop2014\n", "> Pov14\n", - "> community\n" + "> community\n", + "> ID\n" ] }, { - "name": "stderr", + "name": "stdin", "output_type": "stream", "text": [ - "INFO:p2p:Total number of rows in the dataset: 801\n", - "INFO:p2p:Complete number of rows for computing the matrix: 801\n", - "INFO:p2p:Total number of rows dropped due to missing latitude or longitude values: 0\n" + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" ] }, { @@ -415,145 +342,80 @@ ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:p2p:Total number of rows in the dataset: 199\n", - "INFO:p2p:Complete number of rows for computing the matrix: 199\n", - "INFO:p2p:Total number of rows dropped due to missing latitude or longitude values: 0\n", - "INFO:osmnet:Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "INFO:osmnet:Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"cycleway|footway|path|pedestrian|steps|track|proposed|construction|bridleway|abandoned|platform|raceway|service\"][\"motor_vehicle\"!~\"no\"][\"motorcar\"!~\"no\"][\"service\"!~\"parking|parking_aisle|driveway|emergency_access\"](41.55758000,-87.95448850,42.11430300,-87.48049640);>;);out;'}\"\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"cycleway|footway|path|pedestrian|steps|track|proposed|construction|bridleway|abandoned|platform|raceway|service\"][\"motor_vehicle\"!~\"no\"][\"motorcar\"!~\"no\"][\"service\"!~\"parking|parking_aisle|driveway|emergency_access\"](41.55758000,-87.95448850,42.11430300,-87.48049640);>;);out;'}\"\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Downloaded 53,487.4KB from www.overpass-api.de in 8.82 seconds\n", - "INFO:osmnet:Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 9.59 seconds\n" - ] - }, - { - "name": "stdout", + "name": "stdin", "output_type": "stream", "text": [ - "Downloaded 53,487.4KB from www.overpass-api.de in 8.82 seconds\n", - "Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 9.59 seconds\n" + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:osmnet:Returning OSM data with 282,768 nodes and 60,979 ways...\n" + "INFO:p2p:Approx area of bounding box: 2,445.05 sq. km\n", + "INFO:p2p:All operations completed in 7.94 seconds\n" ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Returning OSM data with 282,768 nodes and 60,979 ways...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Edge node pairs completed. Took 67.06 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Edge node pairs completed. Took 67.06 seconds\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Returning processed graph with 87,248 nodes and 131,181 edges...\n", - "INFO:osmnet:Completed OSM data download and Pandana node and edge table creation in 84.89 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Returning processed graph with 87,248 nodes and 131,181 edges...\n", - "Completed OSM data download and Pandana node and edge table creation in 84.89 seconds\n", - "Number of islands initially found: 254\n", - "Number of disconnected nodes removed: 333\n" - ] - }, + } + ], + "source": [ + "# Calculate asymmetric distance matrix for driving (takes ~1.5 minutes to run) \n", + "\n", + "d_asym_mat = TransitMatrix('drive', \n", + " primary_input='/Users/whlu/spatial_access/data/input_data/tracts2010.csv', \n", + " secondary_input='/Users/whlu/spatial_access/data/input_data/health_chicago.csv')\n", + "\n", + "d_asym_mat.process()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO:p2p:Prepared raw network in 4.47 seconds and wrote to: data/matrices/raw_network_1.csv\n", - "/Users/irene/Documents/GitHub/access/travel_times/scripts/p2p.py:892: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n", - " node_array = pd.DataFrame.as_matrix(nodes)\n", - "INFO:p2p:Nearest Neighbor matching completed in 0.23 seconds\n", - "INFO:p2p:Nearest Neighbor matching completed in 0.07 seconds\n", - "INFO:p2p:Writing to file: data/matrices/drive_full_results_0.csv\n", - "INFO:p2p:Shortest path matrix computed in 2.27 seconds\n", - "INFO:p2p:All operations completed in 98.75 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cleaned up calculation artifacts\n" + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/drive_asym_health_tracts.csv in 0.04 seconds\n" ] } ], "source": [ - "# Calculate asymmetric distance matrix for driving (takes ~1.5 minutes to run) \n", + "d_asym_mat.write_csv(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/drive_asym_health_tracts.csv\")\n", "\n", - "d_asym_mat = TransitMatrix(network_type='drive',\n", - " primary_input='data/ORIG/tracts2010.csv',\n", - " secondary_input='data/DEST/health_chicago.csv', \n", - " write_to_file=True)\n", - "\n", - "d_asym_mat.process()\n", + "#Saved as drive_asym_health_tracts.csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d_asym_mat.write_tmx(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/drive_asym_health_tracts.tmx\")\n", "\n", - "#The output is drive_asym_health_tracts.csv (used in the calculation of the metrics)" + "# Saved as drive_asym_health_tracts.tmx" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "## Model 2: Symmetric Matrix\n", "\n", - "### Model 2: Symmetric Matrix \n", - "---\n", - "The second model creates a symmetric distance travel matrix from block to block (801 x 801 matrix). Then, we snap the destination points to the area of analysis (blocks), getting a matrix that calculates the distance between the destinations and every block in the dataset. \n" + "--\n", + "\n", + "The second model creates a symmetric distance travel matrix from block to block (801 x 801 matrix). Then, we snap the destination points to the area of analysis (blocks), getting a matrix that calculates the distance between the destinations and every block in the dataset.\n" ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "code_folding": [] - }, + "execution_count": 13, + "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:p2p:Processing network (walk) in format: csv with epsilon: 0.05\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -564,86 +426,72 @@ "> lat\n", "> Pop2014\n", "> Pov14\n", - "> community\n" + "> community\n", + "> ID\n" ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:p2p:Total number of rows in the dataset: 801\n", - "INFO:p2p:Complete number of rows for computing the matrix: 801\n", - "INFO:p2p:Total number of rows dropped due to missing latitude or longitude values: 0\n", - "INFO:osmnet:Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "INFO:osmnet:Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"motor|proposed|construction|abandoned|platform|raceway\"][\"foot\"!~\"no\"][\"pedestrians\"!~\"no\"](41.60021990,-87.85448850,42.07126140,-87.58049640);>;);out;'}\"\n" - ] - }, - { - "name": "stdout", + "name": "stdin", "output_type": "stream", "text": [ - "Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"motor|proposed|construction|abandoned|platform|raceway\"][\"foot\"!~\"no\"][\"pedestrians\"!~\"no\"](41.60021990,-87.85448850,42.07126140,-87.58049640);>;);out;'}\"\n" + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "ERROR:p2p:Error trying to download OSM network. \n", - " Did you reverse lat/long? \n", - " Is your network connection functional?\n", - " \n" - ] - }, - { - "ename": "SystemExit", - "evalue": "", - "output_type": "error", - "traceback": [ - "An exception has occurred, use %tb to see the full traceback.\n", - "\u001b[0;31mSystemExit\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2971: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.\n", - " warn(\"To exit: use 'exit', 'quit', or Ctrl-D.\", stacklevel=1)\n" + "INFO:p2p:Approx area of bounding box: 2,067.39 sq. km\n", + "INFO:p2p:All operations completed in 9.09 seconds\n" ] } ], "source": [ "# Specify walking distance matrix (takes ~3 min to run) \n", - "w_sym_mat = TransitMatrix(network_type='walk',\n", - " primary_input='data/ORIG/tracts2010.csv',\n", - " write_to_file=True,\n", - " load_to_mem=True)\n", + "w_sym_mat = TransitMatrix('walk', \n", + " primary_input='/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", "\n", "# Run process\n", - "w_sym_mat.process()\n", - "\n", - "# Saved as walk_sym_health_tracts.csv" + "w_sym_mat.process()" ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "code_folding": [ - 0 - ], - "collapsed": true - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO:p2p:Processing network (drive) in format: csv with epsilon: 0.05\n" + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/walk_sym_health_tracts.csv in 0.14 seconds\n" ] - }, + } + ], + "source": [ + "w_sym_mat.write_csv(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/walk_sym_health_tracts.csv\")\n", + "\n", + "# Saved as walk_sym_health_tracts.csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "w_sym_mat.write_tmx(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/walk_sym_health_tracts.tmx\")\n", + "\n", + "# Saved as walk_sym_health_tracts.tmx" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", @@ -654,34 +502,25 @@ "> lat\n", "> Pop2014\n", "> Pov14\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:p2p:Total number of rows in the dataset: 801\n", - "INFO:p2p:Complete number of rows for computing the matrix: 801\n", - "INFO:p2p:Total number of rows dropped due to missing latitude or longitude values: 0\n" + "> community\n", + "> ID\n" ] }, { - "name": "stdout", + "name": "stdin", "output_type": "stream", "text": [ - "The variable names in your speed limit data set are:\n", - "> Unnamed: 0\n", - "> FULLSTNA\n", - "> SPDLIMIT\n" + "Enter the longitude coordinate: lopn\n", + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: ID\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:osmnet:Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "INFO:osmnet:Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"cycleway|footway|path|pedestrian|steps|track|proposed|construction|bridleway|abandoned|platform|raceway|service\"][\"motor_vehicle\"!~\"no\"][\"motorcar\"!~\"no\"][\"service\"!~\"parking|parking_aisle|driveway|emergency_access\"](41.60021990,-87.85448850,42.07126140,-87.58049640);>;);out;'}\"\n" + "INFO:p2p:Approx area of bounding box: 2,067.39 sq. km\n" ] }, { @@ -689,94 +528,68 @@ "output_type": "stream", "text": [ "Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"cycleway|footway|path|pedestrian|steps|track|proposed|construction|bridleway|abandoned|platform|raceway|service\"][\"motor_vehicle\"!~\"no\"][\"motorcar\"!~\"no\"][\"service\"!~\"parking|parking_aisle|driveway|emergency_access\"](41.60021990,-87.85448850,42.07126140,-87.58049640);>;);out;'}\"\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Downloaded 33,501.4KB from www.overpass-api.de in 7.87 seconds\n", - "INFO:osmnet:Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 8.25 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloaded 33,501.4KB from www.overpass-api.de in 7.87 seconds\n", - "Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 8.25 seconds\n" + "Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"cycleway|footway|path|pedestrian|steps|track|proposed|construction|bridleway|abandoned|platform|raceway|service\"][\"motor_vehicle\"!~\"no\"][\"motorcar\"!~\"no\"][\"service\"!~\"parking|parking_aisle|driveway|emergency_access\"](41.60021990,-87.95448850,42.07126140,-87.48049640);>;);out;'}\"\n", + "Downloaded 48,348.1KB from www.overpass-api.de in 4.67 seconds\n", + "Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 5.56 seconds\n", + "Returning OSM data with 249,806 nodes and 55,393 ways...\n", + "Edge node pairs completed. Took 79.76 seconds\n", + "Returning processed graph with 77,575 nodes and 117,269 edges...\n", + "Completed OSM data download and Pandana node and edge table creation in 89.67 seconds\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:osmnet:Returning OSM data with 170,563 nodes and 38,972 ways...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Returning OSM data with 170,563 nodes and 38,972 ways...\n" + "/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py:2531: PerformanceWarning: \n", + "your performance may suffer as PyTables will pickle object types that it cannot\n", + "map directly to c-types [inferred_type->mixed,key->block2_values] [items->['name', 'ref', 'highway', 'service', 'bridge', 'oneway', 'toll', 'area', 'junction']]\n", + "\n", + " pytables.to_hdf(path_or_buf, key, self, **kwargs)\n", + "INFO:p2p:Finished querying osm\n", + "INFO:p2p:All operations completed in 95.81 seconds\n" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Edge node pairs completed. Took 46.40 seconds\n", - "INFO:osmnet:Returning processed graph with 57,572 nodes and 88,601 edges...\n", - "INFO:osmnet:Completed OSM data download and Pandana node and edge table creation in 59.66 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Edge node pairs completed. Took 46.40 seconds\n", - "Returning processed graph with 57,572 nodes and 88,601 edges...\n", - "Completed OSM data download and Pandana node and edge table creation in 59.66 seconds\n" - ] - }, + } + ], + "source": [ + "# Specify driving distance matrix (takes ~1.5 minute to run) \n", + "d_sym_mat = TransitMatrix('drive', \n", + " primary_input='/Users/whlu/spatial_access/data/input_data/tracts2010.csv')\n", + "\n", + "# Run process. For driving, p2p queries OSM to fetch the street network and then output the shortest path transit matrix\n", + "d_sym_mat.process()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO:p2p:Matching street network completed in \n", - " 10.65 seconds: 4121 perfect matches, 118 near perfect matches,\n", - " 649 good matches and 99 non matches\n", - "INFO:p2p:Prepared raw network in 0.37 seconds and wrote to: data/raw_network_0.csv\n", - "/Users/irene/Downloads/access/travel_times/scripts/p2p.py:643: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n", - " node_array = pd.DataFrame.as_matrix(nodes)\n", - "INFO:p2p:Nearest Neighbor matching completed in 0.24 seconds\n", - "INFO:p2p:Writing to file: data/drive_full_results_0.csv\n", - "INFO:p2p:Shortest path matrix computed in 1.27 seconds\n", - "INFO:p2p:All operations completed in 72.20 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cleaned up calculation artifacts\n" + "INFO:p2p:Wrote to /Users/whlu/spatial_access/spatial_access/data/matrices/drive_sym_health_tracts.csv in 0.13 seconds\n" ] } ], "source": [ - "# Specify driving distance matrix (takes ~1.5 minute to run) \n", - "d_sym_mat = TransitMatrix(network_type='drive',\n", - " primary_input='data/ORIG/tracts2010.csv',\n", - " write_to_file=True,\n", - " load_to_mem=True)\n", - "\n", - "# Run process. For driving, p2p queries OSM to fetch the street network and then output the shortest path transit matrix\n", - "d_sym_mat.process()\n", + "d_sym_mat.write_csv(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/drive_sym_health_tracts.csv\")\n", "\n", "# Saved as drive_sym_health_tracts.csv" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d_sym_mat.write_tmx(outfile = \"/Users/whlu/spatial_access/spatial_access/data/matrices/drive_sym_health_tracts.tmx\")\n", + "\n", + "# Saved as drive_sym_health_tracts.tmx" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -803,7 +616,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 47, "metadata": { "code_folding": [ 0 @@ -813,17 +626,18 @@ "outputs": [], "source": [ "# Read destination files to join with boundaries \n", - "health_gdf = gpd.read_file('data/DEST/health_chicago.shp')\n", + "health_gdf = gpd.read_file('/Users/whlu/spatial_access/data/input_data/health_chicago-point.shp')\n", "health_gdf.head()\n", "#Use symmetric matrix calculated above or read your previously saved results:\n", - "sym_walk=pd.read_csv('data/matrices/walk_sym_health_tracts.csv')\n", + "sym_walk=pd.read_csv('/Users/whlu/spatial_access/spatial_access/data/matrices/walk_sym_health_tracts.csv')\n", "\n", "# Read boundaries files \n", - "boundaries_gdf = gpd.read_file('data/ORIG/tracts2010.shp')\n", + "boundaries_gdf = gpd.read_file('/Users/whlu/spatial_access/data/chicago_boundaries/chi_blocks.shp')\n", "\n", "# Rename the ID name in order to match both data frames. \n", "sym_walk= sym_walk.rename(index=str, columns={\"Unnamed: 0\": \"geoid10\"})\n", "\n", + "\n", "# Spatial join of amenities within each area of analysis \n", "#It drops values outside of the tracts shapefile. From 199 to 182 datapoints.\n", "s_join = gpd.sjoin(health_gdf, boundaries_gdf, how='inner', op='within')\n", @@ -831,6 +645,7 @@ "# Convert geopanda dataframe to non-spatial dataframe to join \n", "jb_df = pd.DataFrame(s_join)\n", "\n", + "\n", "# Make sure the id is of the same data type in both data frames.\n", "# sym_walk.dtypes\n", "# jb_df.dtypes\n", @@ -838,14 +653,14 @@ "jb_df=pd.DataFrame(jb_df['geoid10'])\n", "\n", "# Join the symmetric matrix with the spatially joined data (with geoid10 id)\n", - "j_asym=pd.merge(sym_walk, jb_df, left_on='geoid10', right_on='geoid10', how='right')\n", + "j_asym=pd.merge(sym_walk, jb_df, left_on='geoid10', right_on='geoid10', how='left')\n", "\n", - "j_asym.to_csv('data/matrices/walk_asym_health_tracts_join.csv')" + "j_asym.to_csv('/Users/whlu/spatial_access/spatial_access/data/matrices/walk_asym_health_tracts_join.csv')" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 48, "metadata": {}, "outputs": [ { @@ -870,194 +685,173 @@ " \n", " \n", " geoid10\n", - " 17031842400\n", - " 17031840300\n", - " 17031841100\n", - " 17031841200\n", - " 17031838200\n", - " 17031650301\n", - " 17031530503\n", - " 17031760803\n", - " 17031540102\n", + " 1\n", + " 2\n", + " 3\n", + " 4\n", + " 5\n", + " 6\n", + " 7\n", + " 8\n", + " 9\n", " ...\n", - " 17031620100\n", - " 17031620200\n", - " 17031070200\n", - " 17031070400\n", - " 17031070500\n", - " 17031071000\n", - " 17031071200\n", - " 17031130300\n", - " 17031292200\n", - " 17031630900\n", + " 793\n", + " 794\n", + " 795\n", + " 796\n", + " 797\n", + " 798\n", + " 799\n", + " 800\n", + " 801\n", + " Unnamed: 802\n", " \n", " \n", " \n", " \n", " 0\n", - " 17031031501\n", - " 18586\n", - " 12034\n", - " 9778\n", - " 10187\n", - " 8879\n", - " 17799\n", - " 24351\n", - " 11661\n", - " 25486\n", + " 1\n", + " 0\n", + " 9881\n", + " 9106\n", + " 11593\n", + " 12167\n", + " 8364\n", + " 7089\n", + " 27241\n", + " 7104\n", " ...\n", - " 15606\n", - " 16228\n", - " 3343\n", - " 3331\n", - " 3596\n", - " 3934\n", - " 3862\n", - " 4856\n", - " 11392\n", - " 16023\n", + " 9824\n", + " 15701\n", + " 16077\n", + " 16334\n", + " 15570\n", + " 15201\n", + " 22104\n", + " 13666\n", + " 8169\n", + " NaN\n", " \n", " \n", " 1\n", - " 17031031502\n", - " 18246\n", - " 11694\n", - " 9438\n", - " 9847\n", - " 8539\n", - " 17459\n", - " 24011\n", - " 11793\n", - " 25272\n", + " 2\n", + " 9881\n", + " 0\n", + " 3326\n", + " 2115\n", + " 3592\n", + " 6092\n", + " 14890\n", + " 18531\n", + " 16327\n", " ...\n", - " 15266\n", - " 15888\n", - " 3003\n", - " 2996\n", - " 3261\n", - " 3599\n", - " 3522\n", - " 4988\n", - " 11052\n", - " 15683\n", + " 4472\n", + " 9291\n", + " 8947\n", + " 8756\n", + " 8394\n", + " 8751\n", + " 13449\n", + " 3924\n", + " 4295\n", + " NaN\n", " \n", " \n", " 2\n", - " 17031031800\n", - " 18898\n", - " 11352\n", - " 10090\n", - " 9505\n", - " 8197\n", - " 17117\n", - " 24601\n", - " 10601\n", - " 25953\n", + " 3\n", + " 9106\n", + " 3326\n", + " 0\n", + " 3297\n", + " 3777\n", + " 9084\n", + " 15494\n", + " 18504\n", + " 15926\n", " ...\n", - " 14924\n", - " 15546\n", - " 3655\n", - " 3415\n", - " 3331\n", - " 4052\n", - " 4174\n", - " 3796\n", - " 10710\n", - " 15341\n", + " 7464\n", + " 6881\n", + " 7245\n", + " 7437\n", + " 6673\n", + " 6381\n", + " 13367\n", + " 5388\n", + " 7287\n", + " NaN\n", " \n", " \n", " 3\n", - " 17031063400\n", - " 15827\n", - " 9560\n", - " 7019\n", - " 7713\n", - " 6405\n", - " 15325\n", - " 21877\n", - " 13006\n", - " 22882\n", + " 4\n", + " 11593\n", + " 2115\n", + " 3297\n", + " 0\n", + " 1670\n", + " 7905\n", + " 16709\n", + " 16992\n", + " 18146\n", " ...\n", - " 13132\n", - " 13754\n", - " 689\n", - " 1095\n", - " 1402\n", - " 1679\n", - " 1335\n", - " 6713\n", - " 8918\n", - " 13549\n", + " 6285\n", + " 7568\n", + " 7205\n", + " 7014\n", + " 6652\n", + " 7028\n", + " 11910\n", + " 2482\n", + " 6108\n", + " NaN\n", " \n", " \n", " 4\n", - " 17031031300\n", - " 19002\n", - " 12564\n", - " 10194\n", - " 10717\n", - " 9409\n", - " 18329\n", - " 24881\n", - " 11930\n", - " 25861\n", + " 5\n", + " 12167\n", + " 3592\n", + " 3777\n", + " 1670\n", + " 0\n", + " 9382\n", + " 17433\n", + " 15746\n", + " 18870\n", " ...\n", - " 16136\n", - " 16758\n", - " 3873\n", - " 4042\n", - " 4307\n", - " 4645\n", - " 4392\n", - " 4797\n", - " 11922\n", - " 16553\n", + " 7762\n", + " 6141\n", + " 5778\n", + " 5587\n", + " 5225\n", + " 5601\n", + " 10609\n", + " 2939\n", + " 7585\n", + " NaN\n", " \n", " \n", "\n", - "

5 rows × 802 columns

\n", + "

5 rows × 803 columns

\n", "" ], "text/plain": [ - " geoid10 17031842400 17031840300 17031841100 17031841200 \\\n", - "0 17031031501 18586 12034 9778 10187 \n", - "1 17031031502 18246 11694 9438 9847 \n", - "2 17031031800 18898 11352 10090 9505 \n", - "3 17031063400 15827 9560 7019 7713 \n", - "4 17031031300 19002 12564 10194 10717 \n", - "\n", - " 17031838200 17031650301 17031530503 17031760803 17031540102 \\\n", - "0 8879 17799 24351 11661 25486 \n", - "1 8539 17459 24011 11793 25272 \n", - "2 8197 17117 24601 10601 25953 \n", - "3 6405 15325 21877 13006 22882 \n", - "4 9409 18329 24881 11930 25861 \n", - "\n", - " ... 17031620100 17031620200 17031070200 17031070400 \\\n", - "0 ... 15606 16228 3343 3331 \n", - "1 ... 15266 15888 3003 2996 \n", - "2 ... 14924 15546 3655 3415 \n", - "3 ... 13132 13754 689 1095 \n", - "4 ... 16136 16758 3873 4042 \n", + " geoid10 1 2 3 4 5 6 7 8 9 ... \\\n", + "0 1 0 9881 9106 11593 12167 8364 7089 27241 7104 ... \n", + "1 2 9881 0 3326 2115 3592 6092 14890 18531 16327 ... \n", + "2 3 9106 3326 0 3297 3777 9084 15494 18504 15926 ... \n", + "3 4 11593 2115 3297 0 1670 7905 16709 16992 18146 ... \n", + "4 5 12167 3592 3777 1670 0 9382 17433 15746 18870 ... \n", "\n", - " 17031070500 17031071000 17031071200 17031130300 17031292200 \\\n", - "0 3596 3934 3862 4856 11392 \n", - "1 3261 3599 3522 4988 11052 \n", - "2 3331 4052 4174 3796 10710 \n", - "3 1402 1679 1335 6713 8918 \n", - "4 4307 4645 4392 4797 11922 \n", + " 793 794 795 796 797 798 799 800 801 Unnamed: 802 \n", + "0 9824 15701 16077 16334 15570 15201 22104 13666 8169 NaN \n", + "1 4472 9291 8947 8756 8394 8751 13449 3924 4295 NaN \n", + "2 7464 6881 7245 7437 6673 6381 13367 5388 7287 NaN \n", + "3 6285 7568 7205 7014 6652 7028 11910 2482 6108 NaN \n", + "4 7762 6141 5778 5587 5225 5601 10609 2939 7585 NaN \n", "\n", - " 17031630900 \n", - "0 16023 \n", - "1 15683 \n", - "2 15341 \n", - "3 13549 \n", - "4 16553 \n", - "\n", - "[5 rows x 802 columns]" + "[5 rows x 803 columns]" ] }, - "execution_count": 26, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1069,16 +863,16 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(182, 802)" + "(801, 803)" ] }, - "execution_count": 31, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1093,13 +887,6 @@ "source": [ "Now that the user has the origin destination matrices, we can proceed to estimate metrics. For this demo's purpose, we will use only drive_asym_health_tracts.csv and walk_asym_health_tracts.csv to run the metrics." ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/notebooks/p2p-TransitMatrix simple demo.ipynb b/docs/notebooks/p2p-TransitMatrix simple demo.ipynb deleted file mode 100644 index 4e88103..0000000 --- a/docs/notebooks/p2p-TransitMatrix simple demo.ipynb +++ /dev/null @@ -1,556 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from spatial_access.p2p import TransitMatrix" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "sources_df = pd.read_csv('data/input_data/sources.csv')\n", - "dests_df = pd.read_csv('data/input_data/dests.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
namexy
0chicago_theater41.885343-87.627911
1lincoln_park_zoo41.921860-87.635709
2second_city41.911518-87.634719
\n", - "
" - ], - "text/plain": [ - " name x y\n", - "0 chicago_theater 41.885343 -87.627911\n", - "1 lincoln_park_zoo 41.921860 -87.635709\n", - "2 second_city 41.911518 -87.634719" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sources_df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
namexy
0medici41.791455-87.593781
1msi41.791655-87.582974
2whole_foods41.802080-87.587849
\n", - "
" - ], - "text/plain": [ - " name x y\n", - "0 medici 41.791455 -87.593781\n", - "1 msi 41.791655 -87.582974\n", - "2 whole_foods 41.802080 -87.587849" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dests_df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "#assymetrix matrix, different source and dest files\n", - "matrix = TransitMatrix('drive', primary_input='data/input_data/sources.csv', secondary_input='data/input_data/dests.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Processing network (drive) with epsilon: 0.050000\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> name\n", - "> x\n", - "> y\n", - "Enter the longitude coordinate: y\n", - "Enter the latitude coordinate: x\n", - "Enter the index name: name\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 3\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> name\n", - "> x\n", - "> y\n", - "Enter the longitude coordinate: y\n", - "Enter the latitude coordinate: x\n", - "Enter the index name: name\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 3\n", - "INFO:osmnet:Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "INFO:osmnet:Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"cycleway|footway|path|pedestrian|steps|track|proposed|construction|bridleway|abandoned|platform|raceway|service\"][\"motor_vehicle\"!~\"no\"][\"motorcar\"!~\"no\"][\"service\"!~\"parking|parking_aisle|driveway|emergency_access\"](41.74145500,-87.68570900,41.97186000,-87.53297400);>;);out;'}\"\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"cycleway|footway|path|pedestrian|steps|track|proposed|construction|bridleway|abandoned|platform|raceway|service\"][\"motor_vehicle\"!~\"no\"][\"motorcar\"!~\"no\"][\"service\"!~\"parking|parking_aisle|driveway|emergency_access\"](41.74145500,-87.68570900,41.97186000,-87.53297400);>;);out;'}\"\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Downloaded 8,790.2KB from www.overpass-api.de in 4.06 seconds\n", - "INFO:osmnet:Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 4.31 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloaded 8,790.2KB from www.overpass-api.de in 4.06 seconds\n", - "Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 4.31 seconds\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Returning OSM data with 43,234 nodes and 10,744 ways...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Returning OSM data with 43,234 nodes and 10,744 ways...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Edge node pairs completed. Took 23.19 seconds\n", - "INFO:osmnet:Returning processed graph with 13,591 nodes and 20,467 edges...\n", - "INFO:osmnet:Completed OSM data download and Pandana node and edge table creation in 30.13 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Edge node pairs completed. Took 23.19 seconds\n", - "Returning processed graph with 13,591 nodes and 20,467 edges...\n", - "Completed OSM data download and Pandana node and edge table creation in 30.13 seconds\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Queried OSM...\n", - "INFO:spatial_access.p2p:Prepared raw network in 0.09 seconds\n", - "/Users/logannoel/git/spatial_access/spatial_access/p2p.py:323: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n", - " node_array = pd.DataFrame.as_matrix(nodes)\n", - "WARNING:spatial_access.p2p:\n", - " Using string ids is very slow. \n", - " You should map noninteger ids to integers instead\n", - " \n", - "INFO:spatial_access.p2p:Nearest Neighbor matching completed in 0.01 seconds\n", - "INFO:spatial_access.p2p:Nearest Neighbor matching completed in 0.01 seconds\n", - "INFO:spatial_access.p2p:Shortest path matrix computed in 0.00 seconds\n", - "INFO:spatial_access.p2p:All operations completed in 41.35 seconds\n" - ] - } - ], - "source": [ - "matrix.process()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Wrote file to data/output_1_drive.csv\n" - ] - } - ], - "source": [ - "matrix.write_to_file('data/output_1_drive.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - ",3,4,5,\r\n", - "0,716,592,575,\r\n", - "1,925,801,784,\r\n", - "2,850,726,709,\r\n", - "\r\n" - ] - } - ], - "source": [ - "#the row and column labels are mapped to number labels\n", - "cat 'data/output_1_drive.csv'" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "matrix_2 = TransitMatrix('walk', primary_input='data/input_data/dests.csv', use_meters=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Processing network (walk) with epsilon: 0.050000\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> name\n", - "> x\n", - "> y\n", - "Enter the longitude coordinate: y\n", - "Enter the latitude coordinate: x\n", - "Enter the index name: name\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 3\n", - "INFO:osmnet:Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "INFO:osmnet:Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"motor|proposed|construction|abandoned|platform|raceway\"][\"foot\"!~\"no\"][\"pedestrians\"!~\"no\"](41.74145500,-87.64378100,41.85208000,-87.53297400);>;);out;'}\"\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requesting network data within bounding box from Overpass API in 1 request(s)\n", - "Posting to http://www.overpass-api.de/api/interpreter with timeout=180, \"{'data': '[out:json][timeout:180];(way[\"highway\"][\"highway\"!~\"motor|proposed|construction|abandoned|platform|raceway\"][\"foot\"!~\"no\"][\"pedestrians\"!~\"no\"](41.74145500,-87.64378100,41.85208000,-87.53297400);>;);out;'}\"\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Downloaded 5,479.7KB from www.overpass-api.de in 11.22 seconds\n", - "INFO:osmnet:Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 11.37 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloaded 5,479.7KB from www.overpass-api.de in 11.22 seconds\n", - "Downloaded OSM network data within bounding box from Overpass API in 1 request(s) and 11.37 seconds\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Returning OSM data with 31,257 nodes and 8,397 ways...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Returning OSM data with 31,257 nodes and 8,397 ways...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:osmnet:Edge node pairs completed. Took 21.50 seconds\n", - "INFO:osmnet:Returning processed graph with 13,858 nodes and 21,040 edges...\n", - "INFO:osmnet:Completed OSM data download and Pandana node and edge table creation in 34.51 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Edge node pairs completed. Took 21.50 seconds\n", - "Returning processed graph with 13,858 nodes and 21,040 edges...\n", - "Completed OSM data download and Pandana node and edge table creation in 34.51 seconds\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Queried OSM...\n", - "INFO:spatial_access.p2p:Prepared raw network in 0.06 seconds\n", - "/Users/logannoel/git/spatial_access/spatial_access/p2p.py:323: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n", - " node_array = pd.DataFrame.as_matrix(nodes)\n", - "WARNING:spatial_access.p2p:\n", - " Using string ids is very slow. \n", - " You should map noninteger ids to integers instead\n", - " \n", - "INFO:spatial_access.p2p:Nearest Neighbor matching completed in 0.01 seconds\n", - "INFO:spatial_access.p2p:Shortest path matrix computed in 0.00 seconds\n", - "INFO:spatial_access.p2p:All operations completed in 38.60 seconds\n" - ] - } - ], - "source": [ - "matrix_2.process()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Wrote file to data/output_2_walk.csv\n" - ] - } - ], - "source": [ - "matrix_2.write_to_file('data/output_2_walk.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "name,x,y\r\n", - "medici,41.791455,-87.593781\r\n", - "msi,41.791655,-87.582974\r\n", - "whole_foods,41.802080,-87.587849\r\n" - ] - } - ], - "source": [ - "cat 'data/input_data/dests.csv'" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - ",0,1,2,\r\n", - "0,0,936,1714,\r\n", - "1,936,0,1501,\r\n", - "2,1714,1501,0,\r\n", - "\r\n" - ] - } - ], - "source": [ - "cat 'data/output_2_walk.csv'" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "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.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/reqs.ipynb b/docs/notebooks/reqs.ipynb deleted file mode 100755 index ae96a15..0000000 --- a/docs/notebooks/reqs.ipynb +++ /dev/null @@ -1,231 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Installation and Files Requirements" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "--- \n", - "## Installation Setup \n", - "\n", - "The package is written in Python 3.6, C++ 11 and Cython by [Logan Noel](https://www.linkedin.com/in/lmnoel/). (Minimum Python version 3.5) \n", - "Currently, the only supported operating systems are MacOS and Ubuntu (if you don't have either, a guide for installing Ubuntu 16.04 LTS is in README.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Within the notebook:**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cd scripts" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#1. Install `python3` (if not installed already): \n", - "! brew install python3" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#2. Install `pip` (if not installed already):\n", - "! curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py\n", - "! python3 get-pip.py" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#3. Install requirements: \n", - "! pip3 install -r requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#3.1 If you get errors:\n", - "! pip3 install -r requirements.txt --upgrade" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#3.2 If you get \"Cannot uninstall X errors for distutils packages\":\n", - "! pip3 install -r requirements.txt --ignore-installed" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#4. Run the setup for the travel time matrix:\n", - "! python3 setup.py build\n", - "! python3 setup.py install" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If getting error: \"Failed building wheel for pandana\" or missing \"libspatialindex\" when importing the libraries, do the following:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Note: If getting error: \"Failed building wheel for pandana\"\n", - "! brew install spatialindex\n", - "! python3 setup.py again." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "**From a terminal:** \n", - "\n", - "1. Go to directory where you want to save the folder and run: \n", - "`$ git clone https://github.com/GeoDaCenter/access.git` \n", - " \n", - "2. Go the access > travel_times folder: \n", - "`$ cd access/analytics` \n", - "\n", - "3. Install `python3` and `pip` (if not installed already). \n", - "`$ brew install python3` \n", - "`$ curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py` \n", - "`$ python3 get-pip.py` \n", - "\n", - "4. Also within this directory, run: \n", - "`$ pip3 install -r requirements.txt` \n", - "If you get any errors, try running instead \n", - "`$ pip3 install -r requirements.txt --upgrade` \n", - "If you get \"Cannot uninstall X errors for distutils packages\": \n", - "`$ pip3 install -r requirements.txt --ignore-installed` \n", - "\n", - "5. Run (If you are on linux, throw a `sudo` in front): \n", - "`$ python3 setup.py build` \n", - "`$ python3 setup.py install` \n", - "\n", - "Note: When running the demo, if you get error: *\"Failed building wheel for pandana\"* or missing *\"libspatialindex\"* when importing the libraries, install spatialindex and setup.py again. \n", - "`$ brew install spatialindex` \n", - "`$ python3 setup.py` again." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "**If you are having troubles, make sure ruby, homebrew xcode, and git are installed:** \n", - "`$ curl -L https://get.rvm.io | bash -s stable --auto-dotfiles --autolibs=enable --rails` \n", - "`$ mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew` \n", - "`$ ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"` \n", - "`$ brew install git`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## Files Requirements\n", - "* Save origin and destination files as .csv files under the **data** folder. \n", - "\n", - "* Both origin and destination files should be under the same coordinate reference system and that it is EPSG:4326 (WGS 84).\n", - "\n", - "* Make sure that the destination points are within the area of the source area file.\n", - "\n", - "* If the user is interested in **aggregating** the scores, please input the greater areal unit as an attribute of the source table (for access) and as attribute of the destionation table (for coverage). \n", - "In order to attach the polygon's attributes to the points (destinations or origins), the user can use QGIS and do the following: \n", - "1) Import the polygon's shapefile (in this case, community areas for Chicago) and the points' shapefile of interest. \n", - "2) There are two ways of attaching the polygon's IDs to the points:\n", - " * Go to Vector > Data Management Tools > Join attributes by location \n", - " * Go to Processing > Toolbox > SAGA > Vector point tools > Add polygon attributes to points. \n", - " \n", - "\n", - "* **Origin file:** \n", - " * Unique index identifier (ID) (integer or real) \n", - " * Latitude and longitude coordinates (real) \n", - " * For Coverage/Access Score: population count (not mandatory for Access Score)\n", - " * In order to aggregate to larger areal units, attach the larger areal unit ID as an attribute of the origin file. (not mandatory) (integer or real)\n", - " \n", - " \n", - "* **Destination file:** \n", - " * Unique index identifier (ID) (integer or real) \n", - " * Latitude and longitude coordinates (real) \n", - " * For Coverage/Access Score: target amount of each destination (can be size/sales) (not mandatory for Access Score) \n", - " * In order to subset by categories: category field that specifies (string)\n", - " * In order to aggregate to larger areal units, attach the larger areal unit ID as an attribute of the destination file. (not mandatory) (integer or real)\n", - "\n", - "* If you already have an asymmetric matrix, the metrics will consider the negative values as null values (NaN), the blanks as and the zeros as\n", - "\n", - "* If the network type is **driving**, the edge traversal speed is drawn from a table of speed limits and street names that must be supplied separately. In this case, it is sepcified under scripts>data>speed_limit.csv\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "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.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/reqs_install.ipynb b/docs/notebooks/reqs_install.ipynb new file mode 100755 index 0000000..c61bca9 --- /dev/null +++ b/docs/notebooks/reqs_install.ipynb @@ -0,0 +1,159 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Installation Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "--- \n", + "The package is written in Python 3.6, C++ 11 and Cython by [Logan Noel](https://www.linkedin.com/in/lmnoel/). (Minimum Python version 3.5) \n", + "Currently, the only supported operating systems are MacOS and Ubuntu (if you don't have either, a guide for installing Ubuntu 16.04 LTS is in README.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note: More seasoned users can download installation requirements directly on the terminal.**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install Python3\n", + "! brew install python3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install homebrew\n", + "! /usr/bin/ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install pip3\n", + "! brew install pip3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install jupyter, jupyterlab, and jupyter hub\n", + "! brew install jupyter\n", + "! brew install jupyterlab" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Clone the repository:\n", + "! git clone https://github.com/jupyterhub/jupyterhub" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install spatial index package\n", + "! brew install spatialindex" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install spatial access package\n", + "! pip3 install spatial_access" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install scipy package\n", + "! brew install scipy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install geopy package\n", + "! pip install geopy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install geopandas package\n", + "! conda install geopandas" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Run setup.py to install all the packages\n", + "! sudo python setup.py install" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/simple demo.ipynb b/docs/notebooks/simple demo.ipynb old mode 100644 new mode 100755 index 4003d75..d2fe0c0 --- a/docs/notebooks/simple demo.ipynb +++ b/docs/notebooks/simple demo.ipynb @@ -4,21 +4,58 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# MATRIX" + "# Simple Demo\n", + "This notebook will run through 12 sources and 7 destinations. \n", + "It will create a 12x7 walking matrix of amenities in Hyde Park, Chicago. \n", + "Then, it will run through a basic version of each access and coverage metric to illustrate it's usage." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Name: spatial-access\n", + "Version: 1.0.0\n", + "Summary: UNKNOWN\n", + "Home-page: https://github.com/GeoDaCenter/spatial_access\n", + "Author: Logan Noel (lmnoel)\n", + "Author-email: lnoel@uchicago.edu\n", + "License: GPL\n", + "Location: /anaconda/lib/python3.6/site-packages/spatial_access-1.0.0-py3.6-macosx-10.7-x86_64.egg\n", + "Requires: fiona, cython, matplotlib, jellyfish, geopandas, psutil, pandas, numpy, osmnet, scipy, geopy, shapely, tables, scikit-learn, atlas, descartes, rtree, rtree\n", + "Required-by: \n" + ] + } + ], + "source": [ + "#check to see what version of spatial access the user is using\n", + "! pip show spatial-access" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating the Matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'/Users/irene/Desktop/example/spatial_access/docs'" + "'/Users/irenefarah/Downloads/push/spatial_access/docs/notebooks'" ] }, - "execution_count": 4, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -29,24 +66,24 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "/Users/irene/Desktop/example/spatial_access\n" + "/Users/irenefarah/Downloads/push/spatial_access\n" ] } ], "source": [ - "cd '/Users/irene/Desktop/example/spatial_access'" + "cd '/Users/irenefarah/Downloads/push/spatial_access/'" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -55,18 +92,18 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", - "sources_df = pd.read_csv('data/input_data/tracts2010.csv')\n", - "dests_df = pd.read_csv('data/input_data/health_chicago.csv')" + "sources_df = pd.read_csv('data/input_data/sources/hyde_park_tracts.csv')\n", + "dests_df = pd.read_csv('data/input_data/destinations/hyde_park_dests.csv')\n" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -101,74 +138,144 @@ " \n", " \n", " 0\n", - " 17031842400\n", - " -87.630040\n", - " 41.742475\n", - " 5157\n", - " 769\n", - " 44\n", + " 17031836300\n", + " -87.601757\n", + " 41.801532\n", + " 6465\n", + " 234\n", + " 41\n", " \n", " \n", " 1\n", - " 17031840300\n", - " -87.681882\n", - " 41.832094\n", - " 5881\n", - " 1021\n", - " 59\n", + " 17031836200\n", + " -87.601284\n", + " 41.790469\n", + " 1329\n", + " 47\n", + " 41\n", " \n", " \n", " 2\n", - " 17031841100\n", - " -87.635098\n", - " 41.851006\n", - " 3363\n", - " 2742\n", - " 34\n", + " 17031410100\n", + " -87.579323\n", + " 41.801497\n", + " 1956\n", + " 551\n", + " 41\n", " \n", " \n", " 3\n", - " 17031841200\n", - " -87.683342\n", - " 41.855562\n", - " 3710\n", - " 1819\n", - " 31\n", + " 17031410200\n", + " -87.594269\n", + " 41.801668\n", + " 1248\n", + " 362\n", + " 41\n", " \n", " \n", " 4\n", - " 17031838200\n", - " -87.675079\n", - " 41.870416\n", - " 3296\n", - " 361\n", - " 28\n", + " 17031410500\n", + " -87.603745\n", + " 41.797827\n", + " 2630\n", + " 717\n", + " 41\n", + " \n", + " \n", + " 5\n", + " 17031410600\n", + " -87.598946\n", + " 41.797971\n", + " 2365\n", + " 703\n", + " 41\n", + " \n", + " \n", + " 6\n", + " 17031411100\n", + " -87.589702\n", + " 41.790449\n", + " 2246\n", + " 154\n", + " 41\n", + " \n", + " \n", + " 7\n", + " 17031410700\n", + " -87.594198\n", + " 41.798040\n", + " 1959\n", + " 453\n", + " 41\n", + " \n", + " \n", + " 8\n", + " 17031410800\n", + " -87.589626\n", + " 41.797960\n", + " 3201\n", + " 741\n", + " 41\n", + " \n", + " \n", + " 9\n", + " 17031410900\n", + " -87.576659\n", + " 41.797874\n", + " 2923\n", + " 607\n", + " 41\n", + " \n", + " \n", + " 10\n", + " 17031411000\n", + " -87.576873\n", + " 41.790716\n", + " 3313\n", + " 465\n", + " 41\n", + " \n", + " \n", + " 11\n", + " 17031411200\n", + " -87.594017\n", + " 41.790556\n", + " 1691\n", + " 289\n", + " 41\n", " \n", " \n", "\n", "" ], "text/plain": [ - " geoid10 lon lat Pop2014 Pov14 community\n", - "0 17031842400 -87.630040 41.742475 5157 769 44\n", - "1 17031840300 -87.681882 41.832094 5881 1021 59\n", - "2 17031841100 -87.635098 41.851006 3363 2742 34\n", - "3 17031841200 -87.683342 41.855562 3710 1819 31\n", - "4 17031838200 -87.675079 41.870416 3296 361 28" + " geoid10 lon lat Pop2014 Pov14 community\n", + "0 17031836300 -87.601757 41.801532 6465 234 41\n", + "1 17031836200 -87.601284 41.790469 1329 47 41\n", + "2 17031410100 -87.579323 41.801497 1956 551 41\n", + "3 17031410200 -87.594269 41.801668 1248 362 41\n", + "4 17031410500 -87.603745 41.797827 2630 717 41\n", + "5 17031410600 -87.598946 41.797971 2365 703 41\n", + "6 17031411100 -87.589702 41.790449 2246 154 41\n", + "7 17031410700 -87.594198 41.798040 1959 453 41\n", + "8 17031410800 -87.589626 41.797960 3201 741 41\n", + "9 17031410900 -87.576659 41.797874 2923 607 41\n", + "10 17031411000 -87.576873 41.790716 3313 465 41\n", + "11 17031411200 -87.594017 41.790556 1691 289 41" ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sources_df.head()" + "sources_df" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -192,162 +299,119 @@ " \n", " \n", " \n", - " ID\n", - " Facility\n", - " lat\n", + " name\n", " lon\n", - " Type\n", - " target\n", + " lat\n", " category\n", - " community\n", + " target\n", " \n", " \n", " \n", " \n", " 0\n", - " 1\n", - " American Indian Health Service of Chicago, Inc.\n", - " 41.956676\n", - " -87.651879\n", - " 5\n", - " 127000\n", - " Other Health Providers\n", - " 3\n", + " Museum of Science and Industry\n", + " -87.583131\n", + " 41.790883\n", + " Museum\n", + " 400\n", " \n", " \n", " 1\n", - " 2\n", - " Hamdard Center for Health and Human Services\n", - " 41.997852\n", - " -87.669535\n", - " 5\n", - " 190000\n", - " Other Health Providers\n", - " 77\n", + " Medici\n", + " -87.593738\n", + " 41.791438\n", + " Restaurant\n", + " 50\n", " \n", " \n", " 2\n", - " 3\n", - " Infant Welfare Society of Chicago\n", - " 41.924904\n", - " -87.717270\n", - " 5\n", - " 137000\n", - " Other Health Providers\n", - " 22\n", + " Valois\n", + " -87.588328\n", + " 41.799663\n", + " Restaurant\n", + " 30\n", " \n", " \n", " 3\n", - " 4\n", - " Mercy Family - Henry Booth House Family Health...\n", - " 41.841694\n", - " -87.624790\n", - " 5\n", - " 159000\n", - " Other Health Providers\n", - " 35\n", + " DuSable Museum\n", + " -87.607132\n", + " 41.791985\n", + " Museum\n", + " 100\n", " \n", " \n", " 4\n", - " 6\n", - " Cook County - Dr. Jorge Prieto Health Center\n", - " 41.847143\n", - " -87.724975\n", - " 5\n", - " 166000\n", - " Other Health Providers\n", - " 30\n", + " Whole Foods\n", + " -87.587949\n", + " 41.801978\n", + " Supermarket\n", + " 50\n", + " \n", + " \n", + " 5\n", + " Hyde Park Produce\n", + " -87.595524\n", + " 41.799942\n", + " Supermarket\n", + " 35\n", + " \n", + " \n", + " 6\n", + " Jewel Osco\n", + " -87.607225\n", + " 41.784580\n", + " Supermarket\n", + " 70\n", " \n", " \n", "\n", "" ], "text/plain": [ - " ID Facility lat \\\n", - "0 1 American Indian Health Service of Chicago, Inc. 41.956676 \n", - "1 2 Hamdard Center for Health and Human Services 41.997852 \n", - "2 3 Infant Welfare Society of Chicago 41.924904 \n", - "3 4 Mercy Family - Henry Booth House Family Health... 41.841694 \n", - "4 6 Cook County - Dr. Jorge Prieto Health Center 41.847143 \n", - "\n", - " lon Type target category community \n", - "0 -87.651879 5 127000 Other Health Providers 3 \n", - "1 -87.669535 5 190000 Other Health Providers 77 \n", - "2 -87.717270 5 137000 Other Health Providers 22 \n", - "3 -87.624790 5 159000 Other Health Providers 35 \n", - "4 -87.724975 5 166000 Other Health Providers 30 " + " name lon lat category target\n", + "0 Museum of Science and Industry -87.583131 41.790883 Museum 400\n", + "1 Medici -87.593738 41.791438 Restaurant 50\n", + "2 Valois -87.588328 41.799663 Restaurant 30\n", + "3 DuSable Museum -87.607132 41.791985 Museum 100\n", + "4 Whole Foods -87.587949 41.801978 Supermarket 50\n", + "5 Hyde Park Produce -87.595524 41.799942 Supermarket 35\n", + "6 Jewel Osco -87.607225 41.784580 Supermarket 70" ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dests_df.head()" + "dests_df" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "#assymetrix matrix, different source and dest files\n", - "matrix = TransitMatrix('walk', primary_input='data/input_data/tracts2010.csv', secondary_input='data/input_data/health_chicago.csv')" + "matrix = TransitMatrix(network_type='walk',\n", + " primary_hints={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " secondary_hints={'idx': 'name', 'capacity': 'skip', 'category': 'category', 'lat': 'lat', 'lon': 'lon'},\n", + " primary_input='data/input_data/sources/hyde_park_tracts.csv',\n", + " secondary_input='data/input_data/destinations/hyde_park_dests.csv')\n" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 14, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 801\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 199\n", - "INFO:spatial_access.p2p:Approx area of bounding box: 117.50 sq. km\n", - "INFO:spatial_access.p2p:Read network from data/osm_query_cache/walk41.55758_-87.9544885_42.114303_-87.4804964.h5\n", - "INFO:spatial_access.p2p:Prepared raw network in 1.58 seconds\n", - "INFO:spatial_access.p2p:Processing matrix with 35 threads\n", - "INFO:spatial_access.p2p:Shortest path matrix computed in 1.38 seconds using 35 threads\n", - "INFO:spatial_access.p2p:All operations completed in 13.18 seconds\n" + "INFO:spatial_access.p2p:Approx area of bounding box: 141.64 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 0.34 seconds\n" ] } ], @@ -357,38 +421,31 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO:spatial_access.p2p:Wrote to data/output_1_walk.csv in 0.03 seconds\n" + "INFO:spatial_access.p2p:Wrote to data/output_data/matrices/simple_demo_matrix.csv in 0.00 seconds\n" ] } ], "source": [ - "matrix.write_csv('data/output_1_walk.csv')" + "matrix.write_csv('data/output_data/matrices/simple_demo_matrix.csv')" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Access Metrics (Origin Attributes)" + "## Access Metrics (Origin Attributes)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -396,132 +453,80 @@ ] }, { - "cell_type": "code", - "execution_count": 12, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Access Model" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "# Access Score" + "The first line of code is defining Access Model using the previously generated matrix above with a linear decay function. If the user specifies **`transit_matrix_filename=None`**, the matrix will be estimated 'on the fly'. \n", + "The second line of code is defining the density and variety weights." ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "DEBUG:spatial_access.p2p:Running in debug mode\n", - "DEBUG:spatial_access.p2p:Processing network (walk) with epsilon: 0.050000\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 801\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 199\n", - "INFO:spatial_access.p2p:Approx area of bounding box: 117.50 sq. km\n", - "DEBUG:spatial_access.p2p:set bbox: [41.55758, -87.9544885, 42.114303, -87.4804964]\n", - "INFO:spatial_access.p2p:Read network from data/osm_query_cache/walk41.55758_-87.9544885_42.114303_-87.4804964.h5\n", - "DEBUG:spatial_access.p2p:Nearest Neighbor matching completed in 0.42 seconds\n", - "DEBUG:spatial_access.p2p:Nearest Neighbor matching completed in 0.15 seconds\n", - "INFO:spatial_access.p2p:Prepared raw network in 1.62 seconds\n", - "INFO:spatial_access.p2p:Processing matrix with 35 threads\n", - "INFO:spatial_access.p2p:Shortest path matrix computed in 1.37 seconds using 35 threads\n", - "INFO:spatial_access.p2p:All operations completed in 11.63 seconds\n" + "WARNING:spatial_access.p2p:You should use tmx instead of csv for significantly better performance\n" ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n", - "If you have no capacity variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" + "ename": "NameError", + "evalue": "name 'categories' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0msource_column_names\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'idx'\u001b[0m \u001b[0;34m:\u001b[0m \u001b[0;34m'geoid10'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'population'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'skip'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'lat'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'lat'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'lon'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'lon'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mdest_column_names\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'idx'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'name'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'capacity'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'skip'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'category'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'category'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'lat'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'lat'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'lon'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'lon'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m decay_function = 'linear')\n\u001b[0m", + "\u001b[0;32m~/Downloads/push/spatial_access/spatial_access/Models.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, network_type, sources_filename, source_column_names, destinations_filename, dest_column_names, transit_matrix_filename, decay_function, configs, debug)\u001b[0m\n\u001b[1;32m 483\u001b[0m debug=debug)\n\u001b[1;32m 484\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_transit_matrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtransit_matrix_filename\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 485\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_focus_categories\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcategories\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcategories\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 486\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_result_column_names\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'score'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 487\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'categories' is not defined" ] } ], "source": [ "access = AccessModel(network_type='walk',\n", - " sp_matrix_filename=None,\n", - " sources_filename='data/input_data/tracts2010.csv',\n", - " destinations_filename='data/input_data/health_chicago.csv',\n", - " decay_function='logit')" + " transit_matrix_filename='data/output_data/matrices/simple_demo_matrix.csv',\n", + " sources_filename='data/input_data/sources/hyde_park_tracts.csv',\n", + " destinations_filename='data/input_data/destinations/hyde_park_dests.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'name', 'capacity': 'skip', 'category': 'category', 'lat': 'lat', 'lon': 'lon'},\n", + " decay_function = 'linear')" ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 100, "metadata": {}, "outputs": [], "source": [ "category_dict = {\n", - "\"Hospitals\": [10,10,10,10,10],\n", - "\"Federally Qualified Health Centers\": [8, 7, 6, 5, 4],\n", - "\"School-Based Health Centers\": [7, 7, 6, 6, 5],\n", - "\"All Free Health Clinics\": [5, 5, 5, 4, 4],\n", - "\"Other Health Providers\": [4,3,2,1,1]\n", + " \"Museum\": [5, 5, 3],\n", + " \"Restaurant\": [10, 10],\n", + " \"Supermarket\": [10, 7, 5]\n", "}" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 101, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.BaseModel:Using weights: {'Museum': [5, 5, 3], 'Supermarket': [10, 7, 5], 'Restaurant': [10, 10]}\n" + ] + }, { "data": { "text/html": [ @@ -544,1524 +549,288 @@ " \n", " \n", " all_categories_score\n", - " Hospitals_score\n", - " Federally Qualified Health Centers_score\n", - " School-Based Health Centers_score\n", - " All Free Health Clinics_score\n", - " Other Health Providers_score\n", - " all_categories_good_access\n", - " Hospitals_good_access\n", - " Federally Qualified Health Centers_good_access\n", - " School-Based Health Centers_good_access\n", - " All Free Health Clinics_good_access\n", - " Other Health Providers_good_access\n", + " Museum_score\n", + " Supermarket_score\n", + " Restaurant_score\n", " \n", " \n", " \n", " \n", - " 17031842400\n", - " 0.240321\n", - " 0.000000\n", - " 0.000000\n", - " 0.896108\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031840300\n", - " 11.805055\n", - " 0.000000\n", - " 28.691670\n", - " 0.778580\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031841100\n", - " 31.087457\n", - " 10.433250\n", - " 11.210502\n", - " 39.557094\n", - " 27.087906\n", - " 70.608099\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " True\n", - " \n", - " \n", - " 17031841200\n", - " 74.932768\n", - " 50.785100\n", - " 85.340477\n", - " 47.998395\n", - " 0.000000\n", - " 0.000000\n", - " True\n", - " True\n", - " True\n", - " True\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031838200\n", - " 96.805988\n", - " 100.000000\n", - " 35.561236\n", - " 73.486427\n", - " 22.684526\n", - " 57.301925\n", - " True\n", - " True\n", - " False\n", - " True\n", - " False\n", - " True\n", - " \n", - " \n", - " 17031650301\n", - " 0.471837\n", - " 0.000000\n", - " 1.167427\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031530503\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031760803\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031540102\n", - " 6.246782\n", - " 0.000000\n", - " 15.037856\n", - " 0.630028\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031540101\n", - " 9.582452\n", - " 0.000000\n", - " 14.081864\n", - " 14.508801\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031440201\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031839000\n", - " 3.911505\n", - " 0.000000\n", - " 0.000000\n", - " 2.629068\n", - " 22.089473\n", - " 2.435626\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031030601\n", - " 31.168614\n", - " 25.476349\n", - " 19.595536\n", - " 33.137857\n", - " 0.000000\n", - " 5.662780\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " \n", - " \n", - " 17031030604\n", - " 27.540457\n", - " 31.083160\n", - " 5.940923\n", - " 30.821981\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", + " 17031836300\n", + " 19.318333\n", + " 2.108333\n", + " 9.826667\n", + " 7.383333\n", " \n", " \n", - " 17031020801\n", - " 39.753571\n", - " 13.749297\n", - " 56.416007\n", - " 1.203614\n", - " 67.993856\n", - " 0.000000\n", - " False\n", - " False\n", - " True\n", - " False\n", - " True\n", - " False\n", + " 17031836200\n", + " 22.553333\n", + " 4.983333\n", + " 8.342222\n", + " 9.227778\n", " \n", " \n", - " 17031843300\n", - " 85.208903\n", - " 90.803978\n", - " 61.810970\n", - " 38.316322\n", - " 1.570855\n", - " 4.755208\n", - " True\n", - " True\n", - " True\n", - " False\n", - " False\n", - " False\n", + " 17031410100\n", + " 18.303889\n", + " 2.011111\n", + " 8.398333\n", + " 7.894444\n", " \n", " \n", - " 17031080202\n", - " 35.451499\n", - " 34.057864\n", - " 41.970907\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " True\n", - " False\n", - " False\n", - " False\n", + " 17031410200\n", + " 25.826667\n", + " 1.647222\n", + " 12.301667\n", + " 11.877778\n", " \n", " \n", - " 17031070102\n", - " 51.007132\n", - " 47.292337\n", - " 62.683439\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " True\n", - " True\n", - " True\n", - " False\n", - " False\n", - " False\n", + " 17031410500\n", + " 21.282778\n", + " 3.519444\n", + " 9.713333\n", + " 8.050000\n", " \n", " \n", - " 17031031501\n", - " 86.213462\n", - " 64.926005\n", - " 91.498253\n", - " 35.283637\n", - " 0.000000\n", - " 48.173898\n", - " True\n", - " True\n", - " True\n", - " False\n", - " False\n", - " True\n", + " 17031410600\n", + " 26.657778\n", + " 3.522222\n", + " 11.874444\n", + " 11.261111\n", " \n", " \n", - " 17031031502\n", - " 92.662521\n", - " 73.602052\n", - " 93.159724\n", - " 36.126369\n", - " 0.000000\n", - " 57.134678\n", - " True\n", - " True\n", - " True\n", - " False\n", - " False\n", - " True\n", + " 17031411100\n", + " 22.851111\n", + " 4.175000\n", + " 6.787222\n", + " 11.888889\n", " \n", " \n", - " 17031834900\n", - " 13.107514\n", - " 0.000000\n", - " 29.204953\n", - " 0.000000\n", - " 9.672271\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", + " 17031410700\n", + " 30.253333\n", + " 3.475000\n", + " 12.800556\n", + " 13.977778\n", " \n", " \n", - " 17031834800\n", - " 32.576917\n", - " 14.965098\n", - " 43.819187\n", - " 0.000000\n", - " 50.021658\n", - " 0.000000\n", - " False\n", - " False\n", - " True\n", - " False\n", - " True\n", - " False\n", + " 17031410800\n", + " 30.405000\n", + " 3.400000\n", + " 12.516111\n", + " 14.488889\n", " \n", " \n", - " 17031160502\n", - " 17.646365\n", - " 2.087629\n", - " 11.471971\n", - " 44.285058\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " True\n", - " False\n", - " False\n", + " 17031410900\n", + " 13.410000\n", + " 2.508333\n", + " 4.507222\n", + " 6.394444\n", " \n", " \n", - " 17031140702\n", - " 34.054401\n", - " 7.597442\n", - " 28.320289\n", - " 68.923095\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " True\n", - " False\n", - " False\n", + " 17031411000\n", + " 10.296667\n", + " 3.219444\n", + " 1.605000\n", + " 5.472222\n", " \n", " \n", - " 17031842000\n", - " 58.751112\n", - " 18.136803\n", - " 46.474511\n", - " 77.290895\n", - " 0.000000\n", - " 100.000000\n", - " True\n", - " False\n", - " True\n", - " True\n", - " False\n", - " True\n", + " 17031411200\n", + " 27.472222\n", + " 4.936111\n", + " 8.713889\n", + " 13.822222\n", " \n", - " \n", - " 17031150402\n", - " 17.955575\n", - " 18.017717\n", - " 20.226035\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", + " \n", + "\n", + "" + ], + "text/plain": [ + " all_categories_score Museum_score Supermarket_score \\\n", + "17031836300 19.318333 2.108333 9.826667 \n", + "17031836200 22.553333 4.983333 8.342222 \n", + "17031410100 18.303889 2.011111 8.398333 \n", + "17031410200 25.826667 1.647222 12.301667 \n", + "17031410500 21.282778 3.519444 9.713333 \n", + "17031410600 26.657778 3.522222 11.874444 \n", + "17031411100 22.851111 4.175000 6.787222 \n", + "17031410700 30.253333 3.475000 12.800556 \n", + "17031410800 30.405000 3.400000 12.516111 \n", + "17031410900 13.410000 2.508333 4.507222 \n", + "17031411000 10.296667 3.219444 1.605000 \n", + "17031411200 27.472222 4.936111 8.713889 \n", + "\n", + " Restaurant_score \n", + "17031836300 7.383333 \n", + "17031836200 9.227778 \n", + "17031410100 7.894444 \n", + "17031410200 11.877778 \n", + "17031410500 8.050000 \n", + "17031410600 11.261111 \n", + "17031411100 11.888889 \n", + "17031410700 13.977778 \n", + "17031410800 14.488889 \n", + "17031410900 6.394444 \n", + "17031411000 5.472222 \n", + "17031411200 13.822222 " + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "access.calculate(upper_threshold=1800,\n", + " normalize=False,\n", + " category_weight_dict=category_dict)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
all_categories_scoreMuseum_scoreSupermarket_scoreRestaurant_score
170318344009.5886177.3164880.0000000.7785800.00000057.569570FalseFalseFalseFalseFalseTrue1703183630019.3183332.1083339.8266677.383333
1703104020174.77509852.72748180.87661948.4883613.4174150.000000TrueTrueTrueTrueFalseFalse1703183620022.5533334.9833338.3422229.227778
1703104020256.99651825.70511175.31360922.61943648.4951990.000000TrueFalseTrueFalseTrueFalse1703141010018.3038892.0111118.3983337.894444
1703102070216.2705830.0000009.5358300.00000092.1115190.000000FalseFalseFalseFalseTrueFalse1703141020025.8266671.64722212.30166711.877778
.......................................
1703129120064.73643052.81343265.91259434.8188360.0000000.950070TrueTrueTrueFalseFalseFalse
1703162030019.6944420.00000048.7283630.0000000.0000000.000000FalseFalseTrueFalseFalseFalse
1703162040011.6319670.00000028.7800340.0000000.0000000.000000FalseFalseFalseFalseFalseFalse
1703163010012.1006900.00000021.9302260.00000024.0150470.000000FalseFalseFalseFalseFalseFalse
1703163030011.3267210.00000028.0247900.0000000.0000000.000000FalseFalseFalseFalseFalseFalse
170316304008.7532240.00000021.4429080.0000000.6430910.000000FalseFalseFalseFalseFalseFalse
1703163050010.0262130.00000019.8304250.00000014.9214530.000000FalseFalseFalseFalseFalseFalse
170311103000.0000000.0000000.0000000.0000000.0000000.000000FalseFalseFalseFalseFalseFalse
170311104000.0000000.0000000.0000000.0000000.0000000.000000FalseFalseFalseFalseFalseFalse
170311201000.0000000.0000000.0000000.0000000.0000000.000000FalseFalseFalseFalseFalseFalse
170311202000.0000000.0000000.0000000.0000000.0000000.000000FalseFalseFalseFalseFalseFalse
1703127140046.19645029.33982158.3057361.27044547.2067080.000000TrueFalseTrueFalseTrueFalse
170312801001.0505780.0000001.2697231.5394600.9238960.000000FalseFalseFalseFalseFalseFalse
1703128080045.43466625.79162727.34936836.19716858.62427929.487858TrueFalseFalseFalseTrueFalse
170312819001.7523960.0000000.0000000.00000013.0001030.000000FalseFalseFalseFalseFalseFalse
170315501000.0000000.0000000.0000000.0000000.0000000.000000FalseFalseFalseFalseFalseFalse
1703161150021.9516610.00000039.7859720.00000043.5571700.000000FalseFalseFalseFalseTrueFalse
1703161180036.4636900.00000056.8670230.000000100.0000000.000000FalseFalseTrueFalseTrueFalse
1703161190038.8273040.00000064.0737490.00000095.9264180.000000FalseFalseTrueFalseTrueFalse
1703161200022.1942160.00000039.2632030.00000046.9239830.000000FalseFalseFalseFalseTrueFalse
1703162010017.3199580.00000042.8533700.0000000.0000000.000000FalseFalseTrueFalseFalseFalse
1703162020020.0173070.00000049.5272030.0000000.0000000.000000FalseFalseTrueFalseFalseFalse
1703107020049.75168444.48772263.3441260.0000000.0000000.000000TrueTrueTrueFalseFalseFalse
1703107040038.10884525.47746360.0702900.0000000.0000000.000000FalseFalseTrueFalseFalseFalse
1703107050025.60025217.57021239.7416920.0000000.0000000.000000FalseFalseFalseFalseFalseFalse
1703107100020.3834496.01951342.3481780.0000000.0000000.000000FalseFalseTrueFalseFalseFalse
1703107120021.5908466.81598144.2657880.0000000.0000000.000000FalseFalseTrueFalseFalseFalse
170311303006.6523142.3973624.6647923.54710518.6521270.000000FalseFalseFalseFalseFalseFalse
1703129220048.73619216.34552573.87522125.6983270.00000033.140588TrueFalseTrueFalseFalseFalse
1703163090013.8684640.00000034.0624760.0000000.7529990.000000FalseFalseFalseFalseFalseFalse1703141050021.2827783.5194449.7133338.050000
\n", - "

801 rows × 12 columns

\n", "
" ], "text/plain": [ - " all_categories_score Hospitals_score \\\n", - "17031842400 0.240321 0.000000 \n", - "17031840300 11.805055 0.000000 \n", - "17031841100 31.087457 10.433250 \n", - "17031841200 74.932768 50.785100 \n", - "17031838200 96.805988 100.000000 \n", - "17031650301 0.471837 0.000000 \n", - "17031530503 0.000000 0.000000 \n", - "17031760803 0.000000 0.000000 \n", - "17031540102 6.246782 0.000000 \n", - "17031540101 9.582452 0.000000 \n", - "17031440201 0.000000 0.000000 \n", - "17031839000 3.911505 0.000000 \n", - "17031030601 31.168614 25.476349 \n", - "17031030604 27.540457 31.083160 \n", - "17031020801 39.753571 13.749297 \n", - "17031843300 85.208903 90.803978 \n", - "17031080202 35.451499 34.057864 \n", - "17031070102 51.007132 47.292337 \n", - "17031031501 86.213462 64.926005 \n", - "17031031502 92.662521 73.602052 \n", - "17031834900 13.107514 0.000000 \n", - "17031834800 32.576917 14.965098 \n", - "17031160502 17.646365 2.087629 \n", - "17031140702 34.054401 7.597442 \n", - "17031842000 58.751112 18.136803 \n", - "17031150402 17.955575 18.017717 \n", - "17031834400 9.588617 7.316488 \n", - "17031040201 74.775098 52.727481 \n", - "17031040202 56.996518 25.705111 \n", - "17031020702 16.270583 0.000000 \n", - "... ... ... \n", - "17031291200 64.736430 52.813432 \n", - "17031620300 19.694442 0.000000 \n", - "17031620400 11.631967 0.000000 \n", - "17031630100 12.100690 0.000000 \n", - "17031630300 11.326721 0.000000 \n", - "17031630400 8.753224 0.000000 \n", - "17031630500 10.026213 0.000000 \n", - "17031110300 0.000000 0.000000 \n", - "17031110400 0.000000 0.000000 \n", - "17031120100 0.000000 0.000000 \n", - "17031120200 0.000000 0.000000 \n", - "17031271400 46.196450 29.339821 \n", - "17031280100 1.050578 0.000000 \n", - "17031280800 45.434666 25.791627 \n", - "17031281900 1.752396 0.000000 \n", - "17031550100 0.000000 0.000000 \n", - "17031611500 21.951661 0.000000 \n", - "17031611800 36.463690 0.000000 \n", - "17031611900 38.827304 0.000000 \n", - "17031612000 22.194216 0.000000 \n", - "17031620100 17.319958 0.000000 \n", - "17031620200 20.017307 0.000000 \n", - "17031070200 49.751684 44.487722 \n", - "17031070400 38.108845 25.477463 \n", - "17031070500 25.600252 17.570212 \n", - "17031071000 20.383449 6.019513 \n", - "17031071200 21.590846 6.815981 \n", - "17031130300 6.652314 2.397362 \n", - "17031292200 48.736192 16.345525 \n", - "17031630900 13.868464 0.000000 \n", - "\n", - " Federally Qualified Health Centers_score \\\n", - "17031842400 0.000000 \n", - "17031840300 28.691670 \n", - "17031841100 11.210502 \n", - "17031841200 85.340477 \n", - "17031838200 35.561236 \n", - "17031650301 1.167427 \n", - "17031530503 0.000000 \n", - "17031760803 0.000000 \n", - "17031540102 15.037856 \n", - "17031540101 14.081864 \n", - "17031440201 0.000000 \n", - "17031839000 0.000000 \n", - "17031030601 19.595536 \n", - "17031030604 5.940923 \n", - "17031020801 56.416007 \n", - "17031843300 61.810970 \n", - "17031080202 41.970907 \n", - "17031070102 62.683439 \n", - "17031031501 91.498253 \n", - "17031031502 93.159724 \n", - "17031834900 29.204953 \n", - "17031834800 43.819187 \n", - "17031160502 11.471971 \n", - "17031140702 28.320289 \n", - "17031842000 46.474511 \n", - "17031150402 20.226035 \n", - "17031834400 0.000000 \n", - "17031040201 80.876619 \n", - "17031040202 75.313609 \n", - "17031020702 9.535830 \n", - "... ... \n", - "17031291200 65.912594 \n", - "17031620300 48.728363 \n", - "17031620400 28.780034 \n", - "17031630100 21.930226 \n", - "17031630300 28.024790 \n", - "17031630400 21.442908 \n", - "17031630500 19.830425 \n", - "17031110300 0.000000 \n", - "17031110400 0.000000 \n", - "17031120100 0.000000 \n", - "17031120200 0.000000 \n", - "17031271400 58.305736 \n", - "17031280100 1.269723 \n", - "17031280800 27.349368 \n", - "17031281900 0.000000 \n", - "17031550100 0.000000 \n", - "17031611500 39.785972 \n", - "17031611800 56.867023 \n", - "17031611900 64.073749 \n", - "17031612000 39.263203 \n", - "17031620100 42.853370 \n", - "17031620200 49.527203 \n", - "17031070200 63.344126 \n", - "17031070400 60.070290 \n", - "17031070500 39.741692 \n", - "17031071000 42.348178 \n", - "17031071200 44.265788 \n", - "17031130300 4.664792 \n", - "17031292200 73.875221 \n", - "17031630900 34.062476 \n", - "\n", - " School-Based Health Centers_score All Free Health Clinics_score \\\n", - "17031842400 0.896108 0.000000 \n", - "17031840300 0.778580 0.000000 \n", - "17031841100 39.557094 27.087906 \n", - "17031841200 47.998395 0.000000 \n", - "17031838200 73.486427 22.684526 \n", - "17031650301 0.000000 0.000000 \n", - "17031530503 0.000000 0.000000 \n", - "17031760803 0.000000 0.000000 \n", - "17031540102 0.630028 0.000000 \n", - "17031540101 14.508801 0.000000 \n", - "17031440201 0.000000 0.000000 \n", - "17031839000 2.629068 22.089473 \n", - "17031030601 33.137857 0.000000 \n", - "17031030604 30.821981 0.000000 \n", - "17031020801 1.203614 67.993856 \n", - "17031843300 38.316322 1.570855 \n", - "17031080202 0.000000 0.000000 \n", - "17031070102 0.000000 0.000000 \n", - "17031031501 35.283637 0.000000 \n", - "17031031502 36.126369 0.000000 \n", - "17031834900 0.000000 9.672271 \n", - "17031834800 0.000000 50.021658 \n", - "17031160502 44.285058 0.000000 \n", - "17031140702 68.923095 0.000000 \n", - "17031842000 77.290895 0.000000 \n", - "17031150402 0.000000 0.000000 \n", - "17031834400 0.778580 0.000000 \n", - "17031040201 48.488361 3.417415 \n", - "17031040202 22.619436 48.495199 \n", - "17031020702 0.000000 92.111519 \n", - "... ... ... \n", - "17031291200 34.818836 0.000000 \n", - "17031620300 0.000000 0.000000 \n", - "17031620400 0.000000 0.000000 \n", - "17031630100 0.000000 24.015047 \n", - "17031630300 0.000000 0.000000 \n", - "17031630400 0.000000 0.643091 \n", - "17031630500 0.000000 14.921453 \n", - "17031110300 0.000000 0.000000 \n", - "17031110400 0.000000 0.000000 \n", - "17031120100 0.000000 0.000000 \n", - "17031120200 0.000000 0.000000 \n", - "17031271400 1.270445 47.206708 \n", - "17031280100 1.539460 0.923896 \n", - "17031280800 36.197168 58.624279 \n", - "17031281900 0.000000 13.000103 \n", - "17031550100 0.000000 0.000000 \n", - "17031611500 0.000000 43.557170 \n", - "17031611800 0.000000 100.000000 \n", - "17031611900 0.000000 95.926418 \n", - "17031612000 0.000000 46.923983 \n", - "17031620100 0.000000 0.000000 \n", - "17031620200 0.000000 0.000000 \n", - "17031070200 0.000000 0.000000 \n", - "17031070400 0.000000 0.000000 \n", - "17031070500 0.000000 0.000000 \n", - "17031071000 0.000000 0.000000 \n", - "17031071200 0.000000 0.000000 \n", - "17031130300 3.547105 18.652127 \n", - "17031292200 25.698327 0.000000 \n", - "17031630900 0.000000 0.752999 \n", - "\n", - " Other Health Providers_score all_categories_good_access \\\n", - "17031842400 0.000000 False \n", - "17031840300 0.000000 False \n", - "17031841100 70.608099 False \n", - "17031841200 0.000000 True \n", - "17031838200 57.301925 True \n", - "17031650301 0.000000 False \n", - "17031530503 0.000000 False \n", - "17031760803 0.000000 False \n", - "17031540102 0.000000 False \n", - "17031540101 0.000000 False \n", - "17031440201 0.000000 False \n", - "17031839000 2.435626 False \n", - "17031030601 5.662780 False \n", - "17031030604 0.000000 False \n", - "17031020801 0.000000 False \n", - "17031843300 4.755208 True \n", - "17031080202 0.000000 False \n", - "17031070102 0.000000 True \n", - "17031031501 48.173898 True \n", - "17031031502 57.134678 True \n", - "17031834900 0.000000 False \n", - "17031834800 0.000000 False \n", - "17031160502 0.000000 False \n", - "17031140702 0.000000 False \n", - "17031842000 100.000000 True \n", - "17031150402 0.000000 False \n", - "17031834400 57.569570 False \n", - "17031040201 0.000000 True \n", - "17031040202 0.000000 True \n", - "17031020702 0.000000 False \n", - "... ... ... \n", - "17031291200 0.950070 True \n", - "17031620300 0.000000 False \n", - "17031620400 0.000000 False \n", - "17031630100 0.000000 False \n", - "17031630300 0.000000 False \n", - "17031630400 0.000000 False \n", - "17031630500 0.000000 False \n", - "17031110300 0.000000 False \n", - "17031110400 0.000000 False \n", - "17031120100 0.000000 False \n", - "17031120200 0.000000 False \n", - "17031271400 0.000000 True \n", - "17031280100 0.000000 False \n", - "17031280800 29.487858 True \n", - "17031281900 0.000000 False \n", - "17031550100 0.000000 False \n", - "17031611500 0.000000 False \n", - "17031611800 0.000000 False \n", - "17031611900 0.000000 False \n", - "17031612000 0.000000 False \n", - "17031620100 0.000000 False \n", - "17031620200 0.000000 False \n", - "17031070200 0.000000 True \n", - "17031070400 0.000000 False \n", - "17031070500 0.000000 False \n", - "17031071000 0.000000 False \n", - "17031071200 0.000000 False \n", - "17031130300 0.000000 False \n", - "17031292200 33.140588 True \n", - "17031630900 0.000000 False \n", - "\n", - " Hospitals_good_access \\\n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 False \n", - "17031841200 True \n", - "17031838200 True \n", - "17031650301 False \n", - "17031530503 False \n", - "17031760803 False \n", - "17031540102 False \n", - "17031540101 False \n", - "17031440201 False \n", - "17031839000 False \n", - "17031030601 False \n", - "17031030604 False \n", - "17031020801 False \n", - "17031843300 True \n", - "17031080202 False \n", - "17031070102 True \n", - "17031031501 True \n", - "17031031502 True \n", - "17031834900 False \n", - "17031834800 False \n", - "17031160502 False \n", - "17031140702 False \n", - "17031842000 False \n", - "17031150402 False \n", - "17031834400 False \n", - "17031040201 True \n", - "17031040202 False \n", - "17031020702 False \n", - "... ... \n", - "17031291200 True \n", - "17031620300 False \n", - "17031620400 False \n", - "17031630100 False \n", - "17031630300 False \n", - "17031630400 False \n", - "17031630500 False \n", - "17031110300 False \n", - "17031110400 False \n", - "17031120100 False \n", - "17031120200 False \n", - "17031271400 False \n", - "17031280100 False \n", - "17031280800 False \n", - "17031281900 False \n", - "17031550100 False \n", - "17031611500 False \n", - "17031611800 False \n", - "17031611900 False \n", - "17031612000 False \n", - "17031620100 False \n", - "17031620200 False \n", - "17031070200 True \n", - "17031070400 False \n", - "17031070500 False \n", - "17031071000 False \n", - "17031071200 False \n", - "17031130300 False \n", - "17031292200 False \n", - "17031630900 False \n", + " all_categories_score Museum_score Supermarket_score \\\n", + "17031836300 19.318333 2.108333 9.826667 \n", + "17031836200 22.553333 4.983333 8.342222 \n", + "17031410100 18.303889 2.011111 8.398333 \n", + "17031410200 25.826667 1.647222 12.301667 \n", + "17031410500 21.282778 3.519444 9.713333 \n", "\n", - " Federally Qualified Health Centers_good_access \\\n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 False \n", - "17031841200 True \n", - "17031838200 False \n", - "17031650301 False \n", - "17031530503 False \n", - "17031760803 False \n", - "17031540102 False \n", - "17031540101 False \n", - "17031440201 False \n", - "17031839000 False \n", - "17031030601 False \n", - "17031030604 False \n", - "17031020801 True \n", - "17031843300 True \n", - "17031080202 True \n", - "17031070102 True \n", - "17031031501 True \n", - "17031031502 True \n", - "17031834900 False \n", - "17031834800 True \n", - "17031160502 False \n", - "17031140702 False \n", - "17031842000 True \n", - "17031150402 False \n", - "17031834400 False \n", - "17031040201 True \n", - "17031040202 True \n", - "17031020702 False \n", - "... ... \n", - "17031291200 True \n", - "17031620300 True \n", - "17031620400 False \n", - "17031630100 False \n", - "17031630300 False \n", - "17031630400 False \n", - "17031630500 False \n", - "17031110300 False \n", - "17031110400 False \n", - "17031120100 False \n", - "17031120200 False \n", - "17031271400 True \n", - "17031280100 False \n", - "17031280800 False \n", - "17031281900 False \n", - "17031550100 False \n", - "17031611500 False \n", - "17031611800 True \n", - "17031611900 True \n", - "17031612000 False \n", - "17031620100 True \n", - "17031620200 True \n", - "17031070200 True \n", - "17031070400 True \n", - "17031070500 False \n", - "17031071000 True \n", - "17031071200 True \n", - "17031130300 False \n", - "17031292200 True \n", - "17031630900 False \n", - "\n", - " School-Based Health Centers_good_access \\\n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 False \n", - "17031841200 True \n", - "17031838200 True \n", - "17031650301 False \n", - "17031530503 False \n", - "17031760803 False \n", - "17031540102 False \n", - "17031540101 False \n", - "17031440201 False \n", - "17031839000 False \n", - "17031030601 False \n", - "17031030604 False \n", - "17031020801 False \n", - "17031843300 False \n", - "17031080202 False \n", - "17031070102 False \n", - "17031031501 False \n", - "17031031502 False \n", - "17031834900 False \n", - "17031834800 False \n", - "17031160502 True \n", - "17031140702 True \n", - "17031842000 True \n", - "17031150402 False \n", - "17031834400 False \n", - "17031040201 True \n", - "17031040202 False \n", - "17031020702 False \n", - "... ... \n", - "17031291200 False \n", - "17031620300 False \n", - "17031620400 False \n", - "17031630100 False \n", - "17031630300 False \n", - "17031630400 False \n", - "17031630500 False \n", - "17031110300 False \n", - "17031110400 False \n", - "17031120100 False \n", - "17031120200 False \n", - "17031271400 False \n", - "17031280100 False \n", - "17031280800 False \n", - "17031281900 False \n", - "17031550100 False \n", - "17031611500 False \n", - "17031611800 False \n", - "17031611900 False \n", - "17031612000 False \n", - "17031620100 False \n", - "17031620200 False \n", - "17031070200 False \n", - "17031070400 False \n", - "17031070500 False \n", - "17031071000 False \n", - "17031071200 False \n", - "17031130300 False \n", - "17031292200 False \n", - "17031630900 False \n", - "\n", - " All Free Health Clinics_good_access \\\n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 False \n", - "17031841200 False \n", - "17031838200 False \n", - "17031650301 False \n", - "17031530503 False \n", - "17031760803 False \n", - "17031540102 False \n", - "17031540101 False \n", - "17031440201 False \n", - "17031839000 False \n", - "17031030601 False \n", - "17031030604 False \n", - "17031020801 True \n", - "17031843300 False \n", - "17031080202 False \n", - "17031070102 False \n", - "17031031501 False \n", - "17031031502 False \n", - "17031834900 False \n", - "17031834800 True \n", - "17031160502 False \n", - "17031140702 False \n", - "17031842000 False \n", - "17031150402 False \n", - "17031834400 False \n", - "17031040201 False \n", - "17031040202 True \n", - "17031020702 True \n", - "... ... \n", - "17031291200 False \n", - "17031620300 False \n", - "17031620400 False \n", - "17031630100 False \n", - "17031630300 False \n", - "17031630400 False \n", - "17031630500 False \n", - "17031110300 False \n", - "17031110400 False \n", - "17031120100 False \n", - "17031120200 False \n", - "17031271400 True \n", - "17031280100 False \n", - "17031280800 True \n", - "17031281900 False \n", - "17031550100 False \n", - "17031611500 True \n", - "17031611800 True \n", - "17031611900 True \n", - "17031612000 True \n", - "17031620100 False \n", - "17031620200 False \n", - "17031070200 False \n", - "17031070400 False \n", - "17031070500 False \n", - "17031071000 False \n", - "17031071200 False \n", - "17031130300 False \n", - "17031292200 False \n", - "17031630900 False \n", - "\n", - " Other Health Providers_good_access \n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 True \n", - "17031841200 False \n", - "17031838200 True \n", - "17031650301 False \n", - "17031530503 False \n", - "17031760803 False \n", - "17031540102 False \n", - "17031540101 False \n", - "17031440201 False \n", - "17031839000 False \n", - "17031030601 False \n", - "17031030604 False \n", - "17031020801 False \n", - "17031843300 False \n", - "17031080202 False \n", - "17031070102 False \n", - "17031031501 True \n", - "17031031502 True \n", - "17031834900 False \n", - "17031834800 False \n", - "17031160502 False \n", - "17031140702 False \n", - "17031842000 True \n", - "17031150402 False \n", - "17031834400 True \n", - "17031040201 False \n", - "17031040202 False \n", - "17031020702 False \n", - "... ... \n", - "17031291200 False \n", - "17031620300 False \n", - "17031620400 False \n", - "17031630100 False \n", - "17031630300 False \n", - "17031630400 False \n", - "17031630500 False \n", - "17031110300 False \n", - "17031110400 False \n", - "17031120100 False \n", - "17031120200 False \n", - "17031271400 False \n", - "17031280100 False \n", - "17031280800 False \n", - "17031281900 False \n", - "17031550100 False \n", - "17031611500 False \n", - "17031611800 False \n", - "17031611900 False \n", - "17031612000 False \n", - "17031620100 False \n", - "17031620200 False \n", - "17031070200 False \n", - "17031070400 False \n", - "17031070500 False \n", - "17031071000 False \n", - "17031071200 False \n", - "17031130300 False \n", - "17031292200 False \n", - "17031630900 False \n", - "\n", - "[801 rows x 12 columns]" + " Restaurant_score \n", + "17031836300 7.383333 \n", + "17031836200 9.227778 \n", + "17031410100 7.894444 \n", + "17031410200 11.877778 \n", + "17031410500 8.050000 " ] }, - "execution_count": 44, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "access.calculate(upper_threshold=1800, normalize=True,\n", - " category_weight_dict=category_dict,good_access_threshold=40)" + "access.model_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "access.model_results.to_csv('data/output_data/simple_demo_accessMod.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Access Time: Time to closest destination" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, we are defining the Access Time model using the sources and destinations csv. " + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:spatial_access.p2p:Approx area of bounding box: 141.64 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 0.39 seconds\n" + ] + } + ], + "source": [ + "accessT = AccessTime(network_type='walk',\n", + " transit_matrix_filename='data/output_data/matrices/simple_demo_matrix.csv',\n", + " sources_filename='data/input_data/sources/hyde_park_tracts.csv',\n", + " destinations_filename='data/input_data/destinations/hyde_park_dests.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'name', 'capacity': 'skip', 'category': 'category', 'lat': 'lat', 'lon': 'lon'}\n", + " )" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 97, "metadata": {}, "outputs": [ { @@ -2085,290 +854,199 @@ " \n", " \n", " \n", - " all_categories_score\n", - " Hospitals_score\n", - " Federally Qualified Health Centers_score\n", - " School-Based Health Centers_score\n", - " All Free Health Clinics_score\n", - " Other Health Providers_score\n", - " all_categories_good_access\n", - " Hospitals_good_access\n", - " Federally Qualified Health Centers_good_access\n", - " School-Based Health Centers_good_access\n", - " All Free Health Clinics_good_access\n", - " Other Health Providers_good_access\n", + " time_to_nearest_Museum\n", + " time_to_nearest_Supermarket\n", + " time_to_nearest_Restaurant\n", + " time_to_nearest_all_categories\n", " \n", " \n", " \n", " \n", - " 17031842400\n", - " 0.240321\n", - " 0.00000\n", - " 0.000000\n", - " 0.896108\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", + " 17031836300\n", + " 1041\n", + " 545\n", + " 994\n", + " 545\n", + " \n", + " \n", + " 17031836200\n", + " 547\n", + " 906\n", + " 517\n", + " 517\n", + " \n", + " \n", + " 17031410100\n", + " 1076\n", + " 765\n", + " 629\n", + " 629\n", + " \n", + " \n", + " 17031410200\n", + " 1371\n", + " 474\n", + " 506\n", + " 474\n", + " \n", + " \n", + " 17031410500\n", + " 652\n", + " 643\n", + " 1056\n", + " 643\n", + " \n", + " \n", + " 17031410600\n", + " 936\n", + " 343\n", + " 756\n", + " 343\n", + " \n", + " \n", + " 17031411100\n", + " 758\n", + " 1167\n", + " 449\n", + " 449\n", + " \n", + " \n", + " 17031410700\n", + " 1129\n", + " 268\n", + " 480\n", + " 268\n", " \n", " \n", - " 17031840300\n", - " 11.805055\n", - " 0.00000\n", - " 28.691670\n", - " 0.778580\n", - " 0.000000\n", - " 0.000000\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", + " 17031410800\n", + " 899\n", + " 455\n", + " 238\n", + " 238\n", " \n", " \n", - " 17031841100\n", - " 31.087457\n", - " 10.43325\n", - " 11.210502\n", - " 39.557094\n", - " 27.087906\n", - " 70.608099\n", - " False\n", - " False\n", - " False\n", - " False\n", - " False\n", - " True\n", + " 17031410900\n", + " 897\n", + " 1177\n", + " 1041\n", + " 897\n", " \n", " \n", - " 17031841200\n", - " 74.932768\n", - " 50.78510\n", - " 85.340477\n", - " 47.998395\n", - " 0.000000\n", - " 0.000000\n", - " True\n", - " True\n", - " True\n", - " True\n", - " False\n", - " False\n", + " 17031411000\n", + " 641\n", + " 1516\n", + " 1235\n", + " 641\n", " \n", " \n", - " 17031838200\n", - " 96.805988\n", - " 100.00000\n", - " 35.561236\n", - " 73.486427\n", - " 22.684526\n", - " 57.301925\n", - " True\n", - " True\n", - " False\n", - " True\n", - " False\n", - " True\n", + " 17031411200\n", + " 831\n", + " 854\n", + " 89\n", + " 89\n", " \n", " \n", "\n", "" ], "text/plain": [ - " all_categories_score Hospitals_score \\\n", - "17031842400 0.240321 0.00000 \n", - "17031840300 11.805055 0.00000 \n", - "17031841100 31.087457 10.43325 \n", - "17031841200 74.932768 50.78510 \n", - "17031838200 96.805988 100.00000 \n", - "\n", - " Federally Qualified Health Centers_score \\\n", - "17031842400 0.000000 \n", - "17031840300 28.691670 \n", - "17031841100 11.210502 \n", - "17031841200 85.340477 \n", - "17031838200 35.561236 \n", - "\n", - " School-Based Health Centers_score All Free Health Clinics_score \\\n", - "17031842400 0.896108 0.000000 \n", - "17031840300 0.778580 0.000000 \n", - "17031841100 39.557094 27.087906 \n", - "17031841200 47.998395 0.000000 \n", - "17031838200 73.486427 22.684526 \n", - "\n", - " Other Health Providers_score all_categories_good_access \\\n", - "17031842400 0.000000 False \n", - "17031840300 0.000000 False \n", - "17031841100 70.608099 False \n", - "17031841200 0.000000 True \n", - "17031838200 57.301925 True \n", - "\n", - " Hospitals_good_access \\\n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 False \n", - "17031841200 True \n", - "17031838200 True \n", - "\n", - " Federally Qualified Health Centers_good_access \\\n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 False \n", - "17031841200 True \n", - "17031838200 False \n", + " time_to_nearest_Museum time_to_nearest_Supermarket \\\n", + "17031836300 1041 545 \n", + "17031836200 547 906 \n", + "17031410100 1076 765 \n", + "17031410200 1371 474 \n", + "17031410500 652 643 \n", + "17031410600 936 343 \n", + "17031411100 758 1167 \n", + "17031410700 1129 268 \n", + "17031410800 899 455 \n", + "17031410900 897 1177 \n", + "17031411000 641 1516 \n", + "17031411200 831 854 \n", "\n", - " School-Based Health Centers_good_access \\\n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 False \n", - "17031841200 True \n", - "17031838200 True \n", - "\n", - " All Free Health Clinics_good_access \\\n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 False \n", - "17031841200 False \n", - "17031838200 False \n", - "\n", - " Other Health Providers_good_access \n", - "17031842400 False \n", - "17031840300 False \n", - "17031841100 True \n", - "17031841200 False \n", - "17031838200 True " + " time_to_nearest_Restaurant time_to_nearest_all_categories \n", + "17031836300 994 545 \n", + "17031836200 517 517 \n", + "17031410100 629 629 \n", + "17031410200 506 474 \n", + "17031410500 1056 643 \n", + "17031410600 756 343 \n", + "17031411100 449 449 \n", + "17031410700 480 268 \n", + "17031410800 238 238 \n", + "17031410900 1041 897 \n", + "17031411000 1235 641 \n", + "17031411200 89 89 " ] }, - "execution_count": 9, + "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "access.model_results.head()" + "accessT.calculate()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "accessT.model_results.head()" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ - "access.model_results.to_csv('access2010.csv')" + "accessT.model_results.to_csv('data/output_data/simple_demo_accessT.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Access Count: Number of Destinations in Range" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Access time to closest destination" + "Access Count measures the number of destinations within a catchment area. In this case, the catchment area is 1800 seconds (30 minutes) of walking." ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 99, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "DEBUG:spatial_access.p2p:Running in debug mode\n", - "DEBUG:spatial_access.p2p:Processing network (walk) with epsilon: 0.050000\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 801\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 199\n", - "INFO:spatial_access.p2p:Approx area of bounding box: 117.50 sq. km\n", - "DEBUG:spatial_access.p2p:set bbox: [41.55758, -87.9544885, 42.114303, -87.4804964]\n", - "INFO:spatial_access.p2p:Read network from data/osm_query_cache/walk41.55758_-87.9544885_42.114303_-87.4804964.h5\n", - "DEBUG:spatial_access.p2p:Nearest Neighbor matching completed in 0.42 seconds\n", - "DEBUG:spatial_access.p2p:Nearest Neighbor matching completed in 0.15 seconds\n", - "INFO:spatial_access.p2p:Prepared raw network in 1.60 seconds\n", - "INFO:spatial_access.p2p:Processing matrix with 35 threads\n", - "INFO:spatial_access.p2p:Shortest path matrix computed in 1.38 seconds using 35 threads\n", - "INFO:spatial_access.p2p:All operations completed in 11.46 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n", - "If you have no capacity variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" + "INFO:spatial_access.p2p:Approx area of bounding box: 141.64 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 0.42 seconds\n" ] } ], "source": [ - "accessT = AccessTime(network_type='walk',\n", - " sp_matrix_filename=None,\n", - " sources_filename='data/input_data/tracts2010.csv',\n", - " destinations_filename='data/input_data/health_chicago.csv')" + "accessC = AccessCount(network_type='walk',\n", + " transit_matrix_filename='data/output_data/matrices/simple_demo_matrix.csv',\n", + " sources_filename='data/input_data/sources/hyde_park_tracts.csv',\n", + " destinations_filename='data/input_data/destinations/hyde_park_dests.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'name', 'capacity': 'skip', 'category': 'category', 'lat': 'lat', 'lon': 'lon'}\n", + " )" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -2392,333 +1070,235 @@ " \n", " \n", " \n", - " time_to_nearest_all_categories\n", + " count_in_range_Museum\n", + " count_in_range_Supermarket\n", + " count_in_range_Restaurant\n", + " count_in_range_all_categories\n", " \n", " \n", " \n", " \n", - " 17031842400\n", - " 1706\n", - " \n", - " \n", - " 17031840300\n", - " 512\n", + " 17031836300\n", + " 1\n", + " 3\n", + " 2\n", + " 6\n", " \n", " \n", - " 17031841100\n", - " 174\n", + " 17031836200\n", + " 2\n", + " 3\n", + " 2\n", + " 7\n", " \n", " \n", - " 17031841200\n", - " 536\n", + " 17031410100\n", + " 1\n", + " 2\n", + " 2\n", + " 5\n", " \n", " \n", - " 17031838200\n", - " 404\n", + " 17031410200\n", + " 2\n", + " 2\n", + " 2\n", + " 6\n", " \n", " \n", - " 17031650301\n", - " 1636\n", + " 17031410500\n", + " 2\n", + " 3\n", + " 2\n", + " 7\n", " \n", " \n", - " 17031530503\n", - " 2830\n", + " 17031410600\n", + " 2\n", + " 3\n", + " 2\n", + " 7\n", " \n", " \n", - " 17031760803\n", - " 3079\n", + " 17031411100\n", + " 2\n", + " 3\n", + " 2\n", + " 7\n", " \n", " \n", - " 17031540102\n", - " 1219\n", + " 17031410700\n", + " 2\n", + " 2\n", + " 2\n", + " 6\n", " \n", " \n", - " 17031540101\n", - " 1237\n", + " 17031410800\n", + " 2\n", + " 2\n", + " 2\n", + " 6\n", " \n", " \n", - " 17031440201\n", - " 1978\n", + " 17031410900\n", + " 1\n", + " 2\n", + " 2\n", + " 5\n", " \n", " \n", - " 17031839000\n", - " 1280\n", + " 17031411000\n", + " 1\n", + " 2\n", + " 2\n", + " 5\n", " \n", " \n", - " 17031030601\n", - " 363\n", - " \n", - " \n", - " 17031030604\n", - " 739\n", - " \n", - " \n", - " 17031020801\n", - " 377\n", - " \n", - " \n", - " 17031843300\n", - " 186\n", - " \n", - " \n", - " 17031080202\n", - " 828\n", - " \n", - " \n", - " 17031070102\n", - " 648\n", - " \n", - " \n", - " 17031031501\n", - " 300\n", - " \n", - " \n", - " 17031031502\n", - " 165\n", - " \n", - " \n", - " 17031834900\n", - " 941\n", - " \n", - " \n", - " 17031834800\n", - " 523\n", - " \n", - " \n", - " 17031160502\n", - " 818\n", - " \n", - " \n", - " 17031140702\n", - " 251\n", - " \n", - " \n", - " 17031842000\n", - " 244\n", - " \n", - " \n", - " 17031150402\n", - " 1109\n", - " \n", - " \n", - " 17031834400\n", - " 278\n", - " \n", - " \n", - " 17031040201\n", - " 486\n", - " \n", - " \n", - " 17031040202\n", - " 567\n", - " \n", - " \n", - " 17031020702\n", - " 663\n", - " \n", - " \n", - " ...\n", - " ...\n", - " \n", - " \n", - " 17031291200\n", - " 715\n", - " \n", - " \n", - " 17031620300\n", - " 499\n", - " \n", - " \n", - " 17031620400\n", - " 354\n", - " \n", - " \n", - " 17031630100\n", - " 1111\n", - " \n", - " \n", - " 17031630300\n", - " 953\n", - " \n", - " \n", - " 17031630400\n", - " 1101\n", - " \n", - " \n", - " 17031630500\n", - " 1137\n", - " \n", - " \n", - " 17031110300\n", - " 2015\n", - " \n", - " \n", - " 17031110400\n", - " 2372\n", - " \n", - " \n", - " 17031120100\n", - " 3712\n", - " \n", - " \n", - " 17031120200\n", - " 3716\n", - " \n", - " \n", - " 17031271400\n", - " 353\n", - " \n", - " \n", - " 17031280100\n", - " 1625\n", - " \n", - " \n", - " 17031280800\n", - " 442\n", - " \n", - " \n", - " 17031281900\n", - " 1477\n", - " \n", - " \n", - " 17031550100\n", - " 65535\n", - " \n", - " \n", - " 17031611500\n", - " 859\n", - " \n", - " \n", - " 17031611800\n", - " 328\n", - " \n", - " \n", - " 17031611900\n", - " 478\n", - " \n", - " \n", - " 17031612000\n", - " 903\n", - " \n", - " \n", - " 17031620100\n", - " 1056\n", - " \n", - " \n", - " 17031620200\n", - " 585\n", - " \n", - " \n", - " 17031070200\n", - " 765\n", - " \n", - " \n", - " 17031070400\n", - " 855\n", + " 17031411200\n", + " 2\n", + " 3\n", + " 2\n", + " 7\n", " \n", - " \n", - " 17031070500\n", - " 1032\n", + " \n", + "\n", + "" + ], + "text/plain": [ + " count_in_range_Museum count_in_range_Supermarket \\\n", + "17031836300 1 3 \n", + "17031836200 2 3 \n", + "17031410100 1 2 \n", + "17031410200 2 2 \n", + "17031410500 2 3 \n", + "17031410600 2 3 \n", + "17031411100 2 3 \n", + "17031410700 2 2 \n", + "17031410800 2 2 \n", + "17031410900 1 2 \n", + "17031411000 1 2 \n", + "17031411200 2 3 \n", + "\n", + " count_in_range_Restaurant count_in_range_all_categories \n", + "17031836300 2 6 \n", + "17031836200 2 7 \n", + "17031410100 2 5 \n", + "17031410200 2 6 \n", + "17031410500 2 7 \n", + "17031410600 2 7 \n", + "17031411100 2 7 \n", + "17031410700 2 6 \n", + "17031410800 2 6 \n", + "17031410900 2 5 \n", + "17031411000 2 5 \n", + "17031411200 2 7 " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "accessC.calculate(upper_threshold=1800)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
count_in_range_Museumcount_in_range_Supermarketcount_in_range_Restaurantcount_in_range_all_categories
17031071000529170318363001326
170310712001095170318362002327
170311303001325170314101001225
17031292200491170314102002226
170316309001137170314105002327
\n", - "

801 rows × 1 columns

\n", "
" ], "text/plain": [ - " time_to_nearest_all_categories\n", - "17031842400 1706\n", - "17031840300 512\n", - "17031841100 174\n", - "17031841200 536\n", - "17031838200 404\n", - "17031650301 1636\n", - "17031530503 2830\n", - "17031760803 3079\n", - "17031540102 1219\n", - "17031540101 1237\n", - "17031440201 1978\n", - "17031839000 1280\n", - "17031030601 363\n", - "17031030604 739\n", - "17031020801 377\n", - "17031843300 186\n", - "17031080202 828\n", - "17031070102 648\n", - "17031031501 300\n", - "17031031502 165\n", - "17031834900 941\n", - "17031834800 523\n", - "17031160502 818\n", - "17031140702 251\n", - "17031842000 244\n", - "17031150402 1109\n", - "17031834400 278\n", - "17031040201 486\n", - "17031040202 567\n", - "17031020702 663\n", - "... ...\n", - "17031291200 715\n", - "17031620300 499\n", - "17031620400 354\n", - "17031630100 1111\n", - "17031630300 953\n", - "17031630400 1101\n", - "17031630500 1137\n", - "17031110300 2015\n", - "17031110400 2372\n", - "17031120100 3712\n", - "17031120200 3716\n", - "17031271400 353\n", - "17031280100 1625\n", - "17031280800 442\n", - "17031281900 1477\n", - "17031550100 65535\n", - "17031611500 859\n", - "17031611800 328\n", - "17031611900 478\n", - "17031612000 903\n", - "17031620100 1056\n", - "17031620200 585\n", - "17031070200 765\n", - "17031070400 855\n", - "17031070500 1032\n", - "17031071000 529\n", - "17031071200 1095\n", - "17031130300 1325\n", - "17031292200 491\n", - "17031630900 1137\n", + " count_in_range_Museum count_in_range_Supermarket \\\n", + "17031836300 1 3 \n", + "17031836200 2 3 \n", + "17031410100 1 2 \n", + "17031410200 2 2 \n", + "17031410500 2 3 \n", "\n", - "[801 rows x 1 columns]" + " count_in_range_Restaurant count_in_range_all_categories \n", + "17031836300 2 6 \n", + "17031836200 2 7 \n", + "17031410100 2 5 \n", + "17031410200 2 6 \n", + "17031410500 2 7 " ] }, - "execution_count": 24, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "accessT.calculate()" + "accessC.model_results.head()" ] }, { @@ -2727,116 +1307,43 @@ "metadata": {}, "outputs": [], "source": [ - "accessT.model_results.to_csv('accessT2010.csv')" + "accessC.model_results.to_csv('data/output_data/simple_demo_accessC.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Access Count: Number of Destinations in Range" + "### Access Sum: sum of an attribute of facility within a catchment area" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 90, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "DEBUG:spatial_access.p2p:Running in debug mode\n", - "DEBUG:spatial_access.p2p:Processing network (walk) with epsilon: 0.050000\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 801\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 199\n", - "INFO:spatial_access.p2p:Approx area of bounding box: 117.50 sq. km\n", - "DEBUG:spatial_access.p2p:set bbox: [41.55758, -87.9544885, 42.114303, -87.4804964]\n", - "INFO:spatial_access.p2p:Read network from data/osm_query_cache/walk41.55758_-87.9544885_42.114303_-87.4804964.h5\n", - "DEBUG:spatial_access.p2p:Nearest Neighbor matching completed in 0.43 seconds\n", - "DEBUG:spatial_access.p2p:Nearest Neighbor matching completed in 0.16 seconds\n", - "INFO:spatial_access.p2p:Prepared raw network in 1.69 seconds\n", - "INFO:spatial_access.p2p:Processing matrix with 35 threads\n", - "INFO:spatial_access.p2p:Shortest path matrix computed in 1.39 seconds using 35 threads\n", - "INFO:spatial_access.p2p:All operations completed in 13.57 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n", - "If you have no capacity variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" + "INFO:spatial_access.p2p:Approx area of bounding box: 141.64 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 0.45 seconds\n" ] } ], "source": [ - "accessC = AccessCount(network_type='walk',\n", - " sp_matrix_filename=None,\n", - " sources_filename='data/input_data/tracts2010.csv',\n", - " destinations_filename='data/input_data/health_chicago.csv')" + "accessS = AccessSum(network_type='walk',\n", + " transit_matrix_filename='data/output_data/matrices/simple_demo_matrix.csv',\n", + " sources_filename='data/input_data/sources/hyde_park_tracts.csv',\n", + " destinations_filename='data/input_data/destinations/hyde_park_dests.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'name', 'capacity': 'target', 'category': 'category', 'lat': 'lat', 'lon': 'lon'}\n", + " )" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 91, "metadata": {}, "outputs": [ { @@ -2860,431 +1367,270 @@ " \n", " \n", " \n", - " count_in_range_all_categories\n", + " sum_in_range_Museum\n", + " sum_in_range_Supermarket\n", + " sum_in_range_Restaurant\n", + " sum_in_range_all_categories\n", " \n", " \n", " \n", " \n", - " 17031842400\n", - " 1\n", - " \n", - " \n", - " 17031840300\n", - " 3\n", - " \n", - " \n", - " 17031841100\n", - " 7\n", - " \n", - " \n", - " 17031841200\n", - " 15\n", + " 17031836300\n", + " 100\n", + " 155\n", + " 80\n", + " 335\n", " \n", " \n", - " 17031838200\n", - " 17\n", + " 17031836200\n", + " 500\n", + " 155\n", + " 80\n", + " 735\n", " \n", " \n", - " 17031650301\n", - " 1\n", - " \n", - " \n", - " 17031530503\n", - " 0\n", - " \n", - " \n", - " 17031760803\n", - " 0\n", - " \n", - " \n", - " 17031540102\n", - " 2\n", - " \n", - " \n", - " 17031540101\n", - " 2\n", - " \n", - " \n", - " 17031440201\n", - " 0\n", - " \n", - " \n", - " 17031839000\n", - " 3\n", + " 17031410100\n", + " 400\n", + " 85\n", + " 80\n", + " 565\n", " \n", " \n", - " 17031030601\n", - " 8\n", + " 17031410200\n", + " 500\n", + " 85\n", + " 80\n", + " 665\n", " \n", " \n", - " 17031030604\n", - " 7\n", - " \n", - " \n", - " 17031020801\n", - " 8\n", - " \n", - " \n", - " 17031843300\n", - " 17\n", - " \n", - " \n", - " 17031080202\n", - " 5\n", + " 17031410500\n", + " 500\n", + " 155\n", + " 80\n", + " 735\n", " \n", " \n", - " 17031070102\n", - " 5\n", - " \n", - " \n", - " 17031031501\n", - " 11\n", - " \n", - " \n", - " 17031031502\n", - " 12\n", + " 17031410600\n", + " 500\n", + " 155\n", + " 80\n", + " 735\n", " \n", " \n", - " 17031834900\n", - " 3\n", + " 17031411100\n", + " 500\n", + " 155\n", + " 80\n", + " 735\n", " \n", " \n", - " 17031834800\n", - " 4\n", + " 17031410700\n", + " 500\n", + " 85\n", + " 80\n", + " 665\n", " \n", " \n", - " 17031160502\n", - " 4\n", + " 17031410800\n", + " 500\n", + " 85\n", + " 80\n", + " 665\n", " \n", " \n", - " 17031140702\n", - " 5\n", + " 17031410900\n", + " 400\n", + " 85\n", + " 80\n", + " 565\n", " \n", " \n", - " 17031842000\n", - " 10\n", + " 17031411000\n", + " 400\n", + " 85\n", + " 80\n", + " 565\n", " \n", " \n", - " 17031150402\n", - " 2\n", + " 17031411200\n", + " 500\n", + " 155\n", + " 80\n", + " 735\n", " \n", - " \n", - " 17031834400\n", - " 4\n", - " \n", - " \n", - " 17031040201\n", - " 12\n", - " \n", - " \n", - " 17031040202\n", - " 11\n", - " \n", - " \n", - " 17031020702\n", - " 3\n", - " \n", - " \n", - " ...\n", - " ...\n", - " \n", - " \n", - " 17031291200\n", - " 13\n", - " \n", - " \n", - " 17031620300\n", - " 2\n", - " \n", - " \n", - " 17031620400\n", - " 3\n", - " \n", - " \n", - " 17031630100\n", - " 4\n", - " \n", - " \n", - " 17031630300\n", - " 3\n", - " \n", - " \n", - " 17031630400\n", - " 4\n", - " \n", - " \n", - " 17031630500\n", - " 4\n", - " \n", - " \n", - " 17031110300\n", - " 0\n", - " \n", - " \n", - " 17031110400\n", - " 0\n", - " \n", - " \n", - " 17031120100\n", - " 0\n", - " \n", - " \n", - " 17031120200\n", - " 0\n", - " \n", - " \n", - " 17031271400\n", - " 7\n", - " \n", - " \n", - " 17031280100\n", - " 3\n", - " \n", - " \n", - " 17031280800\n", - " 13\n", - " \n", - " \n", - " 17031281900\n", - " 2\n", - " \n", - " \n", - " 17031550100\n", - " 0\n", - " \n", - " \n", - " 17031611500\n", - " 5\n", - " \n", - " \n", - " 17031611800\n", - " 5\n", - " \n", - " \n", - " 17031611900\n", - " 6\n", - " \n", - " \n", - " 17031612000\n", - " 7\n", - " \n", - " \n", - " 17031620100\n", - " 3\n", - " \n", - " \n", - " 17031620200\n", - " 2\n", - " \n", - " \n", - " 17031070200\n", - " 7\n", - " \n", - " \n", - " 17031070400\n", - " 6\n", - " \n", - " \n", - " 17031070500\n", - " 5\n", + " \n", + "\n", + "" + ], + "text/plain": [ + " sum_in_range_Museum sum_in_range_Supermarket \\\n", + "17031836300 100 155 \n", + "17031836200 500 155 \n", + "17031410100 400 85 \n", + "17031410200 500 85 \n", + "17031410500 500 155 \n", + "17031410600 500 155 \n", + "17031411100 500 155 \n", + "17031410700 500 85 \n", + "17031410800 500 85 \n", + "17031410900 400 85 \n", + "17031411000 400 85 \n", + "17031411200 500 155 \n", + "\n", + " sum_in_range_Restaurant sum_in_range_all_categories \n", + "17031836300 80 335 \n", + "17031836200 80 735 \n", + "17031410100 80 565 \n", + "17031410200 80 665 \n", + "17031410500 80 735 \n", + "17031410600 80 735 \n", + "17031411100 80 735 \n", + "17031410700 80 665 \n", + "17031410800 80 665 \n", + "17031410900 80 565 \n", + "17031411000 80 565 \n", + "17031411200 80 735 " + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "accessS.calculate(upper_threshold=1800)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
sum_in_range_Museumsum_in_range_Supermarketsum_in_range_Restaurantsum_in_range_all_categories
1703107100051703183630010015580335
1703107120071703183620050015580735
170311303008170314101004008580565
1703129220013170314102005008580665
1703163090051703141050050015580735
\n", - "

801 rows × 1 columns

\n", "
" ], "text/plain": [ - " count_in_range_all_categories\n", - "17031842400 1\n", - "17031840300 3\n", - "17031841100 7\n", - "17031841200 15\n", - "17031838200 17\n", - "17031650301 1\n", - "17031530503 0\n", - "17031760803 0\n", - "17031540102 2\n", - "17031540101 2\n", - "17031440201 0\n", - "17031839000 3\n", - "17031030601 8\n", - "17031030604 7\n", - "17031020801 8\n", - "17031843300 17\n", - "17031080202 5\n", - "17031070102 5\n", - "17031031501 11\n", - "17031031502 12\n", - "17031834900 3\n", - "17031834800 4\n", - "17031160502 4\n", - "17031140702 5\n", - "17031842000 10\n", - "17031150402 2\n", - "17031834400 4\n", - "17031040201 12\n", - "17031040202 11\n", - "17031020702 3\n", - "... ...\n", - "17031291200 13\n", - "17031620300 2\n", - "17031620400 3\n", - "17031630100 4\n", - "17031630300 3\n", - "17031630400 4\n", - "17031630500 4\n", - "17031110300 0\n", - "17031110400 0\n", - "17031120100 0\n", - "17031120200 0\n", - "17031271400 7\n", - "17031280100 3\n", - "17031280800 13\n", - "17031281900 2\n", - "17031550100 0\n", - "17031611500 5\n", - "17031611800 5\n", - "17031611900 6\n", - "17031612000 7\n", - "17031620100 3\n", - "17031620200 2\n", - "17031070200 7\n", - "17031070400 6\n", - "17031070500 5\n", - "17031071000 5\n", - "17031071200 7\n", - "17031130300 8\n", - "17031292200 13\n", - "17031630900 5\n", + " sum_in_range_Museum sum_in_range_Supermarket \\\n", + "17031836300 100 155 \n", + "17031836200 500 155 \n", + "17031410100 400 85 \n", + "17031410200 500 85 \n", + "17031410500 500 155 \n", "\n", - "[801 rows x 1 columns]" + " sum_in_range_Restaurant sum_in_range_all_categories \n", + "17031836300 80 335 \n", + "17031836200 80 735 \n", + "17031410100 80 565 \n", + "17031410200 80 665 \n", + "17031410500 80 735 " ] }, - "execution_count": 31, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "accessC.calculate(upper_threshold=1800)" + "accessS.model_results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "accessS.model_results.to_csv('data/output_data/simple_demo_accessS.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Access Sum" + "### Destination Sum: capacity and capacity per capita of providers in area" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 94, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 801\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 199\n", - "INFO:spatial_access.p2p:Approx area of bounding box: 117.50 sq. km\n", - "INFO:spatial_access.p2p:Read network from data/osm_query_cache/walk41.55758_-87.9544885_42.114303_-87.4804964.h5\n", - "INFO:spatial_access.p2p:Prepared raw network in 1.61 seconds\n", - "INFO:spatial_access.p2p:Processing matrix with 35 threads\n", - "INFO:spatial_access.p2p:Shortest path matrix computed in 1.36 seconds using 35 threads\n", - "INFO:spatial_access.p2p:All operations completed in 11.28 seconds\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n", - "If you have no capacity variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" - ] - } - ], + "outputs": [], "source": [ - "a_sum = AccessSum(network_type='walk',\n", - " sp_matrix_filename=None,\n", - " sources_filename='data/input_data/tracts2010.csv',\n", - " destinations_filename='data/input_data/health_chicago.csv')" + "d_sum = DestSum(network_type='walk',\n", + " sources_filename='data/input_data/sources/hyde_park_tracts.csv',\n", + " destinations_filename='data/input_data/destinations/hyde_park_dests.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'skip', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'name', 'capacity': 'target', 'category': 'category', 'lat': 'lat', 'lon': 'lon'}\n", + " )" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 95, "metadata": {}, "outputs": [ { @@ -3308,362 +1654,236 @@ " \n", " \n", " \n", - " sum_in_range_all_categories\n", - " \n", - " \n", - " \n", - " \n", - " 17031842400\n", - " 120000\n", - " \n", - " \n", - " 17031840300\n", - " 500000\n", - " \n", - " \n", - " 17031841100\n", - " 1064000\n", - " \n", - " \n", - " 17031841200\n", - " 2162000\n", - " \n", - " \n", - " 17031838200\n", - " 2732000\n", - " \n", - " \n", - " 17031650301\n", - " 143000\n", - " \n", - " \n", - " 17031530503\n", - " 0\n", - " \n", - " \n", - " 17031760803\n", - " 0\n", - " \n", - " \n", - " 17031540102\n", - " 336000\n", - " \n", - " \n", - " 17031540101\n", - " 336000\n", - " \n", - " \n", - " 17031440201\n", - " 0\n", - " \n", - " \n", - " 17031839000\n", - " 458000\n", - " \n", - " \n", - " 17031030601\n", - " 1375000\n", - " \n", - " \n", - " 17031030604\n", - " 1138000\n", - " \n", - " \n", - " 17031020801\n", - " 1035000\n", - " \n", - " \n", - " 17031843300\n", - " 2639000\n", - " \n", - " \n", - " 17031080202\n", - " 791000\n", - " \n", - " \n", - " 17031070102\n", - " 742000\n", - " \n", - " \n", - " 17031031501\n", - " 1674000\n", - " \n", - " \n", - " 17031031502\n", - " 1784000\n", + " Museum\n", + " Supermarket\n", + " Restaurant\n", + " all_categories\n", + " Museum_per_capita\n", + " Supermarket_per_capita\n", + " Restaurant_per_capita\n", + " all_categories_per_capita\n", " \n", " \n", - " 17031834900\n", - " 413000\n", + " spatial_index\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " 17031834800\n", - " 608000\n", + " HYDE PARK\n", + " 400.0\n", + " 85.0\n", + " 80.0\n", + " 565.0\n", + " 44.444444\n", + " 9.444444\n", + " 8.888889\n", + " 62.777778\n", " \n", " \n", - " 17031160502\n", - " 676000\n", + " WASHINGTON PARK\n", + " 100.0\n", + " 0.0\n", + " 0.0\n", + " 100.0\n", + " NaN\n", + " NaN\n", + " NaN\n", + " NaN\n", " \n", " \n", - " 17031140702\n", - " 783000\n", + " WOODLAWN\n", + " 0.0\n", + " 70.0\n", + " 0.0\n", + " 70.0\n", + " NaN\n", + " NaN\n", + " NaN\n", + " NaN\n", " \n", - " \n", - " 17031842000\n", - " 1512000\n", - " \n", - " \n", - " 17031150402\n", - " 318000\n", - " \n", - " \n", - " 17031834400\n", - " 603000\n", - " \n", - " \n", - " 17031040201\n", - " 1722000\n", - " \n", - " \n", - " 17031040202\n", - " 1581000\n", - " \n", - " \n", - " 17031020702\n", - " 411000\n", - " \n", - " \n", - " ...\n", - " ...\n", - " \n", - " \n", - " 17031291200\n", - " 1818000\n", - " \n", - " \n", - " 17031620300\n", - " 249000\n", - " \n", - " \n", - " 17031620400\n", - " 354000\n", - " \n", - " \n", - " 17031630100\n", - " 471000\n", - " \n", - " \n", - " 17031630300\n", - " 377000\n", - " \n", - " \n", - " 17031630400\n", - " 534000\n", - " \n", - " \n", - " 17031630500\n", - " 548000\n", - " \n", - " \n", - " 17031110300\n", - " 0\n", - " \n", - " \n", - " 17031110400\n", - " 0\n", - " \n", - " \n", - " 17031120100\n", - " 0\n", - " \n", - " \n", - " 17031120200\n", - " 0\n", - " \n", - " \n", - " 17031271400\n", - " 881000\n", - " \n", - " \n", - " 17031280100\n", - " 503000\n", - " \n", - " \n", - " 17031280800\n", - " 2067000\n", - " \n", - " \n", - " 17031281900\n", - " 339000\n", - " \n", - " \n", - " 17031550100\n", - " 0\n", - " \n", - " \n", - " 17031611500\n", - " 673000\n", - " \n", - " \n", - " 17031611800\n", - " 673000\n", - " \n", - " \n", - " 17031611900\n", - " 795000\n", - " \n", - " \n", - " 17031612000\n", - " 915000\n", - " \n", - " \n", - " 17031620100\n", - " 377000\n", - " \n", - " \n", - " 17031620200\n", - " 249000\n", - " \n", - " \n", - " 17031070200\n", - " 1034000\n", - " \n", - " \n", - " 17031070400\n", - " 843000\n", - " \n", - " \n", - " 17031070500\n", - " 728000\n", - " \n", - " \n", - " 17031071000\n", - " 731000\n", + " \n", + "\n", + "" + ], + "text/plain": [ + " Museum Supermarket Restaurant all_categories \\\n", + "spatial_index \n", + "HYDE PARK 400.0 85.0 80.0 565.0 \n", + "WASHINGTON PARK 100.0 0.0 0.0 100.0 \n", + "WOODLAWN 0.0 70.0 0.0 70.0 \n", + "\n", + " Museum_per_capita Supermarket_per_capita \\\n", + "spatial_index \n", + "HYDE PARK 44.444444 9.444444 \n", + "WASHINGTON PARK NaN NaN \n", + "WOODLAWN NaN NaN \n", + "\n", + " Restaurant_per_capita all_categories_per_capita \n", + "spatial_index \n", + "HYDE PARK 8.888889 62.777778 \n", + "WASHINGTON PARK NaN NaN \n", + "WOODLAWN NaN NaN " + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d_sum.calculate()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
MuseumSupermarketRestaurantall_categoriesMuseum_per_capitaSupermarket_per_capitaRestaurant_per_capitaall_categories_per_capita
170310712001034000spatial_index
170311303001174000HYDE PARK400.085.080.0565.00.0172910.0036740.0034580.024423
170312922001882000WASHINGTON PARK100.00.00.0100.0NaNNaNNaNNaN
17031630900677000WOODLAWN0.070.00.070.0NaNNaNNaNNaN
\n", - "

801 rows × 1 columns

\n", "
" ], "text/plain": [ - " sum_in_range_all_categories\n", - "17031842400 120000\n", - "17031840300 500000\n", - "17031841100 1064000\n", - "17031841200 2162000\n", - "17031838200 2732000\n", - "17031650301 143000\n", - "17031530503 0\n", - "17031760803 0\n", - "17031540102 336000\n", - "17031540101 336000\n", - "17031440201 0\n", - "17031839000 458000\n", - "17031030601 1375000\n", - "17031030604 1138000\n", - "17031020801 1035000\n", - "17031843300 2639000\n", - "17031080202 791000\n", - "17031070102 742000\n", - "17031031501 1674000\n", - "17031031502 1784000\n", - "17031834900 413000\n", - "17031834800 608000\n", - "17031160502 676000\n", - "17031140702 783000\n", - "17031842000 1512000\n", - "17031150402 318000\n", - "17031834400 603000\n", - "17031040201 1722000\n", - "17031040202 1581000\n", - "17031020702 411000\n", - "... ...\n", - "17031291200 1818000\n", - "17031620300 249000\n", - "17031620400 354000\n", - "17031630100 471000\n", - "17031630300 377000\n", - "17031630400 534000\n", - "17031630500 548000\n", - "17031110300 0\n", - "17031110400 0\n", - "17031120100 0\n", - "17031120200 0\n", - "17031271400 881000\n", - "17031280100 503000\n", - "17031280800 2067000\n", - "17031281900 339000\n", - "17031550100 0\n", - "17031611500 673000\n", - "17031611800 673000\n", - "17031611900 795000\n", - "17031612000 915000\n", - "17031620100 377000\n", - "17031620200 249000\n", - "17031070200 1034000\n", - "17031070400 843000\n", - "17031070500 728000\n", - "17031071000 731000\n", - "17031071200 1034000\n", - "17031130300 1174000\n", - "17031292200 1882000\n", - "17031630900 677000\n", + " Museum Supermarket Restaurant all_categories \\\n", + "spatial_index \n", + "HYDE PARK 400.0 85.0 80.0 565.0 \n", + "WASHINGTON PARK 100.0 0.0 0.0 100.0 \n", + "WOODLAWN 0.0 70.0 0.0 70.0 \n", + "\n", + " Museum_per_capita Supermarket_per_capita \\\n", + "spatial_index \n", + "HYDE PARK 0.017291 0.003674 \n", + "WASHINGTON PARK NaN NaN \n", + "WOODLAWN NaN NaN \n", "\n", - "[801 rows x 1 columns]" + " Restaurant_per_capita all_categories_per_capita \n", + "spatial_index \n", + "HYDE PARK 0.003458 0.024423 \n", + "WASHINGTON PARK NaN NaN \n", + "WOODLAWN NaN NaN " ] }, - "execution_count": 17, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "a_sum.calculate(upper_threshold=1800)" + "d_sum.aggregated_results.head()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "d_sum.aggregated_results.to_csv('data/output_data/simple_demo_destsum.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Coverage Metrics (Destinations)" + ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Two Stage Floating Catchment Area" + "### Coverage Score" ] }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 46, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:spatial_access.p2p:Running in debug mode\n", - "DEBUG:spatial_access.p2p:Processing network (walk) with epsilon: 0.050000\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -3678,10 +1898,12 @@ ] }, { - "name": "stderr", + "name": "stdin", "output_type": "stream", "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 801\n" + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: geoid10\n" ] }, { @@ -3689,30 +1911,28 @@ "output_type": "stream", "text": [ "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", + "> name\n", "> lon\n", - "> Type\n", - "> target\n", + "> lat\n", "> category\n", - "> community\n" + "> target\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: name\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 199\n", - "INFO:spatial_access.p2p:Approx area of bounding box: 117.50 sq. km\n", - "DEBUG:spatial_access.p2p:set bbox: [41.55758, -87.9544885, 42.114303, -87.4804964]\n", - "INFO:spatial_access.p2p:Read network from data/osm_query_cache/walk41.55758_-87.9544885_42.114303_-87.4804964.h5\n", - "DEBUG:spatial_access.p2p:Nearest Neighbor matching completed in 0.42 seconds\n", - "DEBUG:spatial_access.p2p:Nearest Neighbor matching completed in 0.16 seconds\n", - "INFO:spatial_access.p2p:Prepared raw network in 1.65 seconds\n", - "INFO:spatial_access.p2p:Processing matrix with 35 threads\n", - "INFO:spatial_access.p2p:Shortest path matrix computed in 1.43 seconds using 35 threads\n", - "INFO:spatial_access.p2p:All operations completed in 10.48 seconds\n" + "INFO:spatial_access.p2p:Approx area of bounding box: 141.64 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 10.87 seconds\n" ] }, { @@ -3726,31 +1946,64 @@ "> Pop2014\n", "> Pov14\n", "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", + "If you have no population variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the population variable: Pop2014\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", + "> name\n", "> lon\n", - "> Type\n", - "> target\n", + "> lat\n", "> category\n", - "> community\n", - "If you have no capacity variable, write \"skip\" (no quotations)\n", + "> target\n", + "If you have no capacity variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the capacity variable: target\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "If you have no category variable, write \"skip\" (no quotations)\n" ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the category variable: category\n" + ] } ], "source": [ - "tsfca = TSFCA(network_type='walk',\n", - " sp_matrix_filename=None,\n", - " sources_filename='data/input_data/tracts2010.csv',\n", - " destinations_filename='data/input_data/health_chicago.csv')" + "cov = Coverage(network_type='walk',\n", + " transit_matrix_filename='data/output_data/matrices/simple_demo_matrix.csv',\n", + " sources_filename='data/input_data/sources/hyde_park_tracts.csv',\n", + " destinations_filename='data/input_data/destinations/hyde_park_dests.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'Pop2014', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'name', 'capacity': 'target', 'category': 'category', 'lat': 'lat', 'lon': 'lon'}\n", + " )" ] }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 47, "metadata": {}, "outputs": [ { @@ -3774,361 +2027,97 @@ " \n", " \n", " \n", - " percap_spend_all_categories\n", + " service_pop\n", + " percap_spending\n", + " category\n", " \n", " \n", " \n", " \n", - " 17031842400\n", - " 2.105633\n", - " \n", - " \n", - " 17031840300\n", - " 8.006214\n", - " \n", - " \n", - " 17031841100\n", - " 14.469868\n", - " \n", - " \n", - " 17031841200\n", - " 26.235742\n", - " \n", - " \n", - " 17031838200\n", - " 34.861894\n", - " \n", - " \n", - " 17031650301\n", - " 1.852332\n", - " \n", - " \n", - " 17031530503\n", - " 0.000000\n", - " \n", - " \n", - " 17031760803\n", - " 0.000000\n", - " \n", - " \n", - " 17031540102\n", - " 46.731572\n", - " \n", - " \n", - " 17031540101\n", - " 46.731572\n", - " \n", - " \n", - " 17031440201\n", - " 0.000000\n", - " \n", - " \n", - " 17031839000\n", - " 6.608003\n", - " \n", - " \n", - " 17031030601\n", - " 13.836369\n", - " \n", - " \n", - " 17031030604\n", - " 12.081200\n", - " \n", - " \n", - " 17031020801\n", - " 11.754579\n", - " \n", - " \n", - " 17031843300\n", - " 32.155156\n", - " \n", - " \n", - " 17031080202\n", - " 7.445448\n", - " \n", - " \n", - " 17031070102\n", - " 5.950369\n", - " \n", - " \n", - " 17031031501\n", - " 16.031848\n", - " \n", - " \n", - " 17031031502\n", - " 16.887460\n", - " \n", - " \n", - " 17031834900\n", - " 7.318661\n", - " \n", - " \n", - " 17031834800\n", - " 10.815228\n", - " \n", - " \n", - " 17031160502\n", - " 6.260889\n", - " \n", - " \n", - " 17031140702\n", - " 7.255581\n", - " \n", - " \n", - " 17031842000\n", - " 19.490115\n", - " \n", - " \n", - " 17031150402\n", - " 3.888481\n", - " \n", - " \n", - " 17031834400\n", - " 11.752635\n", - " \n", - " \n", - " 17031040201\n", - " 17.426541\n", - " \n", - " \n", - " 17031040202\n", - " 16.561329\n", - " \n", - " \n", - " 17031020702\n", - " 4.615418\n", + " Museum of Science and Industry\n", + " 24861\n", + " 0.016089\n", + " Museum\n", " \n", " \n", - " ...\n", - " ...\n", + " DuSable Museum\n", + " 23134\n", + " 0.004323\n", + " Museum\n", " \n", " \n", - " 17031291200\n", - " 17.834378\n", + " Whole Foods\n", + " 31326\n", + " 0.001596\n", + " Supermarket\n", " \n", " \n", - " 17031620300\n", - " 3.630258\n", + " Hyde Park Produce\n", + " 31326\n", + " 0.001117\n", + " Supermarket\n", " \n", " \n", - " 17031620400\n", - " 4.910887\n", + " Jewel Osco\n", + " 16726\n", + " 0.004185\n", + " Supermarket\n", " \n", " \n", - " 17031630100\n", - " 8.214787\n", + " Medici\n", + " 31326\n", + " 0.001596\n", + " Restaurant\n", " \n", " \n", - " 17031630300\n", - " 5.172186\n", - " \n", - " \n", - " 17031630400\n", - " 6.282396\n", - " \n", - " \n", - " 17031630500\n", - " 7.054518\n", - " \n", - " \n", - " 17031110300\n", - " 0.000000\n", - " \n", - " \n", - " 17031110400\n", - " 0.000000\n", - " \n", - " \n", - " 17031120100\n", - " 0.000000\n", - " \n", - " \n", - " 17031120200\n", - " 0.000000\n", - " \n", - " \n", - " 17031271400\n", - " 10.967600\n", - " \n", - " \n", - " 17031280100\n", - " 5.727133\n", - " \n", - " \n", - " 17031280800\n", - " 26.394242\n", - " \n", - " \n", - " 17031281900\n", - " 5.232678\n", - " \n", - " \n", - " 17031550100\n", - " 0.000000\n", - " \n", - " \n", - " 17031611500\n", - " 12.918862\n", - " \n", - " \n", - " 17031611800\n", - " 12.918862\n", - " \n", - " \n", - " 17031611900\n", - " 14.791521\n", - " \n", - " \n", - " 17031612000\n", - " 16.723639\n", - " \n", - " \n", - " 17031620100\n", - " 5.172186\n", - " \n", - " \n", - " 17031620200\n", - " 3.630258\n", - " \n", - " \n", - " 17031070200\n", - " 8.400801\n", - " \n", - " \n", - " 17031070400\n", - " 6.867317\n", - " \n", - " \n", - " 17031070500\n", - " 5.682349\n", - " \n", - " \n", - " 17031071000\n", - " 5.821422\n", - " \n", - " \n", - " 17031071200\n", - " 8.400801\n", - " \n", - " \n", - " 17031130300\n", - " 12.530199\n", - " \n", - " \n", - " 17031292200\n", - " 18.312486\n", - " \n", - " \n", - " 17031630900\n", - " 8.134728\n", + " Valois\n", + " 31326\n", + " 0.000958\n", + " Restaurant\n", " \n", " \n", "\n", - "

801 rows × 1 columns

\n", "" ], "text/plain": [ - " percap_spend_all_categories\n", - "17031842400 2.105633\n", - "17031840300 8.006214\n", - "17031841100 14.469868\n", - "17031841200 26.235742\n", - "17031838200 34.861894\n", - "17031650301 1.852332\n", - "17031530503 0.000000\n", - "17031760803 0.000000\n", - "17031540102 46.731572\n", - "17031540101 46.731572\n", - "17031440201 0.000000\n", - "17031839000 6.608003\n", - "17031030601 13.836369\n", - "17031030604 12.081200\n", - "17031020801 11.754579\n", - "17031843300 32.155156\n", - "17031080202 7.445448\n", - "17031070102 5.950369\n", - "17031031501 16.031848\n", - "17031031502 16.887460\n", - "17031834900 7.318661\n", - "17031834800 10.815228\n", - "17031160502 6.260889\n", - "17031140702 7.255581\n", - "17031842000 19.490115\n", - "17031150402 3.888481\n", - "17031834400 11.752635\n", - "17031040201 17.426541\n", - "17031040202 16.561329\n", - "17031020702 4.615418\n", - "... ...\n", - "17031291200 17.834378\n", - "17031620300 3.630258\n", - "17031620400 4.910887\n", - "17031630100 8.214787\n", - "17031630300 5.172186\n", - "17031630400 6.282396\n", - "17031630500 7.054518\n", - "17031110300 0.000000\n", - "17031110400 0.000000\n", - "17031120100 0.000000\n", - "17031120200 0.000000\n", - "17031271400 10.967600\n", - "17031280100 5.727133\n", - "17031280800 26.394242\n", - "17031281900 5.232678\n", - "17031550100 0.000000\n", - "17031611500 12.918862\n", - "17031611800 12.918862\n", - "17031611900 14.791521\n", - "17031612000 16.723639\n", - "17031620100 5.172186\n", - "17031620200 3.630258\n", - "17031070200 8.400801\n", - "17031070400 6.867317\n", - "17031070500 5.682349\n", - "17031071000 5.821422\n", - "17031071200 8.400801\n", - "17031130300 12.530199\n", - "17031292200 18.312486\n", - "17031630900 8.134728\n", - "\n", - "[801 rows x 1 columns]" + " service_pop percap_spending category\n", + "Museum of Science and Industry 24861 0.016089 Museum\n", + "DuSable Museum 23134 0.004323 Museum\n", + "Whole Foods 31326 0.001596 Supermarket\n", + "Hyde Park Produce 31326 0.001117 Supermarket\n", + "Jewel Osco 16726 0.004185 Supermarket\n", + "Medici 31326 0.001596 Restaurant\n", + "Valois 31326 0.000958 Restaurant" ] }, - "execution_count": 46, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "tsfca.calculate(upper_threshold=1800)" + "cov.calculate(upper_threshold=1800)" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ - "tsfca.model_results.to_csv('tsfca2010.csv')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Coverage Metrics (Destinations)" + "cov.model_results.to_csv('data/output_data/simple_demo_cov.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Coverage Score" + "### Two Stage Floating Catchment Area" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 48, "metadata": {}, "outputs": [ { @@ -4145,10 +2134,12 @@ ] }, { - "name": "stderr", + "name": "stdin", "output_type": "stream", "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 801\n" + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: geoid10\n" ] }, { @@ -4156,27 +2147,28 @@ "output_type": "stream", "text": [ "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", + "> name\n", "> lon\n", - "> Type\n", - "> target\n", + "> lat\n", "> category\n", - "> community\n" + "> target\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the longitude coordinate: lon\n", + "Enter the latitude coordinate: lat\n", + "Enter the index name: name\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "INFO:spatial_access.p2p:Total number of rows in the dataset: 199\n", - "INFO:spatial_access.p2p:Approx area of bounding box: 117.50 sq. km\n", - "INFO:spatial_access.p2p:Read network from data/osm_query_cache/walk41.55758_-87.9544885_42.114303_-87.4804964.h5\n", - "INFO:spatial_access.p2p:Prepared raw network in 1.58 seconds\n", - "INFO:spatial_access.p2p:Processing matrix with 35 threads\n", - "INFO:spatial_access.p2p:Shortest path matrix computed in 1.38 seconds using 35 threads\n", - "INFO:spatial_access.p2p:All operations completed in 13.92 seconds\n" + "INFO:spatial_access.p2p:Approx area of bounding box: 141.64 sq. km\n", + "INFO:spatial_access.p2p:All operations completed in 8.62 seconds\n" ] }, { @@ -4190,31 +2182,64 @@ "> Pop2014\n", "> Pov14\n", "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", + "If you have no population variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the population variable: Pop2014\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", + "> name\n", "> lon\n", - "> Type\n", - "> target\n", + "> lat\n", "> category\n", - "> community\n", - "If you have no capacity variable, write \"skip\" (no quotations)\n", + "> target\n", + "If you have no capacity variable, write \"skip\" (no quotations)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the capacity variable: target\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "If you have no category variable, write \"skip\" (no quotations)\n" ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the category variable: category\n" + ] } ], "source": [ - "cov = Coverage(network_type='walk',\n", - " sp_matrix_filename=None,\n", - " sources_filename='data/input_data/tracts2010.csv',\n", - " destinations_filename='data/input_data/health_chicago.csv')" + "tsfca = TSFCA(network_type='walk',\n", + " transit_matrix_filename='data/output_data/matrices/simple_demo_matrix.csv',\n", + " sources_filename='data/input_data/sources/hyde_park_tracts.csv',\n", + " destinations_filename='data/input_data/destinations/hyde_park_dests.csv',\n", + " source_column_names={'idx' : 'geoid10', 'population': 'Pop2014', 'lat': 'lat', 'lon': 'lon'},\n", + " dest_column_names={'idx': 'name', 'capacity': 'target', 'category': 'category', 'lat': 'lat', 'lon': 'lon'}\n", + " )" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -4238,2008 +2263,148 @@ " \n", " \n", " \n", - " service_pop\n", - " percap_spending\n", - " category\n", + " percap_spend_Museum\n", + " percap_spend_Supermarket\n", + " percap_spend_Restaurant\n", + " percap_spend_all_categories\n", " \n", " \n", " \n", " \n", - " 1\n", - " 113180\n", - " 1.122106\n", - " all_categories\n", - " \n", - " \n", - " 2\n", - " 120026\n", - " 1.582990\n", - " all_categories\n", - " \n", - " \n", - " 3\n", - " 102031\n", - " 1.342729\n", - " all_categories\n", - " \n", - " \n", - " 4\n", - " 77870\n", - " 2.041865\n", - " all_categories\n", - " \n", - " \n", - " 6\n", - " 99714\n", - " 1.664761\n", - " all_categories\n", - " \n", - " \n", - " 8\n", - " 80505\n", - " 2.384945\n", - " all_categories\n", - " \n", - " \n", - " 9\n", - " 90154\n", - " 1.242319\n", - " all_categories\n", - " \n", - " \n", - " 10\n", - " 108511\n", - " 1.354701\n", - " all_categories\n", - " \n", - " \n", - " 11\n", - " 85348\n", - " 2.179313\n", - " all_categories\n", - " \n", - " \n", - " 12\n", - " 47348\n", - " 3.484836\n", - " all_categories\n", - " \n", - " \n", - " 14\n", - " 110148\n", - " 0.916948\n", - " all_categories\n", - " \n", - " \n", - " 15\n", - " 49853\n", - " 2.226546\n", - " all_categories\n", - " \n", - " \n", - " 16\n", - " 51802\n", - " 2.721903\n", - " all_categories\n", - " \n", - " \n", - " 17\n", - " 82132\n", - " 1.911557\n", - " all_categories\n", - " \n", - " \n", - " 18\n", - " 41958\n", - " 4.004004\n", - " all_categories\n", - " \n", - " \n", - " 19\n", - " 65553\n", - " 3.050966\n", - " all_categories\n", - " \n", - " \n", - " 20\n", - " 113896\n", - " 0.904334\n", - " all_categories\n", - " \n", - " \n", - " 21\n", - " 99594\n", - " 1.666767\n", - " all_categories\n", - " \n", - " \n", - " 22\n", - " 40540\n", - " 2.984706\n", - " all_categories\n", - " \n", - " \n", - " 23\n", - " 60988\n", - " 1.983997\n", - " all_categories\n", - " \n", - " \n", - " 24\n", - " 62108\n", - " 1.932118\n", - " all_categories\n", - " \n", - " \n", - " 25\n", - " 55997\n", - " 1.803668\n", - " all_categories\n", - " \n", - " \n", - " 26\n", - " 102857\n", - " 1.438891\n", - " all_categories\n", - " \n", - " \n", - " 27\n", - " 82449\n", - " 2.413613\n", - " all_categories\n", - " \n", - " \n", - " 28\n", - " 83013\n", - " 1.541927\n", - " all_categories\n", - " \n", - " \n", - " 29\n", - " 79690\n", - " 1.279960\n", - " all_categories\n", - " \n", - " \n", - " 30\n", - " 66895\n", - " 1.793856\n", - " all_categories\n", - " \n", - " \n", - " 31\n", - " 72398\n", - " 2.044255\n", - " all_categories\n", - " \n", - " \n", - " 32\n", - " 105758\n", - " 1.352144\n", - " all_categories\n", - " \n", - " \n", - " 33\n", - " 106516\n", - " 1.304968\n", - " all_categories\n", - " \n", - " \n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " \n", - " \n", - " 176\n", - " 57777\n", - " 3.167350\n", - " all_categories\n", - " \n", - " \n", - " 177\n", - " 107860\n", - " 1.603931\n", - " all_categories\n", - " \n", - " \n", - " 178\n", - " 60298\n", - " 2.288633\n", - " all_categories\n", - " \n", - " \n", - " 179\n", - " 39590\n", - " 3.561505\n", - " all_categories\n", - " \n", - " \n", - " 180\n", - " 79849\n", - " 2.304349\n", - " all_categories\n", - " \n", - " \n", - " 181\n", - " 67750\n", - " 2.804428\n", - " all_categories\n", - " \n", - " \n", - " 182\n", - " 128563\n", - " 0.855612\n", - " all_categories\n", + " 17031836300\n", + " 0.004323\n", + " 0.006899\n", + " 0.002554\n", + " 0.013775\n", " \n", " \n", - " 183\n", - " 111827\n", - " 1.251934\n", - " all_categories\n", + " 17031836200\n", + " 0.020412\n", + " 0.006899\n", + " 0.002554\n", + " 0.029864\n", " \n", " \n", - " 184\n", - " 79549\n", - " 1.558788\n", - " all_categories\n", + " 17031410100\n", + " 0.016089\n", + " 0.002713\n", + " 0.002554\n", + " 0.021357\n", " \n", " \n", - " 185\n", - " 103798\n", - " 1.647431\n", - " all_categories\n", + " 17031410200\n", + " 0.020412\n", + " 0.002713\n", + " 0.002554\n", + " 0.025679\n", " \n", " \n", - " 186\n", - " 77493\n", - " 1.535623\n", - " all_categories\n", + " 17031410500\n", + " 0.020412\n", + " 0.006899\n", + " 0.002554\n", + " 0.029864\n", " \n", " \n", - " 187\n", - " 68132\n", - " 2.641930\n", - " all_categories\n", + " 17031410600\n", + " 0.020412\n", + " 0.006899\n", + " 0.002554\n", + " 0.029864\n", " \n", " \n", - " 188\n", - " 73569\n", - " 1.372861\n", - " all_categories\n", + " 17031411100\n", + " 0.020412\n", + " 0.006899\n", + " 0.002554\n", + " 0.029864\n", " \n", " \n", - " 189\n", - " 106126\n", - " 1.875130\n", - " all_categories\n", + " 17031410700\n", + " 0.020412\n", + " 0.002713\n", + " 0.002554\n", + " 0.025679\n", " \n", " \n", - " 190\n", - " 89400\n", - " 1.454139\n", - " all_categories\n", + " 17031410800\n", + " 0.020412\n", + " 0.002713\n", + " 0.002554\n", + " 0.025679\n", " \n", " \n", - " 191\n", - " 98164\n", - " 2.037407\n", - " all_categories\n", + " 17031410900\n", + " 0.016089\n", + " 0.002713\n", + " 0.002554\n", + " 0.021357\n", " \n", " \n", - " 192\n", - " 103726\n", - " 1.465399\n", - " all_categories\n", + " 17031411000\n", + " 0.016089\n", + " 0.002713\n", + " 0.002554\n", + " 0.021357\n", " \n", " \n", - " 194\n", - " 59553\n", - " 2.098971\n", - " all_categories\n", - " \n", - " \n", - " 195\n", - " 80321\n", - " 1.431755\n", - " all_categories\n", - " \n", - " \n", - " 196\n", - " 77038\n", - " 2.011994\n", - " all_categories\n", - " \n", - " \n", - " 197\n", - " 100239\n", - " 1.087401\n", - " all_categories\n", - " \n", - " \n", - " 198\n", - " 75620\n", - " 2.618355\n", - " all_categories\n", - " \n", - " \n", - " 199\n", - " 74965\n", - " 1.587407\n", - " all_categories\n", - " \n", - " \n", - " 200\n", - " 80219\n", - " 2.393448\n", - " all_categories\n", - " \n", - " \n", - " 201\n", - " 7190\n", - " 26.703755\n", - " all_categories\n", - " \n", - " \n", - " 202\n", - " 51061\n", - " 3.192260\n", - " all_categories\n", - " \n", - " \n", - " 203\n", - " 79301\n", - " 2.433765\n", - " all_categories\n", - " \n", - " \n", - " 204\n", - " 82505\n", - " 1.757469\n", - " all_categories\n", - " \n", - " \n", - " 205\n", - " 76715\n", - " 1.603337\n", - " all_categories\n", - " \n", - " \n", - " 206\n", - " 56990\n", - " 2.105633\n", - " all_categories\n", + " 17031411200\n", + " 0.020412\n", + " 0.006899\n", + " 0.002554\n", + " 0.029864\n", " \n", " \n", "\n", - "

199 rows × 3 columns

\n", "" ], "text/plain": [ - " service_pop percap_spending category\n", - "1 113180 1.122106 all_categories\n", - "2 120026 1.582990 all_categories\n", - "3 102031 1.342729 all_categories\n", - "4 77870 2.041865 all_categories\n", - "6 99714 1.664761 all_categories\n", - "8 80505 2.384945 all_categories\n", - "9 90154 1.242319 all_categories\n", - "10 108511 1.354701 all_categories\n", - "11 85348 2.179313 all_categories\n", - "12 47348 3.484836 all_categories\n", - "14 110148 0.916948 all_categories\n", - "15 49853 2.226546 all_categories\n", - "16 51802 2.721903 all_categories\n", - "17 82132 1.911557 all_categories\n", - "18 41958 4.004004 all_categories\n", - "19 65553 3.050966 all_categories\n", - "20 113896 0.904334 all_categories\n", - "21 99594 1.666767 all_categories\n", - "22 40540 2.984706 all_categories\n", - "23 60988 1.983997 all_categories\n", - "24 62108 1.932118 all_categories\n", - "25 55997 1.803668 all_categories\n", - "26 102857 1.438891 all_categories\n", - "27 82449 2.413613 all_categories\n", - "28 83013 1.541927 all_categories\n", - "29 79690 1.279960 all_categories\n", - "30 66895 1.793856 all_categories\n", - "31 72398 2.044255 all_categories\n", - "32 105758 1.352144 all_categories\n", - "33 106516 1.304968 all_categories\n", - ".. ... ... ...\n", - "176 57777 3.167350 all_categories\n", - "177 107860 1.603931 all_categories\n", - "178 60298 2.288633 all_categories\n", - "179 39590 3.561505 all_categories\n", - "180 79849 2.304349 all_categories\n", - "181 67750 2.804428 all_categories\n", - "182 128563 0.855612 all_categories\n", - "183 111827 1.251934 all_categories\n", - "184 79549 1.558788 all_categories\n", - "185 103798 1.647431 all_categories\n", - "186 77493 1.535623 all_categories\n", - "187 68132 2.641930 all_categories\n", - "188 73569 1.372861 all_categories\n", - "189 106126 1.875130 all_categories\n", - "190 89400 1.454139 all_categories\n", - "191 98164 2.037407 all_categories\n", - "192 103726 1.465399 all_categories\n", - "194 59553 2.098971 all_categories\n", - "195 80321 1.431755 all_categories\n", - "196 77038 2.011994 all_categories\n", - "197 100239 1.087401 all_categories\n", - "198 75620 2.618355 all_categories\n", - "199 74965 1.587407 all_categories\n", - "200 80219 2.393448 all_categories\n", - "201 7190 26.703755 all_categories\n", - "202 51061 3.192260 all_categories\n", - "203 79301 2.433765 all_categories\n", - "204 82505 1.757469 all_categories\n", - "205 76715 1.603337 all_categories\n", - "206 56990 2.105633 all_categories\n", + " percap_spend_Museum percap_spend_Supermarket \\\n", + "17031836300 0.004323 0.006899 \n", + "17031836200 0.020412 0.006899 \n", + "17031410100 0.016089 0.002713 \n", + "17031410200 0.020412 0.002713 \n", + "17031410500 0.020412 0.006899 \n", + "17031410600 0.020412 0.006899 \n", + "17031411100 0.020412 0.006899 \n", + "17031410700 0.020412 0.002713 \n", + "17031410800 0.020412 0.002713 \n", + "17031410900 0.016089 0.002713 \n", + "17031411000 0.016089 0.002713 \n", + "17031411200 0.020412 0.006899 \n", "\n", - "[199 rows x 3 columns]" + " percap_spend_Restaurant percap_spend_all_categories \n", + "17031836300 0.002554 0.013775 \n", + "17031836200 0.002554 0.029864 \n", + "17031410100 0.002554 0.021357 \n", + "17031410200 0.002554 0.025679 \n", + "17031410500 0.002554 0.029864 \n", + "17031410600 0.002554 0.029864 \n", + "17031411100 0.002554 0.029864 \n", + "17031410700 0.002554 0.025679 \n", + "17031410800 0.002554 0.025679 \n", + "17031410900 0.002554 0.021357 \n", + "17031411000 0.002554 0.021357 \n", + "17031411200 0.002554 0.029864 " ] }, - "execution_count": 19, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "cov.calculate(upper_threshold=1800)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Destination Sum: capacity and capacity per capita of providers in area" + "tsfca.calculate(upper_threshold=1800)" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 11, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n", - "If you have no capacity variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" - ] - } - ], + "outputs": [], "source": [ - "d_sum = DestSum(network_type='walk',\n", - " sources_filename='data/input_data/tracts2010.csv',\n", - " destinations_filename='data/input_data/health_chicago.csv')" + "tsfca.model_results.to_csv('data/output_data/simple_demo_tsfca.csv')" ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
All Free Health ClinicsHospitalsSchool-Based Health CentersFederally Qualified Health CentersOther Health Providersall_categoriesAll Free Health Clinics_per_capitaHospitals_per_capitaSchool-Based Health Centers_per_capitaFederally Qualified Health Centers_per_capitaOther Health Providers_per_capitaall_categories_per_capita
spatial_index
ALBANY PARK0.00.0329000.0171000.00.0500000.00.0000000.0000006.2157573.2306820.0000009.446439
ARCHER HEIGHTS0.00.00.0106000.00.0106000.00.0000000.0000000.0000007.5725100.0000007.572510
ARMOUR SQUARE0.00.00.00.0170000.0170000.00.0000000.0000000.0000000.00000017.72495017.724950
AUBURN GRESHAM0.00.0120000.0141000.00.0261000.00.0000000.0000002.5204262.9615000.0000005.481926
AUSTIN0.0125000.0190000.0378000.00.0693000.00.0000001.2165451.8491483.6788320.0000006.744526
BELMONT CRAGIN0.00.00.0178000.00.0178000.00.0000000.0000000.0000002.2046070.0000002.204607
BRIGHTON PARK0.00.0163000.0128000.00.0291000.00.0000000.0000003.6223032.8445080.0000006.466810
CALUMET HEIGHTS0.0112000.00.00.00.0112000.00.0000008.3582090.0000000.0000000.0000008.358209
CHICAGO LAWN198000.0198000.0180000.0206000.00.0782000.03.6221283.6221283.2928443.7684770.00000014.305576
DOUGLAS0.00.0363000.0199000.0345000.0907000.00.0000000.0000009.4901965.2026149.01960823.712418
DUNNING0.0183000.00.00.00.0183000.00.0000004.2505750.0000000.0000000.0000004.250575
EAST GARFIELD PARK128000.0102000.00.00.00.0230000.03.4058862.7140650.0000000.0000000.0000006.119951
EAST SIDE0.00.00.0180000.00.0180000.00.0000000.0000000.0000007.5824590.0000007.582459
EDGEWATER0.0183000.0200000.00.0190000.0573000.00.0000003.3106593.6182070.0000003.43729610.366163
ENGLEWOOD131000.0195000.00.0282000.00.0608000.03.8281715.6984220.0000008.2407950.00000017.767387
FULLER PARK0.00.00.0120000.00.0120000.00.0000000.0000000.00000013.5715900.00000013.571590
GAGE PARK0.00.00.0103000.00.0103000.00.0000000.0000000.0000002.5750000.0000002.575000
GARFIELD RIDGE0.00.00.0260000.00.0260000.00.0000000.0000000.0000005.6907720.0000005.690772
GRAND BOULEVARD0.0134000.0101000.0157000.0112000.0504000.00.0000003.5330102.6629404.1394222.95296413.288336
GREATER GRAND CROSSING0.00.0183000.00.00.0183000.00.0000000.0000005.2890170.0000000.0000005.289017
HEGEWISCH0.00.00.0179000.00.0179000.00.0000000.0000000.00000019.1689870.00000019.168987
HUMBOLDT PARK0.0146000.0238000.0708000.00.01092000.00.0000002.3476823.82704311.3846500.00000017.559375
HYDE PARK0.0129000.00.0151000.00.0280000.00.0000005.5762080.0000006.5271890.00000012.103398
IRVING PARK0.0187000.00.00.00.0187000.00.0000003.3103200.0000000.0000000.0000003.310320
KENWOOD109000.00.0155000.0191000.00.0455000.09.0269150.00000012.83643915.8178050.00000037.681159
LAKE VIEW0.0262000.0110000.0480000.00.0852000.00.0000002.5210251.0584454.6186710.0000008.198141
LINCOLN PARK0.00.00.0101000.00.0101000.00.0000000.0000000.0000001.4605510.0000001.460551
LINCOLN SQUARE0.0293000.0124000.0383000.00.0800000.00.0000006.8287232.8899718.9262820.00000018.644976
LOGAN SQUARE0.00.0109000.0198000.0284000.0591000.00.0000000.0000001.3624832.4749693.5499567.387408
LOWER WEST SIDE0.00.0322000.0369000.00.0691000.00.0000000.0000008.76452810.0438230.00000018.808351
MCKINLEY PARK0.00.00.0200000.00.0200000.00.0000000.0000000.00000010.8008860.00000010.800886
MONTCLARE0.0111000.00.00.00.0111000.00.00000013.0342880.0000000.0000000.00000013.034288
NEAR NORTH SIDE0.0486000.00.0305000.00.0791000.00.0000005.3126370.0000003.3340620.0000008.646699
NEAR SOUTH SIDE0.0131000.0145000.0193000.00.0469000.00.0000004.9738025.5053537.3278150.00000017.806971
NEAR WEST SIDE339000.0614000.0583000.0292000.0192000.02020000.04.7212518.5511758.1194384.0666822.67398328.132529
NEW CITY257000.00.00.0538000.00.0795000.05.0565670.0000000.00000010.5853420.00000015.641909
NORTH CENTER0.00.00.0132000.00.0132000.00.0000000.0000000.0000003.4618410.0000003.461841
NORTH LAWNDALE0.0346000.0140000.0556000.00.01042000.00.0000006.0580592.4512389.7349160.00000018.244213
NORWOOD PARK0.0152000.00.00.00.0152000.00.0000004.1659810.0000000.0000000.0000004.165981
OAKLAND0.00.00.0297000.00.0297000.00.0000000.0000000.00000091.9504640.00000091.950464
PORTAGE PARK0.0184000.00.0134000.00.0318000.00.0000002.7395630.0000001.9951160.0000004.734679
PULLMAN0.00.00.0111000.00.0111000.00.0000000.0000000.00000015.9253950.00000015.925395
RIVERDALE0.00.0192000.0144000.00.0336000.00.0000000.00000026.70375520.0278160.00000046.731572
ROGERS PARK0.00.0173000.0551000.00.0724000.00.0000000.0000003.44607810.9756580.00000014.421736
ROSELAND0.0181000.00.0281000.00.0462000.00.0000004.0912280.0000006.3515740.00000010.442802
SOUTH CHICAGO0.0138000.00.0301000.00.0439000.00.0000004.2218620.0000009.2085540.00000013.430416
SOUTH LAWNDALE0.0100000.0141000.0859000.0166000.01266000.00.0000001.2206141.72106510.4850722.02621915.452970
SOUTH SHORE0.0195000.00.0104000.00.0299000.00.0000005.1769450.0000002.7610380.0000007.937983
UPTOWN0.0642000.0152000.0753000.0127000.01674000.00.00000012.0924452.86300914.1831952.39211931.530768
WASHINGTON HEIGHTS0.00.00.0174000.00.0174000.00.0000000.0000000.0000006.5821830.0000006.582183
WASHINGTON PARK160000.00.00.00.00.0160000.08.5156210.0000000.0000000.0000000.0000008.515621
WEST ELSDON0.00.00.0143000.00.0143000.00.0000000.0000000.0000007.4615180.0000007.461518
WEST GARFIELD PARK0.00.00.0102000.00.0102000.00.0000000.0000000.0000005.4011120.0000005.401112
WEST RIDGE295000.00.00.0246000.00.0541000.04.0400440.0000000.0000003.3689860.0000007.409031
WEST TOWN155000.0397000.0171000.0911000.00.01634000.01.9178424.9121502.11581311.2719620.00000020.217768
WOODLAWN0.0126000.00.00.0165000.0291000.00.0000005.1196620.0000000.0000006.70431911.823981
\n", - "
" - ], - "text/plain": [ - " All Free Health Clinics Hospitals \\\n", - "spatial_index \n", - "ALBANY PARK 0.0 0.0 \n", - "ARCHER HEIGHTS 0.0 0.0 \n", - "ARMOUR SQUARE 0.0 0.0 \n", - "AUBURN GRESHAM 0.0 0.0 \n", - "AUSTIN 0.0 125000.0 \n", - "BELMONT CRAGIN 0.0 0.0 \n", - "BRIGHTON PARK 0.0 0.0 \n", - "CALUMET HEIGHTS 0.0 112000.0 \n", - "CHICAGO LAWN 198000.0 198000.0 \n", - "DOUGLAS 0.0 0.0 \n", - "DUNNING 0.0 183000.0 \n", - "EAST GARFIELD PARK 128000.0 102000.0 \n", - "EAST SIDE 0.0 0.0 \n", - "EDGEWATER 0.0 183000.0 \n", - "ENGLEWOOD 131000.0 195000.0 \n", - "FULLER PARK 0.0 0.0 \n", - "GAGE PARK 0.0 0.0 \n", - "GARFIELD RIDGE 0.0 0.0 \n", - "GRAND BOULEVARD 0.0 134000.0 \n", - "GREATER GRAND CROSSING 0.0 0.0 \n", - "HEGEWISCH 0.0 0.0 \n", - "HUMBOLDT PARK 0.0 146000.0 \n", - "HYDE PARK 0.0 129000.0 \n", - "IRVING PARK 0.0 187000.0 \n", - "KENWOOD 109000.0 0.0 \n", - "LAKE VIEW 0.0 262000.0 \n", - "LINCOLN PARK 0.0 0.0 \n", - "LINCOLN SQUARE 0.0 293000.0 \n", - "LOGAN SQUARE 0.0 0.0 \n", - "LOWER WEST SIDE 0.0 0.0 \n", - "MCKINLEY PARK 0.0 0.0 \n", - "MONTCLARE 0.0 111000.0 \n", - "NEAR NORTH SIDE 0.0 486000.0 \n", - "NEAR SOUTH SIDE 0.0 131000.0 \n", - "NEAR WEST SIDE 339000.0 614000.0 \n", - "NEW CITY 257000.0 0.0 \n", - "NORTH CENTER 0.0 0.0 \n", - "NORTH LAWNDALE 0.0 346000.0 \n", - "NORWOOD PARK 0.0 152000.0 \n", - "OAKLAND 0.0 0.0 \n", - "PORTAGE PARK 0.0 184000.0 \n", - "PULLMAN 0.0 0.0 \n", - "RIVERDALE 0.0 0.0 \n", - "ROGERS PARK 0.0 0.0 \n", - "ROSELAND 0.0 181000.0 \n", - "SOUTH CHICAGO 0.0 138000.0 \n", - "SOUTH LAWNDALE 0.0 100000.0 \n", - "SOUTH SHORE 0.0 195000.0 \n", - "UPTOWN 0.0 642000.0 \n", - "WASHINGTON HEIGHTS 0.0 0.0 \n", - "WASHINGTON PARK 160000.0 0.0 \n", - "WEST ELSDON 0.0 0.0 \n", - "WEST GARFIELD PARK 0.0 0.0 \n", - "WEST RIDGE 295000.0 0.0 \n", - "WEST TOWN 155000.0 397000.0 \n", - "WOODLAWN 0.0 126000.0 \n", - "\n", - " School-Based Health Centers \\\n", - "spatial_index \n", - "ALBANY PARK 329000.0 \n", - "ARCHER HEIGHTS 0.0 \n", - "ARMOUR SQUARE 0.0 \n", - "AUBURN GRESHAM 120000.0 \n", - "AUSTIN 190000.0 \n", - "BELMONT CRAGIN 0.0 \n", - "BRIGHTON PARK 163000.0 \n", - "CALUMET HEIGHTS 0.0 \n", - "CHICAGO LAWN 180000.0 \n", - "DOUGLAS 363000.0 \n", - "DUNNING 0.0 \n", - "EAST GARFIELD PARK 0.0 \n", - "EAST SIDE 0.0 \n", - "EDGEWATER 200000.0 \n", - "ENGLEWOOD 0.0 \n", - "FULLER PARK 0.0 \n", - "GAGE PARK 0.0 \n", - "GARFIELD RIDGE 0.0 \n", - "GRAND BOULEVARD 101000.0 \n", - "GREATER GRAND CROSSING 183000.0 \n", - "HEGEWISCH 0.0 \n", - "HUMBOLDT PARK 238000.0 \n", - "HYDE PARK 0.0 \n", - "IRVING PARK 0.0 \n", - "KENWOOD 155000.0 \n", - "LAKE VIEW 110000.0 \n", - "LINCOLN PARK 0.0 \n", - "LINCOLN SQUARE 124000.0 \n", - "LOGAN SQUARE 109000.0 \n", - "LOWER WEST SIDE 322000.0 \n", - "MCKINLEY PARK 0.0 \n", - "MONTCLARE 0.0 \n", - "NEAR NORTH SIDE 0.0 \n", - "NEAR SOUTH SIDE 145000.0 \n", - "NEAR WEST SIDE 583000.0 \n", - "NEW CITY 0.0 \n", - "NORTH CENTER 0.0 \n", - "NORTH LAWNDALE 140000.0 \n", - "NORWOOD PARK 0.0 \n", - "OAKLAND 0.0 \n", - "PORTAGE PARK 0.0 \n", - "PULLMAN 0.0 \n", - "RIVERDALE 192000.0 \n", - "ROGERS PARK 173000.0 \n", - "ROSELAND 0.0 \n", - "SOUTH CHICAGO 0.0 \n", - "SOUTH LAWNDALE 141000.0 \n", - "SOUTH SHORE 0.0 \n", - "UPTOWN 152000.0 \n", - "WASHINGTON HEIGHTS 0.0 \n", - "WASHINGTON PARK 0.0 \n", - "WEST ELSDON 0.0 \n", - "WEST GARFIELD PARK 0.0 \n", - "WEST RIDGE 0.0 \n", - "WEST TOWN 171000.0 \n", - "WOODLAWN 0.0 \n", - "\n", - " Federally Qualified Health Centers \\\n", - "spatial_index \n", - "ALBANY PARK 171000.0 \n", - "ARCHER HEIGHTS 106000.0 \n", - "ARMOUR SQUARE 0.0 \n", - "AUBURN GRESHAM 141000.0 \n", - "AUSTIN 378000.0 \n", - "BELMONT CRAGIN 178000.0 \n", - "BRIGHTON PARK 128000.0 \n", - "CALUMET HEIGHTS 0.0 \n", - "CHICAGO LAWN 206000.0 \n", - "DOUGLAS 199000.0 \n", - "DUNNING 0.0 \n", - "EAST GARFIELD PARK 0.0 \n", - "EAST SIDE 180000.0 \n", - "EDGEWATER 0.0 \n", - "ENGLEWOOD 282000.0 \n", - "FULLER PARK 120000.0 \n", - "GAGE PARK 103000.0 \n", - "GARFIELD RIDGE 260000.0 \n", - "GRAND BOULEVARD 157000.0 \n", - "GREATER GRAND CROSSING 0.0 \n", - "HEGEWISCH 179000.0 \n", - "HUMBOLDT PARK 708000.0 \n", - "HYDE PARK 151000.0 \n", - "IRVING PARK 0.0 \n", - "KENWOOD 191000.0 \n", - "LAKE VIEW 480000.0 \n", - "LINCOLN PARK 101000.0 \n", - "LINCOLN SQUARE 383000.0 \n", - "LOGAN SQUARE 198000.0 \n", - "LOWER WEST SIDE 369000.0 \n", - "MCKINLEY PARK 200000.0 \n", - "MONTCLARE 0.0 \n", - "NEAR NORTH SIDE 305000.0 \n", - "NEAR SOUTH SIDE 193000.0 \n", - "NEAR WEST SIDE 292000.0 \n", - "NEW CITY 538000.0 \n", - "NORTH CENTER 132000.0 \n", - "NORTH LAWNDALE 556000.0 \n", - "NORWOOD PARK 0.0 \n", - "OAKLAND 297000.0 \n", - "PORTAGE PARK 134000.0 \n", - "PULLMAN 111000.0 \n", - "RIVERDALE 144000.0 \n", - "ROGERS PARK 551000.0 \n", - "ROSELAND 281000.0 \n", - "SOUTH CHICAGO 301000.0 \n", - "SOUTH LAWNDALE 859000.0 \n", - "SOUTH SHORE 104000.0 \n", - "UPTOWN 753000.0 \n", - "WASHINGTON HEIGHTS 174000.0 \n", - "WASHINGTON PARK 0.0 \n", - "WEST ELSDON 143000.0 \n", - "WEST GARFIELD PARK 102000.0 \n", - "WEST RIDGE 246000.0 \n", - "WEST TOWN 911000.0 \n", - "WOODLAWN 0.0 \n", - "\n", - " Other Health Providers all_categories \\\n", - "spatial_index \n", - "ALBANY PARK 0.0 500000.0 \n", - "ARCHER HEIGHTS 0.0 106000.0 \n", - "ARMOUR SQUARE 170000.0 170000.0 \n", - "AUBURN GRESHAM 0.0 261000.0 \n", - "AUSTIN 0.0 693000.0 \n", - "BELMONT CRAGIN 0.0 178000.0 \n", - "BRIGHTON PARK 0.0 291000.0 \n", - "CALUMET HEIGHTS 0.0 112000.0 \n", - "CHICAGO LAWN 0.0 782000.0 \n", - "DOUGLAS 345000.0 907000.0 \n", - "DUNNING 0.0 183000.0 \n", - "EAST GARFIELD PARK 0.0 230000.0 \n", - "EAST SIDE 0.0 180000.0 \n", - "EDGEWATER 190000.0 573000.0 \n", - "ENGLEWOOD 0.0 608000.0 \n", - "FULLER PARK 0.0 120000.0 \n", - "GAGE PARK 0.0 103000.0 \n", - "GARFIELD RIDGE 0.0 260000.0 \n", - "GRAND BOULEVARD 112000.0 504000.0 \n", - "GREATER GRAND CROSSING 0.0 183000.0 \n", - "HEGEWISCH 0.0 179000.0 \n", - "HUMBOLDT PARK 0.0 1092000.0 \n", - "HYDE PARK 0.0 280000.0 \n", - "IRVING PARK 0.0 187000.0 \n", - "KENWOOD 0.0 455000.0 \n", - "LAKE VIEW 0.0 852000.0 \n", - "LINCOLN PARK 0.0 101000.0 \n", - "LINCOLN SQUARE 0.0 800000.0 \n", - "LOGAN SQUARE 284000.0 591000.0 \n", - "LOWER WEST SIDE 0.0 691000.0 \n", - "MCKINLEY PARK 0.0 200000.0 \n", - "MONTCLARE 0.0 111000.0 \n", - "NEAR NORTH SIDE 0.0 791000.0 \n", - "NEAR SOUTH SIDE 0.0 469000.0 \n", - "NEAR WEST SIDE 192000.0 2020000.0 \n", - "NEW CITY 0.0 795000.0 \n", - "NORTH CENTER 0.0 132000.0 \n", - "NORTH LAWNDALE 0.0 1042000.0 \n", - "NORWOOD PARK 0.0 152000.0 \n", - "OAKLAND 0.0 297000.0 \n", - "PORTAGE PARK 0.0 318000.0 \n", - "PULLMAN 0.0 111000.0 \n", - "RIVERDALE 0.0 336000.0 \n", - "ROGERS PARK 0.0 724000.0 \n", - "ROSELAND 0.0 462000.0 \n", - "SOUTH CHICAGO 0.0 439000.0 \n", - "SOUTH LAWNDALE 166000.0 1266000.0 \n", - "SOUTH SHORE 0.0 299000.0 \n", - "UPTOWN 127000.0 1674000.0 \n", - "WASHINGTON HEIGHTS 0.0 174000.0 \n", - "WASHINGTON PARK 0.0 160000.0 \n", - "WEST ELSDON 0.0 143000.0 \n", - "WEST GARFIELD PARK 0.0 102000.0 \n", - "WEST RIDGE 0.0 541000.0 \n", - "WEST TOWN 0.0 1634000.0 \n", - "WOODLAWN 165000.0 291000.0 \n", - "\n", - " All Free Health Clinics_per_capita \\\n", - "spatial_index \n", - "ALBANY PARK 0.000000 \n", - "ARCHER HEIGHTS 0.000000 \n", - "ARMOUR SQUARE 0.000000 \n", - "AUBURN GRESHAM 0.000000 \n", - "AUSTIN 0.000000 \n", - "BELMONT CRAGIN 0.000000 \n", - "BRIGHTON PARK 0.000000 \n", - "CALUMET HEIGHTS 0.000000 \n", - "CHICAGO LAWN 3.622128 \n", - "DOUGLAS 0.000000 \n", - "DUNNING 0.000000 \n", - "EAST GARFIELD PARK 3.405886 \n", - "EAST SIDE 0.000000 \n", - "EDGEWATER 0.000000 \n", - "ENGLEWOOD 3.828171 \n", - "FULLER PARK 0.000000 \n", - "GAGE PARK 0.000000 \n", - "GARFIELD RIDGE 0.000000 \n", - "GRAND BOULEVARD 0.000000 \n", - "GREATER GRAND CROSSING 0.000000 \n", - "HEGEWISCH 0.000000 \n", - "HUMBOLDT PARK 0.000000 \n", - "HYDE PARK 0.000000 \n", - "IRVING PARK 0.000000 \n", - "KENWOOD 9.026915 \n", - "LAKE VIEW 0.000000 \n", - "LINCOLN PARK 0.000000 \n", - "LINCOLN SQUARE 0.000000 \n", - "LOGAN SQUARE 0.000000 \n", - "LOWER WEST SIDE 0.000000 \n", - "MCKINLEY PARK 0.000000 \n", - "MONTCLARE 0.000000 \n", - "NEAR NORTH SIDE 0.000000 \n", - "NEAR SOUTH SIDE 0.000000 \n", - "NEAR WEST SIDE 4.721251 \n", - "NEW CITY 5.056567 \n", - "NORTH CENTER 0.000000 \n", - "NORTH LAWNDALE 0.000000 \n", - "NORWOOD PARK 0.000000 \n", - "OAKLAND 0.000000 \n", - "PORTAGE PARK 0.000000 \n", - "PULLMAN 0.000000 \n", - "RIVERDALE 0.000000 \n", - "ROGERS PARK 0.000000 \n", - "ROSELAND 0.000000 \n", - "SOUTH CHICAGO 0.000000 \n", - "SOUTH LAWNDALE 0.000000 \n", - "SOUTH SHORE 0.000000 \n", - "UPTOWN 0.000000 \n", - "WASHINGTON HEIGHTS 0.000000 \n", - "WASHINGTON PARK 8.515621 \n", - "WEST ELSDON 0.000000 \n", - "WEST GARFIELD PARK 0.000000 \n", - "WEST RIDGE 4.040044 \n", - "WEST TOWN 1.917842 \n", - "WOODLAWN 0.000000 \n", - "\n", - " Hospitals_per_capita \\\n", - "spatial_index \n", - "ALBANY PARK 0.000000 \n", - "ARCHER HEIGHTS 0.000000 \n", - "ARMOUR SQUARE 0.000000 \n", - "AUBURN GRESHAM 0.000000 \n", - "AUSTIN 1.216545 \n", - "BELMONT CRAGIN 0.000000 \n", - "BRIGHTON PARK 0.000000 \n", - "CALUMET HEIGHTS 8.358209 \n", - "CHICAGO LAWN 3.622128 \n", - "DOUGLAS 0.000000 \n", - "DUNNING 4.250575 \n", - "EAST GARFIELD PARK 2.714065 \n", - "EAST SIDE 0.000000 \n", - "EDGEWATER 3.310659 \n", - "ENGLEWOOD 5.698422 \n", - "FULLER PARK 0.000000 \n", - "GAGE PARK 0.000000 \n", - "GARFIELD RIDGE 0.000000 \n", - "GRAND BOULEVARD 3.533010 \n", - "GREATER GRAND CROSSING 0.000000 \n", - "HEGEWISCH 0.000000 \n", - "HUMBOLDT PARK 2.347682 \n", - "HYDE PARK 5.576208 \n", - "IRVING PARK 3.310320 \n", - "KENWOOD 0.000000 \n", - "LAKE VIEW 2.521025 \n", - "LINCOLN PARK 0.000000 \n", - "LINCOLN SQUARE 6.828723 \n", - "LOGAN SQUARE 0.000000 \n", - "LOWER WEST SIDE 0.000000 \n", - "MCKINLEY PARK 0.000000 \n", - "MONTCLARE 13.034288 \n", - "NEAR NORTH SIDE 5.312637 \n", - "NEAR SOUTH SIDE 4.973802 \n", - "NEAR WEST SIDE 8.551175 \n", - "NEW CITY 0.000000 \n", - "NORTH CENTER 0.000000 \n", - "NORTH LAWNDALE 6.058059 \n", - "NORWOOD PARK 4.165981 \n", - "OAKLAND 0.000000 \n", - "PORTAGE PARK 2.739563 \n", - "PULLMAN 0.000000 \n", - "RIVERDALE 0.000000 \n", - "ROGERS PARK 0.000000 \n", - "ROSELAND 4.091228 \n", - "SOUTH CHICAGO 4.221862 \n", - "SOUTH LAWNDALE 1.220614 \n", - "SOUTH SHORE 5.176945 \n", - "UPTOWN 12.092445 \n", - "WASHINGTON HEIGHTS 0.000000 \n", - "WASHINGTON PARK 0.000000 \n", - "WEST ELSDON 0.000000 \n", - "WEST GARFIELD PARK 0.000000 \n", - "WEST RIDGE 0.000000 \n", - "WEST TOWN 4.912150 \n", - "WOODLAWN 5.119662 \n", - "\n", - " School-Based Health Centers_per_capita \\\n", - "spatial_index \n", - "ALBANY PARK 6.215757 \n", - "ARCHER HEIGHTS 0.000000 \n", - "ARMOUR SQUARE 0.000000 \n", - "AUBURN GRESHAM 2.520426 \n", - "AUSTIN 1.849148 \n", - "BELMONT CRAGIN 0.000000 \n", - "BRIGHTON PARK 3.622303 \n", - "CALUMET HEIGHTS 0.000000 \n", - "CHICAGO LAWN 3.292844 \n", - "DOUGLAS 9.490196 \n", - "DUNNING 0.000000 \n", - "EAST GARFIELD PARK 0.000000 \n", - "EAST SIDE 0.000000 \n", - "EDGEWATER 3.618207 \n", - "ENGLEWOOD 0.000000 \n", - "FULLER PARK 0.000000 \n", - "GAGE PARK 0.000000 \n", - "GARFIELD RIDGE 0.000000 \n", - "GRAND BOULEVARD 2.662940 \n", - "GREATER GRAND CROSSING 5.289017 \n", - "HEGEWISCH 0.000000 \n", - "HUMBOLDT PARK 3.827043 \n", - "HYDE PARK 0.000000 \n", - "IRVING PARK 0.000000 \n", - "KENWOOD 12.836439 \n", - "LAKE VIEW 1.058445 \n", - "LINCOLN PARK 0.000000 \n", - "LINCOLN SQUARE 2.889971 \n", - "LOGAN SQUARE 1.362483 \n", - "LOWER WEST SIDE 8.764528 \n", - "MCKINLEY PARK 0.000000 \n", - "MONTCLARE 0.000000 \n", - "NEAR NORTH SIDE 0.000000 \n", - "NEAR SOUTH SIDE 5.505353 \n", - "NEAR WEST SIDE 8.119438 \n", - "NEW CITY 0.000000 \n", - "NORTH CENTER 0.000000 \n", - "NORTH LAWNDALE 2.451238 \n", - "NORWOOD PARK 0.000000 \n", - "OAKLAND 0.000000 \n", - "PORTAGE PARK 0.000000 \n", - "PULLMAN 0.000000 \n", - "RIVERDALE 26.703755 \n", - "ROGERS PARK 3.446078 \n", - "ROSELAND 0.000000 \n", - "SOUTH CHICAGO 0.000000 \n", - "SOUTH LAWNDALE 1.721065 \n", - "SOUTH SHORE 0.000000 \n", - "UPTOWN 2.863009 \n", - "WASHINGTON HEIGHTS 0.000000 \n", - "WASHINGTON PARK 0.000000 \n", - "WEST ELSDON 0.000000 \n", - "WEST GARFIELD PARK 0.000000 \n", - "WEST RIDGE 0.000000 \n", - "WEST TOWN 2.115813 \n", - "WOODLAWN 0.000000 \n", - "\n", - " Federally Qualified Health Centers_per_capita \\\n", - "spatial_index \n", - "ALBANY PARK 3.230682 \n", - "ARCHER HEIGHTS 7.572510 \n", - "ARMOUR SQUARE 0.000000 \n", - "AUBURN GRESHAM 2.961500 \n", - "AUSTIN 3.678832 \n", - "BELMONT CRAGIN 2.204607 \n", - "BRIGHTON PARK 2.844508 \n", - "CALUMET HEIGHTS 0.000000 \n", - "CHICAGO LAWN 3.768477 \n", - "DOUGLAS 5.202614 \n", - "DUNNING 0.000000 \n", - "EAST GARFIELD PARK 0.000000 \n", - "EAST SIDE 7.582459 \n", - "EDGEWATER 0.000000 \n", - "ENGLEWOOD 8.240795 \n", - "FULLER PARK 13.571590 \n", - "GAGE PARK 2.575000 \n", - "GARFIELD RIDGE 5.690772 \n", - "GRAND BOULEVARD 4.139422 \n", - "GREATER GRAND CROSSING 0.000000 \n", - "HEGEWISCH 19.168987 \n", - "HUMBOLDT PARK 11.384650 \n", - "HYDE PARK 6.527189 \n", - "IRVING PARK 0.000000 \n", - "KENWOOD 15.817805 \n", - "LAKE VIEW 4.618671 \n", - "LINCOLN PARK 1.460551 \n", - "LINCOLN SQUARE 8.926282 \n", - "LOGAN SQUARE 2.474969 \n", - "LOWER WEST SIDE 10.043823 \n", - "MCKINLEY PARK 10.800886 \n", - "MONTCLARE 0.000000 \n", - "NEAR NORTH SIDE 3.334062 \n", - "NEAR SOUTH SIDE 7.327815 \n", - "NEAR WEST SIDE 4.066682 \n", - "NEW CITY 10.585342 \n", - "NORTH CENTER 3.461841 \n", - "NORTH LAWNDALE 9.734916 \n", - "NORWOOD PARK 0.000000 \n", - "OAKLAND 91.950464 \n", - "PORTAGE PARK 1.995116 \n", - "PULLMAN 15.925395 \n", - "RIVERDALE 20.027816 \n", - "ROGERS PARK 10.975658 \n", - "ROSELAND 6.351574 \n", - "SOUTH CHICAGO 9.208554 \n", - "SOUTH LAWNDALE 10.485072 \n", - "SOUTH SHORE 2.761038 \n", - "UPTOWN 14.183195 \n", - "WASHINGTON HEIGHTS 6.582183 \n", - "WASHINGTON PARK 0.000000 \n", - "WEST ELSDON 7.461518 \n", - "WEST GARFIELD PARK 5.401112 \n", - "WEST RIDGE 3.368986 \n", - "WEST TOWN 11.271962 \n", - "WOODLAWN 0.000000 \n", - "\n", - " Other Health Providers_per_capita \\\n", - "spatial_index \n", - "ALBANY PARK 0.000000 \n", - "ARCHER HEIGHTS 0.000000 \n", - "ARMOUR SQUARE 17.724950 \n", - "AUBURN GRESHAM 0.000000 \n", - "AUSTIN 0.000000 \n", - "BELMONT CRAGIN 0.000000 \n", - "BRIGHTON PARK 0.000000 \n", - "CALUMET HEIGHTS 0.000000 \n", - "CHICAGO LAWN 0.000000 \n", - "DOUGLAS 9.019608 \n", - "DUNNING 0.000000 \n", - "EAST GARFIELD PARK 0.000000 \n", - "EAST SIDE 0.000000 \n", - "EDGEWATER 3.437296 \n", - "ENGLEWOOD 0.000000 \n", - "FULLER PARK 0.000000 \n", - "GAGE PARK 0.000000 \n", - "GARFIELD RIDGE 0.000000 \n", - "GRAND BOULEVARD 2.952964 \n", - "GREATER GRAND CROSSING 0.000000 \n", - "HEGEWISCH 0.000000 \n", - "HUMBOLDT PARK 0.000000 \n", - "HYDE PARK 0.000000 \n", - "IRVING PARK 0.000000 \n", - "KENWOOD 0.000000 \n", - "LAKE VIEW 0.000000 \n", - "LINCOLN PARK 0.000000 \n", - "LINCOLN SQUARE 0.000000 \n", - "LOGAN SQUARE 3.549956 \n", - "LOWER WEST SIDE 0.000000 \n", - "MCKINLEY PARK 0.000000 \n", - "MONTCLARE 0.000000 \n", - "NEAR NORTH SIDE 0.000000 \n", - "NEAR SOUTH SIDE 0.000000 \n", - "NEAR WEST SIDE 2.673983 \n", - "NEW CITY 0.000000 \n", - "NORTH CENTER 0.000000 \n", - "NORTH LAWNDALE 0.000000 \n", - "NORWOOD PARK 0.000000 \n", - "OAKLAND 0.000000 \n", - "PORTAGE PARK 0.000000 \n", - "PULLMAN 0.000000 \n", - "RIVERDALE 0.000000 \n", - "ROGERS PARK 0.000000 \n", - "ROSELAND 0.000000 \n", - "SOUTH CHICAGO 0.000000 \n", - "SOUTH LAWNDALE 2.026219 \n", - "SOUTH SHORE 0.000000 \n", - "UPTOWN 2.392119 \n", - "WASHINGTON HEIGHTS 0.000000 \n", - "WASHINGTON PARK 0.000000 \n", - "WEST ELSDON 0.000000 \n", - "WEST GARFIELD PARK 0.000000 \n", - "WEST RIDGE 0.000000 \n", - "WEST TOWN 0.000000 \n", - "WOODLAWN 6.704319 \n", - "\n", - " all_categories_per_capita \n", - "spatial_index \n", - "ALBANY PARK 9.446439 \n", - "ARCHER HEIGHTS 7.572510 \n", - "ARMOUR SQUARE 17.724950 \n", - "AUBURN GRESHAM 5.481926 \n", - "AUSTIN 6.744526 \n", - "BELMONT CRAGIN 2.204607 \n", - "BRIGHTON PARK 6.466810 \n", - "CALUMET HEIGHTS 8.358209 \n", - "CHICAGO LAWN 14.305576 \n", - "DOUGLAS 23.712418 \n", - "DUNNING 4.250575 \n", - "EAST GARFIELD PARK 6.119951 \n", - "EAST SIDE 7.582459 \n", - "EDGEWATER 10.366163 \n", - "ENGLEWOOD 17.767387 \n", - "FULLER PARK 13.571590 \n", - "GAGE PARK 2.575000 \n", - "GARFIELD RIDGE 5.690772 \n", - "GRAND BOULEVARD 13.288336 \n", - "GREATER GRAND CROSSING 5.289017 \n", - "HEGEWISCH 19.168987 \n", - "HUMBOLDT PARK 17.559375 \n", - "HYDE PARK 12.103398 \n", - "IRVING PARK 3.310320 \n", - "KENWOOD 37.681159 \n", - "LAKE VIEW 8.198141 \n", - "LINCOLN PARK 1.460551 \n", - "LINCOLN SQUARE 18.644976 \n", - "LOGAN SQUARE 7.387408 \n", - "LOWER WEST SIDE 18.808351 \n", - "MCKINLEY PARK 10.800886 \n", - "MONTCLARE 13.034288 \n", - "NEAR NORTH SIDE 8.646699 \n", - "NEAR SOUTH SIDE 17.806971 \n", - "NEAR WEST SIDE 28.132529 \n", - "NEW CITY 15.641909 \n", - "NORTH CENTER 3.461841 \n", - "NORTH LAWNDALE 18.244213 \n", - "NORWOOD PARK 4.165981 \n", - "OAKLAND 91.950464 \n", - "PORTAGE PARK 4.734679 \n", - "PULLMAN 15.925395 \n", - "RIVERDALE 46.731572 \n", - "ROGERS PARK 14.421736 \n", - "ROSELAND 10.442802 \n", - "SOUTH CHICAGO 13.430416 \n", - "SOUTH LAWNDALE 15.452970 \n", - "SOUTH SHORE 7.937983 \n", - "UPTOWN 31.530768 \n", - "WASHINGTON HEIGHTS 6.582183 \n", - "WASHINGTON PARK 8.515621 \n", - "WEST ELSDON 7.461518 \n", - "WEST GARFIELD PARK 5.401112 \n", - "WEST RIDGE 7.409031 \n", - "WEST TOWN 20.217768 \n", - "WOODLAWN 11.823981 " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "d_sum.calculate()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] } ], "metadata": { @@ -6258,7 +2423,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/docs/notebooks/travel_time_metrics.ipynb b/docs/notebooks/travel_time_metrics.ipynb deleted file mode 100755 index 41f9dce..0000000 --- a/docs/notebooks/travel_time_metrics.ipynb +++ /dev/null @@ -1,703 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Travel Time Measures" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import sys, os\n", - "os.chdir('scripts')\n", - "from CommunityAnalytics import *\n", - "import pandas as pd " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "#View sources and destinations for Chicago Health Facilities\n", - "sources=pd.read_csv('data/ORIG/tracts2010.csv')\n", - "dest=pd.read_csv('data/DEST/health_chicago.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
geoid10lonlatPop2014Pov14community
017031842400-87.63004041.742475515776944
117031840300-87.68188241.8320945881102159
217031841100-87.63509841.8510063363274234
317031841200-87.68334241.8555623710181931
417031838200-87.67507941.870416329636128
\n", - "
" - ], - "text/plain": [ - " geoid10 lon lat Pop2014 Pov14 community\n", - "0 17031842400 -87.630040 41.742475 5157 769 44\n", - "1 17031840300 -87.681882 41.832094 5881 1021 59\n", - "2 17031841100 -87.635098 41.851006 3363 2742 34\n", - "3 17031841200 -87.683342 41.855562 3710 1819 31\n", - "4 17031838200 -87.675079 41.870416 3296 361 28" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sources.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDFacilitylatlonTypetargetcategorycommunity
01American Indian Health Service of Chicago, Inc.41.956676-87.6518795127000Other Health Providers3
12Hamdard Center for Health and Human Services41.997852-87.6695355190000Other Health Providers77
23Infant Welfare Society of Chicago41.924904-87.7172705137000Other Health Providers22
34Mercy Family - Henry Booth House Family Health...41.841694-87.6247905159000Other Health Providers35
46Cook County - Dr. Jorge Prieto Health Center41.847143-87.7249755166000Other Health Providers30
\n", - "
" - ], - "text/plain": [ - " ID Facility lat \\\n", - "0 1 American Indian Health Service of Chicago, Inc. 41.956676 \n", - "1 2 Hamdard Center for Health and Human Services 41.997852 \n", - "2 3 Infant Welfare Society of Chicago 41.924904 \n", - "3 4 Mercy Family - Henry Booth House Family Health... 41.841694 \n", - "4 6 Cook County - Dr. Jorge Prieto Health Center 41.847143 \n", - "\n", - " lon Type target category community \n", - "0 -87.651879 5 127000 Other Health Providers 3 \n", - "1 -87.669535 5 190000 Other Health Providers 77 \n", - "2 -87.717270 5 137000 Other Health Providers 22 \n", - "3 -87.624790 5 159000 Other Health Providers 35 \n", - "4 -87.724975 5 166000 Other Health Providers 30 " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dest.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The variables in your data set are:\n", - "> geoid10\n", - "> lon\n", - "> lat\n", - "> Pop2014\n", - "> Pov14\n", - "> community\n", - "If you have no population variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", - "The variables in your data set are:\n", - "> ID\n", - "> Facility\n", - "> lat\n", - "> lon\n", - "> Type\n", - "> target\n", - "> category\n", - "> community\n", - "If you have no target variable, write \"skip\" (no quotations)\n", - "If you have no lower areal unit variable, write \"skip\" (no quotations)\n", - "If you have no category variable, write \"skip\" (no quotations)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Loaded sp matrix from file: data/matrices/walk_asym_health_tracts.csv\n", - "INFO:ScoreModel:Finished loading sp_matrix in 0.14 seconds\n", - "INFO:ScoreModel:Processing... This could take a while\n", - "INFO:ScoreModel:Finished processing ModelData in 0.06 seconds\n" - ] - } - ], - "source": [ - "tt=TTMetrics(network_type='walk',\n", - " sp_matrix_filename='data/matrices/walk_asym_health_tracts.csv',\n", - " source_filename='data/ORIG/tracts2010.csv',\n", - " dest_filename='data/DEST/health_chicago.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "tt.calculate()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Count of Nearby Destinations" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "#Use .n_dests_in_range to estimate the number of facilities by category within a buffer (time defined in upper)\n", - "tt.n_dests_in_range.to_csv('data/other_metrics/nd_health_tracts.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
HospitalsAll Free Health ClinicsOther Health ProvidersFederally Qualified Health CentersSchool-Based Health Centers
1703101010010041
1703101020110041
1703101020210141
1703101030000151
1703101040010131
\n", - "
" - ], - "text/plain": [ - " Hospitals All Free Health Clinics Other Health Providers \\\n", - "17031010100 1 0 0 \n", - "17031010201 1 0 0 \n", - "17031010202 1 0 1 \n", - "17031010300 0 0 1 \n", - "17031010400 1 0 1 \n", - "\n", - " Federally Qualified Health Centers School-Based Health Centers \n", - "17031010100 4 1 \n", - "17031010201 4 1 \n", - "17031010202 4 1 \n", - "17031010300 5 1 \n", - "17031010400 3 1 " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tt.n_dests_in_range.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Results of count of nearby destinations by category**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Time to Closest Destination" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "#Use .near_nbr to create the time to the nearest neighbor within a buffer (time defined in upper)\n", - "tt.near_nbr.to_csv('data/other_metrics/nn_health_tracts.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
HospitalsFederally Qualified Health CentersSchool-Based Health CentersAll Free Health ClinicsOther Health Providers
170310101001195200172231402008
170310102011010469179123771907
170310102021401396145327051672
170310103001802531137731401746
17031010400140792197928821317
\n", - "
" - ], - "text/plain": [ - " Hospitals Federally Qualified Health Centers \\\n", - "17031010100 1195 200 \n", - "17031010201 1010 469 \n", - "17031010202 1401 396 \n", - "17031010300 1802 531 \n", - "17031010400 1407 921 \n", - "\n", - " School-Based Health Centers All Free Health Clinics \\\n", - "17031010100 1722 3140 \n", - "17031010201 1791 2377 \n", - "17031010202 1453 2705 \n", - "17031010300 1377 3140 \n", - "17031010400 979 2882 \n", - "\n", - " Other Health Providers \n", - "17031010100 2008 \n", - "17031010201 1907 \n", - "17031010202 1672 \n", - "17031010300 1746 \n", - "17031010400 1317 " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tt.near_nbr.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Results of time to nearest destination by category**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Empirical Cumulative Distribution Function Plots**" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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2mszqVChAqtWreLZZ5/hqaemuI9Rr159+vcfQOXKlfnnP68F4N13/8PevXuZOXMWmzdvZtSoEYWC+saNG4t1fVw2b97C9OkzOHz4MJdf3pcBAwaSkHC8J+Wrr77is88+Y86cN6hUqRIHDhwAYObMmXz44RISExMLpLlVpadBXSkVc5YtW+puNV588cUsW7a0WEHLX/d7jx4XER8fD8DKlSv5/PPPmDNnDsYcIycnh8zMXaxcuZL09N/4+OOPATh06CDbtm0rFNQDpYf99ttVbNq0yf3coUOHyMrK4tChQ4wb9wDbtm1DRMjLy3NUn65duxIXF0fjxo2Dug5/586dSUxMJDExkVq1avHnn39y8snHu+u//XYVffv2da9/X716dQDOOqsJ9913L127dqVr125BK4/SoK6UijEHDhxg9erVpKdvREQ4diwfESlycJcTBZOzGCZPnkLDhg0LrA1ujGHMmLF07NipxOcxxjBnzutUrFixwPYJE57g/PPbMGXKVDIydjJ0qLNEMAkJx9ct95Xvo3HjM91fQorDcz30uLg48vOdfcl45pnn+P77tXz++ee8+uoM3n57YcSOUYg2OqVNKRVTPv74Iy699FKWLl3GkiVLWbZsBfXq1ef7778P6nk6dOjIvHlvuoPkr79aI/I7duzIggUL3HnUt27dQnZ2VrGO3b59B+bNO564asOGXwGr1V+njtUSXrx4sc/XVq5cmcOHD/t8zp+2bduSm5vDO+8sdG/77bffSn3N2rfvwHvvvUd2djZgfeE6duwYu3fvok2btowYMZKDBw8V+/oo/zSoK6VCKrd2bliPt2zZUrp27V5gW/fu3Vm2bGlQy3HjjcPIy8tj4MD+XHnlQF544XkALr/8Cs444wwGD76S/v2v4NFHHyEvr3BO9UDuuWcMaWnrGTiwP1dccTkLFiwA4Npr/8Wzz07jyisH+szTDtClSxc+/fQTBg0a6DgoiwhPPfU03377Lb17X0q/fpfz7LPPlDrNbadOnejSpQtXXz2YQYMGMmfObPLz87n//vsYMKAfV101iKuuuoqqVauV6jzqOE29GiHKU2pO0PrGslhKveqUpiKNbZp6VSmllFJh5yioi0glEWka6sIopZRSquSKDOoi0hv4AVhmP24hIr5HaCillFKqzDhpqY8H2gL7AYwxPwCNQlgmpZRSSpWAk6Cea4w54LUtukbXKaWUUuWAk9n+60VkMBAvIk2A4cA3oS2WUkoppYrLSVC/A7gfOAq8BSwHHglloZRSsaNHSjf2JQRvadLaubX5eP0nAffZvXs3TzzxOJs2bcKYY3TufAGjRo0mISGBDRt+Zc+eP+jcuTMAL730YoG10kvLV6pT7zSrxZGa2ou5c9+kQoV4li5dysCBgwD8po71VZ61a9dQpUpV4uKEsWPvo3nz5iUqi6cXXnieVq1a0759+wLbnZZLhUaR3e/GmCxjzP3GmDbGmPPtn4+Eo3BKqegXzIDu5HjGGO68cxRdu3Zl8eL3effdxWRlZfHcc88CVkrRr7/+Mmjl8bcITLAdPHiQt9+eX6LXjhw5mvnz32b48BE89ljhNpnTNeQ93XrrbYUCekmU5NzKvyJb6iLyPoXvoR8A1gAva4BXSkWS7777jsTEivTt+w8A4uPjueuuu7nsslRuvHEYL774AkeOHGXduh+4/vrrAdi06XeGDr2hUArRDz/8gLfeepPc3DzOPfcc7r33fuLj4+nYsT39+vXn22+/5d577yUl5RzH5Zs9exYrVqwgNzeHrl27udPCjho1kt27d3H06FEGD76afv36F3jdtGnT2LFjB4MGDaR9+/Z07tyZrKxs7rrrTn7/fSPNmiXz2GOPIyJ+z92qVWu2b98OwNChN9C0aVPWrVvHJZdcQo8ePRg//kH2799PzZo1GT/+YapUqcLAgQP48MMlxMXFkZ2dxeWX/4NFi97l0UcfcfdIfP3110yePImkpCRatGjpPl92dpY7PW1eXh433XSL/WXrPf773/+SnZ1Ffv4xJkyYyJgx93D48GHy8/O4774HaNWqleNrqo5z0v2+CTgJq+sdYBBwEDgLmA5cE5qiKaVU8f3+e+E0olWqVOGUU04hIyODW265lbS09Ywdex9gdb/7SiG6fft2VqxYzsyZs0lISODxxx9jyZIl9O7dm+zsbM4991zuvPMuwFpxzNPUqVOYMWN6obKtXPkN27Zt44035mKMYeTI4axdu5bWrVszfvxDVK9enSNHjjBkyGC6d+9BjRo13K8dMWIEv/++0Z3Zbc2a1WzY8CsLFy7ipJNO4rrrruWHH9bRsqX/YPjFF59z5plnuh/n5ubiWqFzxIg7uOyyPvTp04d33/0PkyZN5Omnp9K0aVPWrl1DmzZt+eKLL+jQoWOB5CtHjx7lkUce4uWXp3P66aczZsw97udmzJjhTk978ODfDBlyNe3btwOstfLffnsh1atXZ86c2XTs2JGhQ28kPz+fI0e0rVhSToJ6R2NMG4/H74vIamNMGxFZH6qCKaVUuPhKIfrdd9+SlvYLQ4ZYrfajR49Qq1YtwGr9d+/ew+/xRo4cXeieOljpWleuXMmVV1r3xbOzs9i2bSutW7fmrbfe5JNPrLECu3fvZtu2bQWCui8pKee4U502bdqUjIwMn0Hd9SWjZs2aPPjgePf2iy662P3zTz/9xOTJVm72Sy+9jGnTpgJW6trly5fTpk1bli9f5r6n77Jly2bq1atPgwYNAEhNvZRFixa66+tKTwu409MCtG/f3p2KNSXlHB566EHy8vLo2rUrTZueHbDeyj8nQb2KiJxujNkGICKnA1Xs53L8v0wppcLvjDMaF0ojeujQIXbt2sVpp53mzqbmyVcKUWMMvXv3ZvjwET73d+VVLw5jDNdffz39+w8osH3NmtV8++0qZs+eQ6VKlRg69AZyco4WebzExAT3z/HxcX7v73t/yXApmErWty5dLuTZZ5/lwIED/PLLL7Rp07YY4wiOp6f19PPP/ytw7tatWzNjxmt89dWXjBs3jiFDrqF3794Oz6E8OZmnfifwlYh8KiKfAV8Cd4nICcDsUBZOKaWKq127dhw5coT3338fsAayTZnyFL1796FSpUpUrnwChw8Xneqzbdt2fPzxx/z5pzUw78CBA2RkZJSqbB07duS9994lK8s6/549u/nzz30cPHiIatWqUalSJTZv3sz//vdTodc6LXdJnXdec5YvXwbA0qVLaNmypX3eyqSkpPDkkxPp3PmCQl9mGjZsRGZmhvtevWc2PH/pab1lZGRQu3ZtrriiH5dffrnf/VTRimypG2OW2PPTXf0hGzwGx00NWcmUUjGhdm7toE9pC0REmDLlaZ544jGmT38FY47RqdP/cccdwwFo06YNM2e+xqBBA90D5Xxp3Lgxt912G7fccgvGHKNChQqMHXsf9erVK3HZO3ToyObNm7n2WmsoUqVKlXnsscfp1KkTCxcu4Ior/kGDBg0599zzCr22Ro0atGjRgv79r6BTp/9zT8kLljFjxjJ+/DjmzJntHijnctFFF3PPPXcxffqrhV5XsWJFHnhgHMOH305SUhItW7YiK8vK537jjcOYPHkSAwf259ixY9SvX9/nVLc1a9YwZ84sKlSoQOXKlXnkkUeDWrfyxFHqVRHpCDTE40uAMWZO6Irln6ZejQ1a39ilqVdjn9bXv7JOvepkStvrQGOspC6uGykGKDKoi8glwDQgHphhjJng9fzpWF34Nex9xhpjljgpuFJKKVVWktJ/Q3Jzy7oYhTgZKHc+kGycNOk9iEg88DzQE9gBrBaRxcaYNI/dHgDeNsa8KCLJwBKsHgGllFIqIiWl/wZAtq/WeFrZTgpzEtR/Bk4BMot57LbARmPMJgARmQf0BTyDugGq2T9XB0o3CkUppZSkg8JAAAAgAElEQVQKsrijR6m0Md392CQkcKTJWWVYIv+cBPUTgTQR+Q5r/XcAjDF9inhdfWC7x+MdQDuvfcYDK0TkDuAEwOfETxEZBgwDqFOnDpmZOx0UO7rk5ubGZL380frGrtq1a2OMFFqQJZYZY7S+MSLu6FHw6pg+lpjAgTObFNzRT/1PPfU0++mSXp9j7Nmzu4SvdRbUx5f46EW7CphljHlKRDoAr4vIOcaYY547GWNeAV4Ba6BcLA44Kk8DqUDrG8t0oFzsi/b6Brof7qsVXpz6brRb9KUZKFeavxVOprR9XsJj7wRO83h8qr3N0w3AJfZ5VopIElbPwJ4SnlMppZQqwDuIm4QE3/fDY4CT0e/tgWeBZkAi1ij1w8aYagFfCKuBJiLSCCuYXwkM9tpnG9AdmCUizYAk4I9i1UApFdFSenQjYV/w5qnn1q7N+o8Dp15t3bolZ3p0lz799NPUq+es9eMrdWpJLV78nnud+eKmeDXGMGPGdN5//31E4MQTT2LMmLGcdVbJ7uV6lmXBgrdJSqpE79692bx5M2PHjkEEnnzyKR544H5mz3Y+Y9lfvXxtd6WRrVmzZrHLP3ToDYwaNZqUlBRefXUGN9wwFICMjJ0MH34HCxcucu/rL4i///77zJ49ExEhPj6e1NRLS5RyNyNjJz/++CO9eqUW+7Wh5qT7/TmsgLwAayT8P7GSuQRkjMkTkdux8q/HA68ZY9aLyMPAGmPMYqzV6qaLyCisQXPXFXeUvVIqsgUzoDs9XsWKFd2JT0ItVKlD58+fx48//sj8+W9TqVIlVq78hpEjR/DOO+9QqVLlUh17wICB7p8//fQTevTowY03DgMoVkAvK55B3cUzkPtqiX/11Ve8+eYbvPDCS9SpU4ecnBw++OD9Ep0/IyODpUuXFCuo5+XlFUiEEyqOzmCM2Sgi8caYfGCmiKwD7nXwuiVY09Q8t43z+DkN6FS8IiulVPHl5+fzzDPTWLNmDbm5OQwcOIj+/QdgjGHixCdYtWoVJ598CgkJx9dTT0tL46mnJpOdnUWNGjV46KFHOOmkkwqlLa1fvz6zZs0kNzeX6tVr8PjjT1C7tu+V77Zv384999zFW29ZudG3bt3K2LH3uB+7zJo1kxkzXnOvkd6hQ0datWrJkiVL6NevPx07tuebb1YB8NFHH/Hll1/w8MOP8PnnnzFjxvSAZXG1ohs1OoM335xLXFwc3333LdOnv1rguP7SxM6c+RpLlnxIrVq1OPnkUwplxXPCX1rbxx57lPXr13P06BF69OjpPqfLtGlTOXrkCFf17cOZp9Zn5MBBmOxs/v3SS3y/ZTN16tTh6aenkeR1vtdee5VRo0ZTp04dwFq//4or+rnfkwkTHuevv/4iKSmJf//7QRo1asS4cf/mhBNOYP36n/nzzz8ZMWIUPXv25JlnprF582YGDRpI7969ueqqwe7P1sGDf9Oz50UkJ6ewZs1qXnjheapWrcaWLZuZN28+99xzD7t37+bYsXxuvHEYF198SbGvXSBOgnqWiCQCP4jIJKypbU7WjFdKqTJx9OhRBg2yWqP169djypSpvPvuf6hSpQpz575JTk4O1113LR06dODXX39ly5atvPPOf9i3bx/9+l1B377/IDc3l4kTJ/D001OpVasWy5cv4/nnn3Uvn+qZtnTv3r3MmfMGIsKiRYuYNWumOy2rt9NOO40qVaqwYcOvNG16NosXv0efPn0L7HPo0CGys7M59dRTC2xPTk5h06ZNAevesmUrx2Xp3Lkz/fsP8Nl97i9NbKVKlfjooxXMm/c2+fn5DB58pd+g/sYbr/Phhx+6H//xhzVcatOmTX7T2t5++x1Ur16d/Px8brppGL/99htnnXUWcdlZVNy8ibE9e/L2W2/y1nuLAasrfOvu3Tw+5Wnub3o299xzN//978dceullBcriyjnvy6OPPsx99z1AgwYN+N//fuKJJx7jlVdmANZ7+8orM9i5cyejRo2gZ8+eDB8+gjlzZruXvH3nnYXuz9aPP/7AQw+N54orrgDgl19+YeHCd6hf/1Q+/vhjTjrpJJ591nrdwYMH/b+RJeQkqF+DFcRvB0ZhDX7rF/SSKKVUkPjqfl+5ciXp6b+5M7gdOnSQbdu28f3333PJJZcQHx9PnTp1aNvWyjS9desWfv99I7fccjMAx47lc+KJJ7qP55m2dM+ePfz73/ezd+9ecnNzqV8/8P37yy+/gvfee48772zCihXLef31uUGpN1hpW8eMudtxWfzxlyY2KyuLLl0udPcgXHBBF7/HGDLkmkL31IGAaW1XrFjOokXvkJ+fzx9/7GXTpt85T6zXH210BtnJKZi4gu3KevXqu9O1NmvWrFiJd7Kysvjxxx+555673dtyc49PR+vatStxcXE0btyYfX5u/Xh+to4cOWJfq20kJCRwzjnnUL++9eWsSZMzmTLlKaZNe5rOnbvQqlXhNLml5WT0+1b7xyPAQwAi0gnYGPTSKKVUiBhjGDNmLB07Frzj99VXX/nZ30rjOmfO6z6f90wd+tRTT3LNNddy4YUXsmbNal566aWAZenevQcvv/wSbdq0pVmz5EJ506tUqUKlSpXYsWNHgdZ6WloaHTp0AKzENS6eaVonTpzAkCHXOC6LP/7SxM6d+0aJjud9bF9pbXfu3MHrr8/hjTfepFq1ajw0cjhm82Zo3JhjAcYRFExBG8/Ro4XT1jZu3JhffkmjbduCy6UcO3aMqlWr+h2DkZBwfCqbvyFfnp8tz7Xf16xZXeBz0qBBQ956ax5fffUlzz//HG3btuWmm272W6+S8NuNLiLxInKViNwlIufY2y4TkW+wBs8ppVTU6NixIwsWLCDXHky1desWsrOzaNWqFStWLLdbhn+wevVqABo2bMj+/X/x448/AlZ3+++/+27LHDp0yH2v9v33FxdZlooVK9KhQ0cef/yxQl3vLv/857VMmjSBI0espJirVq1i06bf6dHDGpVfu3ZtNm3axLFjx/jkk+OzAQ4dOlissvjjL01sq1at+eKLzzly5AiHDx/miy++KPax/aW1zU1Lo7IIJ23byuGV3/DlDz+QW79+oXnjFSpUcL+PTv3rXzcwderT7N27F7Dez0WLFlGlShXq1avPRx+tAKwAvWHDhoDH8k6D6/3ZyszMJDu7cJrcPXv2kJSUxKWXXsa1117Lr7/+Wqw6OBGopf4qVlf7d8AzIpKBNfp9rDHm3aCXRCkVk3Jr1w76lLaSuPzyK8jIyGDw4CsxxlCzZk2mTJlKt27dWb36O/r1u5xTTqnLeec1ByAhIYEnn5zMxIkTOXToEPn5eVx99RAaNz6z0LGHDh3GPffcRbVq1WjTpi07dxbd/ZuaeimffvqJu+Xt7aqrBnPw4EEGDhxAXl4eubm5LFz4DhUrVgTgjjtGMGLEHdSsWZPk5GSysrIBuOmmW4pdFl/8pYlt1qwZPXr0ZNCgAdSqVYuUlOLP9/ZOa5uQl8e4a6+jeXIyZzVvwSX338cpp5xC89atfb6+X79+DBo0gLPPbsbtt9/u6JydO3fmzz/3cfPNwzDGICL07fsPAB5//HEef/wxpk+fTl5eHhdffDFNmzb1e6wmTZoQHx/HwIED6NOnD4MHX+3+bB05coSqVasV6hEAa2GaqVOfRiSOChUqcN999zsqe3H4Tb0qIj8D5xljjtmLwuwCGhtjgjs/pZg09Wps0PrGLl1Rzpk5c2Zz8OBBbrut6KCUlZXF6NGjSElJceeFL0vBWFHOewpapK6lDrGTejXHtVyrMeaIiGwq64CulFKxYPTokezYsYOXX57uaP/KlSvz0ksvh7hUoeFvSdZYXtWtLAUK6meLyE/2zwI0th8LYIwx54W8dEopFYOmTJla1kUIi4ApSlVIBArqzcJWCqWUUjEhmrrVY5HfoO4xlU0ppZQKyBXMtVu9bIV+IVqllFIxpzxlPosmGtSVUko5lpT+G3knnwLovfJIpEFdKRVSPXp087u8ZknUrl2bj4tIvTpjxnSWLl1CfHw8InE88MADnHuu77G9nilJS8tfatHFi9/j6aefpk6dOuTl5dKo0Rk88sijBVYbC6ZQpUN1DXw7lpTEkSZnFSsdqj/lIR1qODnJp94JGA80sPd3jX4/I7RFU0rFgmAGdCfH+/HHH/niiy946635JCYm8tdffxV79bFQuPjii9xfHO69dywrVix3L34SqXx1sR9pchbk5BTa11c61KKUl3So4eSkNq9iJXJZC+SHtjhKKVU6e/f+Qc2aNdyLhXi2QNev/5lJkyaRnZ1NYmKCe574H3/8wW233cL27Tvo1q0bI0eOAmDp0qW89toMjDF07tyZESN8b7/lltscly8vL4/s7GyqVasG4DdV6po1a3jyyUkAiMCrr87khBNO8JsOdcaM6bz//uJSp0OdP/M1cnPzOO/MxowbNozc5JRC6VC9g/e0aVPdmfEaN27M7bffzrFjx3j44Yf48ccfjqdDTSqYELU06VDT0tLYt2+vo3Sonql2yyIdajg5CeoHjDFLQ14SpZQKgg4dOvLKK6/Qt29v2rVrz0UXXcz5559Pbm4uY8bcw8SJk0hJOYdDhw65l1zdsGGDu2X/j3/05corryIuLo5nnpnK3LlvUa1aNW699WY+/fQTUlLOKbT9888/o2fPiwKWa/nyFaxb9wN79/5BgwYN3NnN/KVKff312dx77720aNGSrKwsEhMTA6ZDXb58WanToX68aBFzH3mU/GbJPP74Yyz6bSO9mzYrlA71ggu6FFgedsSIkcyfP8+dFCUjYyfbtm3jiScmMG7cgyFJhzpz5iw2b97sKB2qZ6pdCH861HByEtQ/FZEngUWAO/WNMeb7kJVKKaVKqHLlyrz55lusW/c9q1evZuzYexg+fATNmiVz4oknkZJyDmBlQnNp27YdVatWBeCMM84gMzOD/fsP0Lr1+e6UoL16pbJ27VpACm1ft25dkUHd1f1ujOGJJx5n9uxZXH/9DX5TpTZv3oKnnppMr16pdO/eg5NPPjlgOtSuXbuVKB3qpRf1oNJvv/LJypWs37yJ/uPHA4HToW7evLnINd8jKR0qHE+1WxbpUMPJSVB3rUrvue6sAboFvzhKKVV68fHxnH9+G84/vw1nntmEDz5Y7LdFCN6pO+PIzy/dncb58+exaJE1SMzVAnQRES64oAvz5r3F9dff4DdV6vXX30Dnzhfw1Vdfct111/LCCy8GJR1qhT/+oJK9PrlL9llnk7NpM5f94/Ii06GOG/fvAqle/YmkdKieyiIdajj5Tb3qYozp6uOfBnSlVETasmULW7ceXzvrt982ULduXRo2bMjevX+wfv3PABw+fJi8vDy/xznnnHNYu3Ytf/31F/n5+SxbtozWrc/3ub1ly4Ktu0GDrmT+/LeZP/9t9/1iTz/8sM6dJ91fqtTt27fTpEkT/vWv60lJSWHLls0B06F+9tmnPtOhJqX/RqW09VRKW08Fu6s9OznF/c9UsIKvv3Sohw4dJimpElWqVGHfvn18/bXv/PORng7VlWrXWzjSoYaT35a6iAwxxrwhIqN9PW+MmRK6YimlYkXt2rWDPqUtkKysLCZOnMDBgwepUCGe0047jQceGEdCQgITJ05i4sQJHDlylKSkirz00it+j3PSSScxfPgIhg0b6h4Q17VrV4BC27t08d/d7eK6p27MMerUOZmHH34Y8J8qde7cN1izZjVxcXGccUZjOnX6PxITE/2mQ73ooot9pkOV3Fz3fPK8L74gr3Jln+XzTodaoUIFxo69j/POO4+zzz6byy/vyymnnEKLFi18vj6S06F6ptr1Fo50qOEUKPXqTcaYl0XkQV/PG2MeCmnJ/NDUq7FB6xu7NPVq+PnLhAahWX+9rOsbbjGRetUY87L9f5kEb6WUUoHpeuvKm5PFZ04CbgQaeu5vjLk+dMVSSilVFM+udaXA2ej394AvgY/RxWeUUqrM+FrhTcUOf7fDi8NJUK9sjBlT6jMppcoFERAx7oFPqnS885Nryzw2GeP6nSndcZwE9Q9EJNUYs6R0p1JKlQci8eTmHiEuLr6sixJGx8jP9z89rjgS9uxGPObJ51Q5gdw6Jx/fIUjnKZ3g1Tc6OK9vtWrWIkYluT7WF+LS/d4EmtJ2EGuRGQHuE5GjQC7HE7pUK9WZlVIxSUQ4cOAAdetWKXrnGLFnz+4Sz25ITu1FYubx1dZy6tYjbUnBlbkj7etRaeobjYpT3969ewOwbt2PoSySX4FGv1cNZ0GUUqo88BXEfyijAKBij5PR7/81xnQvaptSSinfPAO5BnEVSoG635OAE4ATRaQmVrc7QDWg/PS7KKVUKSSn9gLQQK7CIlBL/SZgJFAP8MzI9jfwnM9XKKWUAo63zn3dI1cqVALdU58GTBORO4wxz4axTEopFbU8g7m2zlW4Bep+72aM+QTYKSJXeD9vjFlU1MFF5BJgGtbgzRnGmAk+9hkIjMcaaf+jMWaw8+IrpVTZS0pPp0VqKqD3zFXZCtT93gX4BOjt4zkDBAzqYk22ex7oCewAVovIYmNMmsc+TYB7gU7GmL9EpHCOQqWUimDJqb34euwYDeQqIgTqfn/Q/v9fJTx2W2CjMWYTgIjMA/oCaR773Ag8b4z5yz7XnhKeSymlwsLXlLQjTZqUYYmUOi5Q9/s+4Fvga+Ab4FtjTOEM8/7VB7Z7PN4BtPPa5yz7XF9jddGPN8YsK8Y5lFIqLALeK8/cWTaFUspLoO73RkB7oCNWF3lrEdmMFeS/Nsa8HaTzNwEuBE4FvhCRc40x+z13EpFhwDCAOnXqkBmDv0C5ubkxWS9/tL6xLZbqm5SejuTm8vXYMcdb5F51i6X6OqH1LSw9PZ3c3FwmT54MUGbXJ1D3+9/ACvsfInIC8C+saW63A0UF9Z3AaR6PT7W3edqB1QOQC2wWkd+wgvxqr7K8ArwCkJycYmJxecLMzJ3latlFrW9si4X6FmdKWizUtzi0vselpvYiMzODunXrsWTJUlq2bA5E4DKxIlIPq5XeEWhjb14LPACsdHDs1UATEWmEFcyvBLxHtr8LXAXMFJETsbrjNxWnAkopVVre98lBR7GrwDyDeVkFcF8Cdb/vwFp05mlgrDEmpzgHNsbkicjtwHKs++WvGWPWi8jDwBpjzGL7uYtEJA0rV/vdxph9JamIUkoVhy7dqkoiUoO5S6Cg3gnoAFwOjBaRLVgt9JVYQfloUQe307Uu8do2zuNnA4y2/ymlVFjo0q2quCI9mLsEuqfuCuBTAESkIdac9dlY98eTQl88pZQKDu+WuS7dqpxKT08Hyu4+eXEEzNImImdz/L56J6AGsAp4KfRFU0qp4EnMzNCWuXLE1Sp3mTZtGkui5EtgoIFye4EMrNb6F8AEY8zGcBVMKaWCJTm1Fzl165V1MVQUSLVvzXi2yqNp+l6glnpjY8yBsJVEKaWCTDOlKSc8W+auqWnRKtA9dQ3oSqmopl3uqii+WubRLOA9daWUikaeLXSlXLzvlUP0t8y9FRnURaSi9/Q1EalljPkzdMVSSqni0Xnnyp9omY4WDE5a6otE5B/2Uq6ISF3gA6B1SEumlFIO6bxz5Ut5CuYuToL6u8DbItIfay33xcBdIS2VUkoVQeedK3/KYzB3KTKoG2Omi0giVnBvCNxkjPkm1AVTSil/tGWufCnPwdwl0Dx1z6VbBTgd+AFoLyLtjTFTQl04pZSCwglXtGWuoPDAt/IczF0CtdSrej1e5Ge7UkqFlE5NU6BB3IlA89QfCmdBlFLKm05NU6Dd6sXhZErbR8AAY8x++3FNYJ4x5uJQF04pVX7pffPyyd9ccg3mzjgZ/X6SK6ADGGP+EpE6ISyTUkppl3s5o63x4HAS1PNF5HRjzDYAEWkAmNAWSylV3vgaDKdim/ea6xrMS89JUL8f+EpEPscaBd8ZGBbSUimlygVdBa580YFuoedknvoyEWkFtLc3jTTG7A1tsZRSschXa1wDeWwrT63x1NRe0ADYWnZlcJrQpSNwgcfjD0JQFqVUjNP75LGtvAxy81VPsOrKFqw+7TLiZPT7BKANMNfeNEJEOhpj7gtpyZRSMSU5tZfeJ49hsZbCFI4H78mTJ5OamureHuiLSkuah6t4PjlpqacCLYwxxwBEZDawDtCgrpRyTFvpsSM9Pb1AkIPoTWHqr9UNx4N3ZubOqPmy4rT7vQbgSrVaPURlUUrFIF1AJrakpvZi7NgxURPkfInl+/xOgvoTwDoR+RTrTsEFwNiQlkopFfU8g7m20KNLUa3XJk2ahLlEpRfLgdyTk9Hvb4nIZ1j31QHGGGN2hbRUSqmolZzai/13WvmgNJhHF6cLwGRm7gxjqUovFu/3+xMoS1srr0077P/riUg9Y8z3oSuWUiraeLbMs5OTNYtaFInV1dw86xWN9/tLIlBL/akAzxmgW5DLopSKQj672aOsJVeexUortrxMpytKoCxtXcNZEKVUdNF75tHPFdCjuRUbq70MJeVknnoScCvwf1gt9C+Bl4wxR0JcNqVUBNJgHt28B4xFQ0B3Mu1MWZyMfp8DHASetR8PBl4HBoSqUEqpyKTpUKNbtHS16xrxJeckqJ9jjEn2ePypiKSFqkBKqcjkCug6AC76RPqAMQ3iweMkqH8vIu2NMasARKQdsCa0xVJKRQrP7nYN6NEjWuZlR0vvQbQINKXtf1j30BOAb0Rkm/24AfBreIqnlCpL2t0enaIlUMbCQL1IE6ilflnYSqGUiki6Xnv0iJYBcNFSzmgVaEpbqTPCisglwDQgHphhjJngZ79+wEKgjTFGu/aVKmO6Xnv0iPQpXXq/PLycJnQpNhGJB54HemKtRrdaRBYbY9K89qsKjAC+DVVZlFLOaZd7ZIumIBkttwFiSaB76hWNMUdLcey2wEZjzCb7ePOAvoD3yPlHgInA3aU4l1IqCHSEe+SJliDub0U37V4PLzHG+H5C5HtjTCsRed0Yc02xDyzSH7jEGDPUfnwN0M4Yc7vHPq2A+40x/eykMXf56n4XkWHAMIA6deq0njVrVnGLE/Fyc3NJSEgo62KEjdY3MlVKSyM7ObnoHYsQLfUNllDUNz093X3cSMuK5iqXq4xARJYzWIrz/qZVSoO1kByE3yOX1NTUtcaY853sG6j7PVFEBgMdReQK7yeNMYtKWkAAEYkDpgDXFbWvMeYV4BWA5OQUU7du/dKcOiJlZu4kFuvlj9Y3sgR72lqk1zfYgl3fSB4VnpraizvvHM1dd91VblrixXl/U1ukQteyu+UQKKjfDFwN1AB6ez1ngKKC+k7gNI/Hp9rbXKoC5wCfiQjAKcBiEemjg+WUCg9d8jVyRNKo8KKWZU1OTo7IWwAq8Oj3r4CvRGSNMebVEhx7NdBERBphBfMrsZaYdR3/AHCi63Gg7nelVPC4AjmgwTyCZGZmlGmgLM5iNdGWT708cTL6/XURGQ5cYD/+HCuhS26gFxlj8kTkdmA51pS214wx60XkYWCNMWZxaQqulHLGM4iDBvJI4h1Iy7IcoKPUY4GToP4C1qpyL9iPrwFeBIYW9UJjzBJgide2cX72vdBBWZRSxaDT0yJLpIxk91WO8nBvvDxwEtTbGGOaezz+RET0L4RSEcS7Ne6i67VHjrJuDUfLWvCqdJwE9XwRaWyM+R1ARM4A8kNbLKWUEzrQLTqEejR7oIFtLhrIywcnQf1urHSrmwDBSujyr5CWSinllw50ix6hSnkaKd34KvIUGdSNMf8VkSZAU3vThlKuNKeUKgYd6BZ9QrUee6Sv867KnqO13+0g/lOIy6KU8qBd69EjPT2d1NRU9+NgBl29F66KI2QJXZRSJaej1qODK+BOmzYtJEEcNJCr4tGgrlSE8L5XrqPWI4+/gBusxVjKeoS8in5FBnUR+a8xpntR25RSJact88gXioCr88VVsAVKvZoEVAZOFJGaWCPfAaoB5SdTg1IhpulOI4u/6WGhGMEO2ipXwRWopX4TMBKoB6zleFD/G3guxOVSKqZpV3tkCmWg1Va5CodACV2mAdNE5A5jzLNhLJNSMU272iNTKBaI0ZHrKtyczFN/VkQ6Ag099zfGzAlhuZSKKUnp6bSwpzxpyzyyBHOBGB25rsqak4FyrwONgR84vjysATSoK+WH94Ixn06bpi3zCBGKwOuap65BXJU1J1PazgeSjTEm1IVRKhb46l4/ovmny1ywV2Pz/HIQzHnqSpWGk6D+M3AKkBnisigVExIzM7RVHkFCsbSq94C6YM1TV9EtNbkXDbY0YCtby6wMToL6iUCaiHwHuNd8N8b0CVmplIpCnsu6qsgQzNHs3oPedOS6AiuQZyban4ucemxptAVxTxYLPydBfXyoC6FULNAWemQJ5mh2nVOuXDyDOFiBfN0PkfO5cDL6/XMRaQA0McZ8LCKVgfjQF02p6JGc2ktb6BEiWKPZtWVefnkH7sn7J5Pawpq9EmlB3JuT0e83AsOAWlij4OsDLwG6TKxS6IpwZS1Yo9l1Olr5VVTrOzN7Z0QHck9Out9vA9oC3wIYY9JFpE5IS6VUhNMV4cqGryVcSxN8dXGY8sM7cHuK9NZ3cTgJ6keNMTki1o1/EamANU9dqXLFO5Dr/fPwCGbg1dZ4+eMK5rEUuANxEtQ/F5H7gEoi0hO4FXg/tMVSKjJoIA+/UATeUExrU5GtvAVzFydBfSxwA/A/rCQvS4AZoSyUUpFA12gPv1ClNw32MVXkKq/B3MVJUK8EvGaMmQ4gIvH2tqxQFkypsqSD38IrmOuvex8XgpukRUUOX/fJy2swd3ES1P8L9AAO2Y8rASuAjqEqlFJlxXMBGQ3ooRfKpVtBp6LFmkifIx4JnAT1JGOMK6BjjDlkz1VXKuboAjKhFez75TrwLTb5G6muQbxoToL6YRFpZYz5HkBEWgPZoS2WUuGnC743PeMAABKPSURBVMiERrCnjek0tNjkvdyqBu+ScRLURwALRCQDEKzkLoNCWiqlwkzvoQdfOBKpqOimgTz4AgZ1EYkDEoGzgab25g3GmNxQF0ypcNJu99LzbEFPnjwZKH3w1XvksUMHtYVHwKBujDkmIs8bY1pipWBVKiZ4zj8HtNs9CDIzMwqkIg3GuuvavR49Aq3YBrEbwJNTzyYxM9H9OKduTpkmKnc0+l1E+gGLjDG6kpyKSr6CuLbMg8MzAAeL5xcEFZnK+0h0VzDPqZvDD+t+Kvhky7IpEzgL6jcBo4F8EcnGuq9ujDHVQloypYLAc4qaBvHgCMaIc19ruHsK5hcEVTKBWt6T99u3V6I4iHu3sAPZP/lPWqSeV2Cbz2AeAZykXq1a0oOLyCXANKxUrTOMMRO8nh8NDAXygD+A640xW0t6PqU86YpwwRGKLGjarR5Zinu/OzN7J0vSInNsg9NgXZygnJ2ZHZEB3BcnqVcFuBpoZIx5REROA+oaY74r4nXxwPNAT2AHsFpEFhtj0jx2Wwecb4zJEpFbgEnoyHpVCpo9LXiCdV9b749Hjlia/+0veEdqCzpcnHS/vwAcA7oBj2CtLPc80KaI17UFNhpjNgGIyDygL+AO6saYTz32XwUMcVxypbxoy7x0QrUwjAbzshPN972LanGX9+DtjxQ19k1EvjfGtBKRdfYoeETkR2NM8yJe1x+4xBgz1H58DdDOGHO7n/2fA3YZYx718dwwYBhAnTp1Ws+aNavomkWZ3NxcEhISyroYYRPs+ialpwNwpEmToB0zmCL9/U23r1+TIFy/9PR0Tj75ZHbv3h2U40WDsnx/05PSyRXfs4wTTAJNjgT/PQj+728SkisFtpkEw5EmR4J2jtIobn3T0tJITk4O2vlTU1PXGmPOd7Kvk5Z6rt2VbgBE5CSslnvQiMgQ4Hygi6/njTGvAK8AJCenmLp16wfz9BEhM3MnsVgvf4JR32jqao/E99f7HncwpqC5jvXqqzNo2rRZUMoZDcL1/vq79x3u+9vFra+TVnfakl+DUbSQKG59U1NTy6x3yklQfwb4D1BHRB4D+gMPOHjdTuA0j8en2tsKEJEewP1AF2PMUQfHVeWY5jcvnWANViuqqz4zs9CvuiqBaO4+hyKmfamQcDL6fa6IrAW6Y01n+4cx5hcHx14NNBGRRljB/EpgsOcOItISeBmrm35PcQuvygcN5KVX2vvbmjglfCJ16VTP1ravKV6+aDAPP79BXUSSgJuBM4H/AS8bY/KcHtgYkycitwPLsaa0vWaMWS8iDwNrjDGLgSeBKlhrywNsM8b0KXFtVEzSJVxLpqStcl9zyDWIh04ktcYDdZN7BuhomuJV3gRqqc8GcoEvgV5AM2BkcQ5ujFkCLPHaNs7j5x7FOZ4qfzRzWvGUpntdR6uHR7iCeHEWV3HRlnX0CxTUk40x5wKIyKtAwHnpSgVLNA2AixTFCcj+VnPTYB4a4W6J633s8i1QUHfPkbC70sNQHFXe6VxzZ0pyj1tb4uHlCuahDOK+WuMazMu3QEG9uYj8bf8sQCX7sa79rkJCc5oHVpKudV2aNbRcgXvy/smktkgt8Fw4utU1gCtvfoO6MSY+nAVR5Zdn0hUN6AUVNyjrKPXQCbQ+emb2zqAHcF0GVZWEk3nqSoWUjm63BGPUuaYsDY3UZKsXKdSj0rUVrkpLg7oqU+V9dHtpu8d9tcxV6fka3BaKVdu8W+MayFVpaVBXYZec2ov9d46mRWpque9yL03LOtUeg6At8+IJlCfcJdj3w7UrXYWLBnUVVq7BcNnJyeW2y927dV6a15ZmvfbyJFyrtGnwVmVNg7oKmwKj28vR2uCpqb24887RpKZao6NLuihMSV5bngRqgYe65e1aNlWDtyprGtRVSJXnhWQ854UnJyeXeJlWDeSBlcV8cO/grcumqkihQV0FhWfw9lReErAUNXLdX9YyXWe9+MKxQpsOYFPRSoO6KrXyvAqc01Xa0tPT3d3vnjSAOxPKe+K6KpuKJRrUVamUt1XgSro869ixYzR4l1Bp54gXldhEA7iKJRrUVYmUp1XggrGqW5MmTUJaxlhSkjniTlOGKhXrNKirEikvq8AVZy54oK54f/fUy6uSjFTXwK1U0TSoq2LxbKHHkkDpSP3NBddR6s4EWjPdCU0lqpRzGtSVI57BPFpb6P4CNwQOyJp/PDBfQdsza5nTAK4LtyhVehrUVZGicXR7sKaK6VKshTmZUuYka5lOG1Mq+DSoK5+icdGY0uYb96U8L8Xq7763dxD31cJ2rbAWiAZxpYJPg7ryKdoGwjlpUetCL775C94NtjfAnG6KfL2v4KwrrClVNjSoq0KiJR2qZ5COj48nPz+fli2b+91fA3hB3surane4UtFPg7oqtMRrJHa3F9VNXqfOyeW2m9yfolKMNtjSANPoeEtcg7hS0U+Duor4rvbzz29Ffn6++3F5vM/tJAe4N++g7Smnbg5pS37VIK5UjNGgXk55D4Qra4Fa4vH/3969x8hVlnEc//5YhCC3lktIKdhtsYAFLb0IBIFQRWirUlCEmgYQUazhKiEGUqONf4GuGipVwk0oghAEwgZUimKBRCmFstCWW69IYSnhUipeqsDjH+ed9uyws7uz3dmZOfv7JJM58847Z84z7+w+c95zzvu2tBSy2zzf3d26tpWXWl+qWLe7BF1KzD1x0jYbWpzUh5hGut68u7PV86OyNfveeD5pd3c2eOvfW3lp/yyR9+VabidoM+uNk/oQ0QjJPJ/E29ragK1nq0+fPo0JE8Y35clspeT9ob3tXMdD26I2psSULq+r5fzfZjY0OakPAfUePKZS13pn56tbzlZv5GTe6/Hs9FRPSbovg7GYmW0rJ/WCGozBY3o7Iz2vvDu9s/OVpkni+ePZfTmObWZWL07qBVKeyAdiz7y38dJHjNi34Y6B9+dM8bxSEs8ncB/PNrNm4KReEAPZxd7TcKv55ypNMzrYuhuLfPO+mytODtKXPW0ncTNrRk7qTWygutgrTSFaKs+P0tYISfzkPU/actY4VL7cy4nZzIYaJ/UmUT7qG/S/i708ibe0tHR5vpTI65HA+3Lt9qiXR33opDMncDMzJ/WG0l3iLqkmgVdzAhsM3BCrlebDzisl6vx8213kNtuXfJmZVaemSV3SVOAqoAW4PiKuKHt+R2ABMAl4Ezg9ItbVcpsaRXkC35iu2+6ocPyazlehh8lK+qp0Qlv+OHQnrzKBbV83ffgdUUrUvsTLzGzg1SypS2oB5gOfB9YDSyS1R8SzuWrnAG9HxMclzQSuBE6v1TYNpp72uuHDe97PPLKIKf1M3KVEXXEQlJxSAu/vsKNmZta4armnfjiwKiLWAEi6HZgB5JP6DGBuWv4dcLUkRUTvkzjXWXkCXdsK+Ty6bhSMDqAV6C6/liXwtnlt0M+ot+xp92EQlDwfhzYzKxbVKn9KOhWYGhHfTI/PAI6IiPNzdZanOuvT49Wpzhtl6zoXODc9PAh4oSYbXV97AW/0Wqs4HG+xOd5ic7yDa1RE7N2Xik1xolxEXAtcW+/tqCVJT0TE5Hpvx2BxvMXmeIvN8Tau7Wq47leA/XOP90tl3daRtD2wO9kJc2ZmZlalWib1JcBYSaMl7QDMBNrL6rQDZ6XlU4GHmuF4upmZWSOqWfd7RLwn6XzgAbJL2m6MiBWSfgQ8ERHtwA3ALZJWAW+RJf6hqtCHF7rheIvN8Rab421QNTtRzszMzAZXLbvfzczMbBA5qZuZmRWEk/ogkLS/pL9IelbSCkkXpfK5kl6R1JFu03OvuVzSKkkvSDqxflvfP5LWSVqW4noile0h6UFJK9P98FQuSfNSvM9Imljfra+OpINybdghaZOki4vWvpJulPR6Gl+iVFZ1m0o6K9VfKems7t6rEVSI9yeSnk8x3SNpWCpvlfTvXFtfk3vNpPS3sCp9JqpHPL2pEG/V32FJU1PZKkmXDXYcfVUh3jtysa6T1JHKm6d9I8K3Gt+AEcDEtLwr8CIwjmw0vUu7qT8OeBrYERgNrAZa6h1HlTGvA/YqK/sxcFlavgy4Mi1PB/4ACDgSWFzv7d+GuFuA14BRRWtf4FhgIrC8v20K7AGsSffD0/LwesdWRbwnANun5Stz8bbm65Wt5/H0GSh9JtPqHVsV8Vb1HU631cAYYIdUZ1y9Y+trvGXP/xT4QbO1r/fUB0FEdEbE0rT8D+A5YGQPL5kB3B4RmyNiLbCKbNjdZjcDuDkt3wycnCtfEJnHgGGSRtRjAwfA54DVEdH94PuZpmzfiHiE7CqVvGrb9ETgwYh4KyLeBh4EptZ+66vXXbwRsTAi3ksPHyMbf6OiFPNuEfFYZBlgAVs/o4ZSoX0rqfQd3jI8eET8FygND95weoo37W2fBvy2p3U0Yvs6qQ8ySa3ABGBxKjo/deXdWOq6JEv4L+detp6efwQ0ogAWSnpS2TC/APtERGdafg3YJy0XId6SmXT9R1DU9i2ptk2LFPs3yPbMSkZLekrSw5KOSWUjyWIsacZ4q/kOF6V9jwE2RMTKXFlTtK+T+iCStAtwF3BxRGwCfgUcABwGdJJ19xTF0RExEZgGnCfp2PyT6Vdtoa6nVDbI0knAnamoyO37IUVs00okzQHeA25NRZ3AxyJiAnAJcJuk3eq1fQNoSH2Hc75G1x/nTdO+TuqDRNJHyBL6rRFxN0BEbIiI9yPiA+A6tnbB9mWI3YYWEa+k+9eBe8hi21DqVk/3r6fqTR9vMg1YGhEboNjtm1NtmzZ97JK+DnwRmJV+yJC6od9My0+SHVc+kCy2fBd9U8Xbj+9wEdp3e+DLwB2lsmZqXyf1QZCOz9wAPBcRP8uV548bnwKUzsJsB2ZK2lHSaGAs2ckYTUHSzpJ2LS2TnVy0nK7DAp8F3JuW24Ez0xnTRwLv5Lp0m0mXX/dFbd8y1bbpA8AJkoanrtwTUllTkDQV+B5wUkT8K1e+t6SWtDyGrE3XpJg3SToy/R84k62fUcPrx3e4L8ODN7rjgecjzR4KTda+9TxLb6jcgKPJuiWfATrSbTpwC7AslbcDI3KvmUP2a/AFGvRs2R7iHUN21uvTwApgTirfE/gzsBL4E7BHKhcwP8W7DJhc7xj6EfPOZJMR7Z4rK1T7kv1g6QT+R3bs8Jz+tCnZsehV6XZ2veOqMt5VZMeMS3/H16S6X0nf9Q5gKfCl3HomkyXD1cDVpJE8G+1WId6qv8Ppf9uL6bk59Y6rmnhT+U3A7LK6TdO+HibWzMysINz9bmZmVhBO6mZmZgXhpG5mZlYQTupmZmYF4aRuZmZWEE7qZg1C0p65WaBeK5sd6681eL/JkuYN9HprKc2Wtbz3mmZDky9pM2tAkuYC70ZEW723pZGkuRPui4hD67wpZg3Je+pmTUDSu+n+uDShxL2S1ki6QtIsSY+nOZ0PSPX2lnSXpCXp9plu1nmcpPvS8tw0YceitN4Lu6nfIukmScvTe303lR8g6Y9p8p5HJR2cyvdRNuf40+l2VCq/JK1juaSLU1mrpOckXSdphaSFknZKz00qrQM4L7c9h6S4O5RNODJ2gD92s6bjpG7WfMYDs4FPAGcAB0bE4cD1wAWpzlXAzyPi02SjYV3fh/UeTDY16uHAD9N8BXmHASMj4tCI+CTw61R+LXBBREwCLgV+mcrnAQ9HxHiyeatXSJoEnA0cQTYH9bckTUj1xwLzI+IQYGPabtL7XJDWkzcbuCoiDiMb1Ws9ZkPc9vXeADOr2pJIY+NLWg0sTOXLgClp+XhgXDYcNQC7SdolIt7tYb33R8RmYLOk18mmUc0nyjXAGEm/AO4nm1p3F+Ao4M7ce+2Y7j9LNhY2EfE+8I6ko4F7IuKfafvvJpvmsh1YGxEd6bVPAq2ShgHDIpv7GrJhS6el5b8BcyTtB9wdXafJNBuSnNTNms/m3PIHuccfsPVvejvgyIj4Tz/X+z5l/x8i4m1J48n25mcDpwEXAxvT3vK2Kn//nXqqHBG3SVoMfAH4vaRvR8RDA7AdZk3L3e9mxbSQrV3xSNrmpCtpL2C7iLgL+D4wMSI2AWslfTXVUUr8kE308p1U3iJpd+BR4GRJH1U2g98pqaxbEbER2Jj28AFm5bZnDNlMWfPIZsb61LbGaNbsnNTNiulCYHI6gexZsj3rbTUSWCSpA/gNcHkqnwWck05kWwHMSOUXAVMkLSPrTh8XEUvJZsF6HFgMXB8RT/XyvmcD89P7Kld+GrA8lR8KLNjG+Myani9pMzMzKwjvqZuZmRWEk7qZmVlBOKmbmZkVhJO6mZlZQTipm5mZFYSTupmZWUE4qZuZmRXE/wGCJm9eWJpXqQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Plot was saved to: data/figures/fig_0.png\n" - ] - } - ], - "source": [ - "tt.plot_nearest_providers(limit_categories=None,\n", - " n_bins=300,\n", - " resolution='block',\n", - " title=\"Time to Nearest Neighbor Health Provider - CDF by Area\")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfUAAAEWCAYAAAB/mA49AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xl4E9X6wPHv29JSkB1FAZFNRFpUFlkVEQWVKnBlVcTrhisqggu4Ie6CiOAucGXfBLmKyqZX0R+KCoioVBFkpwUEBIEWSNvz+2OSkKZZpm2Spun7eZ4+bSaTmXNm0rw5Z86cV4wxKKWUUqrkiyvuAiillFIqNDSoK6WUUjFCg7pSSikVIzSoK6WUUjFCg7pSSikVIzSoK6WUUjFCg3qEiMhjIjKpuMuhCkZE1ovIpTbX3Soinf08d6mI7Axp4SJIRKaIyHMBnh8pIjMiWSY7gv3fBTpnJVGw8xTtRORmEVlRhNcvFpGbQlmmkkaDeoiIyBGPn1wRyfJ4fIMx5gVjzMAIlKOeiBgRKVPI11/qfP1bXstXiMjNISlkiIjIchHxe0w9jsUir+UzRGSknX0YY1KMMcuLVtLw8xdUnfU/O8T7KvIXFGe5jjr/P3aJyFgRiQ9VGV0i9X8XiIj0F5HVzrpmOAPPxc7nRoqIQ0QOO3/+EJE3RKSmx+svdX6meH7GfByBckfkHBWWr/e8MaarMWZqcZUpGmhQDxFjTAXXD7Ad6OaxbGZxl6+AjgI3iki9cO+osF8+CqiNiLSPwH4iIkLHLBIucP6/XA70B273XiFa62q3XCIyFBgHvACcDpwFvAX08FhtrjGmIlANuBY4A1jjGdiBdM/PGGNMt1DUw4ag50hFFw3qEeL5rdKjBXmLiOwQkb9F5C4RaSUiP4vIQRF5w+v1t4rIb851l4pIXT+7+tr5+6DzG3Y7EYkTkSdEZJuI7BWRaSJSOUBxDwJTgKcC1MdveURkvLNe/4jIGhHp4HUc5jtby/8ANzvLN1xE/hSR/SLyvohUc66f5Fx3v/O4rBKR00XkeaAD8Iaznm/kK+RJo4HnA9TlGhH5ybn9b0XkfI/n3N2zIlJORKY66/ybiDzio8XazHkOD4nIXBFJ8trXYyKyz7ndGzyWV3ael7+c5+kJEYlzPneziHwjIq+KyH5gZIC6+hXoODufnyciu51l/1pEUnxs4xRgMVDLo9VYy/l0orMOh8W6bHGhnXIZY34H/g9o6tzHVhEZJiI/A0dFpIyINBGrZ+agc9vdneu2cZbZ3YIUkWudr83XmhORG53Hd7+IPG73+MjJ/9nbRGQ78IWN410ZeAYYZIxZYIw5aoxxGGM+NsY87OM4OIwx64F+wF/Ag3aOnw+nishnzvPwlet/U0TeFJFXvMq4UESGBNugj3Pk83w4n5siIu/4KUO+nkQJ0OMmfj5LROQq4DGgn/M9uM57WxLgc8+jHDeJyHbn/+TjvspQ0mhQL15tgEZY/8TjgMeBzkAK0FdEOgKISA+sN3BP4DSsf67ZfrZ5ifN3Fec3+pXAzc6fTkADoAIQKAiCFQR7iUhj7ydslGcV0Ayr5TELmOcV3HoA84EqwEzgPuBfQEegFvA38KZz3ZuAykAdoDpwF5BljHncud97nfW8N0Bd3gLOER/XTkWkOfAecKdz++8CC0WkrI/tPAXUwzqGXYABPtbpC1wF1AfOxzruLmcApwK1nfWa4HF8X3fWs4HzOPwbuMXjtW2AzVitPb9fUIIIdJzBCtaNgBrAj1jnJg9jzFGgK3lbjunOp7sDc7DO60KCv8cAEJFkrC9oaz0WXw9c7dyWAB8Dy5xluw+YKSKNjTHfY/UsXebx2v5Y7ztf+3kbuNFZ/+rAmR6rBDs+OJ9rAlxpo2rtgCTgvzbWdTPG5AAfYR2TwrgBeBbrvfYTJ8/jVOB6jy+Lp2J93uQ7Vt48z5GIJODnfNgoQ0H5/CwxxizB6v2Y63wPXuDjtTcT/HPvYqAxVk/ECBFpUshyRg9jjP6E+AfYCnT2WjYSmOH8ux5ggNoez+8H+nk8/gB4wPn3YuA2j+figEygro99u7ZdxmPZ/4B7PB43Bhye63g8dymw0/n3aKx/GoAVwM0FLY/z+b+xuvFcx+Frr+d/Ay73eFzTVT7gVuBb4Hwf210ODAxwHtzHArgH+M65fAYw0vn328CzXq/bAHT0PpdYQfVKj/UGuo6Vx7oDPB6PBt7xOK7ZwCkez78PPAnEAyeAZI/n7gSWO/++Gdge5D030rmNg14/Bjg72HH2sb0qztdWdj6eAjzn/R7x2v/nHo+Tsb58+SuvAf5xvjf+BJ4D4jyO460e63YAdruedy6b7XEOnwPec/5dESvI1/XxfzcCmOOxjVOcx6xzsOPDyfdSgwJ8DtwA7LZx3mb4WH4XsNHjeOd6nde+frY3xauOFYAcoI5HHbs4/74XWFTQc2TjfPgtA74/n5bj/D/Geq+vCFAm78+SGV7Pe27L7+eeRznO9Hj+B+A6u+c3Wn+0pV689nj8neXjcQXn33WB8c6uroPAAazWS22b+6kFbPN4vA3rjX16kNeNAq4UEe9vwQHLIyIPidU9fcj5fGWsb+wuO3xs778e2/sN60PgdGA6sBSYIyLpIjLa2VIoqEnA6SLifS2yLvCga9/O/dfBOmbeanmV3bseYH3YuWRy8hwC/G2slq7LNuc2TwUSyH+OPM+vr315e98YU8Xzx+t5v8dZROJF5CVn1/M/WIEV8p63YLzrniSBrz23MMZUNcY0NMY8YYzJ9XjOs761gB1ez3sen1lAT2fvSk/gR2OM57HMsx3XA+e52O/xfKD3Yb5yObuYXZcgHvOxv/1YXeGFGRdQG+v/yiXd69y+H+C1nnU84tyO6/08lZM9TAOw/r8C8XWOgp2PYGWwzcZnSSB2PvcC/b+WSBrUS4YdwJ1e/9TljDHf+ljXV9q9dKwPLJezsFqNe3yse3JDxuzHuizwrN3yOK95PYLVDV3VGVgOYQV9f2XcAXT12l6SMWaXsa4zPm2MSQbaA9dgdU37q6u/upwAnnbWxbMsO4DnvfZd3hjj6/JGBnm7a+vY3b9TVbGuSbuchXVu9mG1ILzP0S7PKhRwX774Pc5YXdY9sLpjK2O1ZCDvsQplWYLx3Ec6UMfVbezkPj7GmDSsD+yu+Ol6d8rA45yJSHmsLniXQMcnX7mMMXeZk5cgXvCxv5XAcawufduc9eyGdXmpMDzrWAGr69p1iWQG0MP5Rb0J8GEhth/wfAQpg+tLbXmPdc/wtRMbnyXB3oeF+twr6TSolwzvAI+Kc+CSWIOq+vhZ9y+srroGHstmA0NEpL7zH8x1LSrbxr7HYgVTz2tNgcpTEesf5y+gjIiMACrZqN/zHoNpTnNet0dEOonIeWINhPoHK/i5Wgh7vOoZzHSsa5xXeSybCNwl1oArEZFTRORqEano4/XvO+tdVURqY3VfFtTTIpLo/MC6BphnrGuo72Mdg4rO4zAU6wM4lPweZ6zzdhyrdVke6z3izx6gugQebBlK32O1oh4RkQSx5g3ohnX93mUWMBhrTMk8P9uZD1wjIheLSCLWIDbPz8BAx6fAjDGHsLr83xSRf4lIeWf5u4rIaO/1xTkgEOv/9Qys/73CSPWo47NYl512OMu0E+s69XTgA2NMViG2b+d8+CyDMeYvrOA/wNk7dCvQ0M9+gn2W7AHqeX258FSUz70SS4N6CWCM+S9WV/gcZ9for1itEl/rZmINpPrG2Y3YFmsg2HSskfFbgGNYg1vs7PsfrGvD1TyWBSrPUmAJ8AdW6+kYwbuOx2MNrFomIoeB77AGhoH14TYfK6D/BnzFyS7D8UBvsUajv2ajLjlYH7KedVmNdZvOG1jX6zaRd3Cbp2eAnVjH8HNnuY4H26+H3c59pGMNHLrLWKOKwTofR7Gu26/AClLvFWDbdgQ6ztOwztcuIM35nE/OMs8GNjvfYwXuVi0IZy9LN6z32D6sgY//9jh2OMvTEfjCGLPPz3bWA4Owjm0G1rnwvHsh0PEpbNlfwfqC9gRWcNqB9WXQs4XcT0SOYLVCF2J9sWppTg5ALKhZWIM6DwAtyT+gcypwHsG73n2yeT4CleF24GGseqZgjZnxJdhnievL234R+dHH6wv9uVeSiTGR6ElTKvaIyN1YA2s6FndZlLJLRC7B6gWqa8IQAERkCtZAyidCvW0VnLbUlbJJRGqKyEVi3f/aGOs+4gLdrqRUcXIOMh0MTApHQFfFT4O6UvYlYt3Hfhhr8pGPsLoelYp6zuv1B7Fu1RtXzMVRYaLd70oppVSM0Ja6UkopFSOiMllCIFWrVjU1a4Z1sG2xyM52UKZMYeZUKZm0vrFN6xvbtL6R9dtvafuMMafZWbfEBfWaNWsxa5a/ac9LroyMXdSsaXeCuJJP6xvbtL6xTesbWc2bX+BrhkSftPtdKaWUihEa1JVSSqkYoUFdKaWUihEl7pq6Uiq6GWOoXLkyOTkxPcV2HtWrV9f6xrBI1VcEROIR8ZVHyR4N6kqpkDImh4SEBOLiivbhVJLk5OQSH196Pk61vqF3Mid6DoXL1mspPWdFKRURxoAxUmoCulKh4Pp/yc0NsmIQYbumLiLvicheEfnVz/MiIq+JyCYR+VlEWoSrLEoppVS0C8UX4XAOlJtC3rzV3roCjZw/dwBvh7EsSimlVMwLW/e7MeZrEakXYJUewDRnpqDvRKSKiNQ0xmSEq0xKqcjr3Pky9u/fH7LtVa9enc8//yLgOu3bt+Xbb0+mhF+48CPS0tYzfPhjISvHTTf9m6lTp5Gevos1a9bQrVv3gOunp+/i/vvvY/78BSErg1LeivOaem3yJrzf6VyWL6iLyB1YrXlq1KhBRsauiBQwkhwOR0zWyx+tb+yqXr06xggnTpwACGlAd23Pte1APNfJzs4mJyfX1uvsmjhxEidOnGDbtu0sXbqEK68M1DEJJ044MMaEtAzFJVbqYVdB6nv82DEAyiYlFXJvuezdu6eQry0hA+WMMROACQDJySkmFqcnLO5pCCNN6xu7cnKsAJqYmBi2fdjZtuc6ZcqUIT4+jsTERNLTdzFy5FMcPHiQqlWrMnLkM9SsWZPPPlvGu+++Q1xcPBUqVOC99yazcOFHfPHFFxw5coS9e/dy9dVXc+eddwEnewPefvtNNm/ezI03DqBbt25cdtllPPHE42RlZQEwbNijNGvWjMTEBESExMRE/vxzE089NQKHIxtjcnn55VeoW7dueA5WGJw4cSKs5zfaFKS+mzZtBCA5OaVQ+8rJyS7SZ0VxBvVdQB2Px2c6lymlVJEcP36cfv36uh//888hOnbsCMCoUS9xzTXd6d69Ox9++F9Gjx7Fq6+OY8KEd3nrrbepUeN0Dh/+x/3a9et/Zd68D0hKSmLAgP5cfHEHUlJOfmDff/9gpkyZwhtvvAlAVlYWb7/9LmXLlmXbtm08+ujwfPkq5s2bR//+N5CaejUOh4OcnJxwHg5VihRnUF8I3Csic4A2wCG9nq6UCoWyZcsyd+777seua+oAP//8M2PGjAXg6quvYfz4cQBccEEzRowYwRVXXMFll13ufm2bNm2pUqUKAJdddjk//bQ2T1D3lp2dzahRL7Jhwwbi4uLZvj1/Lo4LLriASZMmsmfPHi677PIS1UpX0S2ct7TNBlYCjUVkp4jcJiJ3ichdzlUWAZuBTcBE4J5wlUUppYJ54oknGTRoELt376Z//+s5ePAgkP82o2C3Hc2cOYNq1aozd+48Zs6chcPhyLdO166pjBv3GmXLluW+++7lhx++D11FVKkWztHv1wd53gCDwrV/pZTy5fzzL2Dp0iVcc003Fi9eRPPmzQHYsWMH5513Pueddz7ffPMNe/bsBuC7777j0KFDlC1bluXLv+Spp57Os73y5U8hM/Oo+/GRI0eoUaMGcXFxfPzxQp9d6zt37uTMM8+kf/8b2L17Nxs3bqR16zZhrLUqLUrEQDmlVMlVvXr1kN/SVhTDhg1n5MgRTJs21T1QDmDcuLFs374dYwytW7fhnHMas2HDBpo2bcpDDw1lzx5roJx313ujRo2Ii4unb98+dO/enT59+vLwww/yySefcNFF7SlXrly+MixbtpRPP/2EMmUSOPXU6tx228Ai1UkpF7EazCVHcnKK8R50EgtK0+ho0PrGskiMfo8Uu/e362jw2FaQ+rrGbhRl9Lv3PPPNm1+wxhhzoZ3Xa+pVpZRSKkZo97tSSvnRvXsPunfvUdzFUMo2bakrpZRSMUKDulJKKRUjggZ1ETldRP4jIoudj5NF5LbwF00ppZRSBWGnpT4FWArUcj7+A3ggXAVSSimlVOHYGSh3qjHmfRF5FMAYky0iOlGxUsqWlM5NSNifELLtOao7WP/5b0HX+/LLLxg6dAgLFnxI/fr1gbzpT1evXsW0aVN57bU38rxu9epVDBnyALVqWbcgVqlShXffnRCy8ruEMj2sZ11Wr15FmTIJNGvWDIARI56kQ4dL6NKlS8Bt7Nu3j5dfHk1a2noqVqxItWrVefjhh0lISHAfs/Xr1/PJJx8zZMjQgNtypaVVkWcnqB8VkeqAARCRtsChsJZKKRUzQhnQC7K9JUsW07x5c5YsWczddxdsFurmzZvnC/aesrOzKVMmOm8eWr16NeXLl3cHdTuMMQwdOoRu3boxatRoADZs2MD+/Qc444zT3eulpKSQkpISNA2pBvTiY+ddORQr+UpDEfkGOA3oHdZSKaVUEWRmZrJ27VomTpzE4MH3Fzio+zJixJMkJiayYcPvXHBBMwYNGsSoUS+xadMmHA4Hd911D506dSInJ4fXXhvP6tWrcThO0LdvP3r37lOgfR04cIDnn3+O3butqWoffvhhmjVrzq+//sLo0aM5ceI4Zcsm8fTTz1CvXj3369LTdzF//jzi4uL49NNPGTZsOAA//riGGTOms3//PgYPHpKv1b5q1Q+UKVOGPn1OZrZr3Lixe5surh6BMWPG8s47b7N7dwY7d+5i9+4M+ve/gf79bwDy9kJMnvweixZ9ikgcF110EYMHP8CsWTOZP38+ZcrEU79+A/cXCVV0QYO6MeZHEekINAYE2GCMyZ+hQCmlosTy5V/Svv1F1K1bj8qVq5CWlkZycrLt169du9adurVLly4MHHg7AHv37mHKlGnEx8fz+uuv0apVa0aOfIb9+/dz660307ZtGxYtWkSFChWYOXMWJ06c4Oabb6Jdu3bUrn1mnn0ESg/78sujGTBgAM2btyAjI4NBg+5mwYIPqVevPu+9N5kyZcrw3Xff8frrr/HKK2Pd26hVqza9e/ehfPny/PvfNwHw4Yf/Zd++fUyePIUtW7YwZMjgfEF906ZNBTo+Llu2bGXixEkcPXqUa6/tQZ8+fUlIONmTsmLFCpYvX860aTMoV64chw5ZnbyTJ0/m008XkZiYmCfNrSq6oEFdRHp6LTpHRA4Bvxhj9oanWEopVXhLlix2txqvvPJKlixZXKCg5a/7vXPnK4iPjwdg5cqVfPXVcqZNm4YxuZw4cYKMjN2sXLmSjRv/4PPPPwfgyJHDbN++PV9QD5Qe9vvvv2Pz5s3u544cOUJmZiZHjhxhxIgn2L59OyJCdna2rfp06tSJuLg4GjZsGNJ5+Dt06EBiYiKJiYlUq1aNAwcOcPrpJ7vrv//+O3r06OGe/75y5coAnHNOIx577FE6depEp06Xhaw8yl73+21AO+BL5+NLgTVAfRF5xhgzPUxlU0qpAjt06BCrVq1i48ZNiAi5uTmISNDBXXbkTc5iGDNmLPXq1cszN7gxhmHDhtO+/UWF3o8xhmnTplO2bNk8y1966UUuvLAVY8eOIz19FwMH2ksEk5Bwct5yX/k+GjY82/0lpCA850OPi4sjJ8fel4zXXnuDH39cw1dffcV//jOJ99+fH7VjFEoaO7e0lQGaGGN6GWN6AclYg+baAMPCWTillCqozz//jKuvvprFi5ewaNFilixZRq1atfnxxx9Dup927dozZ84sd5D8/XdrRH779u2ZN2+eO4/6tm1bycrKLNC227Ztx5w5JxNXbdjwO2C1+mvUsFrCCxcu9Pna8uXLc/ToUZ/P+dO6dWscjhN88MF897I//vijyMesbdt2fPTRR2RlZQHWF67c3Fz27NlNq1atGTz4AQ4fPlLg46P8sxPU6xhj9ng83utcdgDQa+tKqYAc1UP7MRFse0uWLKZTp8vzLLv88stZsmRxSMtx++13kJ2dTd++vbnuur689dabAFx7bU8aNGhA//7X0bt3T5577lmyswt2F/AjjwwjLW09ffv2pmfPa5k3bx4AN910C6+/Pp7rruvrM087QMeOHfnyyy/o16+v7aAsIrzyyqt8//33dOt2Nb16Xcvrr79W5DS3F110ER07duSGG/rTr19fpk2bSk5ODo8//hh9+vTi+uv7cf3111OxYqUi7UedFDT1qoi8BZwFzHMu6gXsBB4GPjHGdAprCb1o6tXYoPWNXbGUetUuTUUa20pS6lU7FzEGYQVy1wWiacAHxvo2ENGArpRSSin/7NzSZoD5zh+llFJKRSk7CV16ishGETkkIv+IyGER0RsLlVJKqShjp/t9NNDNGBN8smWllFJKFRs7o9/3aEBXSimlop+dlvpqEZkLfAgcdy00xiwIW6mUUkopVWB2gnolIBO4wmOZATSoK6WC6pxyGfsTQjc1aXVHdT5f/0XAdfbs2cOLL77A5s2bMSaXDh0uYciQoSQkJLBhw+/s3fsXHTp0AOCdd97OM1d6UflKdeqdZrUgUlO7MnPmLMqUiWfx4sX07dsPwG/qWF/lWbNmNRUqVCQuThg+/DEuuOCCQpXF01tvvUmLFi1p27ZtnuV2y6XCI2j3uzHmFh8/t0aicEqpki+UAd3O9owxPPjgEDp16sTChR/z4YcLyczM5I03XgeslKLffPN/ISuPv0lgQu3w4cO8//7cQr32gQeGMnfu+9x//2Cef/7ZfM/bnUPe0z33DMoX0AujMPtW/tlJ6JKENf97CpDkWq6BXSkVjX744QcSE8vSo8e/AIiPj+ehhx7mmmtSuf32O3j77bc4duw4a9f+xK23Wh9jmzf/ycCBt+VLIfrpp58we/YsHI5szjuvKY8++jjx8fG0b9+WXr168/333/Poo4+SktLUdvmmTp3CsmXLcDhO0KnTZe60sEOGPMCePbs5fvw4/fvfQK9eeTNcjx8/np07d9KvX1/atm1Lhw4dyMzM4qGHHuTPPzfRpEkyzz//AiLid98tWrRkx44dAAwceBuNGzdm7dq1XHXVVXTu3JmRI5/i4MGDVK1alZEjn6FChQr07duHTz9dRFxcHFlZmVx77b9YsOBDnnvuWXePxDfffMOYMaNJSkqiWbPm7v1lZWW609NmZ2dz5513O79sfcT//vc/srIyycnJ5aWXRjFs2CMcPXqUnJxsHnvsCVq0aGH7mKqT7HS/Twd+B64EngFuAHTgnFIqKv35Z/40ohUqVOCMM84gPT2du+++h7S09Qwf/hhgdb/7SiG6Y8cOli1byuTJU0lISOCFF55n0aJFdOvWjaysLM477zwefPAhwJpxzNO4cWOZNGlivrKtXPkt27dvZ8aMmRhjeOCB+1mzZg0tW7Zk5MinqVy5MseOHWPAgP5cfnlnqlSp4n7t4MGD+fPPTe7MbqtXr2LDht+ZP38Bp512GjfffBM//bSW5s39B8Ovv/6Ks88+2/3Y4XDgmqFz8OD7uOaa7nTv3p0PP/wvo0eP4tVXx9G4cWPWrFlNq1at+frrr2nXrn2e5CvHjx/n2Wef5t13J3LWWWcxbNgj7ucmTZrkTk97+PA/DBhwA23btgGsufLff38+lStXZtq0qbRv356BA28nJyeHY8eOBTjDKhA7Qf1sY0wfEelhjJkqIrOA0PVdKaVUMfOVQvSHH74nLe03BgywWu3Hjx+jWrVqgNX6v/zyzn6398ADQ/NdUwcrXevKlSu57jrrunhWVibbt2+jZcuWzJ49iy++sMYK7Nmzh+3bt+cJ6r6kpDR1pzpt3Lgx6enpPoO660tG1apVeeqpke7lV1xxpfvvn3/+mTFjrNzsV199DePHjwOs1LVLly6lVavWLF26xH1N32Xr1i3UqlWbunXrApCaejULFsx319eVnhZwp6cFaNu2rTsVa0pKU55++imys7Pp1KkTjRufG7Deyj87Qd2VPeGgiDQFdgM1wlckpZQqvAYNGuZLI3rkyBF2795NnTp13NnUPPlKIWqMoVu3btx//2Cf67vyqheEMYZbb72V3r375Fm+evUqvv/+O6ZOnUa5cuUYOPA2Tpw47mcrnuVIcP8dHx/n9/q+95cMl7ypZH3r2PFSXn/9dQ4dOsRvv/1Gq1atCzCO4GR6Wk+//vpLnn23bNmSSZPeY8WK/2PEiBEMGHAj3bp1s7kP5cnOfeoTRKQq8ASwEEjDmpBGKaWiTps2bTh27Bgff/wxYA1kGzv2Fbp16065cuUoX/4Ujh4Nnuqzdes2fP755xw4YA3MO3ToEOnp6UUqW/v27fnoow/JzLT2v3fvHg4c2M/hw0eoVKkS5cqVY8uWLfzyy8/5Xmu33IV1/vkXsHTpEgAWL15E8+bNnfstT0pKCi+/PIoOHS7J92WmXr36ZGSku6/Ve2bD85ee1lt6ejrVq1enZ89eXHvttX7XU8HZmft9kvPPr4EG4S2OUirWVHdUD/ktbYGICGPHvsqLLz7PxIkTMCaXiy66mPvuux+AVq1aMXnye/Tr19c9UM6Xhg0bMmjQIO6++26MyaVMmTIMH/4YtWrVKnTZ27Vrz5YtW7jpphsBKFeuPM8//wIXXXQR8+fPo2fPf1G3bj3OO+/8fK+tUqUKzZo1o3fvnlx00cXuW/JCZdiw4YwcOYJp06a6B8q5XHHFlTzyyENMnPiffK8rW7YsTzwxgvvvv5ekpCSaN29BZqaVz/322+9gzJjR9O3bm9zcXGrXru3zVrfVq1czbdoUypQpQ/ny5Xn22edCWrfSJGDqVRGJB6oaY/Y5HycCNwFDjTFNIlPEvDT1amzQ+sYuTb0a+7S+/hV36lW/3e8ich1wAPhZRL56qzdTAAAgAElEQVQSkSuAzUAq1gj4oETkKhHZICKbRGS4j+fPEpEvRWStiPwsIql2tquUUkqp/AJ1vz8BtDTGbBKRFsBKoLcx5mM7G3a28t8EugA7gVUistAYk+a1j/eNMW+LSDKwCKhXiHoopZRSpV6goH7CGLMJwBjzo4hstBvQnVoDm4wxmwFEZA7QA2ugnYvBmoYWoDJQtFEoSimlVDFI2vgH4nAEXzHMAgX1GiIy1ONxFc/HxpixQbZdG9jh8Xgn0MZrnZHAMhG5DzgF8Hnjp4jcAdwBUKNGDTIydgXZdcnjcDhisl7+aH1jV/Xq1TFG8k3IEsuMMVrfGOZZ37jjx8HHWLQjZ9Qkt2xZznROnFP445PL3r17ClvUgEF9IlAxwONQuB6YYox5RUTaAdNFpKkxJtdzJWPMBGACWAPlYnHAUWkaSAVa31imA+ViX2mrb/bhw1TcsR0Ak5DAsUbn+F1306aNQNEGyhXls8JvUDfGPF3orVp2AXU8Hp/pXObpNuAq5/5WOueZPxXYW8R9K6WUUqFhDFmFDNKRZmdGucJaBTQSkfpYwfw6oL/XOtuBy4EpItIEK2HMX2Esk1IqwlI6X0bC/tDdp+6oXp31nwdOvdqyZXPOPruR+/Grr75KrVr2Wj++UqcW1sKFH7nnmS9oildjDJMmTeTjjz9GBE499TSGDRvOOef4byXaLcu8ee+TlFSObt26sWXLFoYPH4YIvPzyKzzxxONMnTrN9nb91cvXclca2apVqxa4/AMH3saQIUNJSUnhP/+ZxG23DQQgPX0X999/H/PnB88G/vHHHzN16mREhPj4eFJTr85Xbl/Xxg/XOSvP4/T0Xaxbt46uXaPvhq2wBXVjTLaI3AssBeKB94wx60XkGWC1MWYh8CAwUUSGYA2au9kEunFeKVXihDKg291e2bJl3YlPwi1cqUPnzp3DunXrmDv3fcqVK8fKld/ywAOD+eCDDyhXrnyRtt2nT1/3319++QWdO3fm9tvvAChQQC8unkHdrhUrVjBr1gzeeusdatSowYkTJ/jkE2vst2cgNwkJ+VrluV7Xx9PT01m8eFGBgnp2dnaeRDjhEtY9GGMWYd2m5rlshMffacBF4SyDUkqBNV3sa6+NZ/Xq1TgcJ+jbtx+9e/fBGMOoUS/y3XffcfrpZ5CQcHI+9bS0NF55ZQxZWZlUqVKFp59+ltNOOy1f2tLatWszZcpkHA4HlStX4YUXXqR6dd8z3+3YsYNHHnmI2bOt3Ojbtm1j+PBH3I9dpkyZzKRJ77nnSG/Xrj0tWjRn0aJF9OrVm/bt2/Ltt98B8Nlnn/F///c1zzzzLF99tZxJkyYGLIurFV2/fgNmzZpJXFwcP/zwPRMn/ifPdv2liZ08+T0WLfqUatWqcfrpZ+TLimeHv7S2zz//HOvXr+f48WN07tzFvU+X8ePHcfz4cfr160vDhg259957yc3N5Zlnnmbdup+oUaMGr746nqSkpDyve++9/zBkyFDOOnQQ2fcX5YAbzj0X0tazbf9+np4zm7///pukpCSefPIp6tevz4gRT3LKKaewfv2vHDhwgMGDh9ClSxdee208W7ZsoV+/vnTr1o3rr+/vfm8dPvwPXbpcQXJyCqtXr+Ktt96kYsVKbN26hTlz5vLII4+wZ88ecnNzuP32O7jyyqsKfOwCsZNPvSzQC+v+cff6xphn/L1GKaWKk+tDH6B27VqMHTuODz/8LxUqVGDmzFmcOHGCm2++iXbt2vH777+zdes2Pvjgv+zfv59evXrSo8e/cDgcjBr1Eq++Oo5q1aqxdOkS3nzzdff0qZ5pS/ft28e0aTMQERYsWMCUKZPdaVm91alThwoVKrBhw+80bnwuCxd+RPfuPfKsc+TIEbKysjjzzDPzLE9OTmHz5s0B6968eQvbZenQoQO9e/fx2X3uL01suXLl+OyzZcyZ8z45OTn073+d36A+Y8Z0Pv30U/fjv/6yhktt3rzZb1rbe++9j8qVK5OTk8Odd97BH3/8keeSw+DBDzB37hx3T0x6+i62b9/Oiy++xIgRT/HIIw/zv/99ztVXX+N+TdLGP9j8xwZaxFnzrXm3xJ+883Yee+wJ6tatyy+//MyLLz7PhAnWDOn79u1jwoRJ7Nq1iyFDBtOlSxfuv38w06ZNdU95+8EH893vrXXrfuLpp0fSs2dPAH777Tfmz/+A2rXP5PPPP+e0007j9det1x0+fDjQqSwUOy31j4BDwBogeNogpZQqZr6631euXMnGjX+4M7gdOXKY7du38+OPP3LVVVcRHx9PjRo1aN26FQDbtm3lzz83cffddwGQm5vDqaee6t6eZ9rSvXv38uSTj7Nv3z4cDge1awe+fn/ttT356KOPePDBRixbtpTp02eGpN5gpW0dNuxh22Xxx1+a2MzMTDp2vNTdg3DJJR39bmPAgBvzXVMHAqa1XbZsKQsWfEBOTg5//bWPzZv/DDqOoFat2u50rU2aNGHvL79Qrn599/MmIQETH09W43MpUzHvTVyZmZmsW7eORx552L3M4TjZ3d6pUyfi4uJo2LAh+/1c+vF8bx07dsx5rLaTkJBA06ZNqV3b+nLWqNHZjB37CuPHv0qHDh1p0SJ/mtyishPUzzTGhLZ/QCmlIswYw7Bhw2nfPu8VvxUrVvhZ30rjOm3adJ/Pe6YOfeWVl7nxxpu49NJLWb16Fe+8807Aslx+eWfeffcdWrVqTZMmyfnypleoUIFy5cqxc+fOPK31tLQ02rVrB1iJa1w807SOGvUSAwbcaLss/vhLEztz5oxCbc97277S2u7atZPp06cxY8YsKlWqxIgRT9q639uVgjZp4x+U3fcXmTk5+VrjDRs25Lff0mjdOu90Kbm5uVSsWNHvGIyEhJO37vkb8uX53vKc+3316lV53id169Zj9uw5rFjxf7z55hu0bt2aO++8K2j9CsJO6tVvReS8kO5VKaUirH379sybNw+Hc0DUtm1bycrKpEWLFixbttTZMvyLVatWAVCvXj0OHvybdevWAVZ3+59/bvK57SNHjlCjRg0APv54YdCylC1blnbt2vPCC8/n63p3+fe/b2L06Jc45pzM5LvvvmPz5j/p3NkalV+9enU2b95Mbm4uX3xx8m6AI0cOF6gs/vhLE9uiRUu+/vorjh07xtGjR/n6668LvG1/aW2PHDlKUlI5KlSowP79+/nmG99fuBLi4ijz8zrKpa2n7MaNxB0/TjlnMM0+/QyyfYxnuOWW2xg37lX27dsHWOdzwYIFVKhQgVq1avPZZ8sAK0Bv2LAhYPm90+B6v7cyMjLIysqfJnfv3r0kJSVx9dXXcNNNN/H7778HO1QFZqelfjFws4hswep+F8AYY/LnBlRKKS+O6tVDfktbYVx7bU/S09Pp3/86jDFUrVqVsWPHcdlll7Nq1Q/06nUtZ5xRk/PPvwCAhIQEXn55DKNGjeLIkSPk5GRzww0DaNjw7HzbHjjwDh555CEqVapEq1at2bUr+IzXqalX8+WXX7hb3t6uv74/hw8fpm/fPmRnZ+NwOJg//wPKli0LwH33DWbw4PuoWrUqycnJZGZmAXDnnXcXuCy++EsT26RJEzp37kK/fn2oVq0aKSkFv3/bX1rb888/n3PPPZdrr+3BGWecQbNmzfK8ruyO7ZQT6HN5Z7qPfIpzz21iDZQrW/Zky3zlSp/77NChAwcO7Oeuu+7AGIOI0KPHvwB44YUXeOGF55k4cSLZ2dlceeWVNG7c2G/5GzVqRHx8HH379qF79+7073+D+7117NgxKlaslK9HAKyJacaNexWROMqUKcNjjz1e4GMXTMDUqwAiUtfXcmPMtpCXxgZNvRobtL6xS2eUs2fatKkcPnyYQYPuDbpuZmYmQ4cOISUlxZ0XvjgVx4xySRv/AAg4m1u4lKTUq35b6iJSyRjzDxD64XlKKVWKDR36ADt37uTddyfaWr98+fK88867YS5V9PG+f7w4AnpJE6j7fRZwDdaod4PV7e5igAZhLJdSSsWssWPHFXcRopormPuaCEYFFmju92ucv+v7W0cppZQqKu+pWTWYF56tGeVEpDZQl7yTzxR8yKNSSinlpC3y0LMzo9wooB+QBuQ4FxtAg7pSSqkC02AePnZa6v8CGhtjdDY5pZRSBeIr65kG8/CxE9Q3AwnoFLFKqULo3Pkyv9NrFkb16tX5PEjq1UmTJrJ48SLi4+MRieOJJ57gvPN8T63hmZK0qPylFl248CNeffVVatSoQXa2g/r1G/Dss8/lmW0slKIlHeonL74E5J9r3ZOddKh2RHM61EgKdEvb61jd7JnATyLyPzwCuzGm+G+WVEpFvVAGdDvbW7duHV9//TWzZ88lMTGRv//+2z3TV3G68sor3F8cHn10OMuWLXVPfhILXEE9aeMflE1PJ+64FS4C3YYWKB1qQUVzOtRIClSb1c7fawDvuQY157lSKirt2/cXVatWcU8W4tkCXb/+V0aPHk1WVhaJiQnu+8T/+usvBg26mx07dnLZZZfxwANDAFi8eDHvvTcJYwwdOnRg8GDfy+++e5Dt8mVnZ5OVlUWlSpUA/KZKXb16NS+/PBoAEfjPfyZzyimn+E2HOmnSRD7+eGFE0qG6WuRxWZmU3bKZt+bO5vixY1zfoztnn1WHux99jOyEBB6bPdtWOlTXtLaJiYn07NkLsFLUvvTSC37ToaalpbF//z5b6VA9U+0WRzrUSAp0S9tUABEZbIwZ7/mciAz2/SqllCpe7dq1Z8KECfTo0Y02bdpyxRVXcuGFF+JwOBg27BFGjRpNSkpTjhw54p5ydcOGDe6W/b/+1YPrrrueuLg4XnttHDNnzqZSpUrcc89dfPnlF6SkNM23/KuvltOlyxUBy7V06TLWrv2Jffv+om7duu7sZv5SpU6fPpVHH32UZs2ak5mZSWJiYsB0qEuXLolYOtRLLulIS2cSleP1G3DPNd2Y8fnnzP7Iav/ZSYcK8Oefm2jSxHc5n3vumYDpUCdPnsKWLVtspUP1TLULkU+HGkl2+h1uAsZ7LbvZxzKllCp25cuXZ9as2axd+yOrVq1i+PBHuP/+wTRpksypp55GSkpTwMqE5tK6dRsqOlNyNmjQgIyMdA4ePETLlhe6U4J27ZrKmjVrAMm3fO3atUGDuqv73RjDiy++wNSpU7j11tv8pkq94IJmvPLKGLp2TeXyyztz+umnB0yH2qnTZWFPh5qbmclff//Ntj820LJpU3LLlfe7H+90qOnp9uegD3U6VDiZarc40qFGUqBr6tcD/YH6IuLZ/V4ROBDugimlVGHFx8dz4YWtuPDCVpx9diM++WSh3xYhnEzdab02jpycHL/r2jF37hwWLFgA4G4BuogIl1zSkTlzZnPrrbf5TZV666230aHDJaxY8X/cfPNNvPXW28WeDvX0nTt4eM4cjhkTdMrWvMc0nuPH84+1jlQ6VE/FkQ41kgKlXv0WeAX43fnb9fMgcGX4i6aUUgW3detWtm07mW/qjz82ULNmTerVq8e+fX+xfv2vABw9epTs7Gy/22natClr1qzh77//JicnhyVLltCy5YU+lzdvnrd116/fdcyd+z5z577vvl7s6aef1rrzpPtLlbpjxw4aNWrELbfcSkpKClu3bgmYDnX58i9Dng51/7ffkP3zz5QX4bTt2/jr6FG/6VDLlClT4AGJkUyH6kq16y0S6VAjKdA19W3ANsB3XkCllLKhevXqIb+lLZDMzExGjXqJw4cPU6ZMPHXq1OGJJ0aQkJDAqFGjGTXqJY4dO05SUlneeWeC3+2cdtpp3H//YO64Y6B7QFynTp0A8i3v2NF/d7eL65q6MbnUqHE6zzzzDOA/VerMmTNYvXoVcXFxNGjQkIsuupjExES/6VCvuOLKIqdDfaBXTwbdcgu5Jpcy8fE8OfB2zr36Gs5ZuZKrHn/MZzpUl169etGvXx93OlQ7IpUO1TPVrrdIpEONJL+pV0VkhTHmYhE5TN7R7q586pUiUUBvmno1Nmh9Y5emXi1ZCpMJrSTXtzBiIvWqMeZi5++KhSqZUkqpqKPJU2JboIFy47Cuq68wxtgftqiUUiqqeLfGNYjHrkC3tG3Cmvd9tIiAFeC/Bb4B1hljcsNfPKWUUkWRtPEPIPBUrSo6+LscXhB+R78bY94wxvQ3xtQD2gMLgAbAPOBgkfeslIpJIiBiQvIBpYrGFdDtXCdXxcsY4xwsWLTtBJx8Rqwm+nlYQf0iIBmrBT+9aLtVSsUqkXgcjmPExcUXd1EiKJecHP+3x4Vbwt49iI97609UOAVHjdMh5GUr3vpGnv36VqpkDUMrzPGxvhAX7f8m0DX1z4BKwE/Ad8ALxpjfirQ3pVTMExEOHTpEzZoVgq8cI/bu3VNsdzckO2eES1u02Ofz4fhqVZz1LQ4FqW+3bt0AWLt2XTiL5FegyWc2A7lAI+fP2SJyakRKpZRSKqhgAV2VPoFuabsTQEQqAW2xuuAHichpwK/GmIInvFVKKVVoyaldScw4eTPSiZq1NKCrPOwkdDmOlVM9y/n3mUDpmXVAKaWKia8g/lMxdeuqkiHQNfVXsVrnjYC1wErgHeAmY4yOfldKqTDwDOQaxFVBBWqpbwFmAD8ZY4qWskgppZRP2hpXoRTomvprRd24iFyFlXc9HphkjHnJxzp9gZFY88uvM8b0L+p+lVIqmmlrXIWLnWvqhSLWzXZvAl2AncAqEVlojEnzWKcR8ChwkTHmbxHJn6NQKaVigAZyFQlhC+pAa2CTMWYzgIjMAXoAaR7r3A68aYz5G8AYszeM5VFKqYhzBXMN5CoSbAV1Z6v7dM/1jTHbg7ysNrDD4/FOoI3XOuc4t/8NVhf9SGPMEjtlUkqpaKWtclVcggZ1EbkPeArYgzUZDVjXv88P0f4bAZdi3Sr3tYic5z26XkTuAO4AqFGjBhkZu0Kw6+jicDhisl7+aH1jW2mrb/bhwxxM+8z9+JvhwzjWqNHJFWLsWJS281uQ+o4ZMwag2I6PnZb6YKCxMWZ/Abe9C6jj8fhM5zJPO4HvjTEOYIuI/IEV5Fd5rmSMmQBMAEhOTjGxOD1hRsauUjXtotY3tpWm+ianduWb4cOocnmX4i5KxJSm8wsFq29qaipQfNPE2gnqO4BDhdj2KqCRiNTHCubXAd4j2z8ErgcmO6egPQdrelqllIpKvm5By9MqV6oY2Qnqm4HlIvIp1oxyABhjxgZ6kTEmW0TuBZZiXS9/zxizXkSeAVYbYxY6n7tCRNKAHODhQvQIKKVU2AUc8FaKuqJVfqmpXcnw+KJXnOwE9e3On0QKOD2sMWYRsMhr2QiPvw0w1PmjlFJRR0evK188A3nNmrXc3e3Nm19QnMUKHtSNMU8DiEgF5+Mj4S6UUkoVNw3myp9UZ3a84rpuHoid0e9NgelANefjfcC/jTHrw1w2pZSKCO/r5KC3oinfXAF9UZRmx7PT/T4BGGqM+RJARC4FJmIle1FKqRJH51tXBbFx40b3qPaaNWtFbUAHe0H9FFdABzDGLBeRU8JYJqWUCjmdEEYVlsPhiMqudl9sjX4XkSexuuABBqC3nSmlSpjEjHQN5Mo2z4Fw48ePL+bS2GcnqN8KPA0scD7+P+cypZQqEZJTu3KiZq3iLoYqAVzB3HNEe0maPc/O6Pe/gfsjUBallAoLbaWrQPzdnlYS+Q3qIjLOGPOAiHyMNdd7HsaY7mEtmVJKFZHnbWlK+RLNt6cVRqCWuusa+phIFEQppUJNW+jKk6+Z36J9NHtB+Q3qxpg1zj+bGWPyjBIQkcHAV+EsmFJKFZa20JUnX9fJY5WdgXI3Ad5D/272sUwppYqF3neufClNwdwl0DX167GyqtUXkYUeT1UEDoS7YEopFYxO5ap8KY3B3CVQS/1bIAM4FXjFY/lh4OdwFkoppQLRYK58Kc3B3CXQNfVtwDagXeSKo5RS+Wn3ugpEg/lJdhK6tAVeB5pgpV6NB44aYyqFuWxKKQXoKHZl8Ze3XIP5SXYGyr0BXAfMAy4E/g2cE85CKaUU6Ch2ZdGWuH12gjrGmE0iEm+MyQEmi8ha4NHwFk0pVZolOycF0RZ66aXBvODsBPVMEUkEfhKR0ViD5+LCWyylVGmnXe6lj3f3ugbzgrMT1G/Euo5+LzAEqAP0CmehlFKlmyZgKT1iad71aGAnocs2559ZWNnalFIqZLxHtoM1uj0thqbuVCdpazy8Ak0+8ws+Erm4GGPOD0uJlFIxy18A12722KfXxyMjUEv9moiVQilVKuh18tKjNLbIU1O7Ql2sGV6KSbDJZ5RSKiT0OnlsK41BHPKPCWArIMVXHjuTzxzmZDd8IpCATj6jlLLJ815zvU4eGzZu3EhqamqeZbEcxH3V18W73s25IFLF8snOQLmKrr9FRIAeQNtwFkopVfLp/OyxKTW1K8OHD4vJAO5vxrrx48eXmPramnzGxRhjgA9F5ClgeHiKpJSKBXr9vOTzFeRq1qxFo0aNiqlEoWX3kkFGxq5IFqtI7HS/9/R4GIc1VeyxsJVIKVViuVrnB8eM0evnJVAsBjlfYnkkvp2WejePv7OxhgH0CEtplFIljudtaq6u9qyMXXr9vASJ5SDnUlomubFzTf2WSBREKVWy6DXz2JDqnGM/VoMclI46utjpfm8AjMcaHGeAlcAQY8zmMJdNKRWFNJjHDlewWxQjvSqBUrPGSh2DsdP9Pgt4E7jW+fg6YDbQJlyFUkpFJ82cVvJ5d0PHQrArDZcP7LIT1MsbY6Z7PJ4hIg+Hq0BKqejkCuh6rbzkKqnd0P5a4C4azE+yE9QXi8hwYA5W93s/YJGIVAMwxhwIY/mUUsVMJ48p+TxbsiWhZV5aZ6cLBTtBva/z951ey6/DCvIN/L1QRK7Cuh4fD0wyxrzkZ71ewHyglTFmtY0yKaUiRO83L5lK0mhvDeKhY2f0e/3CbFhE4rGuxXcBdgKrRGShMSbNa72KwGDg+8LsRykVPjpfe8lUkrrZS1JZSwI7o98TgLuBS5yLlgPvGmMcQV7aGtjkGiUvInOw7m9P81rvWWAUoNfplYoS2uVe8pTEAXCxNvo+Gog182uAFUQmYSVxmepcdCOQY4wZGOR1vYGrXOuJyI1AG2PMvR7rtAAeN8b0EpHlwEO+ut9F5A7gDoAaNWq0nDJlir3alSAOh4OEhITiLkbEaH2jV9LGjQAcK8JUoCWpvqFQnPXduHGje/+Rmr61oPV1ldFbJMtcFAWpb1q5NFgDycnJIdt/amrqGmPMhXbWtXNNvZUxxjPtzBciUuR+EhGJA8YCNwdb1xgzAZgAkJycYmrWrF3U3UedjIxdxGK9/NH6RqdQjXAvKfUNlUjW19f150i3dO3Wt6QN0POnIOc3tVkqdCq+ywl2gnqOiDQ0xvwJ7slocmy8bhdQx+Pxmc5lLhWBpsByK/kbZwALRaS7DpZTqnjooLjoVFIGvemAt+JnJ6g/DHwpIpuxUr/XBexMHbsKaCQi9bGC+XVAf9eTxphDwKmux4G635VS4eV5DV1Fh5IYyKO5nKWFndHv/xORRkBj56INxpjjNl6XLSL3Akuxbml7zxizXkSeAVYbYxYWpeBKqaLTKV+jT0mZHa2klLO0sTP6PQm4B7gY6770/xORd4wxQdOvGmMWAYu8lo3ws+6ldgqslCoaX1nVVPGL5iDp3a0+ZswYQG9Di0Z2ut+nAYeB152P+wPTgT7hKpRSKjQ8A7iLBvLolJGRHjVBMti18YyMXSV64FsssxPUmxpjPMfmfyki3veaK6WikA58i27e16OjqSzR8gVDFYydoP6jiLQ1xnwHICJtAB3MplSU8NUad9GBb9EpGrvao6mnQBWenaDeEvhWRLY7H58FbBCRXwBjjDk/bKVTSvmk18VLnmhsCUdTT4EKDTtB/aqwl0IpFZB3a1wDeckSbfObR2NPgQoNO7e0bYtEQZRSvrlmedMgXnJEeta3YPnGvWkwj112WupKqWKgSVVKjo0bN5Kamup+HKmgqS1u5c1vUBeRsnYmmVFKhZZOCFNyuILq+PHjIxrEXTSYK2+BWuorgRYiMt0Yc2OkCqRUaaXBvORxjRjPyNgVfOVCisYBdip6BQrqiSLSH2gvIj29nzTGLAhfsZQqXfS6ecngq6UciX1oIFd2BQrqdwE3AFWAbl7PGUCDulJF4H1bml43jw6BBp2FO8BG2yh5VfL4DerGmBXAChFZbYz5TwTLpFRM02726BbJSViiITe6ii12Rr9PF5H7gUucj78C3jHGOMJXLKViS9LGjTRzjo7WYB6dPEeSR2I/oF3rKvTsBPW3gATnb4AbgbeBgeEqlFKxRhwODeRRKhK3hWkgV5FiJ6i3MsZc4PH4CxHRd6RSAXjPAPfl+PHFWBrlT6ivYfu7Hq+BXEWKnaCeIyINjTF/AohIAyAnvMVSquTyNZL9WBhveVIF491qDsU1bNfkMxq8VXGzE9Qfxkq3uhkQoC5wS1hLpVQJpulOo0u4bhHz3G6kJp9RKhg7c7//T0QaAY2dizboTHNK5ec5ql1Fh3DdIua93XBOPqNUQdia+90ZxH8Oc1mUKrF08pjoEY7udb31TJUUmtBFqSJyBXSdPKZ4hXoUu45YVyWRBnWlCkFngytevkaZFzXw6vSsqqBSk7uSkZj3fVh3a122UXwZy4MGdRH5nzHm8mDLlIp13oFcu9ojT1vjqjhsTNpIarPUfMtrnqjF2p/yvmeaNT8fQSJVtHwCpV5NAsoDp4pIVXCXshJQOwJlUypq6DXz4hPKwKutcRWMr9b3+C/H5wve0SpQS/1O4AGgFrCGk0H9H+CNMJdLqWKnXezFI9SBV1vjysVXwPbmq/Wdcazk3N0QKKHLeGC8iNxnjHk9gmVSKiro/eaRE87AG8kELSp6pSY7b0MsIS3uwrJzn/rrItIeqOe5vvgPIFMAABOjSURBVDFmWhjLpVSxSk7tqvebR1AoA28kcp6r6OfdKq95ohaL0mK/t83OQLnpQEPgJ05OD2sADeoq5nhOIKPd7aEXaG70UG1bu9hLN1cw99WNXhrYuaXtQiDZGGPCXRilipt2uYdHKAOuJk1RLr6ukZfWYO5iJ6j/CpwBZIS5LEoVG53iNfTCcZ08XNO+qpIpIzG9VAdwX+wE9VOBNBH5AXDP+W6M6R62UikVAXrfeXikpnblwQeHAqFPaarTs5Zuvq6Tq7zsBPWR4S6EUuHmnd8cNJCHmmfgTU5ODumc69q1XrqV9uvkBWFn9PtXIlIXaGSM+VxEygPx4S+aUkWjLfHwCnQ/eVGzlmkwL5383Ueuwdw+O6PfbwfuAKphjYKvDbwDBJ0mVkSuAsZjfQmYZIx5yev5ocBAIBv4C7jVGFN8k+aqEk8DeehFYmCazvRWumlLPHTsdL8PAloD3wMYYzaKSI1gLxKReOBNoAuwE1glIguNMWkeq60FLjTGZIrI3cBooF8B66AUoFO5hlq4WsvhSMaiSgZtiYefnaB+3BhzQsSaJVZEymDdpx5Ma2CTMWaz83VzgB6AO6gbY770WP87YIDNciuVj96OFhrhCOY6VWvposG7+Eiw289FZDRwEPg3cB9wD5BmjHk8yOt6A1cZYwY6H98ItDHG3Otn/TeA3caY53w8dwfWJQBq1KjRcsqUKUGqVfI4HA4SEhKKuxgRE4r6Jm3ciDgc7scmIYFjjRoVtWhhEe3nd+PGjTicxzIhIYFGRTyODoeDrVu3hnSb0Szaz2+oORwOtlbcikMcPp9PMAk0OhY75zvQ+U3amIQ4TmZlMwmGHx0/kpycHLL9p6amrjHGXGhnXTst9eHAbcAvWEleFgGTCl+8/ERkANYkNx19PW+MmQBMAEhOTjE1a8ZekriMjF3EYr38KWx9S2qSlWg8v96t51DdKua6pe2VV8aWmtvPovH8FkWwxCdjlo/hlfZjS8W0q5D//CannktiRiIAJ2qeIG3R73nWf6j5Q8XWG2UnqJcD3jPGTAT3tfJyQGaQ1+0C6ng8PtO5LA8R6Qw8DnQ0xhz3fl4pF71mHjqhnMTF1yC3UN3SpsInUOAO1k2ekbWrxAd0z8AczMExB2iWer778YmaJ/hp7c/hKlqR2Anq/wM6A0ecj8sBy4D2QV63CmgkIvWxgvl1QH/PFUSkOfAuVjf93gKUW5UiOh97aISqZW5npHpRb2lToRXr06kWJEC7FCQwZ2VkRW0Q92YnqCcZY1wBHWPMEee96gEZY7JF5F5gKdYtbe8ZY9aLyDPAamPMQuBloAIwzzkQb7vOVKe86QC4oitoy9zfbWygA92iUbDu8pIYwAsSqKO55RxpdoL6URFpYYz5EUBEWgJZdjZujFmEdQ3ec9kIj787F6CsqpTR+diLpqAtcx2hHv1ieVS5dxDXQF04doL6YKyWdDogWMld9F5yFTaewVxb6AVTkMCsE75Ep6Jc645WdlrdGsRDI2BQF5E4IBE4F2jsXLzBGOP7PgalikgHwxVesC52DeLRraTNqqbd49EpYFA3xuSKyJvGmOZYKViVCiu9fm6fryDtq4td51GPLiWhCz1YwD445gCABuooZGv0u4j0AhaYYDPVKFUEyald9fp5AAVpaev18ejhK11oJIJ3YUaEuwRrWWdlZOW7N1tFBztB/U5gKJAjIllY19WNMaZSWEumSg29Zc23wnSXa6s8ehRXd7ormGuXd+lkJ/VqxUgURJVe2uVuKWgQ18Qoxc8VuMccHENqs9Q8z0UimPtqjWswL93spF4V4AagvjHmWRGpA9Q0xvwQ9tKpmFfau9yL0k2ekZGuATyCAk3gkpG1K2Ktce8pSjWAK092ut/fAnKBy4BnsWaWexNoFcZyqRiWnNqVgw8OpVlqaqnvci9oYPb+EqDCIxpmYPN3TVwDuQrETlBvY4xpISJrAYwxf4tI4UZfqFLPdctaVnJyqe1yL2hg1kFvkZeRmF7sg9k0eKvCsBPUHc4kLgZARE7DarkrVSCugJ62aDGUornBXVnLUlOta646KUzxCjalKlit8khIzEjUwK1Cyk5Qfw34L1BDRJ4HegNPhLVUKmaU1FSpoeA5Ej05OZm1a9e5lzVvfoHf12kQD61I3lJW0NvITtQ8EZZyqNLLzuj3mSKyBrgc63a2fxljfgt7yVSJV1pnh/N1W9nXXy8nNTVVA3YYRXJSF+/g7UrNqV3mqrj5DeoikgTcBZwN/AK8a/6/vbsPkqwq7zj+/TEgRUTeBKll1ZldRHFEl30JUgQtN1HcXaOriSIpShHxhZSgG7RSWJtKqPwlySSpJWIsBCIY38oA5ZYSXRKDoSrh3YV9AWTfKFkGKJV1Q0IWdnjyxz29e6e53dPdM/1yb/8+VV1z+/Sd2/eZ07tPn3PPPSdif69OzMoj3xrPG5aWebPu8tpr69atczLvkl7eD97oHvAyLc1p1daspX4D8AJwB7ASeCOwphcnZeUyTPeZt3Jv+KpVKw90r9de8/ris9eP6VW9cpiVTbOkPh4RbwaQdB3g+9LtgPpr5cOi/ha0omvk7mKfe6vG02I1Pb4X3EncyqZZUj+wEltE7M/moDEbrmvlRV3r+deg8apo1rmiwW23bu3sUk4nc6A7mVtZNUvqiyTtTdsCjkjPPff7EJt2W1pF1d8XPm/eSQee51vljVZFs/Z0OtFLq8naCdqGScOkHhEjvTwRG2xVWnSl6Lp4Xn33+eLFi9wan4WZ7gtv9Zq4r2+bzayV+9RtyJW1u71R8m50zbu2f9E1cmusKGnnFzjpdCCbk7hZ+5zUbUZlGd0+00xsjZJ2o/2HXSszr0Fx0m53gROvNmY2N5zUrVDZRrcXtco9Kr25bnWLw8HJWFrlBG42N5zU7SUGsbt9puvg4IFrM2l3utTZDETzZCxm/eGkbsBgz9Fef+tYUTe7k/nsWt7u/jarBid1G7iWeX3SHhkZYWpq6iWztFVZq9ez80Z3jRILoqP3cwI3qwYn9SE1aC3zZcuWMDU1Vfjaq151Yqlb4uOrTmXP5xtfYx7bOcZjY49NK2slQT8/73m23vrwtDInZrPh5qQ+hHrdMi+6Hj4xMXFgfXHIWuNVaH036sZ+bvw5Tto3v625y52gzaxdTupDotst82YD2Wrd5VW4Fl5L2kWtawAa9JhP3D4B9G7ucjMbTk7qQ6CbLfOitcMb7QcHB7tNTu4e2ITe9Hp2Km53QpXJ53Z3PHe5mVmrnNQrqH5987lqmTdrjTea0KWml63yTgaZ5dVfzy66dm1mNoic1Cuivnt9LlrlzQavDVLXeX0SH/3FKPHa4kFmrSZoX882szJyUq+Auexez7fGB3HwWlErvKhl7aRsZsPISb1E6rvVazrtXp9pcFs/WuL1o8frB6SN7hpl31n7fCuXmVkBJ/USyC972kprvJUpVWvmMnm3Oq0oFM8NPrZzjMeemD6ivGhAmq9vm5kV62pSl7QCWAeMANdGxJfqXj8cuBFYCvwK+HBE7OrmOQ2i8VUr2fP5yzg9d982wBgwLcVNPgFNBqPldbOl3fC2rjbGpk3cPsHyWD6trNMlOs3MLNO1pC5pBLgaeBfwOHCPpPURsTW320XAMxHxOknnAVcCH+7WOfVSo67yIs/PO4kHDzuM5TPst5OdjDE24/FqyXYxrX0BaFuHt3Xltbs0p5mZzaybLfUzgG0RsQNA0neA1UA+qa8Grkjb/wx8WZIiorMJrGeple7jRpOO7ByDfPGuUVgQFDS3C0w+wYRegBmiXsCCGQ6UcYvXzGw4qVv5U9IHgRUR8Yn0/CPAWyPiktw+m9M+j6fn29M+v6w71qeAT6WnbwAe6cpJ99fxwC9n3Ks6HG+1Od5qc7y9NRoRJ7SyYykGykXENcA1/T6PbpJ0b0Qs6/d59IrjrTbHW22Od3Ad0sVj7wZek3v+6lRWuI+kQ4GjyQbMmZmZWZu6mdTvAU6RtEDSy4DzgPV1+6wHLkjbHwR+0q/r6WZmZmXXte73iNgv6RLgx2S3tF0fEVsk/SVwb0SsB64DviFpG/BrssQ/rCp9eaGA4602x1ttjndAdW2gnJmZmfVWN7vfzczMrIec1M3MzCrCSb0HJL1G0r9L2ippi6TPpfIrJO2WtDE9VuV+54uStkl6RNK7+3f2nZG0S9KmFNe9qew4SbdJejT9PDaVS9JVKd4HJS3p79m3R9IbcnW4UdJeSWuqVr+Srpf0dJpfolbWdp1KuiDt/6ikC4reaxA0iPevJT2cYrpF0jGpfEzSc7m6/mrud5amfwvb0t9E/YhnJg3ibfszLGlFKtsm6fJex9GqBvF+NxfrLkkbU3l56jci/OjyA5gHLEnbrwB+DoyTzab3hYL9x4EHgMOBBcB2YKTfcbQZ8y7g+LqyvwIuT9uXA1em7VXAvwACzgTu6vf5zyLuEeBJYLRq9Qu8HVgCbO60ToHjgB3p57Fp+9h+x9ZGvOcAh6btK3PxjuX3qzvO3elvoPQ3Wdnv2NqIt63PcHpsBxYCL0v7jPc7tlbjrXv9b4A/L1v9uqXeAxExGRH3p+3/Bh4C5jf5ldXAdyJiX0TsBLaRTbtbdquBG9L2DcD7c+U3RuZO4BhJ8/pxgnPg94DtEdFscuBS1m9E/AfZXSp57dbpu4HbIuLXEfEMcBuwovtn376ieCNiQ0TsT0/vJJt/o6EU81ERcWdkGeBGDv6NBkqD+m2k0Wf4wPTgEfE8UJsefOA0ize1ts8Fvt3sGINYv07qPSZpDFgM3JWKLkldedfXui7JEv4vcr/2OM2/BAyiADZIuk/ZNL8AJ0bEZNp+EjgxbVch3przmP4fQVXrt6bdOq1S7B8na5nVLJD0M0k/lfS2VDafLMaaMsbbzme4KvX7NuCpiHg0V1aK+nVS7yFJRwI3AWsiYi/wD8DJwOnAJFl3T1WcHRFLgJXAZyS9Pf9i+lZbqfsplU2y9D7ge6moyvX7ElWs00YkrQX2A99MRZPAayNiMXAZ8C1JR/Xr/ObQUH2Gc/6I6V/OS1O/Tuo9IukwsoT+zYi4GSAinoqIqYh4EfgaB7tgW5lid6BFxO7082ngFrLYnqp1q6efT6fdSx9vshK4PyKegmrXb067dVr62CV9DPh94Pz0RYbUDf2rtH0f2XXl15PFlu+iL1W8HXyGq1C/hwJ/AHy3Vlam+nVS74F0feY64KGI+Ntcef668QeA2ijM9cB5kg6XtAA4hWwwRilIermkV9S2yQYXbWb6tMAXAN9P2+uBj6YR02cCv8l16ZbJtG/3Va3fOu3W6Y+BcyQdm7pyz0llpSBpBfCnwPsi4n9z5SdIGknbC8nqdEeKea+kM9P/Ax/l4N9o4HXwGW5levBB907g4Uirh0LJ6refo/SG5QGcTdYt+SCwMT1WAd8ANqXy9cC83O+sJfs2+AgDOlq2SbwLyUa9PgBsAdam8lcC/wY8CvwrcFwqF3B1incTsKzfMXQQ88vJFiM6OldWqfol+8IyCbxAdu3wok7qlOxa9Lb0uLDfcbUZ7zaya8a1f8dfTfv+YfqsbwTuB96bO84ysmS4HfgyaSbPQXs0iLftz3D6v+3n6bW1/Y6rnXhT+deBi+v2LU39eppYMzOzinD3u5mZWUU4qZuZmVWEk7qZmVlFOKmbmZlVhJO6mZlZRTipmw0ISa/MrQL1ZN3qWP/ZhfdbJumquT5uN6XVsjbPvKfZcPItbWYDSNIVwLMRMdHvcxkkae2EH0TEaX0+FbOB5Ja6WQlIejb9fEdaUOL7knZI+pKk8yXdndZ0Pjntd4KkmyTdkx6/U3DMd0j6Qdq+Ii3YcXs67mcL9h+R9HVJm9N7/UkqP1nSj9LiPXdIOjWVn6hszfEH0uOsVH5ZOsZmSWtS2ZikhyR9TdIWSRskHZFeW1o7BvCZ3Pm8KcW9UdmCI6fM8Z/drHSc1M3KZxFwMfBG4CPA6yPiDOBa4NK0zzrg7yLit8lmw7q2heOeSrY06hnAX6T1CvJOB+ZHxGkR8WbgH1P5NcClEbEU+ALwlVR+FfDTiFhEtm71FklLgQuBt5KtQf1JSYvT/qcAV0fEm4A96bxJ73NpOk7excC6iDidbFavxzEbcof2+wTMrG33RJobX9J2YEMq3wQsT9vvBMaz6agBOErSkRHxbJPj/jAi9gH7JD1NtoxqPlHuABZK+nvgh2RL6x4JnAV8L/deh6efv0s2FzYRMQX8RtLZwC0R8T/p/G8mW+ZyPbAzIjam370PGJN0DHBMZGtfQzZt6cq0/V/AWkmvBm6O6ctkmg0lJ3Wz8tmX234x9/xFDv6bPgQ4MyL+r8PjTlH3/0NEPCNpEVlr/mLgXGANsCe1lmer/v2PaLZzRHxL0l3Ae4BbJX06In4yB+dhVlrufjerpg0c7IpH0qyTrqTjgUMi4ibgz4AlEbEX2CnpQ2kfpcQP2UIvf5zKRyQdDdwBvF/Sbylbwe8DqaxQROwB9qQWPsD5ufNZSLZS1lVkK2O9ZbYxmpWdk7pZNX0WWJYGkG0la1nP1nzgdkkbgX8CvpjKzwcuSgPZtgCrU/nngOWSNpF1p49HxP1kq2DdDdwFXBsRP5vhfS8Erk7vq1z5ucDmVH4acOMs4zMrPd/SZmZmVhFuqZuZmVWEk7qZmVlFOKmbmZlVhJO6mZlZRTipm5mZVYSTupmZWUU4qZuZmVXE/wOlB0WhHx/dgAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:ScoreModel:Plot was saved to: data/figures/fig_1.png\n" - ] - } - ], - "source": [ - "tt.plot_nearest_providers(limit_categories=None,\n", - " n_bins=300,\n", - " resolution='population',\n", - " title=\"Time to Nearest Neighbor Health Provider- CDF by Population\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Other metrics results are saved under Access_health_tracts.shp. \n", - "The prefix nd stands for the count of nearby destinations metric and the prefix nn stands for the time to the closest destination." - ] - } - ], - "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.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}