From 761ebdad1e75e244f107aa2fc2bdf9b675719b0b Mon Sep 17 00:00:00 2001 From: Serge Rey Date: Wed, 20 Jan 2016 17:55:22 -0700 Subject: [PATCH 1/3] update notebook re: https://github.com/pysal/pysal/issues/151#issuecomment-173409885 --- notebooks/PySAL_weights.ipynb | 4315 +++++++++++++++++---------------- 1 file changed, 2276 insertions(+), 2039 deletions(-) diff --git a/notebooks/PySAL_weights.ipynb b/notebooks/PySAL_weights.ipynb index e10e767..5ec9370 100644 --- a/notebooks/PySAL_weights.ipynb +++ b/notebooks/PySAL_weights.ipynb @@ -1,2054 +1,2291 @@ { - "metadata": { - "name": "PySAL_weights" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Contributors to this notebook\n", - "\n", - "* Daniel Arribas-Bel [@darribas](http://twitter.com/darribas)\n", - "* Serge Rey [@sergerey](http://twitter.com/sergerey) " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import pysal as ps # 1.5 or higher\n", - "import numpy as np # 1.7 or higher\n", - "import pandas as pd # 0.10 or higher" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Regular Lattice Weights " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The geography we are working with now is a simple lattice:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "xs = np.array(range(5) * 5).flatten()\n", - "ys = np.array([[i] * 5 for i in range(5)]).flatten()\n", - "f = figure()\n", - "ax = f.add_subplot(111)\n", - "scatter(xs, ys, marker='', color='k')\n", - "for i in range(5):\n", - " axvline(i+0.5, color='k')\n", - " axhline(i+0.5, color='k')\n", - "ax.axes.get_yaxis().set_visible(False)\n", - "ax.axes.get_xaxis().set_visible(False)\n", - "ax.set_xlim((-0.5, 4.5))\n", - "ax.set_ylim((-0.5, 4.5))\n", - "for i in range(25):\n", - " text(xs[i], ys[i], str(i))\n", - "title(\"Observations\")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 2, - "text": [ - "" - ] - }, - { - "output_type": "display_data", - "png": "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\n6D8AAAAASUVORK5CYII=\n" - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Rook contiguity\n", - "\n", - "To build a simple *rook* contiguity:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w = ps.lat2W(5, 5)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w?" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`W` objects in `PySAL` have many attributes:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w.n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 5, - "text": [ - "25" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w.neighbors" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 6, - "text": [ - "{0: [5, 1],\n", - " 1: [0, 6, 2],\n", - " 2: [1, 7, 3],\n", - " 3: [2, 8, 4],\n", - " 4: [3, 9],\n", - " 5: [0, 10, 6],\n", - " 6: [1, 5, 11, 7],\n", - " 7: [2, 6, 12, 8],\n", - " 8: [3, 7, 13, 9],\n", - " 9: [4, 8, 14],\n", - " 10: [5, 15, 11],\n", - " 11: [6, 10, 16, 12],\n", - " 12: [7, 11, 17, 13],\n", - " 13: [8, 12, 18, 14],\n", - " 14: [9, 13, 19],\n", - " 15: [10, 20, 16],\n", - " 16: [11, 15, 21, 17],\n", - " 17: [12, 16, 22, 18],\n", - " 18: [13, 17, 23, 19],\n", - " 19: [14, 18, 24],\n", - " 20: [15, 21],\n", - " 21: [16, 20, 22],\n", - " 22: [17, 21, 23],\n", - " 23: [18, 22, 24],\n", - " 24: [19, 23]}" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w.weights" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 7, - "text": [ - "{0: [1.0, 1.0],\n", - " 1: [1.0, 1.0, 1.0],\n", - " 2: [1.0, 1.0, 1.0],\n", - " 3: [1.0, 1.0, 1.0],\n", - " 4: [1.0, 1.0],\n", - " 5: [1.0, 1.0, 1.0],\n", - " 6: [1.0, 1.0, 1.0, 1.0],\n", - " 7: [1.0, 1.0, 1.0, 1.0],\n", - " 8: [1.0, 1.0, 1.0, 1.0],\n", - " 9: [1.0, 1.0, 1.0],\n", - " 10: [1.0, 1.0, 1.0],\n", - " 11: [1.0, 1.0, 1.0, 1.0],\n", - " 12: [1.0, 1.0, 1.0, 1.0],\n", - " 13: [1.0, 1.0, 1.0, 1.0],\n", - " 14: [1.0, 1.0, 1.0],\n", - " 15: [1.0, 1.0, 1.0],\n", - " 16: [1.0, 1.0, 1.0, 1.0],\n", - " 17: [1.0, 1.0, 1.0, 1.0],\n", - " 18: [1.0, 1.0, 1.0, 1.0],\n", - " 19: [1.0, 1.0, 1.0],\n", - " 20: [1.0, 1.0],\n", - " 21: [1.0, 1.0, 1.0],\n", - " 22: [1.0, 1.0, 1.0],\n", - " 23: [1.0, 1.0, 1.0],\n", - " 24: [1.0, 1.0]}" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 8, - "text": [ - "{1: 1.0, 5: 1.0}" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$s_0 = \\sum_i \\sum_j w_{i,j}$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w.s0" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 9, - "text": [ - "80.0" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w.histogram" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 10, - "text": [ - "[(2, 4), (3, 12), (4, 9)]" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "np.sum( [ c[0]*c[1] for c in w.histogram ] )" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 11, - "text": [ - "80" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w.pct_nonzero" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 12, - "text": [ - "0.128" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$\\text{pct nonzero} = s_0 / n^2$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w.s0 / w.n**2" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 13, - "text": [ - "0.128" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "full, id_order = w.full()\n", - "full" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 14, - "text": [ - "array([[ 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 1., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 1., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 1., 0., 0., 0., 1., 0., 1., 0., 0., 0.,\n", - " 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.,\n", - " 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0.,\n", - " 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 1.,\n", - " 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0.,\n", - " 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1.,\n", - " 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,\n", - " 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,\n", - " 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,\n", - " 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,\n", - " 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 1., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 1., 0., 0., 0., 1., 0., 1., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 1., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 1.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0.]])" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "code", - "collapsed": true, - "input": [ - "id_order" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 15, - "text": [ - "[0,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 5,\n", - " 6,\n", - " 7,\n", - " 8,\n", - " 9,\n", - " 10,\n", - " 11,\n", - " 12,\n", - " 13,\n", - " 14,\n", - " 15,\n", - " 16,\n", - " 17,\n", - " 18,\n", - " 19,\n", - " 20,\n", - " 21,\n", - " 22,\n", - " 23,\n", - " 24]" - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w.sparse" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 16, - "text": [ - "<25x25 sparse matrix of type ''\n", - "\twith 80 stored elements in Compressed Sparse Row format>" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we are working with very large datasets, we might want to create a sparse object directly to save up on memory:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "ws = ps.weights.lat2SW(5, 5)\n", - "ws" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 17, - "text": [ - "<25x25 sparse matrix of type ''\n", - "\twith 80 stored elements in Compressed Sparse Row format>" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Queen Contiguity" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wq = ps.lat2W(5, 5, rook=False)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 18 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wq.s0" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 19, - "text": [ - "144.0" - ] - } - ], - "prompt_number": 19 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wq.histogram" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 20, - "text": [ - "[(3, 4), (4, 0), (5, 12), (6, 0), (7, 0), (8, 9)]" - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "np.sum( [ c[0] * c[1] for c in wq.histogram ] )" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 21, - "text": [ - "144" - ] - } - ], - "prompt_number": 21 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wq.pct_nonzero" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 22, - "text": [ - "0.23039999999999999" - ] - } - ], - "prompt_number": 22 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "144. / wq.n**2" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 23, - "text": [ - "0.2304" - ] - } - ], - "prompt_number": 23 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Bishop" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wb = ps.w_difference(wq,w, constrained = False)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 24 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wb.n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 25, - "text": [ - "25" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wb.s0" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 26, - "text": [ - "64.0" - ] - } - ], - "prompt_number": 26 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wq[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 27, - "text": [ - "{1: 1.0, 5: 1.0, 6: 1.0}" - ] - } - ], - "prompt_number": 27 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 28, - "text": [ - "{1: 1.0, 5: 1.0}" - ] - } - ], - "prompt_number": 28 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wb[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 29, - "text": [ - "{6: 1.0}" - ] - } - ], - "prompt_number": 29 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "ps.w_difference?" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 30 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wb.histogram" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 31, - "text": [ - "[(1, 4), (2, 12), (3, 0), (4, 9)]" - ] - } - ], - "prompt_number": 31 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Spatial Lag" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$l_i = \\sum_{i,j} w_{i,j} y_j$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "y = np.random.randint(low=0, high=100, size=w.n) * 1.\n", - "y" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 32, - "text": [ - "array([ 92., 22., 28., 51., 26., 38., 88., 59., 45., 98., 19.,\n", - " 96., 36., 35., 88., 13., 75., 21., 3., 67., 29., 39.,\n", - " 40., 74., 90.])" - ] - } - ], - "prompt_number": 32 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "xs = np.array(range(5) * 5).flatten()\n", - "ys = np.array([[i] * 5 for i in range(5)]).flatten()\n", - "f = figure()\n", - "ax = f.add_subplot(111)\n", - "scatter(xs, ys, marker='', color='k')\n", - "for i in range(5):\n", - " axvline(i+0.5, color='k')\n", - " axhline(i+0.5, color='k')\n", - "ax.axes.get_yaxis().set_visible(False)\n", - "ax.axes.get_xaxis().set_visible(False)\n", - "ax.set_xlim((-0.5, 4.5))\n", - "ax.set_ylim((-0.5, 4.5))\n", - "for i in range(25):\n", - " text(xs[i], ys[i], \"%s | %s\"%(str(i), y[i]), horizontalalignment='center',\n", - " verticalalignment='center')\n", - "title('Distribution of Y')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 33, - "text": [ - "" - ] - }, - { - "output_type": "display_data", - "png": "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\n" - } - ], - "prompt_number": 33 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wy = ps.lag_spatial(w,y)\n", - "wy" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 34, - "text": [ - "array([ 60., 208., 132., 99., 149., 199., 215., 197., 243.,\n", - " 159., 147., 218., 211., 172., 200., 123., 169., 154.,\n", - " 197., 181., 52., 144., 134., 133., 141.])" - ] - } - ], - "prompt_number": 34 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "xs = np.array(range(5) * 5).flatten()\n", - "ys = np.array([[i] * 5 for i in range(5)]).flatten()\n", - "f = figure()\n", - "ax = f.add_subplot(111)\n", - "scatter(xs, ys, marker='', color='k')\n", - "for i in range(5):\n", - " axvline(i+0.5, color='k')\n", - " axhline(i+0.5, color='k')\n", - "ax.axes.get_yaxis().set_visible(False)\n", - "ax.axes.get_xaxis().set_visible(False)\n", - "ax.set_xlim((-0.5, 4.5))\n", - "ax.set_ylim((-0.5, 4.5))\n", - "for i in range(25):\n", - " text(xs[i], ys[i], \"%s | %s\"%(str(i), wy[i]), horizontalalignment='center',\n", - " verticalalignment='center')\n", - "title(\"Spatial lag Y\")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 35, - "text": [ - "" - ] - }, - { - "output_type": "display_data", - "png": "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\nhQlnYcJZmHAWJq1lwX+RxhhjInJ60RXrbvmvAWdhwlmYcBYmv4UsnH554deAszDhLEw4CxPOwoQv\nLzDGWBfCRZcxxkTERZcxxkTERZcxxkTERZcxxkTERZcxxkTERZcxxkTERZcxxkTERZcxxkTERZcx\nxkTERZcxxkTERZcxxkTERZcxxkTERZcxxkTERZcxxkRk8/N0GWOM2c/W5+l2a2/D3xP+gGYTzsKE\nszDhLExaO2HlywuMMSYiLrqMMSYiLrqMMSYiLrqMMSYiLrqMMSYiLrqMMSYiLrqMMSYiLrqMMSYi\nLrqMMSYiLrqMMSYiLrqMMSYiLrqMMSYiLrqMMSYiLrqMMSYiLrqMMSYiLrqMMSaiDhfdhIQEyGQy\nqNXqFssrKioQFRWFwMBATJw4EZWVlRbb+/j4WFy+a9cuKJVKSKVS5OTkmK0vLCyEu7s7UlJSAABV\nVVUIDQ0V/g0aNAiLFi2y2PfatWsREBCA4OBgHDp0yI7R2mYti9bG0sRaFklJSQgJCYFWq8X06dNx\n48YNAHczHjduHHr37o0XXnihRZtt27ZBrVZDq9XiscceQ3l5ucW+xc7C2lju5cgsVqxYgWHDhqF3\n7942j1nsLFauXAmtVgudTofx48ejqKjIYvu2PEbOnDkjLP/4449bPBakUim+/fZb1NXV4fHHH0dI\nSAhUKhWWL19u9ZjFzqJJSkoKXFxcUFFRYXG9vfMCsD6WM2fOQK1WIyAgAAsXLrR6zA7PgqywsaqF\nEydOUE5ODqlUqhbLk5KSaP369UREtG7dOlq6dKnF9j4+PhaX5+Xl0YULF2js2LF05swZs/UxMTE0\nc+ZM2rRpk8X2YWFhlJmZabb8/PnzpNVqyWg0kl6vJz8/P2psbLQ5xo5m0dpYmljL4tChQ8IxLl26\nVMiypqaGTp48Sf/zP/9D//mf/ylsf/v2berfvz+Vl5cTEdErr7xCycnJZv06IwtrY7mXo7IgIjp9\n+jQZDAZyd3e3erzOyOLmzZvCz1u3bqXExESL7dv7GCEi+u6778jf35+IiGpra+nYsWNERGQ0Giky\nMpIOHDhg1sYZWRARFRYW0qRJk8jHx0eYu/eyd15YGsudO3eIiGjkyJF0+vRpIiJ67LHHRMuiw2e6\nkZGR6Nevn9nyjIwMzJ49GwAwe/Zs7Nu3z65+g4ODERgYaHHdvn37MHz4cCgUCovrL168iLKyMjz8\n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\nRqPZNu2ZF801f/fC9u3bhXkxcuTIFts7O4vIyEhSKBSk1WrpyJEjFrdpz7x47rnnSK1Wk0ajoalT\np9KVK1eIqOvUC4e+ZawtbL0FpKviLEw4CxPOwoSzMGktC9H/Io1aeUvZ7wlnYcJZmHAWJr/FLEQv\numLeMe/qOAsTzsKEszD5LWYhIStPJRKJ5Df5LNMenIUJZ2HCWZhwFiatZcEfeMMYYyLiossYYyLi\nossYYyLiossYYyLiossYYyLiossYYyLiossYYyLiossYYyLiossYYyLiossYYyLiossYYyLiossY\nYyLiossYYyLiossYYyLiossYYyKy+Xm6jDHG7Gfr83S7tbfh7wl/QLMJZ2HCWZhwFiatnbDy5QXG\nGBMRF13GGBMRF13GGBMRF13GGBMRF13GGBMRF13GGBMRF13GGBMRF13GGBMRF13GGBMRF13GGBMR\nF13GGBMRF13GGBMRF13GGBMRF13GGBMRF13GGBMRF13GGBNRpxXdgwcPIjg4GAEBAVi/fr3FbY4d\nO4a5c+daXFdZWYkZM2YgJCQECoUCp06dAgBUVFQgKioKgYGBmDhxIiorK9u9/86UkJAAmUwGtVpt\ndRtr4y8qKsK4ceOgVCqhUqmwdetWYZ218d+6dQtxcXHQaDRQKBRYt26dxX22NT9HsTWW5mzNBWtZ\nrly5ElqtFjqdDuPHj0dRUREA4PDhwwgPD4dGo0F4eDiOHj1qsV+xs2ju1q1biIiIgE6ng0KhwPLl\nyy1uZyuXLVu2QK1WQ6VSYcuWLcLyc+fOYfTo0dBoNIiOjkZVVZXF9s5+jABAY2MjQkND8cQTT1hc\n35550SQlJQUuLi6oqKgAABiNRsydOxcajQY6nQ7Hjx+32K7T5wVZYWNVqxoaGsjPz4/0ej0ZjUbS\narX0ww8/mG137NgxmjNnjsU+Zs2aRe+//z4REdXX11NlZSURESUlJdH69euJiGjdunW0dOnSdu+/\nrdqTxYkTJygnJ4dUKpXVbayN32AwUG5uLhERVVVVUWBgIOXl5RGR9fFv27aNYmNjiYiotraWfHx8\n6JdffjHruy352WJvFpbGYu9csJblzZs3hZ+3bt1KiYmJRESUm5tLBoOBiIi+//578vb2ttiv2Fnc\nq6amhojuzu+IiAjKzMw028ZaLt999x2pVCqqq6ujhoYGmjBhAv30009ERBQeHk4nTpwgIqLU1FRa\n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\nRK5CYII=\n" - } - ], - "prompt_number": 35 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 36, - "text": [ - "{1: 1.0, 5: 1.0}" - ] - } - ], - "prompt_number": 36 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "y[[1,5]]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 37, - "text": [ - "array([ 22., 38.])" - ] - } - ], - "prompt_number": 37 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "y *= 10" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 38 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "y" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 39, - "text": [ - "array([ 920., 220., 280., 510., 260., 380., 880., 590., 450.,\n", - " 980., 190., 960., 360., 350., 880., 130., 750., 210.,\n", - " 30., 670., 290., 390., 400., 740., 900.])" - ] - } - ], - "prompt_number": 39 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wy = ps.lag_spatial(w,y)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 40 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wy" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 41, - "text": [ - "array([ 600., 2080., 1320., 990., 1490., 1990., 2150., 1970.,\n", - " 2430., 1590., 1470., 2180., 2110., 1720., 2000., 1230.,\n", - " 1690., 1540., 1970., 1810., 520., 1440., 1340., 1330.,\n", - " 1410.])" - ] - } - ], - "prompt_number": 41 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 42, - "text": [ - "{1: 1.0, 5: 1.0}" - ] - } - ], - "prompt_number": 42 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "y[[1,5]]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 43, - "text": [ - "array([ 220., 380.])" - ] - } - ], - "prompt_number": 43 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "y[[1,5]].sum()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 44, - "text": [ - "600.0" - ] - } - ], - "prompt_number": 44 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In order to obtain averages around an observation, row standardize `W`:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "${w}_{i,j}^* = w_{i,j} / \\sum_j w_{i,j}$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print w.transform\n", - "w.transform = 'R'\n", - "print w.transform" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "O\n", - "R\n" - ] - } - ], - "prompt_number": 45 - }, - { - "cell_type": "code", - "collapsed": true, - "input": [ - "w.weights" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 46, - "text": [ - "{0: [0.5, 0.5],\n", - " 1: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 2: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 3: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 4: [0.5, 0.5],\n", - " 5: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 6: [0.25, 0.25, 0.25, 0.25],\n", - " 7: [0.25, 0.25, 0.25, 0.25],\n", - " 8: [0.25, 0.25, 0.25, 0.25],\n", - " 9: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 10: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 11: [0.25, 0.25, 0.25, 0.25],\n", - " 12: [0.25, 0.25, 0.25, 0.25],\n", - " 13: [0.25, 0.25, 0.25, 0.25],\n", - " 14: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 15: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 16: [0.25, 0.25, 0.25, 0.25],\n", - " 17: [0.25, 0.25, 0.25, 0.25],\n", - " 18: [0.25, 0.25, 0.25, 0.25],\n", - " 19: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 20: [0.5, 0.5],\n", - " 21: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 22: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 23: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", - " 24: [0.5, 0.5]}" - ] - } - ], - "prompt_number": 46 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wry = ps.lag_spatial(w,y)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 47 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wry" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 48, - "text": [ - "array([ 300. , 693.33333333, 440. , 330. ,\n", - " 745. , 663.33333333, 537.5 , 492.5 ,\n", - " 607.5 , 530. , 490. , 545. ,\n", - " 527.5 , 430. , 666.66666667, 410. ,\n", - " 422.5 , 385. , 492.5 , 603.33333333,\n", - " 260. , 480. , 446.66666667, 443.33333333, 705. ])" - ] - } - ], - "prompt_number": 48 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "xs = np.array(range(5) * 5).flatten()\n", - "ys = np.array([[i] * 5 for i in range(5)]).flatten()\n", - "f = figure()\n", - "ax = f.add_subplot(111)\n", - "scatter(xs, ys, marker='', color='k')\n", - "for i in range(5):\n", - " axvline(i+0.5, color='k')\n", - " axhline(i+0.5, color='k')\n", - "ax.axes.get_yaxis().set_visible(False)\n", - "ax.axes.get_xaxis().set_visible(False)\n", - "ax.set_xlim((-0.5, 4.5))\n", - "ax.set_ylim((-0.5, 4.5))\n", - "for i in range(25):\n", - " text(xs[i], ys[i], \"%s | %s\"%(str(i), np.round(wry[i], 2)), horizontalalignment='center',\n", - " verticalalignment='center')\n", - "title(\"Standardized spatial lag Y\")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 49, - "text": [ - "" - ] - }, - { - "output_type": "display_data", - "png": "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\njDEJdXrRfdhPiH9NOBfNOBfNfu+5+K2Nv9NvL/wacC6acS6acS6acS6a8e0FxhjrQrjoMsaYhLjo\nMsaYhLi8zLW5AAAfZklEQVToMsaYhLjoMsaYhLjoMsaYhLjoMsaYhLjoMsaYhLjoMsaYhLjoMsaY\nhLjoMsaYhLjoMsaYhLjoMsaYhLjoMsaYhLjoMsaYhKx+ny5jjDH7Wfs+3W5tDfw94S9obsa5aMa5\naMa5aNbaBSvfXmCMMQlx0WWMMQlx0WWMMQlx0WWMMQlx0WWMMQlx0WWMMQlx0WWMMQlx0WWMMQlx\n0WWMMQlx0WWMMQlx0WWMMQlx0WWMMQlx0WWMMQlx0WWMMQlx0WWMMQlx0WWMMQm1u+impqbCw8MD\nYWFhJssrKiowcuRIBAYG4rnnnkNlZaXFeF9fX6v9r169Gg4ODqioqAAAGAwGTJo0CWq1GlqtFt99\n953QNi8vD2FhYQgICMDUqVNF+1y2bBkCAgIQHByMAwcO2DjS1onlYseOHVAqlXB0dER+fr5ovFgu\nFixYALlcDp1OB51Oh3379pmsLy4uRs+ePbF69WphWUxMDIKDg4WYGzduWOxb6lzMnDkTISEh0Gg0\niI+Px+3bty3G25uLb775BhEREVCr1YiIiMChQ4cAAFVVVUJbnU6Hfv36Yfr06Wb9FhUVoXv37kK7\nN954ox2jNyWWi3nz5kGj0UCr1WLEiBEoKSmxGG/vOZKTkyOMQ61WY/v27ULbzjhHxMYvtv8Psjb+\n9evXIyQkBCqVCrNmzRKWnzp1CtHR0VCpVFCr1bh37x6Axvrx+uuvIygoCCEhIfjiiy8s9vtgvMFg\nsHkutYpEWFll4siRI5Sfn08qlcpk+cyZM2nFihVERLR8+XKaNWuWxXhfX1/RvouLi2nUqFHk6+tL\nN2/eJCKiDz74gFJTU4mI6Nq1axQeHi60j4yMpOPHjxMR0R/+8AfKysoy67OgoIA0Gg0ZDAbS6/Wk\nUCiooaHB6hjbm4szZ87QuXPnKCYmhvLy8kTjxXKxYMECWr16tWhcQkICjR8/nt577z1hWWvbIuqc\nXBw4cEDYxqxZs+yeF2K5OHnyJJWVlRER0enTp8nb29tifHh4OGVnZ5st1+v1Zvvamvbm4s6dO8LP\n69ato7S0NIvx9p4jtbW1Qo7LysrIzc2NjEYjEXXOOSI2frH9f5DY+A8ePEixsbFkMBiIqLEeEBHV\n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\nc9zS2CwxGAz06quvkkqlosGDB9OhQ4eEdVu2bCGlUkkqlcrkEzKXLl2iYcOGkVqtptjYWCopKSEi\n8/GLxRNZnksttTYvZP/XyIxMJmvTVZm9/Pz8oNfrH/p22oNz0Yxz0Yxz0exh5uLXMP6WWssF/480\nxhiTUKcX3a7+yQEpcS6acS6a/d5z8Vsbf6ffXvg14Fw041w041w041w049sLjDHWhXDRZYwxCXHR\nZYwxCXHRZYwxCXHRZYwxCXHRZYwxCXHRZYwxCXHRZYwxCXHRZYwxCXHRZYwxCXHRZYwxCXHRZYwx\nCXHRZYwxCXHRZYwxCXHRZYwxCVn9Pl3GGGP2s/Z9ut3aGvh7wl/Q3Ixz0Yxz0Yxz0ay1C1a+vcAY\nYxLiossYYxLiossYYxLiossYYxLiossYYxLiossYYxLiossYYxLiossYYxLiossYYxLiossYYxLi\nossYYxLiossYYxLiossYYxLiossYYxLiossYYxJqd9H19fWFWq2GTqdDVFSUxTaHDx/GpEmTLK6r\nrKzEuHHjEBISgtDQUBw7dkxYt379eoSEhEClUmHWrFkAgJycHOh0Ouh0OqjVamzfvt1iv/PmzYNG\no4FWq8WIESNQUlJiV3x7WRtXE2t5Ecur2Lg+++wzYVw6nQ6Ojo44deqUWb8LFiyAXC4X2u3bt6+D\nRmzZuXPnTPbL1dUV69atM2tnLRcA0NDQAJ1OhxdffFFY9uOPPyI6OhpqtRpxcXGoqqoCAHzzzTeI\niIiAWq1GREQEDh06ZLFPqXMBAMuWLYNSqURYWBiSk5Nx7949szZtOV8qKiowcuRIBAYG4rnnnkNl\nZSWArjsvAGDt2rUICwuDSqXC2rVrLbbpyHMEaMx/QEAAgoODceDAAYv9iuWyw5AIK6tM+Pr60s2b\nN622OXz4ME2cONHiugkTJtCGDRuIiKi+vp4qKyuJiOjgwYMUGxtLBoOBiIiuXbtGRES1tbXU0NBA\nRERlZWXk5uZGRqPRrN87d+4IP69bt47S0tLsim/J1lzYMq6WrOVFLK9i42rpp59+In9/f4v9Lliw\ngFavXm3TGCxpSy6aNDQ0kKenJxUXF5uts5YLIqLVq1dTcnIyvfjii8KyiIgIOnLkCBERbdy4kebN\nm0dERCdPnqSysjIiIjp9+jR5e3tb7FPqXOj1evLz86O7d+8SEdH48eNp8+bNZu3acr7MnDmTVqxY\n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\nc9GMc9Hst5gLSYpu0w16Zorz0oxz0Yxz0ey3mAsZibyUyGSy3+SrTFtwLppxLppxLppxLpq1lgv+\nwhvGGJMQF13GGJMQF13GGJMQF13GGJMQF13GGJMQF13GGJMQF13GGJMQF13GGJMQF13GGJMQF13G\nGJMQF13GGJMQF13GGJMQF13GGJMQF13GGJMQF13GGJOQ1e/TZYwxZj9r36fbra2Bvyf8Bc3NOBfN\nOBfNOBfNWrtg5dsLjDEmIS66jDEmIS66jDEmIS66jDEmIS66jDEmIS66jDEmIS66jDEmIS66jDEm\nIS66jDEmIS66jDEmIS66jDEmIS66jDEmIS66jDEmIS66jDEmIS66jDEmIS66jDEmoQ4tuvv27UNw\ncDACAgKwYsUKi20OHz6MSZMmmS2/e/cuhgwZAq1Wi9DQUMyZM0dYV1FRgZEjRyIwMBDPPfccKisr\nhXXLli1DQEAAgoODceDAAYvbtBbfkVJTU+Hh4YGwsDDRNmLjB4DKykqMGzcOISEhCA0NxbFjxwAA\nP/74I6Kjo6FWqxEXF4eqqioAQE5ODnQ6HXQ6HdRqNbZv326x33nz5kGj0UCr1WLEiBEoKSmxK749\nSkpKMHz4cCiVSqhUKqxbt85iO2t5AYCGhgbodDq8+OKLZutWr14NBwcHVFRUCMu60rxoYm2Ot9SW\nc0TsGANdMxdNrB1XQDwX586dE+auTqeDq6ur2dx6cF4UFRWhe/fuQswbb7xhcZsPPRckwsoqi4xG\nIykUCtLr9WQwGEij0dDPP/9s1u7w4cM0ceJEi33U1NQQEVF9fT0NGTKEjh49SkREM2fOpBUrVhAR\n0fLly2nWrFlERFRQUEAajYYMBgPp9XpSKBTU0NBg1q9YvK1szcWRI0coPz+fVCqVaBtr458wYQJt\n2LCBiBpzUFlZSUREERERdOTIESIi2rhxI82bN4+IiGpra4XxlpWVkZubGxmNRrN+79y5I/y8bt06\nSktLsyu+JXvnRVlZGZ08eZKIiKqqqigwMNDueUFEtHr1akpOTqYXX3zRZHlxcTGNGjWKfH196ebN\nm0TU9eZFSw/O8ezsbLM29pwjTfFix7gr54JI/Lg2aW1eEBE1NDSQp6cnFRcXC8sszQu9Xm/13Gzy\nsHPRYVe6OTk58Pf3h6+vL5ycnJCYmIjMzExLRV60jx49egAADAYDGhoa0KdPHwDAnj17kJKSAgBI\n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\n" - } - ], - "prompt_number": 49 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w[24]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 50, - "text": [ - "{19: 0.5, 23: 0.5}" - ] - } - ], - "prompt_number": 50 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "y[[19,23]].mean()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 51, - "text": [ - "705.0" - ] - } - ], - "prompt_number": 51 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Weights From External Files\n", - "\n", - "With these concepts in mind, let's apply them to real world data. We will revisit the neighborhood checkin dataset from Amsterdam." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## shapefiles" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w_adam = ps.rook_from_shapefile('data/amsterdam_hoods.shp')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 52 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w_adam.n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 53, - "text": [ - "96" - ] - } - ], - "prompt_number": 53 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w_adam.pct_nonzero" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 54, - "text": [ - "0.051215277777777776" - ] - } - ], - "prompt_number": 54 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wq_adam = ps.queen_from_shapefile('data/amsterdam_hoods.shp')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 55 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wq_adam.pct_nonzero" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 56, - "text": [ - "0.056206597222222224" - ] - } - ], - "prompt_number": 56 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "w_adam.histogram" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 57, - "text": [ - "[(0, 1),\n", - " (1, 2),\n", - " (2, 6),\n", - " (3, 8),\n", - " (4, 23),\n", - " (5, 22),\n", - " (6, 14),\n", - " (7, 13),\n", - " (8, 6),\n", - " (9, 1)]" - ] - } - ], - "prompt_number": 57 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wq_adam.histogram" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 58, - "text": [ - "[(0, 1),\n", - " (1, 2),\n", - " (2, 4),\n", - " (3, 7),\n", - " (4, 18),\n", - " (5, 21),\n", - " (6, 13),\n", - " (7, 13),\n", - " (8, 12),\n", - " (9, 5)]" - ] - } - ], - "prompt_number": 58 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's visualize the cardinalities of both weight structures" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wh = np.array(w_adam.histogram)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 59 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "bar(wh[:,0],wh[:,1])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 60, - "text": [ - "" - ] - }, - { - "output_type": "display_data", - "png": "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\n" - } - ], - "prompt_number": 60 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "whq_adam = np.array(wq_adam.histogram)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 61 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "bar(wh[:,0],wh[:,1])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 62, - "text": [ - "" - ] - }, - { - "output_type": "display_data", - "png": "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\n" - } - ], - "prompt_number": 62 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "An alternative is to consider directly the number of neighbors every observation has, read it into a `pandas.Series` and plot a histogram/density kernel of it:" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Contributors to this notebook\n", + "\n", + "* Daniel Arribas-Bel [@darribas](http://twitter.com/darribas)\n", + "* Serge Rey [@sergerey](http://twitter.com/sergerey) " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" ] - }, - { - "cell_type": "code", - "collapsed": true, - "input": [ - "nn = pd.Series(wq_adam.cardinalities.values())\n", - "nn" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 63, - "text": [ - "0 2\n", - "1 8\n", - "2 5\n", - "3 5\n", - "4 7\n", - "5 8\n", - "6 8\n", - "7 9\n", - "8 8\n", - "9 5\n", - "10 5\n", - "11 7\n", - "12 4\n", - "13 7\n", - "14 5\n", - "15 6\n", - "16 6\n", - "17 4\n", - "18 4\n", - "19 7\n", - "20 5\n", - "21 7\n", - "22 5\n", - "23 4\n", - "24 4\n", - "25 9\n", - "26 4\n", - "27 0\n", - "28 1\n", - "29 4\n", - "30 7\n", - "31 4\n", - "32 7\n", - "33 9\n", - "34 6\n", - "35 4\n", - "36 7\n", - "37 6\n", - "38 6\n", - "39 3\n", - "40 2\n", - "41 9\n", - "42 4\n", - "43 4\n", - "44 3\n", - "45 5\n", - "46 6\n", - "47 6\n", - "48 8\n", - "49 5\n", - "50 5\n", - "51 5\n", - "52 4\n", - "53 8\n", - "54 4\n", - "55 3\n", - "56 7\n", - "57 5\n", - "58 5\n", - "59 3\n", - "60 4\n", - "61 5\n", - "62 8\n", - "63 7\n", - "64 6\n", - "65 2\n", - "66 4\n", - "67 3\n", - "68 5\n", - "69 5\n", - "70 2\n", - "71 1\n", - "72 9\n", - "73 5\n", - "74 8\n", - "75 5\n", - "76 8\n", - "77 7\n", - "78 3\n", - "79 4\n", - "80 6\n", - "81 8\n", - "82 4\n", - "83 7\n", - "84 4\n", - "85 6\n", - "86 8\n", - "87 7\n", - "88 6\n", - "89 3\n", - "90 8\n", - "91 6\n", - "92 5\n", - "93 5\n", - "94 6\n", - "95 5\n", - "Length: 96" - ] - } - ], - "prompt_number": 63 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "nn.hist()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 64, - "text": [ - "" - ] - }, - { - "output_type": "display_data", - "png": "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\neOz/AWjxbqOFbb0ZAAAAAElFTkSuQmCC\n" - } - ], - "prompt_number": 64 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "(nn * 1.).plot(kind='kde')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 65, - "text": [ - "" - ] - }, - { - "output_type": "display_data", - "png": "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\nRK5CYII=\n" - } - ], - "prompt_number": 65 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Writing to files: GAL" + } + ], + "source": [ + "import pysal as ps # 1.5 or higher\n", + "import numpy as np # 1.7 or higher\n", + "import pandas as pd # 0.10 or higher\n", + "%pylab inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Regular Lattice Weights " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The geography we are working with now is a simple lattice:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/serge/anaconda/lib/python2.7/site-packages/matplotlib/collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", + " if self._edgecolors == str('face'):\n" ] }, { - "cell_type": "code", - "collapsed": false, - "input": [ - "adam_gal = ps.open(\"data/adam.gal\",'w','gal')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 66 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "adam_gal.write(wq_adam)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 67 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "adam_gal.close()" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 68 - }, - { - "cell_type": "markdown", + "data": { + "image/png": "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\n6H8BD4+E+WS1uEIAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, "metadata": {}, - "source": [ - "We can look at the structure of the file by considering only the beginning of the file:" + "output_type": "display_data" + } + ], + "source": [ + "xs = np.array(range(5) * 5).flatten()\n", + "ys = np.array([[i] * 5 for i in range(5)]).flatten()\n", + "f = figure()\n", + "ax = f.add_subplot(111)\n", + "scatter(xs, ys, marker='', color='k')\n", + "for i in range(5):\n", + " axvline(i+0.5, color='k')\n", + " axhline(i+0.5, color='k')\n", + "ax.axes.get_yaxis().set_visible(False)\n", + "ax.axes.get_xaxis().set_visible(False)\n", + "ax.set_xlim((-0.5, 4.5))\n", + "ax.set_ylim((-0.5, 4.5))\n", + "for i in range(25):\n", + " text(xs[i], ys[i], str(i))\n", + "title(\"Observations\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Rook contiguity\n", + "\n", + "To build a simple *rook* contiguity:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "w = ps.lat2W(5, 5)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "w?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`W` objects in `PySAL` have many attributes:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "25" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{0: [5, 1],\n", + " 1: [0, 6, 2],\n", + " 2: [1, 7, 3],\n", + " 3: [2, 8, 4],\n", + " 4: [3, 9],\n", + " 5: [0, 10, 6],\n", + " 6: [1, 5, 11, 7],\n", + " 7: [2, 6, 12, 8],\n", + " 8: [3, 7, 13, 9],\n", + " 9: [4, 8, 14],\n", + " 10: [5, 15, 11],\n", + " 11: [6, 10, 16, 12],\n", + " 12: [7, 11, 17, 13],\n", + " 13: [8, 12, 18, 14],\n", + " 14: [9, 13, 19],\n", + " 15: [10, 20, 16],\n", + " 16: [11, 15, 21, 17],\n", + " 17: [12, 16, 22, 18],\n", + " 18: [13, 17, 23, 19],\n", + " 19: [14, 18, 24],\n", + " 20: [15, 21],\n", + " 21: [16, 20, 22],\n", + " 22: [17, 21, 23],\n", + " 23: [18, 22, 24],\n", + " 24: [19, 23]}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.neighbors" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{0: [1.0, 1.0],\n", + " 1: [1.0, 1.0, 1.0],\n", + " 2: [1.0, 1.0, 1.0],\n", + " 3: [1.0, 1.0, 1.0],\n", + " 4: [1.0, 1.0],\n", + " 5: [1.0, 1.0, 1.0],\n", + " 6: [1.0, 1.0, 1.0, 1.0],\n", + " 7: [1.0, 1.0, 1.0, 1.0],\n", + " 8: [1.0, 1.0, 1.0, 1.0],\n", + " 9: [1.0, 1.0, 1.0],\n", + " 10: [1.0, 1.0, 1.0],\n", + " 11: [1.0, 1.0, 1.0, 1.0],\n", + " 12: [1.0, 1.0, 1.0, 1.0],\n", + " 13: [1.0, 1.0, 1.0, 1.0],\n", + " 14: [1.0, 1.0, 1.0],\n", + " 15: [1.0, 1.0, 1.0],\n", + " 16: [1.0, 1.0, 1.0, 1.0],\n", + " 17: [1.0, 1.0, 1.0, 1.0],\n", + " 18: [1.0, 1.0, 1.0, 1.0],\n", + " 19: [1.0, 1.0, 1.0],\n", + " 20: [1.0, 1.0],\n", + " 21: [1.0, 1.0, 1.0],\n", + " 22: [1.0, 1.0, 1.0],\n", + " 23: [1.0, 1.0, 1.0],\n", + " 24: [1.0, 1.0]}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.weights" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 1.0, 5: 1.0}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$s_0 = \\sum_i \\sum_j w_{i,j}$" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "80.0" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.s0" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[(2, 4), (3, 12), (4, 9)]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "80" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum( [ c[0]*c[1] for c in w.histogram ] )" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "12.8" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.pct_nonzero" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\text{pct nonzero} = s_0 / n^2$" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.128" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.s0 / w.n**2" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 1., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 1., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 1., 0., 0., 0., 1., 0., 1., 0., 0., 0.,\n", + " 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.,\n", + " 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0.,\n", + " 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 1.,\n", + " 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0.,\n", + " 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1.,\n", + " 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,\n", + " 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,\n", + " 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,\n", + " 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,\n", + " 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 1., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 1., 0., 0., 0., 1., 0., 1., 0., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 1., 0.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 1.],\n", + " [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0.]])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "full, id_order = w.full()\n", + "full" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[0,\n", + " 1,\n", + " 2,\n", + " 3,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 10,\n", + " 11,\n", + " 12,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 17,\n", + " 18,\n", + " 19,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "id_order" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<25x25 sparse matrix of type ''\n", + "\twith 80 stored elements in Compressed Sparse Row format>" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.sparse" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we are working with very large datasets, we might want to create a sparse object directly to save up on memory:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<25x25 sparse matrix of type ''\n", + "\twith 80 stored elements in Compressed Sparse Row format>" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ws = ps.weights.lat2SW(5, 5)\n", + "ws" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Queen Contiguity" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "wq = ps.lat2W(5, 5, rook=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "144.0" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wq.s0" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[(3, 4), (4, 0), (5, 12), (6, 0), (7, 0), (8, 9)]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wq.histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "144" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum( [ c[0] * c[1] for c in wq.histogram ] )" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "23.04" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wq.pct_nonzero" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.2304" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "144. / wq.n**2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bishop" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "wb = ps.w_difference(wq,w, constrained = False)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "25" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wb.n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "64.0" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wb.s0" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 1.0, 5: 1.0, 6: 1.0}" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wq[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 1.0, 5: 1.0}" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{6: 1.0}" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wb[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ps.w_difference?" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[(1, 4), (2, 12), (3, 0), (4, 9)]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wb.histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Spatial Lag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$l_i = \\sum_{i,j} w_{i,j} y_j$" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 96., 68., 94., 77., 26., 6., 37., 84., 91., 85., 67.,\n", + " 42., 0., 36., 42., 82., 94., 60., 79., 14., 74., 3.,\n", + " 16., 5., 37.])" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y = np.random.randint(low=0, high=100, size=w.n) * 1.\n", + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nrplZRk66ZmYZOemamWXkpGtmlpGTrplZRh1/tWPGczEze8Oo+tWO4/ptuLbx7wptcCwaHIsGx6Kh\n3Q2rlxfMzDJy0jUzy8hJ18wsIyddM7OMnHTNzDJy0jUzy8hJ18wsIyddM7OMnHTNzDJy0jUzy8hJ\n18wsIyddM7OMnHTNzDJy0jUzy8hJ18wsIyddM7OMnHTNzDIaeNKVNFvSSkmLWvafKWm5pHnpZ7+K\n9kMV+3eSdGdqe7ek96f9+0q6R9LC9O9eFe0nSrpF0oOS5kiaMMKhdlQVi1R2rKTFku6V9LWK9kMV\n+98j6Y405uslbdxSPkXSC5JOqGhfm1hIuqppTiyTNK+i/VCbvktjKelUSQ9JWiLpwxVt6xSL0jle\n0n6oYn9pLCWtJ+miNF/mS9qjon2dYtF2jjfVG6rYf5Ck+yS9Jml6SfnYXSMRUflTFFeXV7SZAewM\nLGrZfwZwfBftl1XsnwP8ZdreH7gtbe8EbJ62dwSWV7T/OnBS2j4ZOKvHcQ0yFnsBtwDj0+O39hiL\nu4EZafso4Ist5dcAVwMn1D0WLXW+AZzeYyxKYwn8GTAfGA9MBZYC69Q5FlVzvNtYVMUS+HvgwuH4\nAPeQ/j5ijWPRdo53MS+2B7YDbgOml5SP2TUy8DvdiPgJ8FxF8Uj+ftIqYJO0PQF4Ih1vfkQ8lfbf\nD2wgaXxJ+wOBi9P2xcDHRnAuXWkTi08DX42IV1K9Z3rsetvUN8CtwMeHCyR9DHiEIhZV6hQLACQJ\nOBi4sseuq2I5E7gyIl6JiCGKpPuBkvZ1ikXpHO9VSSx3oEg+w/H5NfC+kqZ1ikXlHO+y3yUR8WBZ\n2VhfI7nXdI+VtEDShX3crn8WOFvSY8DZwKkldT4OzB2+AFtMioiVaXslMKnH4w/StsDu6a3kjySV\nXQDt3CdpZto+CJgMIGkj4CTgzA7t6xSLYTOAlRHxcI/tqmK5JbC8qd5yYKuS9nWKRTdzvButsVwA\nHChpXUnTgPcCW5e0q1MsSuf4SNXhGsmZdM8HplEsBzwJnNNj+2OAz0bEFOBzwOzmQkk7AmcBn+rU\nURT3/2P55+XHAZtGxK7AicB3e2x/NHCMpHuAjYA/pP1nAudGxEt0+a6iBrEYdhhwRR/teoll23HW\nIBZt53gPWmM5m+JF5x7gXOBnwGvtOqhBLKrm+EidyVhfI4Neo0ntptJ+7a6ynOo1ml83bQt4vunx\n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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xs = np.array(range(5) * 5).flatten()\n", + "ys = np.array([[i] * 5 for i in range(5)]).flatten()\n", + "f = figure()\n", + "ax = f.add_subplot(111)\n", + "scatter(xs, ys, marker='', color='k')\n", + "for i in range(5):\n", + " axvline(i+0.5, color='k')\n", + " axhline(i+0.5, color='k')\n", + "ax.axes.get_yaxis().set_visible(False)\n", + "ax.axes.get_xaxis().set_visible(False)\n", + "ax.set_xlim((-0.5, 4.5))\n", + "ax.set_ylim((-0.5, 4.5))\n", + "for i in range(25):\n", + " text(xs[i], ys[i], \"%s | %s\"%(str(i), y[i]), horizontalalignment='center',\n", + " verticalalignment='center')\n", + "title('Distribution of Y')" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 74., 227., 229., 211., 162., 200., 200., 222., 282.,\n", + " 159., 130., 198., 222., 212., 135., 235., 187., 189.,\n", + " 115., 158., 85., 184., 68., 132., 19.])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wy = ps.lag_spatial(w,y)\n", + "wy" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nVqH/D0CwEl2+DUacAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xs = np.array(range(5) * 5).flatten()\n", + "ys = np.array([[i] * 5 for i in range(5)]).flatten()\n", + "f = figure()\n", + "ax = f.add_subplot(111)\n", + "scatter(xs, ys, marker='', color='k')\n", + "for i in range(5):\n", + " axvline(i+0.5, color='k')\n", + " axhline(i+0.5, color='k')\n", + "ax.axes.get_yaxis().set_visible(False)\n", + "ax.axes.get_xaxis().set_visible(False)\n", + "ax.set_xlim((-0.5, 4.5))\n", + "ax.set_ylim((-0.5, 4.5))\n", + "for i in range(25):\n", + " text(xs[i], ys[i], \"%s | %s\"%(str(i), wy[i]), horizontalalignment='center',\n", + " verticalalignment='center')\n", + "title(\"Spatial lag Y\")" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 1.0, 5: 1.0}" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 68., 6.])" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y[[1,5]]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "y *= 10" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 960., 680., 940., 770., 260., 60., 370., 840., 910.,\n", + " 850., 670., 420., 0., 360., 420., 820., 940., 600.,\n", + " 790., 140., 740., 30., 160., 50., 370.])" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "wy = ps.lag_spatial(w,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 740., 2270., 2290., 2110., 1620., 2000., 2000., 2220.,\n", + " 2820., 1590., 1300., 1980., 2220., 2120., 1350., 2350.,\n", + " 1870., 1890., 1150., 1580., 850., 1840., 680., 1320.,\n", + " 190.])" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wy" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 1.0, 5: 1.0}" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 680., 60.])" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y[[1,5]]" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "740.0" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y[[1,5]].sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to obtain averages around an observation, row standardize `W`:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "${w}_{i,j}^* = w_{i,j} / \\sum_j w_{i,j}$" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "O\n", + "R\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "! head data/adam.gal" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "96\r\n", - "0 2\r\n", - "1 4\r\n", - "1 8\r\n", - "0 2 3 4 5 38 48 37\r\n", - "2 5\r\n", - "1 3 5 6 7\r\n", - "3 5\r\n", - "8 1 2 4 7\r\n", - "4 7\r\n" - ] - } - ], - "prompt_number": 69 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Distance Based Weights" + } + ], + "source": [ + "print w.transform\n", + "w.transform = 'R'\n", + "print w.transform" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{0: [0.5, 0.5],\n", + " 1: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 2: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 3: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 4: [0.5, 0.5],\n", + " 5: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 6: [0.25, 0.25, 0.25, 0.25],\n", + " 7: [0.25, 0.25, 0.25, 0.25],\n", + " 8: [0.25, 0.25, 0.25, 0.25],\n", + " 9: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 10: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 11: [0.25, 0.25, 0.25, 0.25],\n", + " 12: [0.25, 0.25, 0.25, 0.25],\n", + " 13: [0.25, 0.25, 0.25, 0.25],\n", + " 14: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 15: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 16: [0.25, 0.25, 0.25, 0.25],\n", + " 17: [0.25, 0.25, 0.25, 0.25],\n", + " 18: [0.25, 0.25, 0.25, 0.25],\n", + " 19: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 20: [0.5, 0.5],\n", + " 21: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 22: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 23: [0.3333333333333333, 0.3333333333333333, 0.3333333333333333],\n", + " 24: [0.5, 0.5]}" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.weights" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "wry = ps.lag_spatial(w,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 370. , 756.66666667, 763.33333333, 703.33333333,\n", + " 810. , 666.66666667, 500. , 555. ,\n", + " 705. , 530. , 433.33333333, 495. ,\n", + " 555. , 530. , 450. , 783.33333333,\n", + " 467.5 , 472.5 , 287.5 , 526.66666667,\n", + " 425. , 613.33333333, 226.66666667, 440. , 95. ])" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wry" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAD8CAYAAADUv3dIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXm4XUWZ7n8vJMGEIEkYQiDBRBtEEYWAwdsNMjSjtgSk\nUQSVobud+oItNiDgFXBo44A0+jzQ1wEa1DB0oJHuVqa+ICjIEDOcBMKYQwiQMBiFNBGQfPePVZu9\nsrPWns7OOifk/T3Pfk6tqvq+VfXuqm9X1drnHEUExhhjqmGjwW6AMcZsSDjoGmNMhTjoGmNMhTjo\nGmNMhTjoGmNMhTjoGmNMhTjobuBI2lfS4z30d7yk23PXL0ia3Cv/yeetkv6mlz67aMPekha1WXcN\nTRrKJktaLclzcQPBb/QQQNJeku6Q9HtJz0n6laQ9UlnphF0fiIjNIqK/127TqzJSYHzzaw2IuD0i\ndqqyDZ0g6auSbm7I21HSHyTtPFjtMg66g46kNwL/CVwAjAW2A84FXhrMdrWDpI0Huw0Vo8FuQAd8\nGdhG0t8CSBLwA+C8iFg4qC3bwHHQHXx2BCIiroyMP0bETRHRJ+ltwEXA/0rb9N8BSHq/pDlp1bJE\n0tk1Z7nt6sclPSbpGUln5spHSvpXSb+TtBB4d74xkr4g6WFJz0taKOnwXNnxkn4t6TuSngXOljRO\n0nWpLXcBb2nwt1rSmyVtm/pQe70oaXWu3omS7kvtul7S9rmyAyUtSjuB75EFv8IAKGmapHtTe5ZJ\nOq9Bl7+T9ISkJyV9vsHuTkkrUtn3JA1PZbelavNS249qPJZpplsnSDoh6fC8pEckfaKh/LTUvqWS\n/rZxBV4jIl4GTgRmSJoAfALYHPhaN+0yPSQi/BrEF7AZ8Czwr8AhwNiG8uOA2xvy9gF2TuldgGXA\n9HQ9GVgN/F9gE+CdwB+Bt6byGcAvgTHARGABsCTn+6+BbVL6Q8BKYHy6Ph54Bfh7sg/sNwBXpNdI\nYGdgKXBbzt9q4M0F/f4J8NOUng48BLw1+T0L+HUq2xJ4HvggsDHwD6kNJ5boeSdwbEqPAvZs0OWn\nqa3vAJ4G/jKVTwWmpfu/CbgP+GxZP4B9gcc70O32kvbW2rVRun4fMCWl3wv8D7Bbuj4EeAp4W+rD\nT4BXi/TN+f828N/AM8DUwR7vfoWD7lB4ATsBlwCPp4DyM2DrVFY6YXP2/wx8J6Vrk3jbXPldwIdS\n+hHgoFzZ3+WDR4HvOcBhubY8livbGHgZ2DGX97V8e4uCLnA6cA+wSbr+RT6IpsD3P8D2wMeBOxrs\nH28SdH8JnANs2ZBf0yXf1m8APyzx8w/ANWX9aAy6bejWVtAtKP934OSUvhj4Wq7sLUX6Nti/Aegn\nO1YY9LHuV/h4YSgQEYsi4oSImES2AtuWLJAWImlPSbdIelrS74FPAls0VFuWS78IjE7pbcmCVo0l\nDb4/no4uVkhakdqT95233QoY1sxfQdsPBU4GDo+I2rn1m4ALcvd8LuVvB0wgWz3nafZti78hO7K5\nX9Ldkt7fxHYJmR61h0z/KekpSX8g+/Bo1LRZv1rp1q6fQyX9RtkD1RVkK9+anwkN7W/UZS0i4o/A\nYsDnuEMEB90hRkQ8AFxKNmmh+Cn9TOBaYGJEjAH+hfbfy6fIVpA18menbwK+T3Z8MC4ixpIdP+TP\nT/PteQb4U5m/RiS9lewY5aiIeCJXtAT4RESMzb02jYg7U3sn5Xwof91IRDwcEcdExFZkK9lZkkaW\ntG97oNaOi8iOFP4sIjYnO+JoS9M2dWvHzybA1cA3yXY6Y4Gf5/ysoQVNdDBDFwfdQUbSWyWdImm7\ndD0J+AjZ2STAcmBi7aFOYjSwIiJeljQNOIb2v0J1FXCGpDGSJgIn5co2TX6eBTaSdAL14L8WEfEq\ncA1wTnpA93ayM+iifr6R7NjkrIi4o6H4X4Azkz2SNpd0VCr7ObCzpCMkDSNbJW9T1iZJH5W0Vbr8\nQ+rP6lyVL6a27ky27b8y5Y8GXgBelLQT8OkG18tpeEiYoyPdmjAivZ4FVqddwUG58quAEyTtJGkU\n8H868L0+ffPidY2D7uDzArAncJeklWTBdj5Qe7L+32Rbw2WSnk55nwG+LOl5sol35Zoumwbgc4HH\nyLac1wOX1epHxH3AeakNy8gCx68a/Db6/t9kAWsZ2ZnjxQ11aumpZNv+83PfYHg+3fdaslXpFWlr\n3wccnMqeBY4iewD4LPBnDW1q5GBggaQXgPOBo3PHGJCd+T4M3Ax8KyJq32X9R7IPr+fJVq1XNPTj\nHODSdHzw13ktutSNhnIi4gWyD5WrgN+Rffj+7LVKEdcD3wVuAR6k/sHcztcL/YezhwiK8HthXv8o\n+624R4FhEbG6ee31A2VfKewDRrxe+rQh4JWuMesR6ZhlE0ljyXYH1zngrl846JoNidfDtu4TZOfL\nD5N9vbDx7NkMcXy8YIwxFeKVrjHGVMiwZoWSvAw2xpguiIjCr+k1DbrNDDc0JIW1yLAWdaxFHWtR\np9mC1ccLxhhTIQ66xhhTIQ66xhhTIQ66xhhTIQ66xhhTIQ66xhhTIQ66xhhTIQ66xhhTIQ66xhhT\nIQ66xhhTIQ66xhhTIQ66xhhTIQ66xhhTIQ66xhhTIQ66xhhTIQ66xhhTIQMKupImSbpF0kJJCySd\nnCsbJ+kmSQ9KulHSmBIf/S3u8XlJqyWNS9cHSrpX0vz0c79c3VslLZI0J722LPF5hqSHUt2Duuo8\nLft/VMp/VdLUJj76m5SdJOn+5PsbKW+LdM8XJH2vof71kuam+hdJWuv9lTQtp89cSYd3Yt+lFt9K\n/Zgn6RpJm3eiRZl9i7EwQtL3JT2QbD9Y4vudku5MbZ6f7DbLaTRH0jOSzm9Xiw50+Urq0xxJN0ia\n0IkuufI15kguf3tJKyV9Ppe3u6S+NP4vaOKzJ3OkRbtLtcnVKexbrry/JP9d6X2dL+k6SZul/MmS\nVuXe2wtL7NuKX10REaWvrLhp+TbArik9GngA2CldfxM4LaVPB2aU+FjcxP8k4HpgMTAu5e0KbJPS\nOwNLc/VvAaa2aPPbgbnAcGAy2X9V3aiZTZkWJf1/W7reCdixVZvK+g/sB9wEDE/XW6Wfo4C/AD4J\nfK/BZnQuPQv4cIHfkbX+pvYvz123tO9SiwNz95jR6Vgos28xFs4Fvpy73qLA7zBgHrBLuh5bNBaA\ne4G9ejhHarpslqt3EnBRL+ZIw3t4JfD5XN7dwLSU/jlwyLqcI91q06pvbYyZe4C9U/qE2lhI/elr\no21txa9utBjQSjcilkXE3JReCdwPbJeKDwMuTelLgcPX9tCS7wCnNdxzbkQsS5f3ASMlDc9VafXv\nQqYDl0fEKxHRTzagpnXRtrL+b5uuF0XEg934TXwa+HpEvJL8PZN+vhgRvwZeKmjPSoCkxwhgdUGd\nVRFRyx+Vr9OOfRkttLgpd8+7gInt+m1m32IsnAB8PefjuQLXBwHzI6Iv1VmRuw8AknYEto6IX3XS\n5tx9m+nyQq7qaDrQO8dacwQg7WAeJdOlljeBLNDfnbIuo3he9myONKOZNonCvrXJDhFxe0rfDBzZ\noX0v4lchPTvTlTQZ2I1sUgCMj4jlKb0cGN+hv+lkK5f5TaodCcyuBabEpWnb8MUSm22BpbnrpdQ/\n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\nQYjUli3T2R+S3kw2uR7tvHsdUfQet6SJDk8DKPvmyVE0bPskfRV4I9nKppBB0uFJSfuk9P7Ag50Y\np6f1pwLTI+KPuaLC+ZIrHxJjQtJW6edGwBfJdj+d2BfGm3SM8F/A6RFxZ61CCs7/kfs2w1+y5lyp\nMaA51ZJutgtk52VPAi+RfSqckPIvA+aTnZteC4zvZLuQyi4BPtGQtylwFbAgdf7zKX88cHe6Xx9w\nAfWnuR8Azk3pjybbOcBs4LBW9p1sF9rUZjjw43Sf2cC+nWqTq/Mouaf2ZKucBcn3jIa6jwA7NuTl\ntTmyQZv3t3H/llqU6VD2HvdIh32BOxrqTCTbUi5MfZwDnNgLHQaqBdkxwL3AXOBOyrf7hVoADwGP\n5fp1YbP5si7HRDMtmvT/ZOCB9PqnTscCJfGGLICvzOkyB9gylW0P/DLZ3ARMbOx/N3Oqk3GhVKEQ\nSRERA/42QoHfxZGtVNYb1pUWBfcZ8tpUocX6oANYizyOF3WaaeHfSDPGmAoZrKDb+W9xbDhYmwzr\nUGdD1+J11f9BOV5YH7EWdaxFHWtRx1rU8fGCMcYMERx0jTGmQhx0jTGmQhx0jTGmQhx0jTGmQhx0\njTGmQhx0jTGmQhx0jTGmQhx0jTGmQhx0jTGmQhx0jTGmQhx0jTGmQhx0jTGmQhx0jTGmQlr+accK\n22KMMa8byv6047BuDTc0/LdC61iLOtaijrWo02zB6uMFY4ypEAddY4ypEAddY4ypEAddY4ypEAdd\nY4ypEAddY4ypEAddY4ypEAddY4ypEAddY4ypEAddY4ypEAddY4ypEAddY4ypEAddY4ypEAddY4yp\nEAddY4ypEAddY4ypEAddY4ypkK6CrqSLJS2X1NeQP07STZIelHSjpDEl9v0t/H9e0mpJ49L1NElz\n0muupMNzda9PeQskXSRprT4N1L5dmuhylKSFkl6VNLWJfX8L/426jJB0iaT5qQ/75OreKmlRrt9b\nlvg8Q9JDqe5BHXW4eVvLtPiWpPslzZN0jaTNS+z7S/LPkbQ0169DUv5kSaty+RfmbIaqFl9JOsyR\ndIOkCSX2/SX5ZVo0G++7S+pL/bygSZsr1SJXvsYYLyjvb+G/cY40GxeDo0VElL6y4sL8vYHdgL6G\n/G8Cp6X06cCMEvvFTe45CbgeWAyMS3kjgY1Sehtgee56dM52FvDhAp8Dsm+mRZu67ATsCNwCTG1i\n36kufw/8KKW3Au7N1W96r1Tn7cBcYDgwGXi4pks346JNLQ7MaT+j0zECnA2cUpA/ufFe64EWm+XS\nJwEX9UiLZuP9bmBaSv8cOGQoaFE2xtvVosy+xbgYFC26WtVFxO3AioKiw4BLU/pS4PCCOq34DnBa\nw/1WRcTqdDkKWJ0rWwkgaTgwIl/WK/t2KdMlIhZFxIPd+k2spQvwNrKAQkQ8A/xe0h658lb/r2o6\ncHlEvBIR/WQDatoA20lqT5kWN+Xei7uAiV247+b/cA1FLV7IXY6mu7G3Vr/KxntaSW8WEXenssso\nnqOVa5EoGuOd0Lb9YGrR6zPd8RGxPKWXA+M7MZY0HVgaEfMLyqZJWgjMAz6VG1RIuiHd73ng6hLf\nA7IfTJroMg84TNLGkqYAu5N92te4NG2pvljieltgae56KbBdr9rdBieSrTA65aS0Lf+R1jzCmpL6\ne6ukvRpshqQWkr4maQlwDPClLlwUalEy3rdjzT4+QXEfK9ei2dzvgX3RuBg0LdbZg7TI1tht/wt3\nSaOAM8m2TK9l5/zdHRE7A+8GzpS0Sa7sYGAC8AZg/5L2DMh+sGihy8Vkg+Be4HzgDuDVVHZsRLyD\nbDu3t6SPtXnLtt+zgSDpLODliJjZoelFwBRgV+Ap4LyU/yQwKSJ2A04BZkoancqGrBYRcVZEbA/8\nlOyIoRPKtGg63rtt6gDtS2k19wdoXzQuNhtYiwemRa+D7nJJ28Bry/enO7B9C9mZyTxJi8m2nbMl\nbZ2vFBGLgJXAzg35LwE/I9sOlDJQ+0GgVJeIeDUiTomI3SLicGAM8CBARDyZfq4EZlK8JXqCNVfG\nE1PeOkXS8cD7gGM7tY2IpyMB/JDUr4h4OSJWpPRvgUfIztGHtBY5ZgJHdmJQpkVDnfx4X8qaxzll\nfaxai7bmfjf2JeNiB7L+DIoWvQ661wHHpfRxwLXtGkZEX0SMj4gpETGFbIBMjYin0xPIYQCS3kT2\nYKpf0qa1J76p/K+A+xt9D9S+x3R0HtlCl5GSNgWQdCDwSkQsSscNW6b84cAHgKKnxdcBRyv7FsQU\nssF4d0G9npGesJ8KTI+IP3Zhn3/CfwSpX5K2lLRxSr+ZrC+PDnEtdshdTqfDsddEi8LxHhHLgOcl\n7SlJwMconqOVatFsjA/UvmxcRMRTDJYW3TyBAy4nW7a/BDwOnJDyxwE3k622bgTGlNgvbnbfWh3q\nTyA/CiwA5gCzgcNS/vgkwDyyAXcB9ae0HwDO7da+XS3a1OWIdL0KWAb8YgC6PMqaT2YXAfclvSel\n/E3JjhzmpX6fD6hRl3R9JtnDgUXAwa3u3wMtHgIeS+/FHODCTrQge+AxP/XtWrLnCAAfbHiP378e\naDErjbt5ZLusCT3SonC8p7Ld0z0fBr6byx9ULcrGeA/mSOG4GEwtaoOvEEkREd08KW6KpMWRfSKt\nN6wrLRrusV7oYi3qWIs61qJOMy38G2nGGFMhgxV0zx+k+w51rEsda1HHWtRZ77UYlOOF9RFrUcda\n1LEWdaxFHR8vGGPMEMFB1xhjKsRB1xhjKsRB1xhjKsRB1xhjKsRB1xhjKsRB1xhjKsRB1xhjKsRB\n1xhjKsRB1xhjKsRB1xhjKsRB1xhjKsRB1xhjKsRB1xhjKqTln3assC3GGPO6oexPOw7r1nBDw38r\ntI61qGMt6liLOs0WrD5eMMaYCnHQNcaYCnHQNcaYCnHQNcaYCnHQNcaYCnHQNcaYCnHQNcaYCnHQ\nNcaYCnHQNcaYCnHQNcaYCnHQNcaYCnHQNcaYCnHQNcaYCnHQNcaYCnHQNcaYCnHQNcaYCulJ0JXU\nL2m+pDmS7i6ps6+kS0rKxkiaJel+SfdJek+u7KSUv0DSN3L575R0Z8qfL2mTEt95+xkp79jU1trr\nVUnvHJgKnfUrV6eZLoW6Shon6SZJD0q6UdKYXNkZkh6StEjSQSV+S+3XBZLe2qD3HySdXFCvGy3O\nkbQ05/uQlD9Z0qpc/oUlfivVIt3zc2k89kmaWTR2y7RopmVZX4a4Fp9NOiyQ9NmSOt2Mi69Impfy\nb5A0IVc2uHMkIkpfWXF5ea7eYmBcizr7AJeUlF0KnJjSw4DNU3o/4CZgeLreKldnHrBLuh4LbFTg\nt9C+oc47gIfa6GNbWrTTrw50KdQV+CZwWkqfDsxI6bcDc4HhwGTg4RJdCu076FfHWuRsNwKeAib1\nSIuzgVMK8icDfW20p1ItgO2AR4FN0vWVwHGdaFGmZZNxMVS1eAfQB7wB2DjN1bf0aFxslkufBFyU\n0oM+R3p5vNDq33QUlkvaHNg7Ii5OLf1TRPwhFX8a+HpEvJLKnkn5BwHzI6Iv5a+IiNUF7svs8xwD\nXNGi7R3Tol9rVG3lqiDvMLKATvp5eEpPBy6PiFciop9sQE3rwL4KDgAeiYjHC8q6GkNt2DVjMLQY\n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\n8lQAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xs = np.array(range(5) * 5).flatten()\n", + "ys = np.array([[i] * 5 for i in range(5)]).flatten()\n", + "f = figure()\n", + "ax = f.add_subplot(111)\n", + "scatter(xs, ys, marker='', color='k')\n", + "for i in range(5):\n", + " axvline(i+0.5, color='k')\n", + " axhline(i+0.5, color='k')\n", + "ax.axes.get_yaxis().set_visible(False)\n", + "ax.axes.get_xaxis().set_visible(False)\n", + "ax.set_xlim((-0.5, 4.5))\n", + "ax.set_ylim((-0.5, 4.5))\n", + "for i in range(25):\n", + " text(xs[i], ys[i], \"%s | %s\"%(str(i), np.round(wry[i], 2)), horizontalalignment='center',\n", + " verticalalignment='center')\n", + "title(\"Standardized spatial lag Y\")" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{19: 0.5, 23: 0.5}" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w[24]" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "95.0" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y[[19,23]].mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Weights From External Files\n", + "\n", + "With these concepts in mind, let's apply them to real world data. We will revisit the neighborhood checkin dataset from Amsterdam." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## shapefiles" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING: there is one disconnected observation (no neighbors)\n", + "Island id: [27]\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "x,y = np.indices((5,5))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 70 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "x.shape = (25,1)\n", - "y.shape = (25,1)\n", - "data = np.hstack([x,y])" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 71 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "data" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 72, - "text": [ - "array([[0, 0],\n", - " [0, 1],\n", - " [0, 2],\n", - " [0, 3],\n", - " [0, 4],\n", - " [1, 0],\n", - " [1, 1],\n", - " [1, 2],\n", - " [1, 3],\n", - " [1, 4],\n", - " [2, 0],\n", - " [2, 1],\n", - " [2, 2],\n", - " [2, 3],\n", - " [2, 4],\n", - " [3, 0],\n", - " [3, 1],\n", - " [3, 2],\n", - " [3, 3],\n", - " [3, 4],\n", - " [4, 0],\n", - " [4, 1],\n", - " [4, 2],\n", - " [4, 3],\n", - " [4, 4]])" - ] - } - ], - "prompt_number": 72 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "scatter(data[:, 0], data[:, 1])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 73, - "text": [ - "" - ] - }, - { - "output_type": "display_data", - "png": "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\n" - } - ], - "prompt_number": 73 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### knn weights" + } + ], + "source": [ + "w_adam = ps.rook_from_shapefile('data/amsterdam_hoods.shp')" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "96" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w_adam.n" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "5.121527777777778" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w_adam.pct_nonzero" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING: there is one disconnected observation (no neighbors)\n", + "Island id: [27]\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wknn3 = ps.knnW(data, k = 3)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 74 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wknn3[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 75, - "text": [ - "{1: 1.0, 5: 1.0, 6: 1.0}" - ] - } - ], - "prompt_number": 75 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wknn3.histogram" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 76, - "text": [ - "[(3, 25)]" - ] - } - ], - "prompt_number": 76 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Distance Bands" + } + ], + "source": [ + "wq_adam = ps.queen_from_shapefile('data/amsterdam_hoods.shp')" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "5.620659722222222" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wq_adam.pct_nonzero" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0, 1),\n", + " (1, 2),\n", + " (2, 6),\n", + " (3, 8),\n", + " (4, 23),\n", + " (5, 22),\n", + " (6, 14),\n", + " (7, 13),\n", + " (8, 6),\n", + " (9, 1)]" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w_adam.histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0, 1),\n", + " (1, 2),\n", + " (2, 4),\n", + " (3, 7),\n", + " (4, 18),\n", + " (5, 21),\n", + " (6, 13),\n", + " (7, 13),\n", + " (8, 12),\n", + " (9, 5)]" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wq_adam.histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's visualize the cardinalities of both weight structures" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "wh = np.array(w_adam.histogram)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nnggAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bar(wh[:,0],wh[:,1])" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "whq_adam = np.array(wq_adam.histogram)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nnggAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bar(wh[:,0],wh[:,1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An alternative is to consider directly the number of neighbors every observation has, read it into a `pandas.Series` and plot a histogram/density kernel of it:" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 2\n", + "1 8\n", + "2 5\n", + "3 5\n", + "4 7\n", + "5 8\n", + "6 8\n", + "7 9\n", + "8 8\n", + "9 5\n", + "10 5\n", + "11 7\n", + "12 4\n", + "13 7\n", + "14 5\n", + "15 6\n", + "16 6\n", + "17 4\n", + "18 4\n", + "19 7\n", + "20 5\n", + "21 7\n", + "22 5\n", + "23 4\n", + "24 4\n", + "25 9\n", + "26 4\n", + "27 0\n", + "28 1\n", + "29 4\n", + " ..\n", + "66 4\n", + "67 3\n", + "68 5\n", + "69 5\n", + "70 2\n", + "71 1\n", + "72 9\n", + "73 5\n", + "74 8\n", + "75 5\n", + "76 8\n", + "77 7\n", + "78 3\n", + "79 4\n", + "80 6\n", + "81 8\n", + "82 4\n", + "83 7\n", + "84 4\n", + "85 6\n", + "86 8\n", + "87 7\n", + "88 6\n", + "89 3\n", + "90 8\n", + "91 6\n", + "92 5\n", + "93 5\n", + "94 6\n", + "95 5\n", + "dtype: int64" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nn = pd.Series(wq_adam.cardinalities.values())\n", + "nn" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "nn.hist()" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nf3Q3dz8nUCRAAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "(nn * 1.).plot(kind='kde')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Writing to files: GAL" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "adam_gal = ps.open(\"data/adam.gal\",'w','gal')" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "adam_gal.write(wq_adam)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "adam_gal.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can look at the structure of the file by considering only the beginning of the file:" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "96\r\n", + "0 2\r\n", + "1 4\r\n", + "1 8\r\n", + "0 2 3 4 5 38 48 37\r\n", + "2 5\r\n", + "1 3 5 6 7\r\n", + "3 5\r\n", + "8 1 2 4 7\r\n", + "4 7\r\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wdb = ps.threshold_binaryW_from_array(data, 2)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 77 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wdb[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 78, - "text": [ - "{1: 1, 2: 1, 5: 1, 6: 1, 10: 1}" - ] - } - ], - "prompt_number": 78 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wdb.histogram" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 79, - "text": [ - "[(5, 4), (6, 0), (7, 8), (8, 4), (9, 0), (10, 4), (11, 4), (12, 1)]" - ] - } - ], - "prompt_number": 79 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "wdb.cardinalities" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 80, - "text": [ - "{0: 5,\n", - " 1: 7,\n", - " 2: 8,\n", - " 3: 7,\n", - " 4: 5,\n", - " 5: 7,\n", - " 6: 10,\n", - " 7: 11,\n", - " 8: 10,\n", - " 9: 7,\n", - " 10: 8,\n", - " 11: 11,\n", - " 12: 12,\n", - " 13: 11,\n", - " 14: 8,\n", - " 15: 7,\n", - " 16: 10,\n", - " 17: 11,\n", - " 18: 10,\n", - " 19: 7,\n", - " 20: 5,\n", - " 21: 7,\n", - " 22: 8,\n", - " 23: 7,\n", - " 24: 5}" - ] - } - ], - "prompt_number": 80 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Writing distance files\n", - "\n", - "Distance weights are stored in a different format, the `gwt`. We will first create the `knn` `W` from our shapefile and then write it to a file." + } + ], + "source": [ + "! head data/adam.gal" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Distance Based Weights" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x,y = np.indices((5,5))" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x.shape = (25,1)\n", + "y.shape = (25,1)\n", + "data = np.hstack([x,y])" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0, 0],\n", + " [0, 1],\n", + " [0, 2],\n", + " [0, 3],\n", + " [0, 4],\n", + " [1, 0],\n", + " [1, 1],\n", + " [1, 2],\n", + " [1, 3],\n", + " [1, 4],\n", + " [2, 0],\n", + " [2, 1],\n", + " [2, 2],\n", + " [2, 3],\n", + " [2, 4],\n", + " [3, 0],\n", + " [3, 1],\n", + " [3, 2],\n", + " [3, 3],\n", + " [3, 4],\n", + " [4, 0],\n", + " [4, 1],\n", + " [4, 2],\n", + " [4, 3],\n", + " [4, 4]])" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAEACAYAAACqOy3+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADWNJREFUeJzt3W+oZHd9x/HPJ7sJSUyv5a5iW13YPmghDcKm0I0YIRNa\nnW2QSCilFUTwgY8siWERqdCyhYJ9sq30z6OquUqLSi0rTWu7EzEXA4Vo2qzmj1u1NBJDGqXbVuVW\nWM2nD85Y7m53786958ye+/3N+wVfds7MmXO+XzL7mXPPPWfjJAIA1HPd2A0AAPaGAAeAoghwACiK\nAAeAoghwACiKAAeAog723YDt5yR9V9KPJF1IcqzvNgEAV9c7wCVF0iTJ+QG2BQBY0FCnUDzQdgAA\nCxoiwCPpc7afsP3uAbYHAFjAEKdQ7kzyou1XS3rE9rkkjw2wXQDADnoHeJIX539+x/ZpScck/V+A\n2+YfWwGAPUiy4+npXgFu+2ZJB5J8z/YrJL1F0u/ttonKbJ9McnLsPpal5flank1ivuoWOfjtewT+\nGkmnbf94W3+ZZNZzmwCABfQK8CT/JunoQL0AAHaBOzH72xy7gSXbHLuBJdocu4El2xy7gSXbHLuB\nsXnZ/0MH22n5HDgALMMi2ckROAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAU\nRYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYAD\nQFEEOAAURYADQFEEOAAURYADQFGDBLjtA7aftP3wENsDAFzdUEfgD0h6VlIG2h4A4Cp6B7jt10m6\nR9KHJbl3R0XYntqHZl15OnY/Q2t5vpZnk5hvpSTpVZL+StLtku6S9PBlXk/ffey3kjSV1rakjXS1\ntiVpOnZfzLfaszFfW7VIdvbdwVsl/dn88WR1Anx91n14Mq+NSOuzsftivtWejfnaqkWy82DPA/g3\nSrrX9j2SbpS0ZvvjSd65fSXbJ7ctbibZ7LlfAGiK7Ym6A+HFDfhtwSmUfdAb863ubMzXVi2SnZ6v\n2JvtuySdSHLvJc8nSXO/3Ox+ebJ+ols6fyrJmXE7GlbL87U8m8R8rVgkOwcL8D5NAAAutkh2cicm\nABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRF\ngANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANA\nUQQ4ABRFgANAUQQ4ABTVK8Bt32j7cdtnbT9t++RAfQEArqJXgCf5gaS7kxyVdFTScdt3DNLZPmd7\nah+adeXp2P0MreX5Wp5NYr6VkmSQknSzpH+S9EuXPJ+h9rFfStJUWtuSNtLV2pak6dh9Md9qz8Z8\nbdUi2TnETq6TdFbS9yR9cC9NVCtpfdZ9eDKvjUjrs7H7Yr7Vno352qpFsvPgAEfwL0s6avuVkk7b\nvi3JM9vXueTc+GaSzb77BYCW2J5ImuzqPfOkH6qB35G0leTUtueSxIPtZB/ozrutnZb++Kbumfv/\nR/rufUnOjNvZMFqer+XZJOZrySLZ2SvAbb9K0g+T/JftmySdkfQHST67myYq6j5I6ye6pfOnWvsA\ntTxfy7NJzNeKaxHgr5f0MUkH1J0L/1SS399tEwCAiy09wIdqAgBwsUWykzsxAaAoAhwAiiLAAaAo\nAhwAiiLAAaAoAhwAiiLAAaAoAhwAiiLAAaAoAhwAiiLAAaAoAhwAiiLAAaAoAhwAiiLAAaAoAhwA\niiLAAaAoAhwAiiLAAaAoAhwAiiLAAaAoAhwAiiLAAaAoAhwAiiLAAaAoAhwAiiLAAaAoAhwAiuoV\n4LYP237U9jO2n7Z9/1CNAQB21vcI/IKkB5PcJukNkt5j+9b+be1/tqf2oVlXno7dz9Banq/l2STm\nWylJBitJn5H0y5c8lyH3sR9K0lRa25I20tXalqTp2H0x32rPxnxt1SLZOeTOjkj6pqRbdttEtZLW\nZ92HJ/PaiLQ+G7sv5lvt2ZivrVokOw8OcRRv+xZJn5b0QJLvX+b1k9sWN5NsDrFfAGiF7Ymkya7e\nNMC3xPWSzkh6716/RaqVGv8xruX5Wp6N+dqqRbLT8xX3+o1hSR+T9B9JHrzCOkniPe9kn+p+ebJ+\nols6fyrJmXE7GlbL87U8m8R8rVgkO/sG+JskfUHSVyT9eEO/neQfdtMEAOBiSw/woZoAAFxskezk\nTkwAKIoAB4CiCHAAKIoAB4CiCHAAKIoAB4CiCHAAKIoAB4CiCHAAKIoAB4CiCHAAKIoAB4CiCHAA\nKIoAB4CiCHAAKIoAB4CiCHAAKIoAB4CiCHAAKIoAB4CiCHAAKIoAB4CiCHAAKIoAB4CiCHAAKIoA\nB4CiCHAAKIoAB4Ciege47Y/afsn2U0M0BABYzBBH4A9JOj7AdkqxPbUPzbrydOx+htbyfC3PJjHf\nSknSuyQdkfTUFV7LEPvYTyVpKq1tSRvpam1L0nTsvphvtWdjvrZqkewcakcrFuDrs+7Dk3ltRFqf\njd0X8632bMzXVi2SnQeXe3zfsX1y2+Jmks1rsV8AqML2RNJkV28a6JviiFbqCLztH+Nanq/l2Ziv\nrVokOz1fsRfbRyQ9nOT1l3ktSdx7J/tM98uT9RPd0vlTSc6M29GwWp6v5dkk5mvFItnZO8Btf0LS\nXZIOSfq2pN9N8tBumgAAXOyaBPgQTQAALrZIdnInJgAURYADQFEEOAAURYADQFEEOAAURYADQFEE\nOAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAU\nRYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYADQFEEOAAURYADQFG9A9z2cdvnbH/d9vuHaAoA\ncHVOsvc32wck/YukX5H0gqQvSXp7kq9uWydJ3LdRAFgli2Rn3yPwY5K+keS5JBckfVLS23puswTb\nU/vQrCtPx+5naC3P1/JsEvOtkoM93/9aSc9vW/6WpDt6bnPf6z40a6elP7ype+b+N9m+L8mZcTsb\nRsvztTybxHwrJ8meS9KvSfrzbcvvkPQnl6yTPvvYjyWtz6SNSJnXRqT12dh9Md9qz8Z8bdUi2dn3\nCPwFSYe3LR9WdxR+Edsnty1uJtnsuV8AaIrtiaTJrt7U8xvioKR/lXRE0g2Szkq6dbffItVK0lRa\n2+q+/TfSPdZ07L6Yb7VnY762apHs7HUViiTZ/lVJH5J0QNJHknzwkteTBq9C6c7FrZ/ols6fSmPn\n4Fqer+XZJOZrxSLZ2TvAh2gCAHCxa3EZIQBgJAQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4\nABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRF\ngANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABRFgANAUQQ4ABS15wC3/eu2n7H9I9u/OGRTAICr63ME\n/pSk+yR9YaBeSrI9GbuHZWp5vpZnk5hvFew5wJOcS/K1IZspajJ2A0s2GbuBJZqM3cCSTcZuYMkm\nYzcwNs6BA0BRB3d60fYjkn7qMi99IMnDy2kJALAIJ+m3AftRSSeS/PMVXu+3AwBYUUm80+s7HoHv\nwhV3crUGAAB70+cywvtsPy/pDZL+zvbfD9cWAOBqep9CAQCM45pchdLiTT+2j9s+Z/vrtt8/dj9D\nsv1R2y/ZfmrsXpbB9mHbj84/k0/bvn/snoZk+0bbj9s+O5/v5Ng9Dc32AdtP2m7uYgrbz9n+yny+\nL+607rW6jLCpm35sH5D0p5KOS/oFSW+3feu4XQ3qIXWzteqCpAeT3KbuFOB7Wvrvl+QHku5OclTS\nUUnHbd8xcltDe0DSs5JaPIUQSZMktyc5ttOK1yTAG7zp55ikbyR5LskFSZ+U9LaRexpMksck/efY\nfSxLkn9Pcnb++PuSvirpZ8btalhJtuYPb5B0vaSXR2xnULZfJ+keSR/WDhdQFLfQXNzIszevlfT8\ntuVvzZ9DMbaPSLpd0uPjdjIs29fZPivpJUmzJF8au6cB/ZGk96mhL6VLRNLnbD9h+907rTjUZYSr\ndtNPiz+2rRzbt0j6tKQH5kfizUjysqSjtl8p6bTt25I8M3Zffdl+q6RvJ3my4X8L5c4kL9p+taRH\nbJ+b/1T8/wwW4EnePNS2CnhB0uFty4fVHYWjCNvXS/prSX+R5DNj97MsSf57frPdcUnlA1zSGyXd\na/seSTdKWrP98STvHLmvwSR5cf7nd2yfVnfK9rIBPsYplBbOWT0h6edsH7F9g6TfkPQ3I/eEBdm2\npI9IejbJh8buZ2i2X2X7J+ePb5L0ZnXn+ctL8oEkh5P8rKTflPT5lsLb9s22f2L++BWS3qLuIpDL\nulaXETZ100+SH0r6LUln1P0m/FNJmvgLIkm2PyHpHyX9vO3nbb9r7J4Gdqekd0i6e36p1pO2W7rq\n5qclfd72lyV9Ud058M+O3NOytHY68zWSHpv//uJxSX+bZHallbmRBwCK4ioUACiKAAeAoghwACiK\nAAeAoghwACiKAAeAoghwACiKAAeAov4XzeEwB0ccoUcAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "scatter(data[:, 0], data[:, 1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### knn weights" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "tree = ps.cg.kdtree.KDTree(np.array(data))\n", + "wknn3 = ps.knnW(tree, k = 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 1.0, 5: 1.0, 6: 1.0}" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wknn3[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[(3, 25)]" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wknn3.histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Distance Bands" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "wdb = ps.threshold_binaryW_from_array(data, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{0: 1, 1: 1, 2: 1, 5: 1, 6: 1, 10: 1}" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wdb[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[(6, 4), (7, 0), (8, 8), (9, 4), (10, 0), (11, 4), (12, 4), (13, 1)]" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wdb.histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{0: 6,\n", + " 1: 8,\n", + " 2: 9,\n", + " 3: 8,\n", + " 4: 6,\n", + " 5: 8,\n", + " 6: 11,\n", + " 7: 12,\n", + " 8: 11,\n", + " 9: 8,\n", + " 10: 9,\n", + " 11: 12,\n", + " 12: 13,\n", + " 13: 12,\n", + " 14: 9,\n", + " 15: 8,\n", + " 16: 11,\n", + " 17: 12,\n", + " 18: 11,\n", + " 19: 8,\n", + " 20: 6,\n", + " 21: 8,\n", + " 22: 9,\n", + " 23: 8,\n", + " 24: 6}" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wdb.cardinalities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Writing distance files\n", + "\n", + "Distance weights are stored in a different format, the `gwt`. We will first create the `knn` `W` from our shapefile and then write it to a file." + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "adam_knn5 = ps.knnW_from_shapefile('data/amsterdam_hoods.shp', k=5)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "adam_gwt = ps.open(\"data/adam.gwt\",'w','gwt')\n", + "adam_gwt.write(adam_knn5)\n", + "adam_gwt.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 96 Unknown Unknown\r\n", + "0 1 1\r\n", + "0 3 1\r\n", + "0 4 1\r\n", + "0 2 1\r\n", + "0 7 1\r\n", + "1 0 1\r\n", + "1 2 1\r\n", + "1 5 1\r\n", + "1 3 1\r\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "adam_knn5 = ps.knnW_from_shapefile('data/amsterdam_hoods.shp', k=5)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 81 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "adam_gwt = ps.open(\"data/adam.gwt\",'w','gwt')\n", - "adam_gwt.write(adam_knn5)\n", - "adam_gwt.close()" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 82 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "! head 'data/adam.gwt'" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0 96 Unknown Unknown\r\n", - "0 1 1\r\n", - "0 2 1\r\n", - "0 3 1\r\n", - "0 4 1\r\n", - "0 7 1\r\n", - "1 0 1\r\n", - "1 2 1\r\n", - "1 3 1\r\n", - "1 4 1\r\n" - ] - } - ], - "prompt_number": 83 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 83 } ], - "metadata": {} + "source": [ + "! head 'data/adam.gwt'" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.11" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From eb4c8a091951044cb1a6cb8f6904a352fbc3c733 Mon Sep 17 00:00:00 2001 From: Serge Rey Date: Fri, 22 Jan 2016 19:30:32 -0700 Subject: [PATCH 2/3] 3 compatibility --- notebooks/PySAL_modules.ipynb | 915 ++++++++++++++++++---------------- 1 file changed, 473 insertions(+), 442 deletions(-) diff --git a/notebooks/PySAL_modules.ipynb b/notebooks/PySAL_modules.ipynb index c2b0afc..c4b6221 100644 --- a/notebooks/PySAL_modules.ipynb +++ b/notebooks/PySAL_modules.ipynb @@ -1,462 +1,493 @@ { - "metadata": { - "name": "PySAL_modules" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Contributors to this notebook\n", - "\n", - "* Daniel Arribas-Bel [@darribas](http://twitter.com/darribas)\n", - "* Serge Rey http://sjrey.org" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import pysal as ps # 1.5 or higher\n", - "import pandas as pd # 0.10 or higher" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Specialized modules in `PySAL`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before we brush through more specialized functionality in `PySAL`, let's load up example data:" - ] - }, - { - "cell_type": "code", - "collapsed": true, - "input": [ - "dbf = ps.open('data/amsterdam_hoods.dbf')\n", - "db = pd.DataFrame(dict([(col, np.array(dbf.by_col(col))) for col in dbf.header]))\n", - "w = ps.open('data/adam.gal').read()" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## `region`\n", - "\n", - "* Spatial aggregation of areas into regions\n", - "* \"Spatial clustering\"\n", - "* Right now, it implements only the `max-p` algorithm:\n", - " * Duque, J. C., Anselin, L. and Rey, S. J. 2011 [*\"The MAX-P regions problem\"*](http://onlinelibrary.wiley.com/doi/10.1111/j.1467-9787.2011.00743.x/abstract)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Example of aggregation of areas using the `max-p`:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "z = db[[i for i in db.columns if 'h_' in i]].values\n", - "floor_var = db['total'].values[:, None]\n", - "maxp = ps.Maxp(w, z, floor=500, floor_variable=floor_var)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Cardinalities\n", - "maxp.area2region" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 4, - "text": [ - "{'0': 49,\n", - " '1': 43,\n", - " '10': 3,\n", - " '11': 46,\n", - " '12': 24,\n", - " '13': 47,\n", - " '14': 37,\n", - " '15': 47,\n", - " '16': 26,\n", - " '17': 32,\n", - " '18': 26,\n", - " '19': 32,\n", - " '2': 42,\n", - " '20': 29,\n", - " '21': 29,\n", - " '22': 17,\n", - " '23': 33,\n", - " '24': 18,\n", - " '25': 5,\n", - " '26': 18,\n", - " '27': 50,\n", - " '28': 18,\n", - " '29': 15,\n", - " '3': 10,\n", - " '30': 15,\n", - " '31': 26,\n", - " '32': 6,\n", - " '33': 26,\n", - " '34': 6,\n", - " '35': 36,\n", - " '36': 36,\n", - " '37': 12,\n", - " '38': 14,\n", - " '39': 12,\n", - " '4': 38,\n", - " '40': 12,\n", - " '41': 12,\n", - " '42': 12,\n", - " '43': 12,\n", - " '44': 12,\n", - " '45': 12,\n", - " '46': 14,\n", - " '47': 12,\n", - " '48': 3,\n", - " '49': 14,\n", - " '5': 24,\n", - " '50': 14,\n", - " '51': 9,\n", - " '52': 9,\n", - " '53': 6,\n", - " '54': 9,\n", - " '55': 9,\n", - " '56': 6,\n", - " '57': 1,\n", - " '58': 1,\n", - " '59': 6,\n", - " '6': 23,\n", - " '60': 1,\n", - " '61': 35,\n", - " '62': 8,\n", - " '63': 11,\n", - " '64': 25,\n", - " '65': 19,\n", - " '66': 0,\n", - " '67': 4,\n", - " '68': 4,\n", - " '69': 0,\n", - " '7': 22,\n", - " '70': 4,\n", - " '71': 4,\n", - " '72': 27,\n", - " '73': 20,\n", - " '74': 33,\n", - " '75': 20,\n", - " '76': 28,\n", - " '77': 30,\n", - " '78': 28,\n", - " '79': 44,\n", - " '8': 45,\n", - " '80': 16,\n", - " '81': 2,\n", - " '82': 7,\n", - " '83': 8,\n", - " '84': 29,\n", - " '85': 21,\n", - " '86': 13,\n", - " '87': 41,\n", - " '88': 41,\n", - " '89': 13,\n", - " '9': 39,\n", - " '90': 40,\n", - " '91': 7,\n", - " '92': 40,\n", - " '93': 48,\n", - " '94': 31,\n", - " '95': 34}" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": true, - "input": [ - "maxp.regions" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "pyout", - "prompt_number": 5, - "text": [ - "[['69', '66'],\n", - " ['57', '58', '60'],\n", - " ['81'],\n", - " ['10', '48'],\n", - " ['68', '71', '70', '67'],\n", - " ['25'],\n", - " ['59', '56', '53', '32', '34'],\n", - " ['91', '82'],\n", - " ['83', '62'],\n", - " ['52', '51', '55', '54'],\n", - " ['3'],\n", - " ['63'],\n", - " ['47', '44', '41', '37', '45', '42', '43', '40', '39'],\n", - " ['89', '86'],\n", - " ['46', '50', '49', '38'],\n", - " ['29', '30'],\n", - " ['80'],\n", - " ['22'],\n", - " ['24', '26', '28'],\n", - " ['65'],\n", - " ['73', '75'],\n", - " ['85'],\n", - " ['7'],\n", - " ['6'],\n", - " ['12', '5'],\n", - " ['64'],\n", - " ['31', '33', '16', '18'],\n", - " ['72'],\n", - " ['78', '76'],\n", - " ['20', '21', '84'],\n", - " ['77'],\n", - " ['94'],\n", - " ['17', '19'],\n", - " ['23', '74'],\n", - " ['95'],\n", - " ['61'],\n", - " ['35', '36'],\n", - " ['14'],\n", - " ['4'],\n", - " ['9'],\n", - " ['92', '90'],\n", - " ['88', '87'],\n", - " ['2'],\n", - " ['1'],\n", - " ['79'],\n", - " ['8'],\n", - " ['11'],\n", - " ['15', '13'],\n", - " ['93'],\n", - " ['0'],\n", - " ['27']]" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## `spreg`\n", - "\n", - "State-of-the-art spatial regression.\n", - "\n", - "* Standard linear regression $\\rightarrow y = X \\beta + \\epsilon$\n", - "* Spatial autocorrelation diagnostics\n", - "* Spatial autocorrelation\n", - " * Spatial lag model $\\rightarrow y = \\rho Wy + X \\beta + \\epsilon$\n", - " * Spatial error model $\\rightarrow y = X \\beta + u \\; \\text{;} \\; u = Wu + \\epsilon$\n", - " * Combo models $\\rightarrow y = \\rho Wy + X \\beta + u \\; \\text{;} \\; u = Wu + \\epsilon$\n", - "* Spatial heterogeneity $\\rightarrow$ spatial regimes" - ] - }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Contributors to this notebook\n", + "\n", + "* Daniel Arribas-Bel [@darribas](http://twitter.com/darribas)\n", + "* Serge Rey http://sjrey.org" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import pysal as ps # 1.5 or higher\n", + "import pandas as pd # 0.10 or higher\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Specialized modules in `PySAL`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we brush through more specialized functionality in `PySAL`, let's load up example data:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Example of standard model:" + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING: there is one disconnected observation (no neighbors)\n", + "Island id: ['27']\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "y = db['total'].values[:, None]\n", - "x = db[['h_0', 'h_7', 'h_16']].values" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 6 - }, + } + ], + "source": [ + "dbf = ps.open('data/amsterdam_hoods.dbf')\n", + "db = pd.DataFrame(dict([(col, np.array(dbf.by_col(col))) for col in dbf.header]))\n", + "w = ps.open('data/adam.gal').read()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `region`\n", + "\n", + "* Spatial aggregation of areas into regions\n", + "* \"Spatial clustering\"\n", + "* Right now, it implements only the `max-p` algorithm:\n", + " * Duque, J. C., Anselin, L. and Rey, S. J. 2011 [*\"The MAX-P regions problem\"*](http://onlinelibrary.wiley.com/doi/10.1111/j.1467-9787.2011.00743.x/abstract)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Example of aggregation of areas using the `max-p`:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "z = db[[i for i in db.columns if 'h_' in i]].values\n", + "floor_var = db['total'].values[:, None]\n", + "maxp = ps.Maxp(w, z, floor=500, floor_variable=floor_var)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "code", - "collapsed": false, - "input": [ - "ols = ps.spreg.OLS(y, x, w)\n", - "print ols.summary" - ], - "language": "python", + "data": { + "text/plain": [ + "{'0': 50,\n", + " '1': 13,\n", + " '10': 12,\n", + " '11': 25,\n", + " '12': 12,\n", + " '13': 34,\n", + " '14': 14,\n", + " '15': 33,\n", + " '16': 22,\n", + " '17': 22,\n", + " '18': 22,\n", + " '19': 41,\n", + " '2': 8,\n", + " '20': 6,\n", + " '21': 6,\n", + " '22': 49,\n", + " '23': 27,\n", + " '24': 27,\n", + " '25': 1,\n", + " '26': 27,\n", + " '27': 15,\n", + " '28': 27,\n", + " '29': 33,\n", + " '3': 7,\n", + " '30': 33,\n", + " '31': 43,\n", + " '32': 43,\n", + " '33': 22,\n", + " '34': 23,\n", + " '35': 23,\n", + " '36': 23,\n", + " '37': 2,\n", + " '38': 2,\n", + " '39': 2,\n", + " '4': 24,\n", + " '40': 2,\n", + " '41': 2,\n", + " '42': 12,\n", + " '43': 12,\n", + " '44': 12,\n", + " '45': 2,\n", + " '46': 12,\n", + " '47': 12,\n", + " '48': 11,\n", + " '49': 2,\n", + " '5': 29,\n", + " '50': 2,\n", + " '51': 5,\n", + " '52': 5,\n", + " '53': 39,\n", + " '54': 5,\n", + " '55': 5,\n", + " '56': 5,\n", + " '57': 19,\n", + " '58': 19,\n", + " '59': 5,\n", + " '6': 38,\n", + " '60': 5,\n", + " '61': 0,\n", + " '62': 39,\n", + " '63': 18,\n", + " '64': 35,\n", + " '65': 32,\n", + " '66': 3,\n", + " '67': 21,\n", + " '68': 21,\n", + " '69': 21,\n", + " '7': 47,\n", + " '70': 21,\n", + " '71': 21,\n", + " '72': 42,\n", + " '73': 26,\n", + " '74': 45,\n", + " '75': 26,\n", + " '76': 20,\n", + " '77': 4,\n", + " '78': 31,\n", + " '79': 31,\n", + " '8': 44,\n", + " '80': 36,\n", + " '81': 17,\n", + " '82': 37,\n", + " '83': 10,\n", + " '84': 10,\n", + " '85': 6,\n", + " '86': 30,\n", + " '87': 40,\n", + " '88': 6,\n", + " '89': 17,\n", + " '9': 9,\n", + " '90': 28,\n", + " '91': 37,\n", + " '92': 37,\n", + " '93': 46,\n", + " '94': 48,\n", + " '95': 16}" + ] + }, + "execution_count": 6, "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "REGRESSION\n", - "----------\n", - "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES\n", - "-----------------------------------------\n", - "Data set : unknown\n", - "Weights matrix : unknown\n", - "Dependent Variable : dep_var Number of Observations: 96\n", - "Mean dependent var : 806.5312 Number of Variables : 4\n", - "S.D. dependent var : 1070.2103 Degrees of Freedom : 92\n", - "\n", - "R-squared : 0.981934\n", - "Adjusted R-squared : 0.9813\n", - "Sum squared residual: 1965750.735 F-statistic : 1666.7952\n", - "Sigma-square : 21366.856 Prob(F-statistic) : 5.004e-80\n", - "S.E. of regression : 146.174 Log likelihood : -612.716\n", - "Sigma-square ML : 20476.570 Akaike info criterion : 1233.432\n", - "S.E of regression ML: 143.0964 Schwarz criterion : 1243.689\n", - "\n", - "------------------------------------------------------------------------------------\n", - " Variable Coefficient Std.Error t-Statistic Probability\n", - "------------------------------------------------------------------------------------\n", - " CONSTANT 63.8201539 18.8890437 3.3786863 0.0010695\n", - " var_1 6.3273241 1.5145256 4.1777598 0.0000669\n", - " var_2 4.2722981 0.4779627 8.9385588 0.0000000\n", - " var_3 8.7344856 0.4145940 21.0675663 0.0000000\n", - "------------------------------------------------------------------------------------\n", - "\n", - "REGRESSION DIAGNOSTICS\n", - "MULTICOLLINEARITY CONDITION NUMBER 6.441391\n", - "\n", - "TEST ON NORMALITY OF ERRORS\n", - "TEST DF VALUE PROB\n", - "Jarque-Bera 2 75.051777 0.0000000\n", - "\n", - "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", - "RANDOM COEFFICIENTS\n", - "TEST DF VALUE PROB\n", - "Breusch-Pagan test 3 198.378173 0.0000000\n", - "Koenker-Bassett test 3 62.693334 0.0000000\n", - "\n", - "SPECIFICATION ROBUST TEST\n", - "TEST DF VALUE PROB\n", - "White 9 72.695091 0.0000000\n", - "================================ END OF REPORT =====================================\n" - ] - } - ], - "prompt_number": 7 - }, + "output_type": "execute_result" + } + ], + "source": [ + "# Cardinalities\n", + "maxp.area2region" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "code", - "collapsed": true, - "input": [ - "combo = ps.spreg.GM_Combo_Hom(y, x, w=w)\n", - "print combo.summary" - ], - "language": "python", + "data": { + "text/plain": [ + "[['61'],\n", + " ['25'],\n", + " ['41', '49', '50', '45', '38', '40', '37', '39'],\n", + " ['66'],\n", + " ['77'],\n", + " ['54', '56', '59', '51', '55', '60', '52'],\n", + " ['21', '85', '20', '88'],\n", + " ['3'],\n", + " ['2'],\n", + " ['9'],\n", + " ['84', '83'],\n", + " ['48'],\n", + " ['43', '42', '47', '46', '44', '10', '12'],\n", + " ['1'],\n", + " ['14'],\n", + " ['27'],\n", + " ['95'],\n", + " ['89', '81'],\n", + " ['63'],\n", + " ['57', '58'],\n", + " ['76'],\n", + " ['67', '68', '69', '71', '70'],\n", + " ['16', '18', '33', '17'],\n", + " ['35', '36', '34'],\n", + " ['4'],\n", + " ['11'],\n", + " ['75', '73'],\n", + " ['26', '24', '28', '23'],\n", + " ['90'],\n", + " ['5'],\n", + " ['86'],\n", + " ['79', '78'],\n", + " ['65'],\n", + " ['30', '15', '29'],\n", + " ['13'],\n", + " ['64'],\n", + " ['80'],\n", + " ['92', '91', '82'],\n", + " ['6'],\n", + " ['53', '62'],\n", + " ['87'],\n", + " ['19'],\n", + " ['72'],\n", + " ['31', '32'],\n", + " ['8'],\n", + " ['74'],\n", + " ['93'],\n", + " ['7'],\n", + " ['94'],\n", + " ['22'],\n", + " ['0']]" + ] + }, + "execution_count": 7, "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "REGRESSION\n", - "----------\n", - "SUMMARY OF OUTPUT: SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HOM)\n", - "-------------------------------------------------------------------\n", - "Data set : unknown\n", - "Weights matrix : unknown\n", - "Dependent Variable : dep_var Number of Observations: 96\n", - "Mean dependent var : 806.5312 Number of Variables : 5\n", - "S.D. dependent var : 1070.2103 Degrees of Freedom : 91\n", - "\n", - "Pseudo R-squared : 0.9847\n", - "Spatial Pseudo R-squared: 0.9846\n", - "\n", - "------------------------------------------------------------------------------------\n", - " Variable Coefficient Std.Error z-Statistic Probability\n", - "------------------------------------------------------------------------------------\n", - " CONSTANT 5.9614487 21.9138624 0.2720401 0.7855912\n", - " W_dep_var 0.0169552 0.0041102 4.1251978 0.0000370\n", - " var_1 5.6181654 1.3746269 4.0870473 0.0000437\n", - " var_2 4.4575079 0.4328943 10.2969898 0.0000000\n", - " var_3 8.1950028 0.3953213 20.7299804 0.0000000\n", - " lambda -0.0026513 0.0334001 -0.0793806 0.9367299\n", - "------------------------------------------------------------------------------------\n", - "Instrumented: W_dep_var\n", - "Instruments: W_var_1, W_var_2, W_var_3\n", - "================================ END OF REPORT =====================================\n" - ] - } - ], - "prompt_number": 8 - }, + "output_type": "execute_result" + } + ], + "source": [ + "maxp.regions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `spreg`\n", + "\n", + "State-of-the-art spatial regression.\n", + "\n", + "* Standard linear regression $\\rightarrow y = X \\beta + \\epsilon$\n", + "* Spatial autocorrelation diagnostics\n", + "* Spatial autocorrelation\n", + " * Spatial lag model $\\rightarrow y = \\rho Wy + X \\beta + \\epsilon$\n", + " * Spatial error model $\\rightarrow y = X \\beta + u \\; \\text{;} \\; u = Wu + \\epsilon$\n", + " * Combo models $\\rightarrow y = \\rho Wy + X \\beta + u \\; \\text{;} \\; u = Wu + \\epsilon$\n", + "* Spatial heterogeneity $\\rightarrow$ spatial regimes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Example of standard model:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "y = db['total'].values[:, None]\n", + "x = db[['h_0', 'h_7', 'h_16']].values" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## `spatial_dynamics`\n", + "name": "stdout", + "output_type": "stream", + "text": [ + "REGRESSION\n", + "----------\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES\n", + "-----------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : dep_var Number of Observations: 96\n", + "Mean dependent var : 806.5312 Number of Variables : 4\n", + "S.D. dependent var : 1070.2103 Degrees of Freedom : 92\n", + "R-squared : 0.9819\n", + "Adjusted R-squared : 0.9813\n", + "Sum squared residual: 1965750.735 F-statistic : 1666.7952\n", + "Sigma-square : 21366.856 Prob(F-statistic) : 5.004e-80\n", + "S.E. of regression : 146.174 Log likelihood : -612.716\n", + "Sigma-square ML : 20476.570 Akaike info criterion : 1233.432\n", + "S.E of regression ML: 143.0964 Schwarz criterion : 1243.689\n", "\n", - "Several exploratory measure and approaches to the analysis of spatial dynamics of systems.\n", + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error t-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " CONSTANT 63.8201539 18.8890437 3.3786863 0.0010695\n", + " var_1 6.3273241 1.5145256 4.1777598 0.0000669\n", + " var_2 4.2722981 0.4779627 8.9385588 0.0000000\n", + " var_3 8.7344856 0.4145940 21.0675663 0.0000000\n", + "------------------------------------------------------------------------------------\n", "\n", - "* Directional statistics (Rey et al. 2011)\n", - "* Space-time interaction measures (Kulldorf)\n", - "* Non-spatial Markov chains\n", - "* Spatial Markov chains (Rey, 2004)\n", - "* Spatial rank Markov chains (Rey, 2012)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## `inequality`\n", + "REGRESSION DIAGNOSTICS\n", + "MULTICOLLINEARITY CONDITION NUMBER 6.441\n", "\n", - "Inequality measures for the analysis of regional systems. Spatial and non-spatial.\n", + "TEST ON NORMALITY OF ERRORS\n", + "TEST DF VALUE PROB\n", + "Jarque-Bera 2 75.052 0.0000\n", "\n", - "* Theil\n", - "* Spatial decomposition of Theil" + "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", + "RANDOM COEFFICIENTS\n", + "TEST DF VALUE PROB\n", + "Breusch-Pagan test 3 198.378 0.0000\n", + "Koenker-Bassett test 3 62.693 0.0000\n", + "================================ END OF REPORT =====================================\n" ] - }, + } + ], + "source": [ + "ols = ps.spreg.OLS(y, x, w)\n", + "print(ols.summary)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## `contrib`\n", - "\n", - "The contrib module serves two main purposes:\n", + "name": "stdout", + "output_type": "stream", + "text": [ + "REGRESSION\n", + "----------\n", + "SUMMARY OF OUTPUT: SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HOM)\n", + "-------------------------------------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : dep_var Number of Observations: 96\n", + "Mean dependent var : 806.5312 Number of Variables : 5\n", + "S.D. dependent var : 1070.2103 Degrees of Freedom : 91\n", + "Pseudo R-squared : 0.9847\n", + "Spatial Pseudo R-squared: 0.9846\n", + "N. of iterations : 1\n", "\n", - "* **Sandbox** for code that is not quite ready for prime time but it's fairly advanced and still under intense development\n", - "* **Interface** between `PySAL` and third party libraries that are not required as \"dependencies\" (e.g. `networkX`, `shapely`)" + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error z-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " CONSTANT 5.9614487 21.9138624 0.2720401 0.7855912\n", + " W_dep_var 0.0169552 0.0041102 4.1251978 0.0000370\n", + " var_1 5.6181654 1.3746269 4.0870473 0.0000437\n", + " var_2 4.4575079 0.4328943 10.2969898 0.0000000\n", + " var_3 8.1950028 0.3953213 20.7299804 0.0000000\n", + " lambda -0.0026513 0.0334001 -0.0793806 0.9367299\n", + "------------------------------------------------------------------------------------\n", + "Instrumented: W_dep_var\n", + "Instruments: W_var_1, W_var_2, W_var_3\n", + "================================ END OF REPORT =====================================\n" ] } ], - "metadata": {} + "source": [ + "combo = ps.spreg.GM_Combo_Hom(y, x, w=w)\n", + "print(combo.summary)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `spatial_dynamics`\n", + "\n", + "Several exploratory measure and approaches to the analysis of spatial dynamics of systems.\n", + "\n", + "* Directional statistics (Rey et al. 2011)\n", + "* Space-time interaction measures (Kulldorf)\n", + "* Non-spatial Markov chains\n", + "* Spatial Markov chains (Rey, 2004)\n", + "* Spatial rank Markov chains (Rey, 2012)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `inequality`\n", + "\n", + "Inequality measures for the analysis of regional systems. Spatial and non-spatial.\n", + "\n", + "* Theil\n", + "* Spatial decomposition of Theil" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `contrib`\n", + "\n", + "The contrib module serves two main purposes:\n", + "\n", + "* **Sandbox** for code that is not quite ready for prime time but it's fairly advanced and still under intense development\n", + "* **Interface** between `PySAL` and third party libraries that are not required as \"dependencies\" (e.g. `networkX`, `shapely`)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 74ec469b4bbba86610fdf8f12155532aa28bd20d Mon Sep 17 00:00:00 2001 From: Serge Rey Date: Tue, 17 Jul 2018 13:40:55 -0700 Subject: [PATCH 3/3] enh: update courses --- courses.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/courses.md b/courses.md index 291a706..54af62c 100644 --- a/courses.md +++ b/courses.md @@ -1,5 +1,10 @@ ## Courses, Workshops, and Tutorials + +* [SciPy 2018](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=26&cad=rja&uact=8&ved=0ahUKEwjKreXT_abcAhULxVQKHbPsAKkQtwIIYjAZ&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DkJXUUO5M4ok&usg=AOvVaw0fMlkj1OkQEtJZJpOw2t4P) +* [GeoPython 2018](https://github.com/ljwolf/geopython) +* [NARSC 2017](https://www.youtube.com/watch?v=TY4QWnnd4jY) * [SciPy 2016](https://www.youtube.com/watch?v=TY4QWnnd4jY) +* [NARSC 2016](https://github.com/sjsrey/narsc16) * [UCGIS 2016](https://github.com/sjsrey/ucgis_workshop_2016) * [NARSC 2015](http://www.narsc.org/newsite/wp-content/uploads/2012/04/PySAL-tutorial.pdf) * [AUERS 2015](https://github.com/pysal/notebooks/tree/aerus2015) @@ -13,6 +18,7 @@ ## Presentations +* [SciPy 2018](https://www.youtube.com/watch?v=VWMj_rNb0io) * [SciPy 2015](https://www.youtube.com/watch?v=rfQ0LIaOgQs) * [CyberGIS 2013](https://www.youtube.com/watch?v=piB7zTADzcE) * [ESRI UC 2012](http://video.esri.com/watch/1925/integrating-open_dash_source-statistical-packages-with-arcgis)