Publicaron en CRAN una primera versión del paquete polAr: -POLítica ARgentina usando R. En este post intentaré detallar un poco más el proceso de trabajo con el que llegamos hasta acá y, como yapa, el de geofaceteAr.
polAr
New CRAN package polAr with initial version 0.1.3 https://t.co/0QdYpl5sce #rstats
— CRAN Package Updates (@CRANberriesFeed) May 16, 2020
La idea del paquete es brindar herramientas que faciliten el flujo de trabajo del análisis político - electoral y el acceso a datos de Argentina usando R
. Podriamos dividir las funciones de esta primera versión en tres familias: (i) datos, (ii) indicadores y (iii) visualización:
datos
El paquete no incluye datos, sino que funciona como motor de búsqueda y descarga desde un repositorio alternativo. La idea detrás de ello es que funcione de modo indpendiente, que ésta pudiera ser aumentada o modificada sin efectos directos sobre el paquete. En una próxima publicación intetnaré avanzar sobre la documentación de este repositorio y un proceo de chequeo de información.
La principal fuente de información es el siempre útil Atlas Electoral de Andy Tow. Sitio que, además de ser la fuente de tabulados electorales más completa que existe en Argentina, disponibiliza las bases con los datos desagregados publicados por los escrutinios provisorios desde el año 2003 en adelante.
El primer paso de lo acá compartido fue el procesamiento de esas bases de datos y el armado de un repositorio propio que me facilitara el trabajo de llamado de elecciones. En resumen: transformamos archivos .mdb
(formato para tablas relacionles de Microsoft Acces) en sqlite
para cada año electoral e hicimos consultas a esas basese de datos para obtener un archivo .csv
para cada elección con una estrcutura así: distrito_categoria_turno_año.csv
.
Solo para las elecciones del proceso electoral de 2019 trabajamos con datos compartidos por pmoracho en github. Algo más de detalle del estado actual de todo esto esta disponible en el repositorio PolAr_Data
.
Al día de hoy el repositorio cuenta con 425 archvios de elecciones para las catgorías a Presidente, Diputades y Senadores Nacionales, para elecciones generales, primarias (P.A.S.O.) y balotaje presidencial.
Con show_available_elections()
accedemos a un índice con la información disponible que podemos descargar:
## # A tibble: 425 x 5
## district category round year NOMBRE
## <chr> <chr> <chr> <chr> <chr>
## 1 arg presi balota 2015 ARGENTINA
## 2 arg presi gral 2003 ARGENTINA
## 3 arg presi gral 2007 ARGENTINA
## 4 arg presi gral 2011 ARGENTINA
## 5 arg presi gral 2015 ARGENTINA
## 6 arg presi gral 2019 ARGENTINA
## 7 arg presi paso 2011 ARGENTINA
## 8 arg presi paso 2015 ARGENTINA
## 9 arg presi paso 2019 ARGENTINA
## 10 caba dip gral 2005 CABA
## # ... with 415 more rows
Tomando los parámetros de la tabla anterior con el siguiente comando podemos completar los campos obligatorios para obtener los datos, en este caso de la elección general para presidente de 2019.
arg19 <- get_election_data(district = "arg",
category = "presi",
round = "gral",
year = 2019)
arg19
## # A tibble: 192 x 8
## # Groups: codprov [24]
## category round year codprov name_prov electores listas votos
## <chr> <chr> <dbl> <chr> <chr> <dbl> <chr> <dbl>
## 1 presi gral 2019 01 CABA 0 00024 128795
## 2 presi gral 2019 01 CABA 0 00036 58040
## 3 presi gral 2019 01 CABA 0 00037 707158
## 4 presi gral 2019 01 CABA 0 00039 13559
## 5 presi gral 2019 01 CABA 0 00050 1039750
## 6 presi gral 2019 01 CABA 0 00108 37404
## 7 presi gral 2019 01 CABA 0 blancos 30542
## 8 presi gral 2019 01 CABA 0 nulos 0
## 9 presi gral 2019 02 BUENOS AIRES 0 00024 610009
## 10 presi gral 2019 02 BUENOS AIRES 0 00036 260597
## # ... with 182 more rows
arg19
es un tibble de \(192\) filas y 8 variables. Las filas son el producto de 8 filas únicas por provincia (los 24 grupos) con la cantidad de votos obtenidos por las distintas opciones electorales en este turno, categoría y año.
En este artículo se puede encontrar más detalles de la función.
indicadores
El acceso a la información es quizás la función princiapl de polAr
, la cual permitirá a usuaries trabajar con los datos como quieran. Pero el paquete incopora además funciones para realizar cálculos de interés para el análisis político. Esta primera versión solamente incluye dos varianes: compute_nep()
, que devulelve el Número Efectivo de Partidos (según dos fórmulas distintas) y compute_cometitiveness()
, que calcula el nivel de competencia de una elección determinada.
arg19 %>%
compute_competitiveness() %>%
print(n= 24)
## # A tibble: 24 x 2
## codprov competitividad
## <chr> <dbl>
## 1 01 0.835
## 2 02 0.841
## 3 03 0.785
## 4 04 0.685
## 5 05 0.915
## 6 06 0.801
## 7 07 0.779
## 8 08 0.998
## 9 09 0.636
## 10 10 0.954
## 11 11 0.877
## 12 12 0.974
## 13 13 0.879
## 14 14 0.767
## 15 15 0.900
## 16 16 0.721
## 17 17 0.869
## 18 18 0.823
## 19 19 0.965
## 20 20 0.692
## 21 21 0.991
## 22 22 0.441
## 23 23 0.763
## 24 24 0.694
Este artículo del paquete tiene algo más de detalle.
visualización
Por último polAr
incluye un par funciones que ayudan a visualizar rápidamente las elecciones de manera resumida. Una primera alternativa es generar tabulados con los resultados agregados de un comicio:
arg19 %>%
get_names() %>%
tabulate_results()
Argentina - 2019 | |
---|---|
Elección General - Presidente de la Nación | |
Lista | Votos |
00037-FRENTE DE TODOS | 47.4% |
00050-JUNTOS POR EL CAMBIO | 39.8% |
00024-CONSENSO FEDERAL | 6.1% |
00036-FRENTE DE IZQUIERDA Y DE TRABAJADORES - UNIDAD | 2.1% |
00039-FRENTE NOS | 1.7% |
blancos | 1.5% |
00108-UNITE POR LA LIBERTAD Y LA DIGNIDAD | 1.5% |
nulos | 0.0% |
Fuente: polAr - Política Argentina usando R - https://electorarg.github.io/polAr |
Otra alternativa es analizarlos de manera gráfica1:
arg19 %>%
get_names() %>%
plot_results(national = T)
Ambas funciones requieren utilizar primero get_names
en la versión de CRAN. Esta es una función auxiliar para vincular la base de datos de resultados con los nombres de las listas que compiten.
La versión en desarrollo elimina ese paso intermedio para los casos por defecto de obtención de datos (con fomato long
) pero sigue funcionando para los casos en que los datos de la elección fueron descargados wide
.
Puede notarse que plot_results()
fue llamado con un parámatro national = TRUE
. De esta manera, para elecciones a presidente, el gráfico resultante muestra el agregado de votos al nivel del distrito que se elige el cargo. Si, en cambio, no especificamos nada, el parámetro FALSE
por defecto nos devolverá los resultados a nivel de provncias en grillas cómo si fueran mapas. De igual modo, si descargamos una elección a nivel departamental, plot_results()
automáticamente graficará los resultados con geofacetAR
.
get_election_data(district = "caba",
category = "dip",
round = "paso" ,
year = 2019 ,
level = "departamento") %>%
plot_results()
RESUMIENDO
Y miren lo fácil que es de usar {polAr}. Si esta no es la excusa perfecta para empezar a usar R ya no se qué podrá ser 😂 pic.twitter.com/2tcRR3lN3l
— JP Ruiz Nicolini (@TuQmano) May 21, 2020
gofaceteAr
Lo anterior es posible gracias a otro paquete, disponible para descarga desde un repositorio de github. geofaceteAr
es una extensión local del paquete geofacet
de Ryan Haffen. El empaquetado fue el resultado de ordenar la aplicación para Argentina de esta técnica de acomodar las grillas de ggplot2
como si fueran mapas, originalmente presentadas en LatinR
2018.
Éste carga el paquete geofacet
y agrega funciones de utilidad para la geografía argentina. La priemra de ellas es show_arg_codes()
que muestra un diccionario de grillas con el id correspondiente para descarga y equivalencias de los id correspodientes a los diferentes distritos.
library(geofaceteAR)
show_arg_codes()
Diccionario de equivalencias para identificadores geogrficos | ||||
---|---|---|---|---|
Argentina - Nivel Provincial | ||||
ID grilla | INDRA | INDEC | ISO | |
codprov | codprov_censo | codprov_iso | name_iso | |
ARGENTINA | AR | Argentina | ||
CABA | 01 | 02 | AR-C | Ciudad Autónoma de Buenos Aires |
BUENOS AIRES | 02 | 06 | AR-B | Buenos Aires |
CATAMARCA | 03 | 10 | AR-K | Catamarca |
CORDOBA | 04 | 14 | AR-X | Córdoba |
CORRIENTES | 05 | 18 | AR-W | Corrientes |
CHACO | 06 | 22 | AR-H | Chaco |
CHUBUT | 07 | 26 | AR-U | Chubut |
ENTRE RIOS | 08 | 30 | AR-E | Entre Ríos |
FORMOSA | 09 | 34 | AR-P | Formosa |
JUJUY | 10 | 38 | AR-Y | Jujuy |
LA PAMPA | 11 | 42 | AR-L | La Pampa |
LA RIOJA | 12 | 46 | AR-F | La Rioja |
MENDOZA | 13 | 50 | AR-M | Mendoza |
MISIONES | 14 | 54 | AR-N | Misiones |
NEUQUEN | 15 | 58 | AR-Q | Neuquén |
RIO NEGRO | 16 | 62 | AR-R | Río Negro |
SALTA | 17 | 66 | AR-A | Salta |
SAN JUAN | 18 | 70 | AR-J | San Juan |
SAN LUIS | 19 | 74 | AR-D | San Luis |
SANTA CRUZ | 20 | 78 | AR-Z | Santa Cruz |
SANTA FE | 21 | 82 | AR-S | Santa Fe |
SANTIAGO DEL ESTERO | 22 | 86 | AR-G | Santiago del Estero |
TUCUMAN | 23 | 90 | AR-T | Tucumán |
TIERRA DEL FUEGO | 24 | 94 | AR-V | Tierra del Fuego |
Fuente: geofaceteAR - https://electorarg.github.io/geofaceteAR |
Usamos la función get_grid()
para llamar una grilla disponible en la tabla anterior. Y grid_preview()
si queremos ver el diseño de la grilla.
get_grid("TUCUMAN")
## name_provincia row col code name
## 1 TUCUMAN 1 4 013 BURRUYACU
## 2 TUCUMAN 2 4 001 CAPITAL
## 3 TUCUMAN 4 2 005 CHICLIGASTA
## 4 TUCUMAN 2 5 012 CRUZ ALTA
## 5 TUCUMAN 3 3 003 FAMAILLA
## 6 TUCUMAN 5 4 009 GRANEROS
## 7 TUCUMAN 5 3 007 JUAN B. ALBERDI
## 8 TUCUMAN 6 3 008 LA COCHA
## 9 TUCUMAN 3 5 011 LEALES
## 10 TUCUMAN 3 4 002 LULES
## 11 TUCUMAN 3 2 004 MONTEROS
## 12 TUCUMAN 4 3 006 RIO CHICO
## 13 TUCUMAN 4 4 010 SIMOCA
## 14 TUCUMAN 2 1 017 TAFI DEL VALLE
## 15 TUCUMAN 2 2 016 TAFI VIEJO
## 16 TUCUMAN 1 3 014 TRANCAS
## 17 TUCUMAN 2 3 015 YERBA BUENA
Luego, podemos hacer uso nuevamente de la información en nuestro diccionario de identificadores geográficos para recodificar los distritos. El código por default - el que figura dentro de cada cajita del mapa- es el correspondiente a los escrutinios provisorios (que utilizamos en polAr
), pero podemos disponer de otros. Por ejemplo, los del INDEC:
get_grid("TUCUMAN") %>%
recode_district(type = "indec")
## # A tibble: 17 x 4
## name code row col
## <chr> <chr> <dbl> <dbl>
## 1 BURRUYACU 007 1 4
## 2 CAPITAL 084 2 4
## 3 CHICLIGASTA 021 4 2
## 4 CRUZ ALTA 014 2 5
## 5 FAMAILLA 028 3 3
## 6 GRANEROS 035 5 4
## 7 JUAN B. ALBERDI 042 5 3
## 8 LA COCHA 049 6 3
## 9 LEALES 056 3 5
## 10 LULES 063 3 4
## 11 MONTEROS 070 3 2
## 12 RIO CHICO 077 4 3
## 13 SIMOCA 091 4 4
## 14 TAFI DEL VALLE 098 2 1
## 15 TAFI VIEJO 105 2 2
## 16 TRANCAS 112 1 3
## 17 YERBA BUENA 119 2 3
Hasta acá llegamos con la primera entrada respecto de {polAr} ya formalmente en CRAN. Espero en una próxima entrada contar un poco más del repositorio de datos y la incorporación de nuevas funciones en la versión de desarrollo.
Inspirados en
ggplotme
de Juan Cruz Rodrígurez con Camila Higa - mentaComunicación- trabajamos en un bot de Twitter que permite consultar resultados de elecciones. La idea es que un usuario le pregunta a@pol_ar_bot
sobre una elección, cumpliendo con los parámetros necesarios (distrito
+turno
+año
+categoria
) y el bot responde graficando el resultado. bot: https://twitter.com/pol_Ar_bot↩