Unidad de Area Modificable

En esta práctica vamos a explorar rápidamente la forma en la que las escalas de análisis influyen en los resultados Para esto vamos a trabajar con los datos de desaparecidos en la República Mexicana entre 2004 y 2014.

Los datos vienen en dos shapefiles, uno a nivel estatal y otro a nivel municipal. Importemos los archivos en GeoPandas para analizarlos:


In [19]:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

from geopandas import GeoDataFrame
estatal = GeoDataFrame.from_file('data/des_rezago_estado.shp')
municipal = GeoDataFrame.from_file('data/muns_geo_des.shp')

Vamos a ver un poco los datos:


In [20]:
estatal.head()


Out[20]:
2006 2007 2008 2009 2010 2011 2012 2013 2014 POB1 analfabeta cvegeo ed_basica estado geometry no_escuela pob_alimen pob_capaci pob_patrim rezago
0 0 25 7 20 18 30 14 15 62 1184996 4.15 01 41.83 Aguascalientes POLYGON ((-102.2878651817759 22.41649003941765... 4.53 14.9 23.6 51.1 1.14451
1 0 7 25 11 8 19 128 177 381 3155070 3.07 02 38.94 Baja California (POLYGON ((-115.2104851485454 28.3722493563768... 4.77 1.3 2.3 9.2 0.66364
2 0 0 2 1 3 2 3 8 3 637026 3.60 03 38.92 Baja California Sur (POLYGON ((-109.8006324469839 24.1492608586424... 4.03 4.7 8.0 23.5 0.48199
3 0 0 5 0 1 0 0 10 59 822441 10.17 04 49.00 Campeche POLYGON ((-90.37935699678101 20.84832728853007... 5.11 20.0 27.3 51.4 0.32493
4 1 55 102 117 227 258 136 233 103 2748391 3.28 05 38.13 Coahuila de Zaragoza POLYGON ((-102.3107926469074 29.87694857356086... 3.84 8.6 15.2 41.0 1.25058

In [7]:
municipal.head()


Out[7]:
2006 2007 2008 2009 2010 2011 2012 2013 2014 POB1 ... cvegeo_x ed_basica geometry no_escuela nom_estado nom_mun pob_alimen pob_capaci pob_patrim rezago
0 0 22 6 19 17 26 11 15 48 797010 ... 01001 3.83 POLYGON ((-102.1064122399267 22.06035441303033... 3.19 Aguascalientes Aguascalientes 12.1 20.4 48.0 -1.63691
1 0 0 0 0 0 0 2 0 1 45492 ... 01002 5.49 POLYGON ((-102.051893439036 22.29143529350413,... 6.75 Aguascalientes Asientos 19.9 28.9 56.8 -0.95642
2 0 0 0 0 0 0 0 0 4 54136 ... 01003 8.93 POLYGON ((-102.6856884472506 22.09962730886253... 8.15 Aguascalientes Calvillo 24.9 35.2 62.5 -1.12218
3 0 1 0 0 0 0 0 0 0 15042 ... 01004 4.18 POLYGON ((-102.287865181776 22.41649003941679,... 6.71 Aguascalientes Cosío 14.8 22.6 49.8 -1.07846
4 0 1 0 1 0 3 1 0 4 99590 ... 01005 5.69 POLYGON ((-102.3356775711373 22.05066521496391... 5.33 Aguascalientes Jesús María 18.7 28.4 55.8 -1.21094

5 rows × 22 columns

En las columnas 2006-2014 tenemos los datos de desaparecidos para cada año. En las demás columnos tenemos alguna información sobre las condiciones socioeconómicas de cada unidad espacial.

El ejercicio que vamos a hacer en esta ocasión es muy sencillo, vamos a hacer una regresión lineal del total de desaparecidos contra alguna variable socioeconómica y vamos a observar cómo cambia el resultado con la escala de análisis.

El primer paso es crear y calcular una columna con el total de desaparecidos:


In [21]:
des_estado = estatal[['cvegeo','2006','2007','2008','2009','2010','2011','2012','2013','2014']]
des_estado.head()


Out[21]:
cvegeo 2006 2007 2008 2009 2010 2011 2012 2013 2014
0 01 0 25 7 20 18 30 14 15 62
1 02 0 7 25 11 8 19 128 177 381
2 03 0 0 2 1 3 2 3 8 3
3 04 0 0 5 0 1 0 0 10 59
4 05 1 55 102 117 227 258 136 233 103

Aquí simplemente seleccionamos las columnas que nos interesan


In [22]:
des_estado['total_des'] = des_estado.sum(axis=1)
des_estado.head()


Out[22]:
cvegeo 2006 2007 2008 2009 2010 2011 2012 2013 2014 total_des
0 01 0 25 7 20 18 30 14 15 62 191
1 02 0 7 25 11 8 19 128 177 381 756
2 03 0 0 2 1 3 2 3 8 3 22
3 04 0 0 5 0 1 0 0 10 59 75
4 05 1 55 102 117 227 258 136 233 103 1232

Y aquí añadimos una nueva columna a nuestra selección con la suma de desaparecidos.

Ahora vamos a unir la suma a nuestros datos originales:


In [23]:
import pandas as pd
estatal = pd.merge(estatal,des_estado[['total_des','cvegeo']],on='cvegeo' )
estatal.head()


Out[23]:
2006 2007 2008 2009 2010 2011 2012 2013 2014 POB1 ... cvegeo ed_basica estado geometry no_escuela pob_alimen pob_capaci pob_patrim rezago total_des
0 0 25 7 20 18 30 14 15 62 1184996 ... 01 41.83 Aguascalientes POLYGON ((-102.2878651817759 22.41649003941765... 4.53 14.9 23.6 51.1 1.14451 191
1 0 7 25 11 8 19 128 177 381 3155070 ... 02 38.94 Baja California (POLYGON ((-115.2104851485454 28.3722493563768... 4.77 1.3 2.3 9.2 0.66364 756
2 0 0 2 1 3 2 3 8 3 637026 ... 03 38.92 Baja California Sur (POLYGON ((-109.8006324469839 24.1492608586424... 4.03 4.7 8.0 23.5 0.48199 22
3 0 0 5 0 1 0 0 10 59 822441 ... 04 49.00 Campeche POLYGON ((-90.37935699678101 20.84832728853007... 5.11 20.0 27.3 51.4 0.32493 75
4 1 55 102 117 227 258 136 233 103 2748391 ... 05 38.13 Coahuila de Zaragoza POLYGON ((-102.3107926469074 29.87694857356086... 3.84 8.6 15.2 41.0 1.25058 1232

5 rows × 21 columns

Repetimos para los municipios (ahora en un solo paso):


In [24]:
import pandas as pd
des_mun = municipal[['cvegeo_x','2006','2007','2008','2009','2010','2011','2012','2013','2014']]
des_mun['total_des'] = des_mun.sum(axis=1)
municipal = pd.merge(municipal,des_mun[['total_des','cvegeo_x']],on='cvegeo_x' )
municipal.head()


Out[24]:
2006 2007 2008 2009 2010 2011 2012 2013 2014 POB1 ... ed_basica geometry no_escuela nom_estado nom_mun pob_alimen pob_capaci pob_patrim rezago total_des
0 0 22 6 19 17 26 11 15 48 797010 ... 3.83 POLYGON ((-102.1064122399267 22.06035441303033... 3.19 Aguascalientes Aguascalientes 12.1 20.4 48.0 -1.63691 164
1 0 0 0 0 0 0 2 0 1 45492 ... 5.49 POLYGON ((-102.051893439036 22.29143529350413,... 6.75 Aguascalientes Asientos 19.9 28.9 56.8 -0.95642 3
2 0 0 0 0 0 0 0 0 4 54136 ... 8.93 POLYGON ((-102.6856884472506 22.09962730886253... 8.15 Aguascalientes Calvillo 24.9 35.2 62.5 -1.12218 4
3 0 1 0 0 0 0 0 0 0 15042 ... 4.18 POLYGON ((-102.287865181776 22.41649003941679,... 6.71 Aguascalientes Cosío 14.8 22.6 49.8 -1.07846 1
4 0 1 0 1 0 3 1 0 4 99590 ... 5.69 POLYGON ((-102.3356775711373 22.05066521496391... 5.33 Aguascalientes Jesús María 18.7 28.4 55.8 -1.21094 10

5 rows × 23 columns

Ahora sí, vamos a hacer una regresión a nivel estatal:


In [26]:
from pandas.stats.api import ols
model = ols(y=estatal['total_des'], x=estatal['rezago'])
model


---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-26-23a4d9667b21> in <module>()
      1 from pandas.stats.api import ols
----> 2 model = ols(y=estatal['total_des'], x=estatal['rezago'])
      3 model

/usr/local/lib/python2.7/dist-packages/pandas/stats/interface.pyc in ols(**kwargs)
    141             klass = MovingOLS
    142 
--> 143     return klass(**kwargs)

/usr/local/lib/python2.7/dist-packages/pandas/stats/ols.pyc in __init__(self, y, x, intercept, weights, nw_lags, nw_overlap)
     51             import statsmodels.api as sm
     52         except ImportError:
---> 53             import scikits.statsmodels.api as sm
     54 
     55         self._x_orig = x

ImportError: No module named scikits.statsmodels.api

In [27]:



---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-27-c71a67229787> in <module>()
      2     import statsmodels.api as sm
      3 except ImportError:
----> 4     import scikits.statsmodels.api as sm

ImportError: No module named scikits.statsmodels.api

In [ ]: