Leemos los datos del csv
In [1]:
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
In [2]:
import pandas as pd
df = pd.read_csv('data/desaparecidos.csv',header=0,names=['estado','municipio','cvegeo','year','total','tasa'], encoding='utf-8')
Agrupamos y quitamos los índices de las columnas estado y year para poder usarlas en el pivot:
In [3]:
df.groupby(['estado','year']).sum().reset_index('year').reset_index('estado').head()
Out[3]:
Creamos la pivot table para tener los años en columnas:
In [4]:
tmp = df.groupby(['estado','year']).sum().reset_index('year').reset_index('estado')
estado_tiempo = tmp.pivot(index='estado',columns='year',values='total')
estado_tiempo.tail()
Out[4]:
En la maniobra perdimos las claves cvegeo que luego vamos a necesitar para unirlo a las geometrías. Recuperémoslas:
In [5]:
cve_estado = df[['estado','cvegeo']].groupby('estado').first()
cve_estado.tail()
Out[5]:
Además tenemos que reindexar las tablas para poder usar los valores de las columnas 'estado' como llaves en la unión:
In [6]:
cve_estado = cve_estado.reset_index('estado')
estado_tiempo = estado_tiempo.reset_index('estado')
Ahora si unimos:
In [7]:
estado_tiempo = pd.merge(cve_estado,estado_tiempo, on='estado')
estado_tiempo.head()
Out[7]:
Ahora leemos el shapefile con las geometrías de los estados:
In [8]:
from geopandas import GeoDataFrame
gf = GeoDataFrame.from_file('data/estados.shp', encoding='utf-8')
gf.columns
Out[8]:
Trístemente las cvegeo no coinciden, tendremos que intentar unir por nombre. Nos quedamos con las columnas necesarias del shape y renombramos la columna nombre para usarla como llave común:
In [9]:
gf = gf[['NOMBRE','POB1','geometry']]
gf = gf.rename(columns = {'NOMBRE':'estado'})
gf.columns
Out[9]:
Unimos los dos conjuntos de datos y lo casteamos a GeoDataFrame:
In [12]:
des_estado = pd.merge(gf,estado_tiempo, on='estado')
des_estado = GeoDataFrame(des_estado)
des_estado.head()
Out[12]:
Antes de guardar el resultado como shape necesitamos renombrar las columnas de los años porque son enteros y no strings.
In [14]:
des_estado = des_estado.rename(columns={2006:'2006',2007:'2007',2008:'2008',2009:'2009',2010:'2010',2011:'2011',2012:'2012',2013:'2013',2014:'2014'})
Guardamos el resultado como shapefile para leerlo con clusterpy
In [15]:
des_estado.to_file('data/desaparecidos_estatal',encoding='utf-8')
In [18]:
for c in des_estado.columns:
print des_estado[c].dtype
In [ ]: