#!/usr/bin/env python # coding: utf-8 # # Elecciones de Puebla 2019 # #### Un analisis y visualizacion geografica de las elecciones de Junio 2019 en Puebla, Mexico. # #
# Meta # La meta de este notebook es crear un mapa interactivo utilizando los datos de las elecciones de puebla en junio 2019. # #
# #
# Contexto # @YaNiPaper limpió los datos y creo mapas (que se encuentran en el directorio: reportes/figuras/. #
  • Lo que queremos hacer es recrear el mapa de @palewire con datos de puebla.
  • #
    # In[1]: import pandas as pd from zipfile import ZipFile from pathlib import Path from herramientas import arbol import arrow import altair as alt import geopandas as gpd import gpdvega hoy = arrow.now('local').format(fmt = 'DD-MMM-YY', locale = 'es') hoy # In[2]: get_ipython().run_line_magic('matplotlib', 'inline') # In[3]: DATOS_BRUTOS = Path("../datos/brutos/") DATOS_INTERINOS = Path("../datos/interinos/") DATOS_PROCESADOS = Path("../datos/procesados/") DATOS_EXTERNOS = Path("../datos/externos/") # In[4]: arbol(DATOS_BRUTOS) # In[5]: arbol(DATOS_EXTERNOS) # In[6]: datos_por_municipio = pd.read_csv(DATOS_EXTERNOS / 'elecciones_puebla_por_municipio_computo_2019.csv') datos_por_municipio.head() # In[7]: puebla = gpd.read_file(DATOS_EXTERNOS / 'mapas_puebla' / 'MUNICIPIO.shp') # In[8]: puebla.head() # In[9]: puebla.plot(); # In[10]: puebla.shape # In[11]: puebla_con_datos = puebla.merge(datos_por_municipio, left_on = ['municipio', 'nombre'], right_on = ['ID_MUNICIPIO', 'MUNICIPIO']) # In[12]: puebla_con_datos.head(2).T # In[13]: puebla_con_datos = puebla_con_datos.rename(columns = { "ENRIQUE_CARDENAS": "Enrique Cárdenas Sánchez", "ALBERTO_JIMENEZ": "Alberto Jiménez Merino", "MIGUEL_BARBOSA": "Miguel Barbosa Huerta", "NO_REGISTRADOS": "No registrados", "NULOS": "Votos nulos", "TOTAL_VOTOS": "Total de votos", "GANADOR": "Ganador", "PORC_GANADOR": "% del ganador" }) # In[14]: puebla_con_datos['Ganador'] = puebla_con_datos['Ganador'].str.replace("_", ' ').str.title() # In[15]: # centroides puebla_con_datos['centroide_x'] = puebla_con_datos['geometry'].centroid.x puebla_con_datos['centroide_y'] = puebla_con_datos['geometry'].centroid.y # In[16]: puebla_con_datos.plot(column = 'Ganador'); # ## palewire's # In[17]: base = alt.Chart(puebla_con_datos).mark_geoshape( stroke='black', strokeWidth=0.1 ).encode().properties( width=600, height=800 ) # In[18]: geoshape = alt.Chart(puebla_con_datos).mark_geoshape( fill='lightgray', stroke='black' ) # In[19]: outcome = geoshape.encode( color=alt.Color( "Ganador:N", title="Ganador" ), tooltip = ['Enrique Cárdenas Sánchez:Q', 'Alberto Jiménez Merino:Q', 'Miguel Barbosa Huerta:Q', 'Votos nulos:Q', 'Total de votos:Q', 'Ganador:N', '% del ganador:Q'] ) # In[20]: ganador_por_municipio = (base + outcome).properties(title="Ganador por municipio", ).configure_view( strokeWidth=0, ).configure_title(fontSize = 36, align = 'left', anchor = 'start') ganador_por_municipio # ## palewire 2 # In[21]: secciones = gpd.read_file(DATOS_EXTERNOS / 'mapas_puebla'/'SECCION.shp') secciones.head() # In[22]: secciones_datos = pd.read_csv(DATOS_EXTERNOS / 'elecciones_puebla_por_seccion_2019.csv') secciones_datos.head() # In[23]: secciones_con_datos = secciones.merge(secciones_datos, left_on = 'seccion', right_on = 'SECCION') # In[24]: secciones_con_datos.head(2).T # In[25]: secciones_con_datos = secciones_con_datos.rename(columns = { "ENRIQUE_CARDENAS": "Enrique Cárdenas Sánchez", "ALBERTO_JIMENEZ": "Alberto Jiménez Merino", "MIGUEL_BARBOSA": "Miguel Barbosa Huerta", "NO_REGISTRADOS": "No registrados", "NULOS": "Votos nulos", "TOTAL_VOTOS": "Total de votos", "GANADOR": "Ganador", "PORC_GANADOR": "% del ganador" }) # In[26]: secciones_con_datos['Ganador'] = secciones_con_datos['Ganador'].str.replace("_", ' ').str.title() # In[27]: secciones_con_datos = secciones_con_datos[['Alberto Jiménez Merino', 'Enrique Cárdenas Sánchez', 'Miguel Barbosa Huerta', 'No registrados', 'Votos nulos', 'Total de votos', 'LISTA_NOMINAL', 'aj_porc', 'ec_porc', 'mb_porc', 'no_reg_porc', 'nulos_porc', 'parti_porc', 'abst_porc', 'Ganador','% del ganador', 'CVE_GANADOR', 'geometry',]] # In[28]: secciones_con_datos = secciones_con_datos.to_crs(epsg=4326) # In[29]: # centroides secciones_con_datos['centroide_x'] = secciones_con_datos['geometry'].centroid.x secciones_con_datos['centroide_y'] = secciones_con_datos['geometry'].centroid.y # In[30]: secciones_con_datos.plot(column = 'Ganador'); # In[31]: base_secciones = alt.Chart(secciones_con_datos).mark_geoshape( stroke='black', strokeWidth=0.1 ).encode().properties( width=600, height=800 ) # In[32]: geoshape_secciones = alt.Chart(secciones_con_datos).mark_geoshape( fill='lightgray', stroke='black' ) # In[33]: turnout = alt.Chart(secciones_con_datos).mark_circle().encode( longitude='centroide_x:Q', latitude='centroide_y:Q', size=alt.Size( "Total de votos:Q", title="Total de votos", ), color = alt.Color('Ganador:N'), tooltip = ['Enrique Cárdenas Sánchez', 'Alberto Jiménez Merino', 'Miguel Barbosa Huerta', 'Votos nulos', 'Total de votos', 'Ganador', '% del ganador'] ) # In[34]: participacion = (base_secciones + turnout).properties(title="Participación").configure_view( strokeWidth=0 ).configure_title(fontSize = 36, align = 'left', anchor = 'start') participacion # In[35]: participacion.save("../reportes/figuras/chart.html")