Pacotes br 1 card 1Iniciamos com esse artigo uma série de postagens sobre Pacotes e programadores brasileiros. Nosso objetivo aqui é mostrar o grande desenvolvimento que o R tem tido aqui no Brasil.
Começaremos, então, com o cientista político Daniel Marcelino , o autor de dois pacotes para R: o SciencesPo e o SoundexBR. Neste post nós vamos dar uma olhada nesses pacotes mostrando uns destaques interessantes e como utilizá-los nas suas análises.
Primeiro, é preciso instalar eles no R e os carregar:

install.packages("SciencesPo")
install.packages("SoundexBR")
library("SciencesPo")
library("SoundexBR")

Para conhecer todas as funções do pacote, basta usar o comando help(package = "") e nome do pacote entre aspas.


 


SciencesPo

SciencesPo tem muitas funções ligadas a área de Ciência Política, em particular aos temas de distribuição dos resultados de uma eleição. O pacote também tem algumas bases de dados que você pode utilizar para explorar – e que podem ser vistos com data(package = "SciencesPo").
Uma função que achei bem interessante é a PoliticalDiversity(), que calcula a medida de competição política num território, ou seja, quão perto ou longe de monopolia é o “mercado” político. Primeiro, eu vou usar o pacote tidyverse para importar e arrumar uns dados brasileiros, da eleição 2016, disponível do TSE.

library(tidyverse)
tse <- read_csv("https://raw.githubusercontent.com/RobertMyles/Various_R-Scripts/master/data/quadro_partido_x_cargo.csv") %>%
  filter(Partido != "Subtotal", Partido != "Total Geral") %>%
  mutate(total = 39623213,
         prop = `Qt Votos Validos`/total)

33 partidos conseguiram representação nessas eleições. A função PolticalDiversity() nos ajuda a ver o peso destes partidos no sistema, considerando que uns partidos têm muitos membros eleitos enquanto outros têm poucos.

PoliticalDiversity(tse$prop, index = "golosov")
## [1] 27.89

A função mostra que é melhor pensar que os sistemas têm 28 partidos efetivos, o que ainda é um número grande em comparação com outros países. Por exemplo, podemos fazer a mesma coisa com dados dos Estados Unidos:

usa <- read_csv("https://raw.githubusercontent.com/RobertMyles/Various_R-Scripts/master/data/tables2014.csv") %>%
  slice(58) %>%
  select(-1) %>%
  gather(partido, prop)
PoliticalDiversity(usa$prop, index = "golosov")
## [1] 2.299

Ou França, usando dados do governo francês que podemos “scrapear” do website:

library(rvest)
fr <- read_html("http://www.interieur.gouv.fr/Elections/Les-resultats/Legislatives/elecresult__LG2012/(path)/LG2012//FE.html") %>%
  html_node(css = "#content-wrap > div > table:nth-child(15)") %>%
  html_table(header = T, dec = ",", trim = T) %>%
  select(1, prop = 3)
PoliticalDiversity(fr$prop, index = "golosov")
## [1] 15.325

Vamos visualizar tudo isso:

prop <- data_frame(prop = c(27.89, 2.299, 15.325),
                   pais = c("brasil", "usa", "france"))
ggplot(prop, aes(x = pais, y = prop)) +
  geom_bar(color = "black", stat="identity", width=.5,
           aes(fill = pais)) +
  theme_classic() +
  scale_fill_manual(values = c("#007600", "#E0162B", "#0052A5")) +
  ylab("proporção") + xlab("país")

ibpad BR paises

Proporcionalidade Política

Uma outra questão de interesse na área de Ciência Política é a de proporcionalidade, ou seja, a quantidade de cadeiras que um partido ganha numa eleição referente à proporção de votos ganhados pelo partido. Um sistema no qual um partido ganha 30% das cadeiras depois ganha 30% dos votos seria perfeitamente proporcional, por exemplo.
Podemos investigar este tema usando SciencesPo, com a função Proportionality(). Vamos usar dados da Irlanda, de novo tirando os dados da Wikipedia, que é bom para este tipo de análise. Pegar dados da internet sempre envolve trabalho para arrumar, mas com tidyverse essa tarefa vira simples. Depois fazemos a mesma coisa com dados do Brasil para comparação.

ire <- read_html("https://en.wikipedia.org/wiki/Irish_general_election,_2016") %>%
  html_node(css = "#mw-content-text > table:nth-child(41)") %>%
  html_table(header = F) %>%
  t() %>%
  as_data_frame() %>%
  select(-2, -5, -7)
colnames(ire) <- ire[1, ]
ire <- ire %>%
  slice(-1) %>%
  rename(Votes = `Votes,1st pref.`) %>%
  separate(Votes, into = c("perc_votes", "total_votes"), sep = ",") %>%
  separate(Seats, into = c("total_seats", "perc_seats"), sep = "\\(") %>%
  distinct(Party, Leader, .keep_all = T) %>%
  mutate(perc_votes = as.numeric(gsub("%", "", perc_votes)),
         perc_seats = as.numeric(gsub("%\\)", "", perc_seats)))
Proportionality(ire$perc_votes, ire$perc_seats)
##
## Gallagher's Index :  0.045

 


br <- read_html("https://en.wikipedia.org/wiki/Brazilian_general_election,_2014") %>%
  html_nodes("table") %>%
  html_table(fill = T)
br <- br[[11]]
br <- br[-1, c(3, 5, 7)]
colnames(br)[2:3] <- c("perc_votos", "perc_cadeiras")
'%ni%' <- Negate('%in%')
br <- br %>%
  filter(Parties %ni% c("Total", "Total valid votes")) %>%
  mutate(perc_cadeiras = gsub("%", "", perc_cadeiras),
         perc_cadeiras = as.numeric(gsub(",", "\\.", perc_cadeiras)),
         perc_votos = gsub("%", "", perc_votos),
         perc_votos = as.numeric(gsub(",", "\\.", perc_votos)))
Proportionality(br$perc_votos, br$perc_cadeiras)
##
## Gallagher's Index :  0.022

Dado que zero é perfeitamente proporcional, parece que o sistema brasileiro é mais justo do que o sistema irlandês neste aspecto. Uma visualização simples:

ire_br <- data_frame(pais = c("irlanda", "brasil"),
                     perc = c(0.045, 0.022))
ggplot(ire_br, aes(x = pais, y = perc)) +
  geom_point(size = 3) +
  geom_segment(aes(x = pais, xend = pais,
                   y = -Inf, yend = perc)) +
  labs(x = "país", y = "",
       caption="source: Wikipedia") +
  coord_flip() +
  theme_classic() +
  theme(axis.ticks.y = element_blank())

IBPAD BR ire br
O pacote SciencesPo é somente um dos ótimos pacotes feitos por brasileiros que nós vamos explorar, e é só um dos pacotes feito por Daniel. Veja o site do pacote para ver mais.

SoundexBR

A ideia do pacote SoundexBR, que é uma versão para português brasileiro do algoritmo Soundex, disponível no R para a língua inglesa no pacote stringdist, é identificar palavras que têm o mesmo som, dando a elas o mesmo código. Por exemplo, as palavras “seção” e “sessão” retornam o mesmo código:

soundexBR(term = c("seção", "sessão"))
## [1] "S200" "S200"

Alguém que já tentou reunir bases de dados com soletragem diferentes já vê o valor neste pacote!! É muito comum que você tenha uma base com diferenças pequenas que podem estragar o seu dia. Por exemplo, eu tive este problema quando eu estava fazendo um mapa do Brasil, com duas bases no qual os nomes dos municípios eram diferentes, por muito pouco, como no exemplo em baixo:

primeiros <- c("ASSIS BRAZIL", "JOINVILE", "SAO GABRIEL DE CAHOEIRA",
               "NOVO BRAZIL", "SEM-PEIXE")
segundos <- c("ASSIS BRASIL", "JOINVILLE", "SAO GABRIEL DA CACHOEIRA",
              "NOVO BRASIL", "SEM PEIXE")

soundexBR(primeiros)
## [1] "A221" "J514" "S216" "N116" "S512"

soundexBR(segundos)
## [1] "A221" "J514" "S216" "N116" "S512"

E podemos ver que o pacote SoundexBR resolve este problema facilmente!
Você pode conferir mais sobre como a Ciência Política pode utilizar o R para análise de dados na palestra de Daniel Marcelino em evento do IBPAD no ano passado em Brasília: