In [2]:
%pylab
%matplotlib inline
import clusterpy
from geopandas import GeoDataFrame
Para el taller vamos a trabajar con los datos de desaparecidos del Secretariado Ejecutivo del Sistema Nacional de Seguridad Pública (SESNSP), estos datos fueron procesados originalmente por el grupo de Data4mx.
Lo primero que vamos a hacer es leer los datos del archivo desaparecidos.csv
e importarlos en una estructura llamada DataFrame
de la librería Pandas (Pandas es una librería de python para el manejo y análisis de series de datos, en escencia provee una estructura análoga al DataFrame de R y herramientas para manipularla)
Primero vamos a leer los datos usando geopandas:
In [26]:
gdf = GeoDataFrame.from_file('datos/desaparecidos_estatal.shp')
Vamos a ver qué datos tenemos:
In [27]:
gdf.head()
Out[27]:
La instrucción gdf.head()
nos da los primeros 10 registros, es útil para darnos una idea de cómo están organizados los datos.
Lo que tenemos es un shapefile
con los datos de desaparecidos totales para cada año entre el 2006 y el 2014, además tenemos la población total (para el 2010) y un identificador de estado.
Lo que queremos es hacer regiones de acuerdo a la evolución temporal de los desaparecidos. Como recordarán del ejercicio anterior, cuando queremos usar múltiples variables debemos asegurarnos que no estén demasiado correlacionadas. Entonces, vamos a explorar primero haciendo algunos scatterplots:
In [28]:
fig = plt.figure()
plt.plot(gdf['2006'].values,gdf['2007'].values,'b.')
Out[28]:
In [29]:
fig = plt.figure()
plt.plot(gdf['2007'].values,gdf['2008'].values,'b.')
Out[29]:
Los datos no parecen estar demasiado correlacionados, pero, para estar seguros, calculemos su matriz de correlación:
In [30]:
gdf.corr()
Out[30]:
Como podemos ver, en realidad los datos sí están bastante correlacionados, aunque para cada año sólo tenemos 32 observaciones, piensen qué quiere decir esto en términos de la significancia.
Por lo pronto, vamos a seleccionar como candidatos todos los años que tengan un valor de correlación menor a 0.7
In [31]:
corr = gdf.corr()
corr[corr<0.7]
Out[31]:
Como pueden ver, el único año que se elimina por completo es el 2009, entonces usemos todos los demás años:
In [32]:
variables = gdf[['2006','2007','2008','2010','2011','2012','2013','2014','geometry','nombre','CVEGEO']]
variables.head()
Out[32]:
Lo que hicimos aquí fue definir un Nuevo GeoDataFrame, sólo con las variables que nos interesan. Ahora, como recordarán, la librería que usamos para regionalizar (clusterpy
) necesita shapefiles, afortunadamente, GeoPandas nos da una forma muy facil de exportar archivos:
In [33]:
variables.to_file('datos/variables.shp')
Ahora tenemos un shapefile con as variables que queremos, hagamos una regionalización:
In [34]:
desaparecidos = clusterpy.importArcData("datos/variables")
desaparecidos.cluster('arisel', ['2006','2007','2008','2010','2011','2012','2013','2014']
, 6, wType='rook', inits=10, dissolve=0)
desaparecidos.exportArcData('datos/regiones_desaparecidos')
Ahora ya tenemos una primera regionalización, pero, ¿no será mejor trabajar con tasas de desaparecidos en lugar de con cantidades?
Las cantidades son importantes, pero pueden estar sesgadas por el número de habitantes, repitamos el ejercicio ahora con tasas.
Aqui podemos hacer las operaciones necesarias, pero va a ser más fácil para ustedes hacerlas en Qgis.
Una vez que tengan su nuevo shape con las tasas de desaparecidos, repitan el proceso para hacer una regionalización.
In [ ]: