├── README.md
├── check_workshop.ipynb
├── content
├── .ipynb_checkpoints
│ ├── 00_introduction-checkpoint.ipynb
│ ├── 01_data_processing-checkpoint.ipynb
│ ├── 02_geovisualization-checkpoint.ipynb
│ ├── 02_points_visualization-checkpoint.ipynb
│ ├── 03_spatial_weights-checkpoint.ipynb
│ ├── 04_spatial_autocorrelation-checkpoint.ipynb
│ ├── 05_esda_morans_viz-checkpoint.ipynb
│ ├── 06_esda_morans_viz-checkpoint.ipynb
│ ├── 06_spatial_dynamics_analytics-checkpoint.ipynb
│ ├── 07_moran_bv_test-checkpoint.ipynb
│ ├── 07_spatial_dynamics_visualization-checkpoint.ipynb
│ ├── 09_spatial_dynamics_analytics-checkpoint.ipynb
│ ├── 11_taz_example-checkpoint.ipynb
│ ├── 18_gol-checkpoint.ipynb
│ └── 19_points_visualization-checkpoint.ipynb
├── 00_introduction.ipynb
├── 00_introduction.slides.html
├── 01_data_processing.ipynb
├── 02_geovisualization.ipynb
├── 03_spatial_weights.ipynb
├── 04_spatial_autocorrelation.ipynb
├── 05_esda_morans_viz.ipynb
├── 06_spatial_dynamics_analytics.ipynb
├── 07_spatial_dynamics_visualization.ipynb
├── choropleth.html
├── data
│ ├── CPI1913-2016.csv
│ ├── README.md
│ ├── Surrey_park_street_trees_April2018.csv
│ ├── US_state_pci_constant09_1929_2009.csv
│ ├── Zipcodes.geojson
│ ├── airports.csv
│ ├── boston.dbf
│ ├── boston.shp
│ ├── boston.shx
│ ├── continents.geojson
│ ├── countries.geojson
│ ├── countries_simplified.geojson
│ ├── listings.csv.gz
│ ├── mexicojoin.dbf
│ ├── mexicojoin.prj
│ ├── mexicojoin.qpj
│ ├── mexicojoin.shp
│ ├── mexicojoin.shx
│ ├── participants2016.csv
│ ├── participants2017.csv
│ ├── participants2018.csv
│ ├── san_diego.cpg
│ ├── san_diego.dbf
│ ├── san_diego.prj
│ ├── san_diego.shp
│ ├── san_diego.shx
│ ├── san_diego.tif
│ ├── texas.dbf
│ ├── texas.geojson
│ ├── texas.prj
│ ├── texas.qgs
│ ├── texas.qgs~
│ ├── texas.qpj
│ ├── texas.shp
│ ├── texas.shx
│ └── tm_world_borders.geojson
├── figs
│ ├── UCR.png
│ ├── anaconda.png
│ ├── ancienthistory.png
│ ├── cartodb.png
│ ├── cast.png
│ ├── giddydoc.png
│ ├── githubstars.png
│ ├── githubstarspysal.png
│ ├── googlecode.png
│ ├── install.png
│ ├── pysalGraphic.png
│ ├── pysalanaconda.png
│ ├── pysalcli.png
│ ├── pysalcloud.png
│ ├── pysalcloud.png_
│ ├── pysaldebian.png
│ ├── pysalml.png
│ ├── pysalnew.png
│ ├── pysalnotebook.png
│ ├── pysalqgiselection.jpg
│ ├── pysalrefactor.png
│ ├── pysalscipy2009.png
│ ├── pysalstructure.png
│ ├── pysalteam.png
│ └── qgis.png
├── hr90.html
└── makefile
├── environment.yml
├── figs
└── readmefigs
│ ├── anaconda.png
│ ├── anacondastartwin.png
│ ├── directory.png
│ ├── download.png
│ ├── htmlout.png
│ ├── inc.png
│ ├── quad.png
│ ├── routes18.png
│ ├── routes2016-17.png
│ └── routes2017.png
└── workshop.yml
/README.md:
--------------------------------------------------------------------------------
1 | # Spatial Data Analysis with PySAL @FOSS4G
2 | [](https://mybinder.org/v2/gh/sjsrey/pysalfoss4g19/master)
3 |
4 | ### Instructors
5 |
6 | - [Sergio Rey](http://sergerey.org) - University of California, Riverside
7 | - [Wei Kang](http://spatial.ucr.edu/peopleKang.html) - University of California, Riverside
8 | - [Elijah Knaap](http://spatial.ucr.edu/peopleKaap.html) - University of California, Riverside
9 | - [Stefanie Lumnitz](https://github.com/slumnitz) - University of British Columbia
10 | ---
11 |
12 | This repository contains the materials and instructions for the PySAL workshop at [FOSS4G 2019](https://2019.foss4g-na.org/).
13 |
14 |
15 | ## Schedule (Proposed)
16 |
17 |
18 | * 2:00-3:30
19 | * PySAL Overview
20 | * Spatial data processing
21 | * Spatial weights
22 | * Choropleth mapping and geovisualization
23 | * 3:30-4:00
24 | * Break
25 | * 4:00-5:30
26 | * Global spatial autocorrelation
27 | * Local spatial autocorrelation
28 | * Spatial dynamics
29 |
30 | ## Obtaining Workshop Materials
31 |
32 | If you are familiar with GitHub, you should clone or fork this GitHub repository to a specific directory. Cloning can be done by:
33 |
34 | ```bash
35 | git clone https://github.com/sjsrey/pysalfoss4g19.git
36 | ```
37 |
38 | If you are not using git, you can grab the workshop materials as a zip file by pointing your browser to (https://github.com/sjsrey/pysalfoss4g19.git) and clicking on the green *Clone or download* button in the upper right.
39 |
40 | 
41 |
42 | Extract the downloaded zip file to a working directory.
43 |
44 | ## Installation
45 |
46 | We will be using a number of Python packages for geospatial analysis.
47 |
48 |
49 | An easy way to install all of these packages is to use a Python distribution such as [Anaconda](https://www.anaconda.com/download/#macos). In this workshop we will use anaconda to build an [environment](https://conda.io/docs/user-guide/tasks/manage-environments.html) for **Python 3.6**. It does not matter which version of anaconda is downloaded. We recommend installing Anaconda 3.7.
50 |
51 | 
52 |
53 |
54 | On windows, all our work will begin from an anaconda prompt, which you can start as follows:
55 |
56 | 
57 |
58 | Start a terminal and navigate to the directory of the downloaded/ cloned materials. For example, if the materials now live in the directory ```/Users/weikang/Downloads/pysalnarsc18-master```, you need to navigate to that directory from the terminal (using command ```cd```):
59 |
60 | 
61 |
62 | Once we have done that, run:
63 |
64 | ```bash
65 | conda-env create -f workshop.yml
66 | ```
67 |
68 | This will build a conda python 3.6 environment that sandboxes the installation of the required packages for this workshop so we don't break anything in your computer's system Python (if it has one).
69 |
70 | This may take 10-15 minutes to complete depending on the speed of your network connection.
71 |
72 | Once this completes, you can activate the workshop environment with:
73 |
74 | * on Mac, Linux
75 | ```bash
76 | source activate workshop
77 | ```
78 | * on Windows:
79 | ```bash
80 | activate workshop
81 | ```
82 |
83 | Next, you will want to test your installation with:
84 | ```bash
85 | jupyter-nbconvert --execute --ExecutePreprocessor.timeout=120 check_workshop.ipynb
86 | ```
87 |
88 | You should see something like:
89 | ```bash
90 | [NbConvertApp] Converting notebook check_workshop.ipynb to html
91 | [NbConvertApp] Executing notebook with kernel: python3
92 | [NbConvertApp] Writing 347535 bytes to check_workshop.html
93 | ```
94 |
95 | Open check_workshop.html in a browser, and scroll all the way down, you should see something like:
96 |
97 | 
98 |
99 | You should also see a new file in the current directory called `inc.png` that contains a map looking something line:
100 |
101 | 
102 |
103 | If you do see the above, you are ready for the tutorial. If not, please contact either of us for help.
104 |
105 | ## Troubleshooting
106 |
107 |
108 | If you encounter the following error when starting jupyterlab:
109 | ```bash
110 | FileNotFoundError: [WinError 2] The system cannot find the file specified
111 | ```
112 | A solution is to issue the following command in the anaconda prompt:
113 | ```bash
114 | python -m ipykernel install --user
115 | ```
116 |
117 |
--------------------------------------------------------------------------------
/check_workshop.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Check `PySAL Workshop` stack\n",
8 | "\n",
9 | "This notebook checks all software requirements for the PySAL Workshop are correctly installed. \n",
10 | "\n",
11 | "A successful run of the notebook implies no errors returned in any cell *and* every cell beyond the first one returning a printout of `True`. This ensures a correct environment installed."
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 6,
17 | "metadata": {},
18 | "outputs": [],
19 | "source": [
20 | "import matplotlib.pyplot as plt\n",
21 | "%matplotlib inline"
22 | ]
23 | },
24 | {
25 | "cell_type": "markdown",
26 | "metadata": {},
27 | "source": [
28 | "---"
29 | ]
30 | },
31 | {
32 | "cell_type": "code",
33 | "execution_count": 7,
34 | "metadata": {},
35 | "outputs": [
36 | {
37 | "data": {
38 | "text/plain": [
39 | "True"
40 | ]
41 | },
42 | "execution_count": 7,
43 | "metadata": {},
44 | "output_type": "execute_result"
45 | }
46 | ],
47 | "source": [
48 | "import bokeh as bk\n",
49 | "\n",
50 | "float(bk.__version__[:2]) >= 0.12"
51 | ]
52 | },
53 | {
54 | "cell_type": "code",
55 | "execution_count": 8,
56 | "metadata": {},
57 | "outputs": [
58 | {
59 | "data": {
60 | "text/plain": [
61 | "True"
62 | ]
63 | },
64 | "execution_count": 8,
65 | "metadata": {},
66 | "output_type": "execute_result"
67 | }
68 | ],
69 | "source": [
70 | "import matplotlib as mpl\n",
71 | "float(mpl.__version__[:3]) >= 1.5"
72 | ]
73 | },
74 | {
75 | "cell_type": "code",
76 | "execution_count": 9,
77 | "metadata": {},
78 | "outputs": [],
79 | "source": [
80 | "import mplleaflet as mpll"
81 | ]
82 | },
83 | {
84 | "cell_type": "code",
85 | "execution_count": 10,
86 | "metadata": {},
87 | "outputs": [
88 | {
89 | "data": {
90 | "text/plain": [
91 | "True"
92 | ]
93 | },
94 | "execution_count": 10,
95 | "metadata": {},
96 | "output_type": "execute_result"
97 | }
98 | ],
99 | "source": [
100 | "import seaborn as sns\n",
101 | "float(sns.__version__[:3]) >= 0.6"
102 | ]
103 | },
104 | {
105 | "cell_type": "markdown",
106 | "metadata": {},
107 | "source": [
108 | "---"
109 | ]
110 | },
111 | {
112 | "cell_type": "code",
113 | "execution_count": 11,
114 | "metadata": {},
115 | "outputs": [
116 | {
117 | "data": {
118 | "text/plain": [
119 | "True"
120 | ]
121 | },
122 | "execution_count": 11,
123 | "metadata": {},
124 | "output_type": "execute_result"
125 | }
126 | ],
127 | "source": [
128 | "import pandas as pd\n",
129 | "float(pd.__version__[:4]) >= 0.18"
130 | ]
131 | },
132 | {
133 | "cell_type": "code",
134 | "execution_count": 12,
135 | "metadata": {},
136 | "outputs": [
137 | {
138 | "data": {
139 | "text/plain": [
140 | "True"
141 | ]
142 | },
143 | "execution_count": 12,
144 | "metadata": {},
145 | "output_type": "execute_result"
146 | }
147 | ],
148 | "source": [
149 | "import sklearn\n",
150 | "float(sklearn.__version__[:4]) >= 0.17"
151 | ]
152 | },
153 | {
154 | "cell_type": "code",
155 | "execution_count": 13,
156 | "metadata": {},
157 | "outputs": [
158 | {
159 | "data": {
160 | "text/plain": [
161 | "True"
162 | ]
163 | },
164 | "execution_count": 13,
165 | "metadata": {},
166 | "output_type": "execute_result"
167 | }
168 | ],
169 | "source": [
170 | "import statsmodels.api as sm\n",
171 | "float(sm.version.version[:3]) >= 0.6"
172 | ]
173 | },
174 | {
175 | "cell_type": "code",
176 | "execution_count": 14,
177 | "metadata": {},
178 | "outputs": [],
179 | "source": [
180 | "import xlrd"
181 | ]
182 | },
183 | {
184 | "cell_type": "code",
185 | "execution_count": 15,
186 | "metadata": {},
187 | "outputs": [],
188 | "source": [
189 | "import xlsxwriter"
190 | ]
191 | },
192 | {
193 | "cell_type": "markdown",
194 | "metadata": {},
195 | "source": [
196 | "---"
197 | ]
198 | },
199 | {
200 | "cell_type": "code",
201 | "execution_count": 16,
202 | "metadata": {},
203 | "outputs": [
204 | {
205 | "data": {
206 | "text/plain": [
207 | "True"
208 | ]
209 | },
210 | "execution_count": 16,
211 | "metadata": {},
212 | "output_type": "execute_result"
213 | }
214 | ],
215 | "source": [
216 | "import fiona\n",
217 | "float(fiona.__version__[:3]) >= 1.7"
218 | ]
219 | },
220 | {
221 | "cell_type": "code",
222 | "execution_count": 17,
223 | "metadata": {},
224 | "outputs": [
225 | {
226 | "data": {
227 | "text/plain": [
228 | "True"
229 | ]
230 | },
231 | "execution_count": 17,
232 | "metadata": {},
233 | "output_type": "execute_result"
234 | }
235 | ],
236 | "source": [
237 | "import geopandas as gpd\n",
238 | "float(gpd.__version__[:3]) >= 0.2"
239 | ]
240 | },
241 | {
242 | "cell_type": "code",
243 | "execution_count": 18,
244 | "metadata": {
245 | "scrolled": true
246 | },
247 | "outputs": [],
248 | "source": [
249 | "import pysal\n",
250 | "from pysal.explore import esda\n",
251 | "from pysal.viz import mapclassify\n",
252 | "from pysal.explore import giddy"
253 | ]
254 | },
255 | {
256 | "cell_type": "code",
257 | "execution_count": 19,
258 | "metadata": {},
259 | "outputs": [],
260 | "source": [
261 | "import rasterio as rio"
262 | ]
263 | },
264 | {
265 | "cell_type": "markdown",
266 | "metadata": {},
267 | "source": [
268 | "# Test"
269 | ]
270 | },
271 | {
272 | "cell_type": "code",
273 | "execution_count": 20,
274 | "metadata": {},
275 | "outputs": [
276 | {
277 | "data": {
278 | "text/html": [
279 | "
\n",
280 | "\n",
293 | "
\n",
294 | " \n",
295 | " \n",
296 | " | \n",
297 | " AREA | \n",
298 | " PERIMETER | \n",
299 | " COLUMBUS_ | \n",
300 | " COLUMBUS_I | \n",
301 | " POLYID | \n",
302 | " NEIG | \n",
303 | " HOVAL | \n",
304 | " INC | \n",
305 | " CRIME | \n",
306 | " OPEN | \n",
307 | " ... | \n",
308 | " DISCBD | \n",
309 | " X | \n",
310 | " Y | \n",
311 | " NSA | \n",
312 | " NSB | \n",
313 | " EW | \n",
314 | " CP | \n",
315 | " THOUS | \n",
316 | " NEIGNO | \n",
317 | " geometry | \n",
318 | "
\n",
319 | " \n",
320 | " \n",
321 | " \n",
322 | " 0 | \n",
323 | " 0.309441 | \n",
324 | " 2.440629 | \n",
325 | " 2 | \n",
326 | " 5 | \n",
327 | " 1 | \n",
328 | " 5 | \n",
329 | " 80.467003 | \n",
330 | " 19.531 | \n",
331 | " 15.725980 | \n",
332 | " 2.850747 | \n",
333 | " ... | \n",
334 | " 5.03 | \n",
335 | " 38.799999 | \n",
336 | " 44.070000 | \n",
337 | " 1.0 | \n",
338 | " 1.0 | \n",
339 | " 1.0 | \n",
340 | " 0.0 | \n",
341 | " 1000.0 | \n",
342 | " 1005.0 | \n",
343 | " POLYGON ((8.624129295349121 14.23698043823242,... | \n",
344 | "
\n",
345 | " \n",
346 | " 1 | \n",
347 | " 0.259329 | \n",
348 | " 2.236939 | \n",
349 | " 3 | \n",
350 | " 1 | \n",
351 | " 2 | \n",
352 | " 1 | \n",
353 | " 44.567001 | \n",
354 | " 21.232 | \n",
355 | " 18.801754 | \n",
356 | " 5.296720 | \n",
357 | " ... | \n",
358 | " 4.27 | \n",
359 | " 35.619999 | \n",
360 | " 42.380001 | \n",
361 | " 1.0 | \n",
362 | " 1.0 | \n",
363 | " 0.0 | \n",
364 | " 0.0 | \n",
365 | " 1000.0 | \n",
366 | " 1001.0 | \n",
367 | " POLYGON ((8.252790451049805 14.23694038391113,... | \n",
368 | "
\n",
369 | " \n",
370 | " 2 | \n",
371 | " 0.192468 | \n",
372 | " 2.187547 | \n",
373 | " 4 | \n",
374 | " 6 | \n",
375 | " 3 | \n",
376 | " 6 | \n",
377 | " 26.350000 | \n",
378 | " 15.956 | \n",
379 | " 30.626781 | \n",
380 | " 4.534649 | \n",
381 | " ... | \n",
382 | " 3.89 | \n",
383 | " 39.820000 | \n",
384 | " 41.180000 | \n",
385 | " 1.0 | \n",
386 | " 1.0 | \n",
387 | " 1.0 | \n",
388 | " 0.0 | \n",
389 | " 1000.0 | \n",
390 | " 1006.0 | \n",
391 | " POLYGON ((8.653305053710938 14.00809001922607,... | \n",
392 | "
\n",
393 | " \n",
394 | " 3 | \n",
395 | " 0.083841 | \n",
396 | " 1.427635 | \n",
397 | " 5 | \n",
398 | " 2 | \n",
399 | " 4 | \n",
400 | " 2 | \n",
401 | " 33.200001 | \n",
402 | " 4.477 | \n",
403 | " 32.387760 | \n",
404 | " 0.394427 | \n",
405 | " ... | \n",
406 | " 3.70 | \n",
407 | " 36.500000 | \n",
408 | " 40.520000 | \n",
409 | " 1.0 | \n",
410 | " 1.0 | \n",
411 | " 0.0 | \n",
412 | " 0.0 | \n",
413 | " 1000.0 | \n",
414 | " 1002.0 | \n",
415 | " POLYGON ((8.459499359130859 13.82034969329834,... | \n",
416 | "
\n",
417 | " \n",
418 | " 4 | \n",
419 | " 0.488888 | \n",
420 | " 2.997133 | \n",
421 | " 6 | \n",
422 | " 7 | \n",
423 | " 5 | \n",
424 | " 7 | \n",
425 | " 23.225000 | \n",
426 | " 11.252 | \n",
427 | " 50.731510 | \n",
428 | " 0.405664 | \n",
429 | " ... | \n",
430 | " 2.83 | \n",
431 | " 40.009998 | \n",
432 | " 38.000000 | \n",
433 | " 1.0 | \n",
434 | " 1.0 | \n",
435 | " 1.0 | \n",
436 | " 0.0 | \n",
437 | " 1000.0 | \n",
438 | " 1007.0 | \n",
439 | " POLYGON ((8.685274124145508 13.63951969146729,... | \n",
440 | "
\n",
441 | " \n",
442 | "
\n",
443 | "
5 rows × 21 columns
\n",
444 | "
"
445 | ],
446 | "text/plain": [
447 | " AREA PERIMETER COLUMBUS_ COLUMBUS_I POLYID NEIG HOVAL \\\n",
448 | "0 0.309441 2.440629 2 5 1 5 80.467003 \n",
449 | "1 0.259329 2.236939 3 1 2 1 44.567001 \n",
450 | "2 0.192468 2.187547 4 6 3 6 26.350000 \n",
451 | "3 0.083841 1.427635 5 2 4 2 33.200001 \n",
452 | "4 0.488888 2.997133 6 7 5 7 23.225000 \n",
453 | "\n",
454 | " INC CRIME OPEN ... DISCBD X Y NSA NSB \\\n",
455 | "0 19.531 15.725980 2.850747 ... 5.03 38.799999 44.070000 1.0 1.0 \n",
456 | "1 21.232 18.801754 5.296720 ... 4.27 35.619999 42.380001 1.0 1.0 \n",
457 | "2 15.956 30.626781 4.534649 ... 3.89 39.820000 41.180000 1.0 1.0 \n",
458 | "3 4.477 32.387760 0.394427 ... 3.70 36.500000 40.520000 1.0 1.0 \n",
459 | "4 11.252 50.731510 0.405664 ... 2.83 40.009998 38.000000 1.0 1.0 \n",
460 | "\n",
461 | " EW CP THOUS NEIGNO geometry \n",
462 | "0 1.0 0.0 1000.0 1005.0 POLYGON ((8.624129295349121 14.23698043823242,... \n",
463 | "1 0.0 0.0 1000.0 1001.0 POLYGON ((8.252790451049805 14.23694038391113,... \n",
464 | "2 1.0 0.0 1000.0 1006.0 POLYGON ((8.653305053710938 14.00809001922607,... \n",
465 | "3 0.0 0.0 1000.0 1002.0 POLYGON ((8.459499359130859 13.82034969329834,... \n",
466 | "4 1.0 0.0 1000.0 1007.0 POLYGON ((8.685274124145508 13.63951969146729,... \n",
467 | "\n",
468 | "[5 rows x 21 columns]"
469 | ]
470 | },
471 | "execution_count": 20,
472 | "metadata": {},
473 | "output_type": "execute_result"
474 | }
475 | ],
476 | "source": [
477 | "shp = pysal.lib.examples.get_path('columbus.shp')\n",
478 | "db = gpd.read_file(shp)\n",
479 | "db.head()"
480 | ]
481 | },
482 | {
483 | "cell_type": "code",
484 | "execution_count": 21,
485 | "metadata": {},
486 | "outputs": [],
487 | "source": [
488 | "db.crs['init'] = 'epsg:26918'"
489 | ]
490 | },
491 | {
492 | "cell_type": "code",
493 | "execution_count": 22,
494 | "metadata": {},
495 | "outputs": [
496 | {
497 | "data": {
498 | "image/png": "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\n",
499 | "text/plain": [
500 | ""
501 | ]
502 | },
503 | "metadata": {
504 | "needs_background": "light"
505 | },
506 | "output_type": "display_data"
507 | }
508 | ],
509 | "source": [
510 | "db_wgs84 = db.to_crs(epsg=4326)\n",
511 | "db_wgs84.plot()\n",
512 | "plt.show()"
513 | ]
514 | },
515 | {
516 | "cell_type": "code",
517 | "execution_count": 23,
518 | "metadata": {
519 | "scrolled": true
520 | },
521 | "outputs": [
522 | {
523 | "data": {
524 | "image/png": "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\n",
525 | "text/plain": [
526 | ""
527 | ]
528 | },
529 | "metadata": {
530 | "needs_background": "light"
531 | },
532 | "output_type": "display_data"
533 | }
534 | ],
535 | "source": [
536 | "db.plot(column='INC', scheme='fisher_jenks', cmap=plt.matplotlib.cm.Blues)\n",
537 | "#plt.show()\n",
538 | "plt.savefig(fname='inc.png')"
539 | ]
540 | },
541 | {
542 | "cell_type": "code",
543 | "execution_count": null,
544 | "metadata": {},
545 | "outputs": [],
546 | "source": []
547 | },
548 | {
549 | "cell_type": "code",
550 | "execution_count": null,
551 | "metadata": {},
552 | "outputs": [],
553 | "source": []
554 | },
555 | {
556 | "cell_type": "code",
557 | "execution_count": null,
558 | "metadata": {},
559 | "outputs": [],
560 | "source": []
561 | }
562 | ],
563 | "metadata": {
564 | "kernelspec": {
565 | "display_name": "Python 3",
566 | "language": "python",
567 | "name": "python3"
568 | },
569 | "language_info": {
570 | "codemirror_mode": {
571 | "name": "ipython",
572 | "version": 3
573 | },
574 | "file_extension": ".py",
575 | "mimetype": "text/x-python",
576 | "name": "python",
577 | "nbconvert_exporter": "python",
578 | "pygments_lexer": "ipython3",
579 | "version": "3.6.7"
580 | }
581 | },
582 | "nbformat": 4,
583 | "nbformat_minor": 2
584 | }
585 |
--------------------------------------------------------------------------------
/content/.ipynb_checkpoints/00_introduction-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {
6 | "slideshow": {
7 | "slide_type": "slide"
8 | }
9 | },
10 | "source": [
11 | "# Geospatial Data Science with PySAL @FOSS4G2019\n",
12 | "\n",
13 | "Sergio Rey \n",
14 | "Stefanie Lumnitz \n",
15 | "Elijah Knaap \n",
16 | "Wei Kang \n",
17 | "\n",
18 | "\n",
19 | "
\n"
20 | ]
21 | },
22 | {
23 | "cell_type": "markdown",
24 | "metadata": {
25 | "slideshow": {
26 | "slide_type": "slide"
27 | }
28 | },
29 | "source": [
30 | "## Origins\n",
31 | "\n"
32 | ]
33 | },
34 | {
35 | "cell_type": "markdown",
36 | "metadata": {
37 | "slideshow": {
38 | "slide_type": "subslide"
39 | }
40 | },
41 | "source": [
42 | "## Motivation\n",
43 | "\n",
44 | "- Leverage Existing Tools\n",
45 | " - GeoDa/PySpace\n",
46 | " - STARS\n",
47 | "- Develop Core Library\n",
48 | " - spatial data analytical functions\n",
49 | " - enhanced specialization, modularity\n",
50 | " - fill void in Python scientific stack\n",
51 | "- Flexible Delivery System\n",
52 | " - interactive shells\n",
53 | " - GUI\n",
54 | " - Toolkits\n",
55 | " - webservices"
56 | ]
57 | },
58 | {
59 | "cell_type": "markdown",
60 | "metadata": {
61 | "slideshow": {
62 | "slide_type": "subslide"
63 | }
64 | },
65 | "source": [
66 | "## Release History\n",
67 | "\n"
68 | ]
69 | },
70 | {
71 | "cell_type": "markdown",
72 | "metadata": {
73 | "slideshow": {
74 | "slide_type": "slide"
75 | }
76 | },
77 | "source": [
78 | "## Use Case: shell\n",
79 | "\n"
80 | ]
81 | },
82 | {
83 | "cell_type": "markdown",
84 | "metadata": {
85 | "slideshow": {
86 | "slide_type": "subslide"
87 | }
88 | },
89 | "source": [
90 | "## Use Case: notebook\n",
91 | "\n"
92 | ]
93 | },
94 | {
95 | "cell_type": "markdown",
96 | "metadata": {
97 | "slideshow": {
98 | "slide_type": "subslide"
99 | }
100 | },
101 | "source": [
102 | "## Use Case: application\n",
103 | "\n"
104 | ]
105 | },
106 | {
107 | "cell_type": "markdown",
108 | "metadata": {
109 | "slideshow": {
110 | "slide_type": "subslide"
111 | }
112 | },
113 | "source": [
114 | "## Use Case: toolkit\n",
115 | "\n"
116 | ]
117 | },
118 | {
119 | "cell_type": "markdown",
120 | "metadata": {
121 | "slideshow": {
122 | "slide_type": "subslide"
123 | }
124 | },
125 | "source": [
126 | "## Use Case: cloud\n",
127 | "\n"
128 | ]
129 | },
130 | {
131 | "cell_type": "markdown",
132 | "metadata": {
133 | "slideshow": {
134 | "slide_type": "slide"
135 | }
136 | },
137 | "source": [
138 | "## Adoption\n",
139 | "\n",
140 | ""
141 | ]
142 | },
143 | {
144 | "cell_type": "markdown",
145 | "metadata": {
146 | "slideshow": {
147 | "slide_type": "subslide"
148 | }
149 | },
150 | "source": [
151 | "## Adoption\n",
152 | "\n",
153 | ""
154 | ]
155 | },
156 | {
157 | "cell_type": "markdown",
158 | "metadata": {
159 | "slideshow": {
160 | "slide_type": "subslide"
161 | }
162 | },
163 | "source": [
164 | "## Adoption\n",
165 | "\n",
166 | ""
167 | ]
168 | },
169 | {
170 | "cell_type": "markdown",
171 | "metadata": {
172 | "slideshow": {
173 | "slide_type": "subslide"
174 | }
175 | },
176 | "source": [
177 | "http://angrybirdsriogame.info/?d=How+To+Prepare+Your+Data+For+Machine+Learning+in+Python\n",
178 | "\n",
179 | ""
180 | ]
181 | },
182 | {
183 | "cell_type": "markdown",
184 | "metadata": {
185 | "slideshow": {
186 | "slide_type": "subslide"
187 | }
188 | },
189 | "source": [
190 | "## PySAL GitHub Stars\n",
191 | ""
192 | ]
193 | },
194 | {
195 | "cell_type": "markdown",
196 | "metadata": {
197 | "slideshow": {
198 | "slide_type": "slide"
199 | }
200 | },
201 | "source": [
202 | "## PySAL 2.0\n",
203 | ""
204 | ]
205 | },
206 | {
207 | "cell_type": "markdown",
208 | "metadata": {
209 | "slideshow": {
210 | "slide_type": "slide"
211 | }
212 | },
213 | "source": [
214 | "## Installation Options\n",
215 | "\n",
216 | ""
217 | ]
218 | }
219 | ],
220 | "metadata": {
221 | "celltoolbar": "Slideshow",
222 | "kernelspec": {
223 | "display_name": "Python 3",
224 | "language": "python",
225 | "name": "python3"
226 | },
227 | "language_info": {
228 | "codemirror_mode": {
229 | "name": "ipython",
230 | "version": 3
231 | },
232 | "file_extension": ".py",
233 | "mimetype": "text/x-python",
234 | "name": "python",
235 | "nbconvert_exporter": "python",
236 | "pygments_lexer": "ipython3",
237 | "version": "3.6.7"
238 | }
239 | },
240 | "nbformat": 4,
241 | "nbformat_minor": 2
242 | }
243 |
--------------------------------------------------------------------------------
/content/.ipynb_checkpoints/09_spatial_dynamics_analytics-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Spatial dynamics analytics with [pysal/giddy](https://giddy.readthedocs.io/en/latest/index.html)\n",
8 | "\n",
9 | "* Dynamics of cross-sectional spatial autocorrelation \n",
10 | "* Modeling spatial dynamics with Markov-based methods\n",
11 | " * Classic Markov\n",
12 | " * Spatial Markov\n",
13 | " * LISA Markov"
14 | ]
15 | },
16 | {
17 | "cell_type": "code",
18 | "execution_count": null,
19 | "metadata": {},
20 | "outputs": [],
21 | "source": [
22 | "from pysal.lib import io, examples, weights"
23 | ]
24 | },
25 | {
26 | "cell_type": "code",
27 | "execution_count": null,
28 | "metadata": {},
29 | "outputs": [],
30 | "source": [
31 | "import matplotlib\n",
32 | "import numpy as np\n",
33 | "import geopandas as gpd\n",
34 | "import matplotlib.pyplot as plt\n",
35 | "%matplotlib inline\n",
36 | "import seaborn as sns\n",
37 | "import pandas as pd"
38 | ]
39 | },
40 | {
41 | "cell_type": "code",
42 | "execution_count": null,
43 | "metadata": {},
44 | "outputs": [],
45 | "source": [
46 | "pdUS_real = pd.read_csv(\"data/US_state_pci_constant09_1929_2009.csv\")\n",
47 | "data_table = gpd.read_file(examples.get_path('us48.shp'))\n",
48 | "complete_table = data_table.merge(pdUS_real,left_on='STATE_NAME',right_on='Name')\n",
49 | "complete_table.head()"
50 | ]
51 | },
52 | {
53 | "cell_type": "markdown",
54 | "metadata": {},
55 | "source": [
56 | "## Dynamics of Spatial Dependence"
57 | ]
58 | },
59 | {
60 | "cell_type": "code",
61 | "execution_count": null,
62 | "metadata": {},
63 | "outputs": [],
64 | "source": [
65 | "names = pdUS_real[\"Name\"].values\n",
66 | "years = range(1929,2010)\n",
67 | "pd_pci_real = pdUS_real[list(map(str,years))]\n",
68 | "pd_pci_real.index = names\n",
69 | "pd_pci_real.head()"
70 | ]
71 | },
72 | {
73 | "cell_type": "code",
74 | "execution_count": null,
75 | "metadata": {},
76 | "outputs": [],
77 | "source": [
78 | "pci_real = pd_pci_real.values.T\n",
79 | "pci_real.shape"
80 | ]
81 | },
82 | {
83 | "cell_type": "markdown",
84 | "metadata": {},
85 | "source": [
86 | "Prepare the spatial weight matrix - queen contiguity"
87 | ]
88 | },
89 | {
90 | "cell_type": "code",
91 | "execution_count": null,
92 | "metadata": {},
93 | "outputs": [],
94 | "source": [
95 | "w = io.open(examples.get_path(\"states48.gal\")).read()\n",
96 | "w.transform = 'R'"
97 | ]
98 | },
99 | {
100 | "cell_type": "code",
101 | "execution_count": null,
102 | "metadata": {},
103 | "outputs": [],
104 | "source": [
105 | "from pysal.explore import esda\n",
106 | "mits = [esda.moran.Moran(cs, w) for cs in pci_real]\n",
107 | "res = np.array([(mi.I, mi.EI, mi.seI_norm, mi.sim[974]) for mi in mits])\n",
108 | "fig, ax = plt.subplots(nrows=1, ncols=1,figsize = (10,5) )\n",
109 | "ax.plot(years, res[:,0], label='Moran\\'s I')\n",
110 | "#plot(years, res[:,1], label='E[I]')\n",
111 | "ax.plot(years, res[:,1]+1.96*res[:,2], label='Upper bound',linestyle='dashed')\n",
112 | "ax.plot(years, res[:,1]-1.96*res[:,2], label='Lower bound',linestyle='dashed')\n",
113 | "ax.set_title(\"Global spatial autocorrelation for annual US per capita incomes\",fontdict={'fontsize':15})\n",
114 | "ax.set_xlim([1929,2009])\n",
115 | "ax.legend()"
116 | ]
117 | },
118 | {
119 | "cell_type": "markdown",
120 | "metadata": {},
121 | "source": [
122 | "## Markov-based methods \n",
123 | "* Role of space in shaping per capita income dynamics"
124 | ]
125 | },
126 | {
127 | "cell_type": "markdown",
128 | "metadata": {},
129 | "source": [
130 | "Spatial Markov - consider the impacts of regions' income levels on their neighbors in the following time period"
131 | ]
132 | },
133 | {
134 | "cell_type": "code",
135 | "execution_count": null,
136 | "metadata": {},
137 | "outputs": [],
138 | "source": [
139 | "mean = pci_real.mean(axis=1)\n",
140 | "mean.shape = (81,1)\n",
141 | "rpci_real = pci_real / mean"
142 | ]
143 | },
144 | {
145 | "cell_type": "markdown",
146 | "metadata": {},
147 | "source": [
148 | "Discretization"
149 | ]
150 | },
151 | {
152 | "cell_type": "code",
153 | "execution_count": null,
154 | "metadata": {},
155 | "outputs": [],
156 | "source": [
157 | "pooled_rpci_real = rpci_real.flatten()\n",
158 | "sns.kdeplot(pooled_rpci_real,shade=True)\n"
159 | ]
160 | },
161 | {
162 | "cell_type": "code",
163 | "execution_count": null,
164 | "metadata": {},
165 | "outputs": [],
166 | "source": [
167 | "pooled_n = len(pooled_rpci_real)\n",
168 | "pooled_rpci_real.sort()\n",
169 | "plt.axvline(pooled_rpci_real[int(pooled_n * 0.2)],color=\"r\")"
170 | ]
171 | },
172 | {
173 | "cell_type": "code",
174 | "execution_count": null,
175 | "metadata": {},
176 | "outputs": [],
177 | "source": [
178 | "sns.kdeplot(pooled_rpci_real,shade=True)\n",
179 | "plt.axvline(pooled_rpci_real[int(pooled_n * 0.2)],color=\"r\")\n",
180 | "plt.axvline(pooled_rpci_real[int(pooled_n * 0.4)],color=\"r\")\n",
181 | "plt.axvline(pooled_rpci_real[int(pooled_n * 0.6)],color=\"r\")\n",
182 | "plt.axvline(pooled_rpci_real[int(pooled_n * 0.8)],color=\"r\")"
183 | ]
184 | },
185 | {
186 | "cell_type": "code",
187 | "execution_count": null,
188 | "metadata": {},
189 | "outputs": [],
190 | "source": [
191 | "from pysal.explore import giddy\n",
192 | "smarkov = giddy.markov.Spatial_Markov(rpci_real.T, w, fixed = True, k = 5)"
193 | ]
194 | },
195 | {
196 | "cell_type": "code",
197 | "execution_count": null,
198 | "metadata": {},
199 | "outputs": [],
200 | "source": [
201 | "giddy.markov.Spatial_Markov?"
202 | ]
203 | },
204 | {
205 | "cell_type": "code",
206 | "execution_count": null,
207 | "metadata": {},
208 | "outputs": [],
209 | "source": [
210 | "smarkov.summary()"
211 | ]
212 | },
213 | {
214 | "cell_type": "markdown",
215 | "metadata": {},
216 | "source": [
217 | "Steady state distributions"
218 | ]
219 | },
220 | {
221 | "cell_type": "code",
222 | "execution_count": null,
223 | "metadata": {},
224 | "outputs": [],
225 | "source": [
226 | "smarkov.s"
227 | ]
228 | },
229 | {
230 | "cell_type": "code",
231 | "execution_count": null,
232 | "metadata": {},
233 | "outputs": [],
234 | "source": [
235 | "smarkov.S"
236 | ]
237 | },
238 | {
239 | "cell_type": "code",
240 | "execution_count": null,
241 | "metadata": {},
242 | "outputs": [],
243 | "source": [
244 | "smarkov.F"
245 | ]
246 | },
247 | {
248 | "cell_type": "markdown",
249 | "metadata": {},
250 | "source": [
251 | "LISA Markov - consider the joint transitions of regions' and neighbors' income levels\n",
252 | "\n",
253 | "* Markov state space={1(HH), 2(LH), 3(LL), 4(HL)}"
254 | ]
255 | },
256 | {
257 | "cell_type": "code",
258 | "execution_count": null,
259 | "metadata": {},
260 | "outputs": [],
261 | "source": [
262 | "giddy.markov.LISA_Markov?"
263 | ]
264 | },
265 | {
266 | "cell_type": "code",
267 | "execution_count": null,
268 | "metadata": {},
269 | "outputs": [],
270 | "source": [
271 | "lm = giddy.markov.LISA_Markov(pci_real.T, w)\n",
272 | "lm.classes"
273 | ]
274 | },
275 | {
276 | "cell_type": "code",
277 | "execution_count": null,
278 | "metadata": {},
279 | "outputs": [],
280 | "source": [
281 | "lm.p"
282 | ]
283 | },
284 | {
285 | "cell_type": "code",
286 | "execution_count": null,
287 | "metadata": {},
288 | "outputs": [],
289 | "source": [
290 | "lm.steady_state"
291 | ]
292 | },
293 | {
294 | "cell_type": "code",
295 | "execution_count": null,
296 | "metadata": {},
297 | "outputs": [],
298 | "source": [
299 | "giddy.ergodic.fmpt(lm.p)"
300 | ]
301 | },
302 | {
303 | "cell_type": "code",
304 | "execution_count": null,
305 | "metadata": {},
306 | "outputs": [],
307 | "source": [
308 | "lm.chi_2"
309 | ]
310 | },
311 | {
312 | "cell_type": "code",
313 | "execution_count": null,
314 | "metadata": {},
315 | "outputs": [],
316 | "source": []
317 | },
318 | {
319 | "cell_type": "code",
320 | "execution_count": null,
321 | "metadata": {},
322 | "outputs": [],
323 | "source": []
324 | },
325 | {
326 | "cell_type": "code",
327 | "execution_count": null,
328 | "metadata": {},
329 | "outputs": [],
330 | "source": []
331 | }
332 | ],
333 | "metadata": {
334 | "kernelspec": {
335 | "display_name": "Python 3",
336 | "language": "python",
337 | "name": "python3"
338 | },
339 | "language_info": {
340 | "codemirror_mode": {
341 | "name": "ipython",
342 | "version": 3
343 | },
344 | "file_extension": ".py",
345 | "mimetype": "text/x-python",
346 | "name": "python",
347 | "nbconvert_exporter": "python",
348 | "pygments_lexer": "ipython3",
349 | "version": "3.6.7"
350 | }
351 | },
352 | "nbformat": 4,
353 | "nbformat_minor": 2
354 | }
355 |
--------------------------------------------------------------------------------
/content/.ipynb_checkpoints/11_taz_example-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "### Weights operations"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": null,
13 | "metadata": {},
14 | "outputs": [],
15 | "source": [
16 | "import numpy as np\n",
17 | "import libpysal as ps\n",
18 | "import random as rdm\n",
19 | "import geopandas as gpd\n",
20 | "from matplotlib.collections import LineCollection\n",
21 | "import matplotlib.pyplot as plt\n",
22 | "%matplotlib inline"
23 | ]
24 | },
25 | {
26 | "cell_type": "code",
27 | "execution_count": null,
28 | "metadata": {},
29 | "outputs": [],
30 | "source": [
31 | "shp = gpd.read_file(ps.examples.get_path(\"taz.shp\"))\n",
32 | "shp.head()"
33 | ]
34 | },
35 | {
36 | "cell_type": "code",
37 | "execution_count": null,
38 | "metadata": {},
39 | "outputs": [],
40 | "source": [
41 | "shp.plot(figsize=(15,15),color='white', edgecolor='grey')\n",
42 | "plt.axis('off')"
43 | ]
44 | },
45 | {
46 | "cell_type": "markdown",
47 | "metadata": {},
48 | "source": [
49 | "## County as unique values"
50 | ]
51 | },
52 | {
53 | "cell_type": "code",
54 | "execution_count": null,
55 | "metadata": {},
56 | "outputs": [],
57 | "source": [
58 | "shp[\"CNTY\"].describe()"
59 | ]
60 | },
61 | {
62 | "cell_type": "code",
63 | "execution_count": null,
64 | "metadata": {},
65 | "outputs": [],
66 | "source": [
67 | "fig, ax = plt.subplots(figsize=(15,15))\n",
68 | "ax.set_aspect('equal')\n",
69 | "shp.plot(ax=ax,color='white', edgecolor='black')\n",
70 | "shp.plot(column=\"CNTY\", ax=ax, categorical=True,cmap=\"Pastel1\",alpha=0.6)\n",
71 | "ax.set_axis_off()"
72 | ]
73 | },
74 | {
75 | "cell_type": "markdown",
76 | "metadata": {},
77 | "source": [
78 | "### Construct a Rook contiguity weight"
79 | ]
80 | },
81 | {
82 | "cell_type": "code",
83 | "execution_count": null,
84 | "metadata": {},
85 | "outputs": [],
86 | "source": [
87 | "wrook = ps.weights.Rook.from_dataframe(shp)"
88 | ]
89 | },
90 | {
91 | "cell_type": "code",
92 | "execution_count": null,
93 | "metadata": {},
94 | "outputs": [],
95 | "source": [
96 | "def w2line_graph(w, shp):\n",
97 | " segments = []\n",
98 | " centroids = shp.centroid.values\n",
99 | " for i in w.id2i:\n",
100 | " origin = np.array(centroids[i].coords)[0] \n",
101 | " for j in w.neighbors[i]:\n",
102 | " dest = np.array(centroids[j].coords)[0]\n",
103 | " ij = [i,j]\n",
104 | " ij.sort()\n",
105 | " segments.append([origin, dest])\n",
106 | "\n",
107 | " return segments "
108 | ]
109 | },
110 | {
111 | "cell_type": "code",
112 | "execution_count": null,
113 | "metadata": {},
114 | "outputs": [],
115 | "source": [
116 | "segs = w2line_graph(wrook, shp)\n",
117 | "fig, ax = plt.subplots(figsize=(15,15))\n",
118 | "ax.set_aspect('equal')\n",
119 | "shp.plot(ax=ax, color='white', edgecolor='grey')\n",
120 | "segs_plot = LineCollection(np.array(segs),colors=\"red\")\n",
121 | "segs_plot.set_linewidth(0.20)\n",
122 | "ax.add_collection(segs_plot)\n",
123 | "ax.set_axis_off()"
124 | ]
125 | },
126 | {
127 | "cell_type": "markdown",
128 | "metadata": {},
129 | "source": [
130 | "## Intersection weights"
131 | ]
132 | },
133 | {
134 | "cell_type": "code",
135 | "execution_count": null,
136 | "metadata": {},
137 | "outputs": [],
138 | "source": [
139 | "ps.weights.block_weights?"
140 | ]
141 | },
142 | {
143 | "cell_type": "code",
144 | "execution_count": null,
145 | "metadata": {},
146 | "outputs": [],
147 | "source": [
148 | "wb = ps.weights.block_weights(shp[\"CNTY\"])"
149 | ]
150 | },
151 | {
152 | "cell_type": "code",
153 | "execution_count": null,
154 | "metadata": {
155 | "scrolled": true
156 | },
157 | "outputs": [],
158 | "source": [
159 | "wint = ps.weights.w_intersection(wb, wrook)"
160 | ]
161 | },
162 | {
163 | "cell_type": "code",
164 | "execution_count": null,
165 | "metadata": {},
166 | "outputs": [],
167 | "source": [
168 | "segs = w2line_graph(wint, shp)\n",
169 | "fig, ax = plt.subplots(figsize=(15,15))\n",
170 | "ax.set_aspect('equal')\n",
171 | "shp.plot(ax=ax, color='white', edgecolor='grey')\n",
172 | "segs_plot = LineCollection(np.array(segs),colors=\"red\")\n",
173 | "segs_plot.set_linewidth(0.20)\n",
174 | "ax.add_collection(segs_plot)\n",
175 | "ax.set_axis_off()"
176 | ]
177 | },
178 | {
179 | "cell_type": "code",
180 | "execution_count": null,
181 | "metadata": {},
182 | "outputs": [],
183 | "source": [
184 | "fig, ax = plt.subplots(figsize=(15,15))\n",
185 | "ax.set_aspect('equal')\n",
186 | "shp.plot(ax=ax,color='white', edgecolor='black')\n",
187 | "shp.plot(column=\"CNTY\", ax=ax, categorical=True,cmap=\"Pastel1\",alpha=0.6)\n",
188 | "segs_plot = LineCollection(np.array(segs),colors=\"red\")\n",
189 | "segs_plot.set_linewidth(0.20)\n",
190 | "ax.add_collection(segs_plot)\n",
191 | "ax.set_axis_off()"
192 | ]
193 | },
194 | {
195 | "cell_type": "code",
196 | "execution_count": null,
197 | "metadata": {},
198 | "outputs": [],
199 | "source": []
200 | },
201 | {
202 | "cell_type": "code",
203 | "execution_count": null,
204 | "metadata": {},
205 | "outputs": [],
206 | "source": []
207 | },
208 | {
209 | "cell_type": "code",
210 | "execution_count": null,
211 | "metadata": {},
212 | "outputs": [],
213 | "source": []
214 | },
215 | {
216 | "cell_type": "code",
217 | "execution_count": null,
218 | "metadata": {},
219 | "outputs": [],
220 | "source": []
221 | }
222 | ],
223 | "metadata": {
224 | "anaconda-cloud": {},
225 | "kernelspec": {
226 | "display_name": "Python 3",
227 | "language": "python",
228 | "name": "python3"
229 | },
230 | "language_info": {
231 | "codemirror_mode": {
232 | "name": "ipython",
233 | "version": 3
234 | },
235 | "file_extension": ".py",
236 | "mimetype": "text/x-python",
237 | "name": "python",
238 | "nbconvert_exporter": "python",
239 | "pygments_lexer": "ipython3",
240 | "version": "3.6.6"
241 | }
242 | },
243 | "nbformat": 4,
244 | "nbformat_minor": 2
245 | }
246 |
--------------------------------------------------------------------------------
/content/.ipynb_checkpoints/18_gol-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Conway's Game of Life with PySAL"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "## Rules ##\n",
15 | "\n",
16 | " 1. A cell that is currently alive and that has two **or** three live neighbors stays alive\n",
17 | " 2. A cell that is currently dead with **exactly** three live neighbors comes alive \n",
18 | " 3. All other cells remain dead, or die due to loneliness (less than 2 neighbors) or overcrowding (more than 3 neighbors)"
19 | ]
20 | },
21 | {
22 | "cell_type": "code",
23 | "execution_count": null,
24 | "metadata": {},
25 | "outputs": [],
26 | "source": [
27 | "import libpysal as ps\n",
28 | "from scipy.stats import bernoulli\n",
29 | "%pylab inline"
30 | ]
31 | },
32 | {
33 | "cell_type": "code",
34 | "execution_count": null,
35 | "metadata": {},
36 | "outputs": [],
37 | "source": [
38 | "k = 8 # dimension of lattice"
39 | ]
40 | },
41 | {
42 | "cell_type": "code",
43 | "execution_count": null,
44 | "metadata": {},
45 | "outputs": [],
46 | "source": [
47 | "w = ps.weights.lat2W(k,k,rook=False)"
48 | ]
49 | },
50 | {
51 | "cell_type": "code",
52 | "execution_count": null,
53 | "metadata": {},
54 | "outputs": [],
55 | "source": [
56 | "w.n"
57 | ]
58 | },
59 | {
60 | "cell_type": "code",
61 | "execution_count": null,
62 | "metadata": {},
63 | "outputs": [],
64 | "source": [
65 | "w.neighbors[0]"
66 | ]
67 | },
68 | {
69 | "cell_type": "code",
70 | "execution_count": null,
71 | "metadata": {},
72 | "outputs": [],
73 | "source": [
74 | "w.neighbors[45]"
75 | ]
76 | },
77 | {
78 | "cell_type": "code",
79 | "execution_count": null,
80 | "metadata": {},
81 | "outputs": [],
82 | "source": [
83 | "w.weights[0]"
84 | ]
85 | },
86 | {
87 | "cell_type": "code",
88 | "execution_count": null,
89 | "metadata": {},
90 | "outputs": [],
91 | "source": [
92 | "y = bernoulli.rvs(0.45,size=w.n)"
93 | ]
94 | },
95 | {
96 | "cell_type": "code",
97 | "execution_count": null,
98 | "metadata": {},
99 | "outputs": [],
100 | "source": [
101 | "y"
102 | ]
103 | },
104 | {
105 | "cell_type": "code",
106 | "execution_count": null,
107 | "metadata": {},
108 | "outputs": [],
109 | "source": [
110 | "wy = ps.weights.lag_spatial(w,y)"
111 | ]
112 | },
113 | {
114 | "cell_type": "code",
115 | "execution_count": null,
116 | "metadata": {},
117 | "outputs": [],
118 | "source": [
119 | "wy"
120 | ]
121 | },
122 | {
123 | "cell_type": "markdown",
124 | "metadata": {},
125 | "source": [
126 | "## Rules ##\n",
127 | "\n",
128 | " 1. A cell that is currently alive and that has two **or** three live neighbors stays alive\n",
129 | " 2. A cell that is currently dead with **exactly** three live neighbors comes alive \n",
130 | " 3. All other cells remain dead, or die due to loneliness (less than 2 neighbors) or overcrowding (more than 3 neighbors)"
131 | ]
132 | },
133 | {
134 | "cell_type": "markdown",
135 | "metadata": {},
136 | "source": [
137 | "Rule 1: find live cells and count their neighbors"
138 | ]
139 | },
140 | {
141 | "cell_type": "code",
142 | "execution_count": null,
143 | "metadata": {},
144 | "outputs": [],
145 | "source": [
146 | "ywy = y*wy"
147 | ]
148 | },
149 | {
150 | "cell_type": "code",
151 | "execution_count": null,
152 | "metadata": {},
153 | "outputs": [],
154 | "source": [
155 | "lw23 = np.nonzero( (ywy==2) + (ywy==3) )"
156 | ]
157 | },
158 | {
159 | "cell_type": "code",
160 | "execution_count": null,
161 | "metadata": {},
162 | "outputs": [],
163 | "source": [
164 | "lw23"
165 | ]
166 | },
167 | {
168 | "cell_type": "markdown",
169 | "metadata": {},
170 | "source": [
171 | "Rule 2: find dead cells with exactly 3 neighbors"
172 | ]
173 | },
174 | {
175 | "cell_type": "code",
176 | "execution_count": null,
177 | "metadata": {},
178 | "outputs": [],
179 | "source": [
180 | "dw3 = (1-y) * wy"
181 | ]
182 | },
183 | {
184 | "cell_type": "code",
185 | "execution_count": null,
186 | "metadata": {},
187 | "outputs": [],
188 | "source": [
189 | "np.nonzero(dw3==3)"
190 | ]
191 | },
192 | {
193 | "cell_type": "markdown",
194 | "metadata": {},
195 | "source": [
196 | "Rules 1 and 2 give us the surviving cells"
197 | ]
198 | },
199 | {
200 | "cell_type": "code",
201 | "execution_count": null,
202 | "metadata": {},
203 | "outputs": [],
204 | "source": [
205 | "live_next = np.nonzero( (ywy==2) + (ywy==3) + (dw3==3) )"
206 | ]
207 | },
208 | {
209 | "cell_type": "code",
210 | "execution_count": null,
211 | "metadata": {},
212 | "outputs": [],
213 | "source": [
214 | "live_next"
215 | ]
216 | },
217 | {
218 | "cell_type": "code",
219 | "execution_count": null,
220 | "metadata": {},
221 | "outputs": [],
222 | "source": [
223 | "y[live_next]"
224 | ]
225 | },
226 | {
227 | "cell_type": "markdown",
228 | "metadata": {},
229 | "source": [
230 | "So we see that in the future, some dead cells will becoming alive. But what about live cells now that die in the next period?\n",
231 | "\n",
232 | "We know that they will be dead next period. Allocate an array with zeros for the next period and assign the live cells. Everyone else is dead."
233 | ]
234 | },
235 | {
236 | "cell_type": "code",
237 | "execution_count": null,
238 | "metadata": {},
239 | "outputs": [],
240 | "source": [
241 | "y1 = np.zeros_like(y)"
242 | ]
243 | },
244 | {
245 | "cell_type": "code",
246 | "execution_count": null,
247 | "metadata": {},
248 | "outputs": [],
249 | "source": [
250 | "y1[live_next] = 1"
251 | ]
252 | },
253 | {
254 | "cell_type": "code",
255 | "execution_count": null,
256 | "metadata": {},
257 | "outputs": [],
258 | "source": [
259 | "y1"
260 | ]
261 | },
262 | {
263 | "cell_type": "markdown",
264 | "metadata": {},
265 | "source": [
266 | "We would then iterate these steps for future generations. \n",
267 | "\n",
268 | "Let's place the process inside a function for reuse later"
269 | ]
270 | },
271 | {
272 | "cell_type": "code",
273 | "execution_count": null,
274 | "metadata": {},
275 | "outputs": [],
276 | "source": [
277 | "def generation(y,w):\n",
278 | " y1 = np.zeros_like(y)\n",
279 | " wy = ps.weights.lag_spatial(w,y)\n",
280 | " ywy = y * wy\n",
281 | " live_next = np.nonzero( ( ywy == 2 ) + ( ywy == 3 ) + ( ( 1-y ) * wy == 3 ) )\n",
282 | " y1[live_next] = 1\n",
283 | " return y1\n",
284 | " "
285 | ]
286 | },
287 | {
288 | "cell_type": "markdown",
289 | "metadata": {},
290 | "source": [
291 | "Try this out on some fresh data."
292 | ]
293 | },
294 | {
295 | "cell_type": "code",
296 | "execution_count": null,
297 | "metadata": {},
298 | "outputs": [],
299 | "source": [
300 | "y = bernoulli.rvs(0.45,size=w.n)"
301 | ]
302 | },
303 | {
304 | "cell_type": "code",
305 | "execution_count": null,
306 | "metadata": {},
307 | "outputs": [],
308 | "source": [
309 | "y1 = generation(y,w)"
310 | ]
311 | },
312 | {
313 | "cell_type": "code",
314 | "execution_count": null,
315 | "metadata": {},
316 | "outputs": [],
317 | "source": [
318 | "y1"
319 | ]
320 | },
321 | {
322 | "cell_type": "code",
323 | "execution_count": null,
324 | "metadata": {},
325 | "outputs": [],
326 | "source": [
327 | "y"
328 | ]
329 | },
330 | {
331 | "cell_type": "code",
332 | "execution_count": null,
333 | "metadata": {},
334 | "outputs": [],
335 | "source": [
336 | "y2 = generation(y1,w)"
337 | ]
338 | },
339 | {
340 | "cell_type": "code",
341 | "execution_count": null,
342 | "metadata": {},
343 | "outputs": [],
344 | "source": [
345 | "y2"
346 | ]
347 | },
348 | {
349 | "cell_type": "markdown",
350 | "metadata": {},
351 | "source": [
352 | "One interesting initial pattern is the so called R-pentomino.\n",
353 | "\n",
354 | "We will create one and then run a simulation to see how the solutions evolve."
355 | ]
356 | },
357 | {
358 | "cell_type": "code",
359 | "execution_count": null,
360 | "metadata": {},
361 | "outputs": [],
362 | "source": [
363 | "ngen=350\n",
364 | "k = 50\n",
365 | "w = ps.weights.lat2W(k, k, rook=False)\n",
366 | "#y = bernoulli.rvs(0.45,size=w.n)\n",
367 | "y = np.zeros((w.n,))\n",
368 | "#R-pentomino pattern http://conwaylife.com/w/index.php?title=R-pentomino\n",
369 | "ymat = np.zeros((k,k))\n",
370 | "mid = k//2\n",
371 | "ymat[mid,mid] = 1\n",
372 | "ymat[mid-1,mid ] = 1 # left\n",
373 | "ymat[mid,mid+1] = 1 # top\n",
374 | "ymat[mid+1, mid+1] = 1 # top right\n",
375 | "ymat[mid, mid-1] = 1 # bottom\n",
376 | "\n"
377 | ]
378 | },
379 | {
380 | "cell_type": "code",
381 | "execution_count": null,
382 | "metadata": {},
383 | "outputs": [],
384 | "source": [
385 | "\n",
386 | "imshow(ymat,cmap='Greys' )"
387 | ]
388 | },
389 | {
390 | "cell_type": "code",
391 | "execution_count": null,
392 | "metadata": {},
393 | "outputs": [],
394 | "source": [
395 | "y = ymat.reshape((k*k,1))"
396 | ]
397 | },
398 | {
399 | "cell_type": "code",
400 | "execution_count": null,
401 | "metadata": {},
402 | "outputs": [],
403 | "source": [
404 | "results = {}\n",
405 | "for i in range(ngen):\n",
406 | " y1 = generation(y,w)\n",
407 | " results[i] = y\n",
408 | " y = y1\n",
409 | " "
410 | ]
411 | },
412 | {
413 | "cell_type": "code",
414 | "execution_count": null,
415 | "metadata": {},
416 | "outputs": [],
417 | "source": [
418 | "ngen"
419 | ]
420 | },
421 | {
422 | "cell_type": "markdown",
423 | "metadata": {},
424 | "source": [
425 | "Create some graphs to look at both the the individual maps from every 10th generation and then plot the aggregate population size by generation."
426 | ]
427 | },
428 | {
429 | "cell_type": "code",
430 | "execution_count": null,
431 | "metadata": {},
432 | "outputs": [],
433 | "source": [
434 | "generations = np.zeros((ngen,))\n",
435 | "living = np.zeros_like(generations)\n",
436 | "keys = list(results.keys())\n",
437 | "keys.sort()\n",
438 | "for i in keys:\n",
439 | " generations[i] = i\n",
440 | " living[i] = results[i].sum()\n",
441 | " if not i%50:\n",
442 | " ymat = results[i]\n",
443 | " ymat.shape = (k,k)\n",
444 | " imshow(ymat,cmap='Greys', interpolation='nearest')\n",
445 | " title(\"Generation %d\"%i)\n",
446 | " show()\n",
447 | " "
448 | ]
449 | },
450 | {
451 | "cell_type": "code",
452 | "execution_count": null,
453 | "metadata": {},
454 | "outputs": [],
455 | "source": [
456 | "generations.shape"
457 | ]
458 | },
459 | {
460 | "cell_type": "code",
461 | "execution_count": null,
462 | "metadata": {},
463 | "outputs": [],
464 | "source": [
465 | "plot(generations,living)"
466 | ]
467 | },
468 | {
469 | "cell_type": "code",
470 | "execution_count": null,
471 | "metadata": {},
472 | "outputs": [],
473 | "source": [
474 | "ymat = results[ngen-1]"
475 | ]
476 | },
477 | {
478 | "cell_type": "code",
479 | "execution_count": null,
480 | "metadata": {},
481 | "outputs": [],
482 | "source": [
483 | "ymat.shape"
484 | ]
485 | },
486 | {
487 | "cell_type": "code",
488 | "execution_count": null,
489 | "metadata": {},
490 | "outputs": [],
491 | "source": [
492 | "ymat.shape=(50,50)"
493 | ]
494 | },
495 | {
496 | "cell_type": "code",
497 | "execution_count": null,
498 | "metadata": {},
499 | "outputs": [],
500 | "source": [
501 | "imshow(ymat, cmap='Greys', interpolation='nearest')\n",
502 | "title(\"Last Generation\")"
503 | ]
504 | },
505 | {
506 | "cell_type": "code",
507 | "execution_count": null,
508 | "metadata": {},
509 | "outputs": [],
510 | "source": [
511 | "ymat = results[0]"
512 | ]
513 | },
514 | {
515 | "cell_type": "code",
516 | "execution_count": null,
517 | "metadata": {},
518 | "outputs": [],
519 | "source": [
520 | "ymat.shape = (k,k)"
521 | ]
522 | },
523 | {
524 | "cell_type": "code",
525 | "execution_count": null,
526 | "metadata": {},
527 | "outputs": [],
528 | "source": [
529 | "imshow(ymat, cmap='Greys', interpolation='nearest')\n",
530 | "title('First Generation: R-pentomino')"
531 | ]
532 | },
533 | {
534 | "cell_type": "code",
535 | "execution_count": null,
536 | "metadata": {},
537 | "outputs": [],
538 | "source": [
539 | "ymat = results[ngen-2]\n",
540 | "ymat.shape=(50,50)\n",
541 | "imshow(ymat, cmap='Greys', interpolation='nearest')\n",
542 | "title(\"Penultimate Generation\")"
543 | ]
544 | },
545 | {
546 | "cell_type": "code",
547 | "execution_count": null,
548 | "metadata": {},
549 | "outputs": [],
550 | "source": [
551 | "ymat = results[ngen-1]\n",
552 | "ymat.shape=(50,50)\n",
553 | "imshow(ymat, cmap='Greys', interpolation='nearest')\n",
554 | "title(\"Final Generation\")"
555 | ]
556 | },
557 | {
558 | "cell_type": "code",
559 | "execution_count": null,
560 | "metadata": {},
561 | "outputs": [],
562 | "source": []
563 | },
564 | {
565 | "cell_type": "code",
566 | "execution_count": null,
567 | "metadata": {},
568 | "outputs": [],
569 | "source": []
570 | },
571 | {
572 | "cell_type": "code",
573 | "execution_count": null,
574 | "metadata": {},
575 | "outputs": [],
576 | "source": []
577 | },
578 | {
579 | "cell_type": "code",
580 | "execution_count": null,
581 | "metadata": {},
582 | "outputs": [],
583 | "source": []
584 | },
585 | {
586 | "cell_type": "code",
587 | "execution_count": null,
588 | "metadata": {},
589 | "outputs": [],
590 | "source": []
591 | }
592 | ],
593 | "metadata": {
594 | "anaconda-cloud": {},
595 | "kernelspec": {
596 | "display_name": "Python 3",
597 | "language": "python",
598 | "name": "python3"
599 | },
600 | "language_info": {
601 | "codemirror_mode": {
602 | "name": "ipython",
603 | "version": 3
604 | },
605 | "file_extension": ".py",
606 | "mimetype": "text/x-python",
607 | "name": "python",
608 | "nbconvert_exporter": "python",
609 | "pygments_lexer": "ipython3",
610 | "version": "3.6.6"
611 | }
612 | },
613 | "nbformat": 4,
614 | "nbformat_minor": 2
615 | }
616 |
--------------------------------------------------------------------------------
/content/00_introduction.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {
6 | "slideshow": {
7 | "slide_type": "slide"
8 | }
9 | },
10 | "source": [
11 | "# Geospatial Data Science with PySAL @FOSS4G2019\n",
12 | "\n",
13 | "Sergio Rey \n",
14 | "Stefanie Lumnitz \n",
15 | "Elijah Knaap \n",
16 | "Wei Kang \n",
17 | "\n",
18 | "\n",
19 | "
\n"
20 | ]
21 | },
22 | {
23 | "cell_type": "markdown",
24 | "metadata": {
25 | "slideshow": {
26 | "slide_type": "slide"
27 | }
28 | },
29 | "source": [
30 | "## Origins\n",
31 | "\n"
32 | ]
33 | },
34 | {
35 | "cell_type": "markdown",
36 | "metadata": {
37 | "slideshow": {
38 | "slide_type": "subslide"
39 | }
40 | },
41 | "source": [
42 | "## Motivation\n",
43 | "\n",
44 | "- Leverage Existing Tools\n",
45 | " - GeoDa/PySpace\n",
46 | " - STARS\n",
47 | "- Develop Core Library\n",
48 | " - spatial data analytical functions\n",
49 | " - enhanced specialization, modularity\n",
50 | " - fill void in Python scientific stack\n",
51 | "- Flexible Delivery System\n",
52 | " - interactive shells\n",
53 | " - GUI\n",
54 | " - Toolkits\n",
55 | " - webservices"
56 | ]
57 | },
58 | {
59 | "cell_type": "markdown",
60 | "metadata": {
61 | "slideshow": {
62 | "slide_type": "subslide"
63 | }
64 | },
65 | "source": [
66 | "## Release History\n",
67 | "\n"
68 | ]
69 | },
70 | {
71 | "cell_type": "markdown",
72 | "metadata": {
73 | "slideshow": {
74 | "slide_type": "slide"
75 | }
76 | },
77 | "source": [
78 | "## Use Case: shell\n",
79 | "\n"
80 | ]
81 | },
82 | {
83 | "cell_type": "markdown",
84 | "metadata": {
85 | "slideshow": {
86 | "slide_type": "subslide"
87 | }
88 | },
89 | "source": [
90 | "## Use Case: notebook\n",
91 | "\n"
92 | ]
93 | },
94 | {
95 | "cell_type": "markdown",
96 | "metadata": {
97 | "slideshow": {
98 | "slide_type": "subslide"
99 | }
100 | },
101 | "source": [
102 | "## Use Case: application\n",
103 | "\n"
104 | ]
105 | },
106 | {
107 | "cell_type": "markdown",
108 | "metadata": {
109 | "slideshow": {
110 | "slide_type": "subslide"
111 | }
112 | },
113 | "source": [
114 | "## Use Case: toolkit\n",
115 | "\n"
116 | ]
117 | },
118 | {
119 | "cell_type": "markdown",
120 | "metadata": {
121 | "slideshow": {
122 | "slide_type": "subslide"
123 | }
124 | },
125 | "source": [
126 | "## Use Case: cloud\n",
127 | "\n"
128 | ]
129 | },
130 | {
131 | "cell_type": "markdown",
132 | "metadata": {
133 | "slideshow": {
134 | "slide_type": "slide"
135 | }
136 | },
137 | "source": [
138 | "## Adoption\n",
139 | "\n",
140 | ""
141 | ]
142 | },
143 | {
144 | "cell_type": "markdown",
145 | "metadata": {
146 | "slideshow": {
147 | "slide_type": "subslide"
148 | }
149 | },
150 | "source": [
151 | "## Adoption\n",
152 | "\n",
153 | ""
154 | ]
155 | },
156 | {
157 | "cell_type": "markdown",
158 | "metadata": {
159 | "slideshow": {
160 | "slide_type": "subslide"
161 | }
162 | },
163 | "source": [
164 | "## Adoption\n",
165 | "\n",
166 | ""
167 | ]
168 | },
169 | {
170 | "cell_type": "markdown",
171 | "metadata": {
172 | "slideshow": {
173 | "slide_type": "subslide"
174 | }
175 | },
176 | "source": [
177 | "http://angrybirdsriogame.info/?d=How+To+Prepare+Your+Data+For+Machine+Learning+in+Python\n",
178 | "\n",
179 | ""
180 | ]
181 | },
182 | {
183 | "cell_type": "markdown",
184 | "metadata": {
185 | "slideshow": {
186 | "slide_type": "subslide"
187 | }
188 | },
189 | "source": [
190 | "## PySAL GitHub Stars\n",
191 | ""
192 | ]
193 | },
194 | {
195 | "cell_type": "markdown",
196 | "metadata": {
197 | "slideshow": {
198 | "slide_type": "slide"
199 | }
200 | },
201 | "source": [
202 | "## PySAL 2.0\n",
203 | ""
204 | ]
205 | },
206 | {
207 | "cell_type": "markdown",
208 | "metadata": {
209 | "slideshow": {
210 | "slide_type": "slide"
211 | }
212 | },
213 | "source": [
214 | "## Installation Options\n",
215 | "\n",
216 | ""
217 | ]
218 | }
219 | ],
220 | "metadata": {
221 | "celltoolbar": "Slideshow",
222 | "kernelspec": {
223 | "display_name": "Python 3",
224 | "language": "python",
225 | "name": "python3"
226 | },
227 | "language_info": {
228 | "codemirror_mode": {
229 | "name": "ipython",
230 | "version": 3
231 | },
232 | "file_extension": ".py",
233 | "mimetype": "text/x-python",
234 | "name": "python",
235 | "nbconvert_exporter": "python",
236 | "pygments_lexer": "ipython3",
237 | "version": "3.7.3"
238 | }
239 | },
240 | "nbformat": 4,
241 | "nbformat_minor": 2
242 | }
243 |
--------------------------------------------------------------------------------
/content/data/CPI1913-2016.csv:
--------------------------------------------------------------------------------
1 | year,cpi
1913,9.9
1914,10
1915,10.1
1916,10.9
1917,12.8
1918,15.1
1919,17.3
1920,20
1921,17.9
1922,16.8
1923,17.1
1924,17.1
1925,17.5
1926,17.7
1927,17.4
1928,17.1
1929,17.1
1930,16.7
1931,15.2
1932,13.7
1933,13
1934,13.4
1935,13.7
1936,13.9
1937,14.4
1938,14.1
1939,13.9
1940,14
1941,14.7
1942,16.3
1943,17.3
1944,17.6
1945,18
1946,19.5
1947,22.3
1948,24.1
1949,23.8
1950,24.1
1951,26
1952,26.5
1953,26.7
1954,26.9
1955,26.8
1956,27.2
1957,28.1
1958,28.9
1959,29.1
1960,29.6
1961,29.9
1962,30.2
1963,30.6
1964,31
1965,31.5
1966,32.4
1967,33.4
1968,34.8
1969,36.7
1970,38.8
1971,40.5
1972,41.8
1973,44.4
1974,49.3
1975,53.8
1976,56.9
1977,60.6
1978,65.2
1979,72.6
1980,82.4
1981,90.9
1982,96.5
1983,99.6
1984,103.9
1985,107.6
1986,109.6
1987,113.6
1988,118.3
1989,124
1990,130.7
1991,136.2
1992,140.3
1993,144.5
1994,148.2
1995,152.4
1996,156.9
1997,160.5
1998,163
1999,166.6
2000,172.2
2001,177.1
2002,179.9
2003,184
2004,188.9
2005,195.3
2006,201.6
2007,207.342
2008,215.303
2009,214.537
2010,218.056
2011,224.939
2012,229.594
2013,232.957
2014,236.736
2015,237.017
2016,240.007
--------------------------------------------------------------------------------
/content/data/README.md:
--------------------------------------------------------------------------------
1 | # Data
2 |
3 | This tutorial makes use of a variety of data sources. Below is a brief description of each dataset as well as the links to the original source where the data was downloaded from. For convenience, we have repackaged the data and included them in the compressed file with the notebooks. You can download it [here](../../gds_scipy16.zip).
4 |
5 | ## Texas counties
6 |
7 | This includes Texas counties from the Census Bureau and a list of attached
8 | socio-economic variables. This is an extract of the national cover dataset
9 | `NAT` that is part of the example datasets shipped with `PySAL`.
10 |
11 | ## AirBnb listing for Austin (TX)
12 |
13 | This dataset contains information for [AirBnb](https://www.airbnb.com/) properties for the area of Austin (TX). It is originally provided by [Inside AirBnb](http://insideairbnb.com/). Same as the source, the dataset is released under a [CC0 1.0 Universal License](http://creativecommons.org/publicdomain/zero/1.0/). You can see a summary of the dataset [here](http://insideairbnb.com/austin/index.html).
14 |
15 | **Source**: [Inside AirBnb](http://insideairbnb.com/get-the-data.html)’s extract of AirBnb locations in Austin (TX).
16 |
17 | **Path**: `data/listings.csv.gz`
18 |
19 | ## Austin Zipcodes
20 |
21 | Boundaries for Zipcodes in Austin. The original source is provided by the City of Austin GIS Division.
22 |
23 | **Source**: open data from the city of Austin [[url]](https://data.austintexas.gov/Geodata/Zipcodes/23x8-agw7)
24 |
25 | **Path**: `data/Zipcodes.geojson`
26 |
--------------------------------------------------------------------------------
/content/data/Surrey_park_street_trees_April2018.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/Surrey_park_street_trees_April2018.csv
--------------------------------------------------------------------------------
/content/data/boston.dbf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/boston.dbf
--------------------------------------------------------------------------------
/content/data/boston.shp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/boston.shp
--------------------------------------------------------------------------------
/content/data/boston.shx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/boston.shx
--------------------------------------------------------------------------------
/content/data/listings.csv.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/listings.csv.gz
--------------------------------------------------------------------------------
/content/data/mexicojoin.dbf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/mexicojoin.dbf
--------------------------------------------------------------------------------
/content/data/mexicojoin.prj:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/mexicojoin.prj
--------------------------------------------------------------------------------
/content/data/mexicojoin.qpj:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/content/data/mexicojoin.shp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/mexicojoin.shp
--------------------------------------------------------------------------------
/content/data/mexicojoin.shx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/mexicojoin.shx
--------------------------------------------------------------------------------
/content/data/participants2016.csv:
--------------------------------------------------------------------------------
1 | name,email,lon,lat
2 | Debra McKay,dmckay@iastate.edu,-93.6465,42.0266
3 | Alain Pholo Bala,apholo@uj.ac.za,27.9977,-26.1836
4 | Cory Yemen,yemenc@gmail.com,-74.4471,40.5015
5 | Johanna Manrique Hernandez,jemanriqueh@gmail.com,-74.0721,-4.711
6 | Sudhir Thakur,thakurs@csus.edu,-121.4944,38.5816
7 | David Patton,grazi1m@cmich.edu,-84.7752,43.5912
8 | Henry Renski,hrenski@umass.edu,-72.4969,42.3404
9 | Enza Maltese,enzamaltese@gmail.com,13.3614,38.1157
10 | Xian Bak,fangxian8663@gmail.com,-88.2073,40.1106
11 | Cynthia Goytia,cgoytia@utdt.edu,-96.797,32.7767
12 | Kenzo Asahi,kasahi@uc.cl,-70.6693,-33.4489
13 | Andrea Caragliu,10268614@polimi.it,9.1859,45.4654
14 | Daniel Broxterman,dbroxterman@fsu.edu,-84.2807,30.4383
15 | Nicholas Garcia,garcia.119@buckeyemail.osu.edu,-82.9988,39.9612
16 | Miriam Valdes,miriam.valdes@uadec.edu.mx,-101.7068,27.0587
17 | Hernan Ocampo Solarte,hocampo@uao.edu.co,-76.5358,3.4525
18 | Andres Vallone,andres.vallone@predoc.uam.es,-70.3975,-23.6509
19 | Jorge Alberto Orellana Aragón,jorgealbertoorellanaaragon@gmail.com,-51.2177,-30.0346
20 | Seva Rodnyansky,rodnyans@usc.edu,-118.2851,34.0224
21 |
--------------------------------------------------------------------------------
/content/data/participants2017.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/participants2017.csv
--------------------------------------------------------------------------------
/content/data/participants2018.csv:
--------------------------------------------------------------------------------
1 | name,email,lat,lon,affiliation
2 | Alain Pholo Bala,apholo@uj.ac.za,-26.2614,27.9226,University of Johannesburg
3 | Annie Lee,annieslee777@gmail.com,40.5008,-74.4474,Rutgers University
4 | Yan Cen,cenyan0304@live.cn,43.8171,125.3235,Northeast Normal University
5 | Brian Asquith,basquith86@gmail.com,42.2900,-85.5981,W.E. Upjohn Institute
6 | Raul Silveira Neto,rau.silveira@uol.com.br,-8.0441,-34.8861,Federal University of Pernambuco
7 | Alin Halimatussadiah,alin.halimah@gmail.com,6.3628,106.8270,University of Indonesia
8 | Zhangliang Chen,zchen105@gmail.com,42.3770,-71.1167,Harvard Kennedy School
9 | André Chagas,achagas@usp.br,-23.5447, -46.62529,University of Sao Paulo
10 | Mitsuru Ota,ota@sk.tsukuba.ac.jp,36.1088,140.1037,University of Tsukuba
11 | Vikash Dangal,vdangal@agcenter.lsu.edu,30.4133,-91.1800,Louisiana State University
12 | Bryce Pludow,bapludow@gmail.com,34.4140,-119.8489,University of Santa Barbara
13 | Mark Folden,mfolden@nctcog.org,32.7503,-97.0678,North Central Texas Council of Governments
14 | Ziv Rubin,ziv.rubin@utoronto.ca,43.6629,-79.3957,University of Toronto
15 | Diego Firmino Costa da Silva,diegofirmino@gmail.com,-8.0175,-34.9492,Universidade Federal Rural de Pernambuco
16 | Toru Murayama,torumurayama0224@gmail.com,34.2305,135.1708,Wakayama College Japan
17 |
--------------------------------------------------------------------------------
/content/data/san_diego.cpg:
--------------------------------------------------------------------------------
1 | ISO-8859-1
--------------------------------------------------------------------------------
/content/data/san_diego.dbf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/san_diego.dbf
--------------------------------------------------------------------------------
/content/data/san_diego.prj:
--------------------------------------------------------------------------------
1 | PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]]
--------------------------------------------------------------------------------
/content/data/san_diego.shp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/san_diego.shp
--------------------------------------------------------------------------------
/content/data/san_diego.shx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/san_diego.shx
--------------------------------------------------------------------------------
/content/data/san_diego.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/san_diego.tif
--------------------------------------------------------------------------------
/content/data/texas.dbf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/texas.dbf
--------------------------------------------------------------------------------
/content/data/texas.prj:
--------------------------------------------------------------------------------
1 | GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
--------------------------------------------------------------------------------
/content/data/texas.qgs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | degrees
13 |
14 | -106.96550759144044207
15 | 25.57898068428039551
16 | -93.16609696216796976
17 | 36.76009440422058105
18 |
19 | 0
20 | 0
21 |
22 |
23 | +proj=longlat +datum=WGS84 +no_defs
24 | 3452
25 | 4326
26 | EPSG:4326
27 | WGS 84
28 | longlat
29 | WGS84
30 | true
31 |
32 |
33 | 0
34 |
35 |
36 |
37 |
38 | - texas20160611154218713
39 |
40 |
41 |
48 |
49 |
50 | texas20160611154218713
51 | /home/serge/Dropbox/p/pysal/workshops/scipy16/gds_scipy16/content/data/texas.shp
52 |
53 |
54 |
55 | texas
56 |
57 |
58 | +proj=longlat +datum=WGS84 +no_defs
59 | 3452
60 | 4326
61 | EPSG:4326
62 | WGS 84
63 | longlat
64 | WGS84
65 | true
66 |
67 |
68 | ogr
69 | COALESCE( "NAME", '<NULL>' )
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 | 0
541 | 0
542 | 0
543 | NAME
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 | 0
578 |
579 |
596 | 0
597 | generatedlayout
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 | +proj=longlat +datum=WGS84 +no_defs
612 | EPSG:4326
613 | 3452
614 |
615 |
616 | false
617 |
618 |
619 | 0
620 | 255
621 | 255
622 | 255
623 | 255
624 | 255
625 | 255
626 |
627 |
628 | 2
629 | current_layer
630 | off
631 | 0
632 |
633 |
634 | 2
635 | true
636 |
637 |
640 |
641 |
642 |
643 |
--------------------------------------------------------------------------------
/content/data/texas.qgs~:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | degrees
16 |
17 | -106.97807064056397053
18 | 25.57898068428039551
19 | -93.17866001129149822
20 | 36.76009440422058105
21 |
22 | 0
23 | 0
24 |
25 |
26 | +proj=longlat +datum=WGS84 +no_defs
27 | 3452
28 | 4326
29 | EPSG:4326
30 | WGS 84
31 | longlat
32 | WGS84
33 | true
34 |
35 |
36 | 0
37 |
38 |
39 |
40 |
41 | - texas20160611154218713
42 | - south20161025171731157
43 |
44 |
45 |
57 |
58 |
59 | south20161025171731157
60 | ../../../../../src/pysal/pysal/examples/south/south.shp
61 |
62 |
63 |
64 |
65 |
66 |
67 | south
68 |
69 |
70 | +proj=longlat +datum=WGS84 +no_defs
71 | 3452
72 | 4326
73 | EPSG:4326
74 | WGS 84
75 | longlat
76 | WGS84
77 | true
78 |
79 |
80 | ogr
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 | 0
321 | 0
322 | 0
323 | NAME
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 | .
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 | .
421 |
422 | 0
423 | .
424 |
425 | 0
426 | generatedlayout
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 | texas20160611154218713
435 | ./texas.shp
436 |
437 |
438 |
439 |
440 |
441 |
442 | texas
443 |
444 |
445 | +proj=longlat +datum=WGS84 +no_defs
446 | 3452
447 | 4326
448 | EPSG:4326
449 | WGS 84
450 | longlat
451 | WGS84
452 | true
453 |
454 |
455 | ogr
456 | COALESCE( "NAME", '<NULL>' )
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 |
579 |
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 |
593 |
594 |
595 |
596 |
597 |
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 |
662 |
663 |
664 |
665 |
666 |
667 |
668 |
669 |
670 |
671 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
789 |
790 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
808 |
809 |
810 |
811 |
812 |
813 |
814 |
815 |
816 |
817 |
818 |
819 |
820 |
821 |
822 |
823 |
824 |
825 |
826 |
827 |
828 |
829 |
830 |
831 |
832 |
833 |
834 |
835 |
836 |
837 |
838 |
839 |
840 |
841 |
842 |
843 |
844 |
845 |
846 |
847 |
848 |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 |
857 |
858 |
859 |
860 |
861 |
862 |
863 |
864 |
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
876 |
877 |
878 |
879 |
880 |
881 |
882 |
883 |
884 |
885 |
886 |
887 |
888 |
889 |
890 |
891 |
892 |
893 |
894 |
895 |
896 |
897 |
898 |
899 |
900 |
901 |
902 |
903 |
904 |
905 |
906 |
907 |
908 |
909 |
910 |
911 |
912 |
913 |
914 |
915 |
916 |
917 |
918 |
919 |
920 |
921 |
922 |
923 |
924 |
925 |
926 |
927 | 0
928 | 0
929 | 0
930 | NAME
931 |
932 |
933 |
934 |
935 |
936 |
937 |
938 |
939 |
940 |
941 |
942 |
943 |
944 |
945 |
946 |
947 |
948 |
949 |
950 |
951 |
952 |
953 |
954 |
955 |
956 |
957 |
958 |
959 | .
960 |
961 |
962 |
963 |
964 |
965 |
966 |
967 |
968 |
969 |
970 |
971 |
972 |
973 |
974 |
975 |
976 |
977 |
978 |
979 |
980 |
981 |
982 |
983 |
984 |
985 |
986 |
987 |
988 |
989 |
990 |
991 |
992 |
993 |
994 |
995 |
996 |
997 |
998 |
999 |
1000 |
1001 |
1002 |
1003 |
1004 |
1005 |
1006 |
1007 |
1008 |
1009 |
1010 |
1011 |
1012 |
1013 |
1014 |
1015 |
1016 |
1017 |
1018 |
1019 |
1020 |
1021 |
1022 |
1023 |
1024 |
1025 |
1026 |
1027 |
1028 |
1029 |
1030 |
1031 |
1032 |
1033 |
1034 | .
1035 |
1036 | 0
1037 | .
1038 |
1055 | 0
1056 | generatedlayout
1057 |
1058 |
1059 |
1060 |
1061 |
1062 |
1063 |
1064 |
1065 |
1066 |
1067 |
1068 |
1069 |
1070 | +proj=longlat +datum=WGS84 +no_defs
1071 | EPSG:4326
1072 | 3452
1073 |
1074 |
1075 | false
1076 |
1077 |
1078 | 0
1079 | 255
1080 | 255
1081 | 255
1082 | 255
1083 | 255
1084 | 255
1085 |
1086 |
1087 | 2
1088 |
1089 | south20161025171731157
1090 | texas20160611154218713
1091 |
1092 |
1093 | disabled
1094 | disabled
1095 |
1096 | current_layer
1097 |
1098 |
1099 | 2
1100 | 2
1101 |
1102 |
1103 | to_vertex_and_segment
1104 | to_vertex_and_segment
1105 |
1106 | off
1107 | 0
1108 |
1109 | 0.000000
1110 | 0.000000
1111 |
1112 |
1113 |
1114 | 2
1115 | true
1116 |
1117 |
1120 |
1121 |
1122 |
1123 |
--------------------------------------------------------------------------------
/content/data/texas.qpj:
--------------------------------------------------------------------------------
1 | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
2 |
--------------------------------------------------------------------------------
/content/data/texas.shp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/texas.shp
--------------------------------------------------------------------------------
/content/data/texas.shx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/data/texas.shx
--------------------------------------------------------------------------------
/content/figs/UCR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/UCR.png
--------------------------------------------------------------------------------
/content/figs/anaconda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/anaconda.png
--------------------------------------------------------------------------------
/content/figs/ancienthistory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/ancienthistory.png
--------------------------------------------------------------------------------
/content/figs/cartodb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/cartodb.png
--------------------------------------------------------------------------------
/content/figs/cast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/cast.png
--------------------------------------------------------------------------------
/content/figs/giddydoc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/giddydoc.png
--------------------------------------------------------------------------------
/content/figs/githubstars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/githubstars.png
--------------------------------------------------------------------------------
/content/figs/githubstarspysal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/githubstarspysal.png
--------------------------------------------------------------------------------
/content/figs/googlecode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/googlecode.png
--------------------------------------------------------------------------------
/content/figs/install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/install.png
--------------------------------------------------------------------------------
/content/figs/pysalGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalGraphic.png
--------------------------------------------------------------------------------
/content/figs/pysalanaconda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalanaconda.png
--------------------------------------------------------------------------------
/content/figs/pysalcli.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalcli.png
--------------------------------------------------------------------------------
/content/figs/pysalcloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalcloud.png
--------------------------------------------------------------------------------
/content/figs/pysalcloud.png_:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalcloud.png_
--------------------------------------------------------------------------------
/content/figs/pysaldebian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysaldebian.png
--------------------------------------------------------------------------------
/content/figs/pysalml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalml.png
--------------------------------------------------------------------------------
/content/figs/pysalnew.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalnew.png
--------------------------------------------------------------------------------
/content/figs/pysalnotebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalnotebook.png
--------------------------------------------------------------------------------
/content/figs/pysalqgiselection.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalqgiselection.jpg
--------------------------------------------------------------------------------
/content/figs/pysalrefactor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalrefactor.png
--------------------------------------------------------------------------------
/content/figs/pysalscipy2009.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalscipy2009.png
--------------------------------------------------------------------------------
/content/figs/pysalstructure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalstructure.png
--------------------------------------------------------------------------------
/content/figs/pysalteam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/pysalteam.png
--------------------------------------------------------------------------------
/content/figs/qgis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/content/figs/qgis.png
--------------------------------------------------------------------------------
/content/makefile:
--------------------------------------------------------------------------------
1 | nb:
2 | notedown 00_introduction.md > 00_introduction.ipynb
3 |
4 | slides:
5 | jupyter nbconvert 00_introduction.ipynb --to slides --post serve \n--SlidesExporter.reveal_theme=serif \n--SlidesExporter.reveal_scroll=True \n--SlidesExporter.reveal_transition=none
6 |
--------------------------------------------------------------------------------
/environment.yml:
--------------------------------------------------------------------------------
1 | # Run `conda-env create -f workshop.yml`
2 | name: workshop
3 | channels:
4 | - conda-forge
5 |
6 | dependencies:
7 | - python=3.6
8 | - dill
9 | - bokeh
10 | - pip
11 | - geopandas
12 | - ipython
13 | - ipywidgets
14 | - jupyter
15 | - jupyterlab
16 | - pysal
17 | - nbconvert
18 | - networkx
19 | - palettable
20 | - rasterio
21 | - scikit-learn
22 | - seaborn
23 | - statsmodels
24 | - xlrd
25 | - xlsxwriter
26 | - pip:
27 | - cenpy==1.0.0rc2
28 | - contextily
29 | - mplleaflet
30 |
--------------------------------------------------------------------------------
/figs/readmefigs/anaconda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/anaconda.png
--------------------------------------------------------------------------------
/figs/readmefigs/anacondastartwin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/anacondastartwin.png
--------------------------------------------------------------------------------
/figs/readmefigs/directory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/directory.png
--------------------------------------------------------------------------------
/figs/readmefigs/download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/download.png
--------------------------------------------------------------------------------
/figs/readmefigs/htmlout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/htmlout.png
--------------------------------------------------------------------------------
/figs/readmefigs/inc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/inc.png
--------------------------------------------------------------------------------
/figs/readmefigs/quad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/quad.png
--------------------------------------------------------------------------------
/figs/readmefigs/routes18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/routes18.png
--------------------------------------------------------------------------------
/figs/readmefigs/routes2016-17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/routes2016-17.png
--------------------------------------------------------------------------------
/figs/readmefigs/routes2017.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sjsrey/pysalfoss4g19/782deffc9fd87d5d59119b4de21e3f3e5cc1bc17/figs/readmefigs/routes2017.png
--------------------------------------------------------------------------------
/workshop.yml:
--------------------------------------------------------------------------------
1 | # Run `conda-env create -f workshop.yml`
2 | name: workshop
3 | channels:
4 | - conda-forge
5 |
6 | dependencies:
7 | - python=3.6
8 | - dill
9 | - bokeh
10 | - pip
11 | - geopandas
12 | - ipython
13 | - ipywidgets
14 | - jupyter
15 | - jupyterlab
16 | - pysal
17 | - nbconvert
18 | - networkx
19 | - palettable
20 | - qgrid
21 | - rasterio
22 | - scikit-learn
23 | - seaborn
24 | - statsmodels
25 | - xlrd
26 | - xlsxwriter
27 | - pip:
28 | - cenpy==1.0.0rc2
29 | - contextily
30 | - mplleaflet
31 |
--------------------------------------------------------------------------------