Os dados

Usaremos os dados extraídos do twitter dos perfis dos congressistas brasileiros.

library(tidyverse)
## ── Attaching packages ────────────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.0     ✓ purrr   0.3.3
## ✓ tibble  2.1.3     ✓ dplyr   0.8.5
## ✓ tidyr   1.0.2     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ───────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ggbeeswarm)
library(here)
## here() starts at /cloud/project
cong = read_csv("../data/atividade-por-perfil-20190322.csv")
## Parsed with column specification:
## cols(
##   id_parlamentar = col_double(),
##   casa = col_character(),
##   nome_eleitoral = col_character(),
##   partido = col_character(),
##   UF = col_character(),
##   twitter = col_character(),
##   seguidores = col_double(),
##   segue = col_double(),
##   n_proprio = col_double(),
##   n_retweet = col_double(),
##   engaj_total = col_double(),
##   engaj_total_proprio = col_double(),
##   engaj_total_retweet = col_double(),
##   engaj_mediano = col_double(),
##   engaj_mediano_proprio = col_double(),
##   engaj_mediano_retweet = col_double(),
##   engaj_max = col_double(),
##   engaj_max_proprio = col_double(),
##   engaj_max_retweet = col_double()
## )
cong = cong #%>%
  #filter(!is.na(twitter) & !is.na(seguidores) & seguidores > 0) #FILTRANDO OS CONGRESSISTAS QUE NAO POSSUEM TWITTER OU QUE NAO FORAM ENCONTRADOS
perfis = read_csv("../data/perfis-20190322.csv")
## Parsed with column specification:
## cols(
##   id_parlamentar = col_double(),
##   casa = col_character(),
##   nome_eleitoral = col_character(),
##   partido = col_character(),
##   UF = col_character(),
##   `tem twitter?` = col_character(),
##   twitter = col_character(),
##   `twitter2 (se houver)` = col_character(),
##   `facebook (não conferido)` = col_character(),
##   nome_civil = col_character(),
##   fazendo = col_character()
## )
glimpse(cong)
## Observations: 608
## Variables: 19
## $ id_parlamentar        <dbl> 204554, 204521, 204379, 204560, 204528, 121948,…
## $ casa                  <chr> "câmara", "câmara", "câmara", "câmara", "câmara…
## $ nome_eleitoral        <chr> "ABÍLIO SANTANA", "ABOU ANNI", "ACÁCIO FAVACHO"…
## $ partido               <chr> "PR", "PSL", "PROS", "PSDB", "NOVO", "PP", "PSD…
## $ UF                    <chr> "BA", "SP", "AP", "BA", "SP", "GO", "MG", "BA",…
## $ twitter               <chr> "AbilioSantana_", "abouannipv", "FavachoAcacio"…
## $ seguidores            <dbl> NA, NA, NA, NA, 4652, NA, NA, NA, NA, NA, NA, N…
## $ segue                 <dbl> NA, NA, NA, NA, 315, NA, NA, NA, NA, NA, NA, NA…
## $ n_proprio             <dbl> 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, NA, 49, 21…
## $ n_retweet             <dbl> 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, NA, 1, 30, …
## $ engaj_total           <dbl> 0, 0, 0, 0, 7090, 0, 0, 0, 0, 0, 0, 0, NA, 4286…
## $ engaj_total_proprio   <dbl> 0, 0, 0, 0, 6701, 0, 0, 0, 0, 0, 0, 0, NA, 284,…
## $ engaj_total_retweet   <dbl> 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, NA, 4002,…
## $ engaj_mediano         <dbl> 0.0, 0.0, 0.0, 0.0, 26.5, 0.0, 0.0, 0.0, 0.0, 0…
## $ engaj_mediano_proprio <dbl> 0.0, 0.0, 0.0, 0.0, 22.5, 0.0, 0.0, 0.0, 0.0, 0…
## $ engaj_mediano_retweet <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.…
## $ engaj_max             <dbl> 0, 0, 0, 0, 1031, 0, 0, 0, 0, 0, 0, 0, NA, 4002…
## $ engaj_max_proprio     <dbl> 0, 0, 0, 0, 1031, 0, 0, 0, 0, 0, 0, 0, NA, 38, …
## $ engaj_max_retweet     <dbl> 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, NA, 4002, …

Análise inicial

cong %>%
  count(casa)

71 senadores e 528 deputados.

cong %>%
  select(nome_eleitoral, partido, twitter) %>%
  mutate(tem_twitter = !is.na(twitter)) %>%
  summarise(com_twitter = sum(tem_twitter),
            sem_twitter = n() - com_twitter)
cong %>%
  summarise(com_twitter = sum(!is.na(twitter)) /n() * 100)

90.29% dos políticos possuem twitter.

cong %>%
  count(UF, sort = "T")

Quantidade de senadores e deputados por estado.

cong %>% 
  group_by(UF) %>% 
  mutate(ativo = !is.na(twitter)) %>% 
  summarise(com_twitter = sum(ativo) / n(), 
            bancada = n()) %>%
  #mutate(regiao = if_else( UF %in% c("PB", "AL", "SE", "BA", "PI", "PE", "RN", "MA", "CE"), "Nordeste", "Outros" )) %>%
  ggplot(mapping = aes(x = reorder(UF, com_twitter), 
                       y = com_twitter, 
                       #size = bancada, 
                       #color = regiao
                       )) + 
  geom_point(alpha = .8) +
  coord_flip() +
  labs(x = "Estados", y = "Proporção ativa no twitter")

  #+ scale_color_manual(values = c("brown", "gray70"))

Gráfico que mostra a quantidade de senadores e deputados que possuem twitter por estado.

#cong = cong %>%
 # filter(!is.na(twitter) & !is.na(seguidores)) #Filtrar os congressistas que não possuem twitter.

Algo interessante a reparar é a atividade dos parlamentares. A atividade aumenta de acordo com a popularidade de cada um no Twitter?

cong %>%
  filter(!is.na(twitter) & 
           !is.na(engaj_total_proprio) & 
           !is.na(seguidores) & 
           engaj_total_proprio > 0) %>%
  ggplot(mapping = aes(x = seguidores, y =  engaj_total_proprio)) +
  geom_point(size = .6, 
             color = "red") +
  scale_x_log10() +
  scale_y_log10() +
  labs(x = "Quantidade de seguidores", 
       y = "Engajamento total próprio", 
       title = "Engajamento total por número de seguidores")

Mais sobre a relação:

cong %>%
  filter(!is.na(seguidores) & !is.na(engaj_total_proprio) & engaj_total_proprio > 0 & seguidores > 0) %>%
  summarise(coef = cor(log10(seguidores), log10(engaj_total_proprio), method = "pearson"))

Nota-se que há uma relação positiva entre seguidores e o engajamento de cada congressista, um pouco acima da média, ou seja, quanto mais seguidores um congressista tem, mais engajamento próprio é notado.

Quem é o congressista com maior engajamento total próprio no twitter?

cong %>%
  summarise(`Maior engajamento total com tweets próprios` = max(engaj_total_proprio, nome_eleitoral))

Quem é o congressista com maior engajamento em retweet?

cong %>%
  summarise(`Maior engajamento total em retweets` = max(engaj_total_retweet, nome_eleitoral))

Qual será a média de uso do Twitter por partido? Utilizando como critério a média de engajamento por partido.

media_engaj_partido = cong %>%
  filter(!is.na(twitter) & !is.na(seguidores)) %>%
  group_by(partido) %>%
  mutate(media = mean(engaj_total))

media_engaj_partido %>%
  group_by(partido) %>%
  ggplot(aes(x = media, y = partido, color = partido)) +
  geom_point() +
  labs(y = "Partido", 
       x = "Média de engajamento", 
       title = "Média de engajamento por partido") +
  scale_x_log10()

mediana_engajamento = 
  cong %>%
  filter(engaj_max_proprio > 0 & !is.null(engaj_max_proprio)) %>%
  group_by(partido) %>%
  summarise(mediana = median(engaj_total_proprio)) 

cong %>%
  filter(engaj_max_proprio > 0 & !is.null(engaj_max_proprio)) %>%
  ggplot(aes(x = partido, y = engaj_total_proprio)) +
  geom_quasirandom(alpha = .4) +
  geom_point(data = mediana_engajamento, 
             aes(x = partido, y = mediana), 
             color = "red", 
             size = 0.6) +
  coord_flip() +
  labs(y = "Engajamento total próprio", x = "Partido", title = "Engajamento dos congressistas por partido")

Assim como mostra o engajamento total médio, a mediana do partido PSOL também é a mais alta.

seguidoresPartido = cong %>%
  filter(!is.na(twitter) & !is.na(seguidores)) %>%
  group_by(partido) %>%
  summarise(soma = sum(seguidores))

seguidoresPartido %>%
  ggplot(aes(x = soma, y = partido)) +
  geom_col()

seguidoresPartido %>%
  arrange(desc(soma))

O partido PODE(Podemos) possui a maior quantidade de seguidores dentre todos os outros partidos.

cong = cong %>%
  mutate(ativo = !is.na(twitter) & n_proprio + n_retweet >= 10)
#CRIANDO UMA NOVA COLUNA DE ATIVO OU NÃO
cong %>%
  group_by(UF) %>%
  filter(ativo) %>%
  ggplot(aes(x = UF, y = engaj_max, 
             color = UF)) +
  geom_point(orientation = "y") +
  geom_line() +
  labs(x = "Estados", 
       y = "Engajamento máximo (retweet + like)", 
       title = "Engajamento máximo por UF") +
  coord_flip()
## Warning: Ignoring unknown parameters: orientation

Esse gráfico mostra a atividade máxima dos congressistas por UF.

cong = cong %>%
  mutate(ativo = n_proprio >= 10) 


cong %>%
  filter(ativo & n_retweet > 0) %>%
  ggplot(aes(x = n_proprio, y = n_retweet)) +
  geom_point(size = .8) +
  scale_x_log10(limits = c(1, NA)) +
  scale_y_log10() + 
  geom_abline(linetype = "dashed") +
  labs(x = "Número de tweets", 
       y = "Número de retweets", 
       title = "Tweets por retweets dos congressistas")

cong %>%
  group_by(partido) %>%
  summarise(influenciadores = sum(engaj_mediano > 100)/n() * 100) %>%
  arrange(-influenciadores)

Exemplo de dado relativo. 50% dos congressistas do PSOL são influenciadores, tendo engajamento mediano maior que 100.