19° Congresso Internacional de Jornalismo Investigativo

Introdução à programação em R com dados eleitorais

Olá!!

Geovana L Batista: Cientista de Dados e professora de matemática. Co-organiza a R-Ladies São Paulo.

Ana Carolina Moreno: Diretora da Abraji e Jornalista de Dados. Co-organiza a R-Ladies São Paulo.

Cecília do Lago: Jornalista de dados na TV Globo. Co-organiza a R-Ladies São Paulo.

Cronograma previsto


Parte 1 (domingo 9h-11h): Introdução
R + RStudio + ciência de dados + Tidyverse

Parte 2 (domingo 11h30-13h): Importação e análise dos dados
escrevendo os primeiros códigos

Você deveria estar aqui hoje?

Você se enquadra em uma das situações abaixo?

  • Não sei nada sobre R, mas sei outras linguagens

  • Não conheço nada de nenhuma linguagem de programação

  • Já tentei aprender R no passado, mas esqueci tudo

  • Sei só um básico de Excel

  • Nunca mexi no Excel

  • Acho que sou “de humanas demais” pra saber programar

  • Sempre fiquei de recuperação em matemática no colégio

  • Quero sempre aprender coisas novas

Então a resposta é SIM!

Vamos nessa!

Instalação dos programas

Tutorial em vídeo para instalação no Windows: https://youtu.be/vKgjx52TYBw

Tutorial da Curso-R (Windows, Mac, Linux): https://livro.curso-r.com/1-instalacao.html

=> Introdução

  • 1- Por que jornalistas aprendem a programar?

  • 2- Que tipo de bases de dados podemos usar no R?

  • 3- Quais termos preciso aprender?

  • 4- O que conseguimos fazer com essas bases no R?

1- Jornalistas + programação

Resposta: porque nem todas as bases abrem no Excel

1.1- Os limites do Excel

Limite do Excel: 1.048.576 linhas e 16.384 colunas

Para efeito de comparação…

  • Base de SRAG do Sivep-Gripe só do ano de 2021 (atualizado até fev/2022): 1.715.835 linhas

  • Base do Enem 2018: 5,5 milhões de linhas (uma linha por pessoa inscrita)

  • Base de beneficiários do Auxílio Emergencial: 40 milhões de linhas novas a cada mês

2- As bases de dados e o R

Podemos usar bases que tenham formato de “tabela”:

  • cada linha é um registro, e cada coluna traz algum detalhe sobre aquele registro

  • as colunas ou linhas não estão mescladas ou agrupadas

  • em geral, são os arquivos do poder público salvos no formato .csv (mas nem sempre)

2.1 - Exemplo de base de dados

Eleição para a Alesp em 2022:

ranking nome_urna_candidato sigla_partido votos_2022 votos_2018 genero grau_instrucao cor_raca ocupacao
1 EDUARDO SUPLICY PT 807015 NA MASCULINO SUPERIOR COMPLETO BRANCA VEREADOR
2 CARLOS GIANNAZI PSOL 276811 218705 MASCULINO SUPERIOR COMPLETO BRANCA DEPUTADO
3 PAULA DA BANCADA FEMINISTA PSOL 259771 NA FEMININO SUPERIOR COMPLETO PRETA ADVOGADO
4 BRUNO ZAMBELLI PL 235305 NA MASCULINO SUPERIOR COMPLETO BRANCA OUTROS
5 MAJOR MECCA PL 224462 131531 MASCULINO SUPERIOR COMPLETO BRANCA DEPUTADO
6 TOMÉ ABDUCH REP 221656 NA MASCULINO SUPERIOR COMPLETO BRANCA ENGENHEIRO

2.2 - Outra forma de ver

3- Breve glossário

  • Data frame: sinônimo para “tabela” ou “planilha”

  • Tibble: idem acima

  • Objeto: é um data frame criado dentro do RStudio

  • Observação: é sinônimo de “linha” na sua tabela

  • Variável: é sinônimo de “coluna” na sua tabela

4- Potencial do R

  • Abrir uma base de dados

  • Limpar a base de dados (ex: formatar uma data ou tirar os acentos dos nomes)

  • Transformar a base de dados (ex: a partir da coluna de data, criar uma coluna nova só com o mês)

  • Visualizar os dados em formatos de gráficos ou mapas (ou mesmo relatórios em PDF ou websites)

  • Etc. etc. etc.

4.1- Ciclo da ciência de dados

(fonte: R for Data Science)

=> Conceitos iniciais de programação

1- Operador de atribuição: <-

(pense nele como uma preposição!)

  • É como criamos objetos para guardar valores.
  • Atalho: ALT + MENOS
  • Exemplo: calculando a duração desse bootcamp.
total_sessoes <- 3
duracao_sessao_min <- 90
duracao_total <- total_sessoes * duracao_sessao_min
duracao_total
[1] 270

2- O que pode ser um “valor”

(pense neles como substantivos!)

  • Valores não precisam ser números.
  • Eles podem ser texto, por exemplo.
  • Porém, precisam ser escritos entre aspas.
  • Nesse caso, o R entende que o objeto é da classe de “character”
quem_manda_aqui <- "Carol + Lucas"
quem_manda_aqui
[1] "Carol + Lucas"

2.1 - As classes dos objetos

  • Os objetos podem ter vários tipos (um texto, um número etc.). É o que chamamos de classe.

  • As classes principais são:

CLASSE SINÔNIMO
character texto, string, caractere
numeric número, double, valor real, integer
logic lógico, booleano, valor TRUE/FALSE

2.2- Exemplos de classes

character: “Carol” / “41” / “verdadeiro”

numeric: -5 / 1.5 / 3.1416

logic: TRUE / FALSE

3- Operadores relacionais

Operador Descrição
== igual
!= diferente
> maior
< menor
>= maior ou igual a
<= menor ou igual que

4- Operadores lógicos

Operador Descrição
! significa NÃO
& significa E
| significa OU
%in% significa “contém”

5- O operador pipe: %>% ou |>

(pense nele como uma vírgula!)

  • pipe = cano, encanamento, fazer a informação fluir

  • o valor do lado esquerdo do pipe vira argumento para a função do lado direito e assim por diante

  • Atalho: CTRL + SHIFT + M

6- O que é uma função?

  • Função: uma palavra que, no código, dá um comando ao computador.
  • Ela é escrita seguida de parênteses.
  • Nos parênteses incluímos os atributos (inputs).
  • O output vai ser a informação que o computador retorna após rodar a função.

(pense nela como um verbo!)

6.1- Função no Excel



Versão no Excel

6.2- Função no R


altura_carol <- 1.54
altura_lucas <- 1.89
altura_fernando <- 1.69
altura_media <- mean(c(altura_carol, altura_lucas, altura_fernando))
altura_media
[1] 1.706667


  • mean = função para calcular a média
  • argumentos = informações que vão entre parênteses para indicar o que a função deve fazer
  • c() = para criar um vetor (uma lista com mais de um item a ser aplicado no cálculo)

7- O que é um pacote de R?

  • Conjunto de funções úteis pra determinada análise.

  • Eles são disponibilizados em repositórios. Os dois principais repositórios são o CRAN e o GitHub.

  • Os pacotes são instalados apenas uma vez e devem ser carregados sempre que queremos utilizá-los.

7.1 - Instalar e carregar pacotes

  • Para instalar um pacote que está no CRAN, usamos a função install.packages:

    install.packages(“tidyverse”)

  • Caso o pacote esteja no GitHub, é possível fazer a instalação via função install_github do pacote devtools:

    install.packages(“devtools”)

    devtools::install_github(‘rfsaldanha/microdatasus’)

  • Para carregar o pacote usamos a função library:

    library(tidyverse)
    library(microdatasus)

8- Boas práticas (resumo)

Nome de variáveis:

  1. Não usar maiúscula, espaços ou acentos pra criar o nome
  2. Não começar o nome com um número
  3. Escolher nomes úteis e não redundantes

Código e comentários:

  1. Inserir espaços só após as vírgulas e parênteses
  2. Evite comentar demais e de menos (com a hashtag #)
  3. Use a quebra de linha para facilitar a leitura

9- Erros mais comuns!

  • Rodar uma linha de código sem ter rodado as anteriores, que fazem parte de uma “sequência” de comandos para o programa

  • Pequenos erros de digitação ao escrever o código

  • Não selecionar o trecho inteiro de código na hora de rodar

  • Dica: o pacote tidylog te dá um relatório de tudo o que ele fez, e ajuda a encontrar a origem dos erros

Tidyverse

1- O que é?

  • Um conjunto de pacotes que compartilham a mesma gramática e estrutura.

  • Quando você instala/carrega o tidyverse, todos esses pacotes vêm junto de uma vez.

  • Serve pra fazer o trabalho de análise mais rápido e fácil

2- Pacotes dentro do Tidyverse

São muitos (https://www.tidyverse.org/packages/) Os mais úteis para o DDJ são os seguintes:

  • readr: abrir arquivos (bases de dados) e salvar tabelas

  • dplyr: manipular a base (filtrar, criar colunas, agrupar, resumir, ordenar etc.)

  • stringr: arrumar textos (string) identifcando padrões (regex)

  • lubridate: ajusta datas e horas (ex: AAAA-MM-DD)

  • ggplot2: visualização de dados

  • magrittr: para usar o pipe nos seus códigos

3- ‘Verbos mágicos’ do Tidyverse

Saber poucos comandos já basta pra começar a analisar!

FUNÇÃO O QUE FAZ
select seleciona só algumas colunas da base
filter seleciona só algumas linhas da base
mutate cria colunas ou altera valores de uma coluna
group_by agrupa linhas de valores iguais em uma coluna
summarise par do group_by, cria o resumo desses grupos
arrange ordena a forma de visualizar a tabela

4- Mais ‘verbos úteis’

FUNÇÃO O QUE FAZ
read.csv abre o seu arquivo separado por vírgula
read.csv2 arquivo separado por ponto e vírgula
write.csv salva a tabela num arquivo no computador
rename renomeia uma coluna
replace* troca um valor p/ outro quando ele aparece
pivot* transforma linhas em colunas e vice-versa
bind_rows* junta as linhas de duas tabelas diferentes
str_sub* puxa só parte do valor de uma coluna

Exercícios

Observem a tabela para responder às próximas questões.

tabela alesp.csv no Google Planilhas

Pergunta 1:

Quais mulheres foram eleitas em 2022?




(Dica: é com “select” ou com “filter”?)

Código 1:

Quais mulheres foram eleitas em 2022?

library(tidyverse)

alesp <- read.csv2("data/alesp.csv",
                   fileEncoding = "Windows-1252")

sexo_feminino <- alesp |>
  filter(genero == "FEMININO")

Resposta 1:

Quais mulheres foram eleitas em 2022?

ranking nome_urna_candidato sigla_partido votos_2022 votos_2018 genero grau_instrucao cor_raca ocupacao
3 PAULA DA BANCADA FEMINISTA PSOL 259771 NA FEMININO SUPERIOR COMPLETO PRETA ADVOGADO
10 ANA CAROLINA SERRA CID 198698 NA FEMININO SUPERIOR COMPLETO BRANCA ADVOGADO
13 BRUNA FURLAN PSDB 195436 NA FEMININO SUPERIOR COMPLETO BRANCA DEPUTADO
18 CARLA MORANDO PSDB 177773 89636 FEMININO SUPERIOR COMPLETO BRANCA EMPRESÁRIO
20 EDIANE MARIA PSOL 175617 NA FEMININO LÊ E ESCREVE PRETA EMPREGADO DOMÉSTICO
21 MARTA COSTA PSD 170541 117156 FEMININO SUPERIOR COMPLETO BRANCA SERVIDOR PÚBLICO ESTADUAL
23 PROFESSORA BEBEL PT 155983 87169 FEMININO SUPERIOR COMPLETO BRANCA DEPUTADO
30 VALERIA BOLSONARO PL 131557 54519 FEMININO SUPERIOR COMPLETO BRANCA DEPUTADO
39 MARCIA LIA PT 108587 63751 FEMININO SUPERIOR COMPLETO BRANCA DEPUTADO
41 MONICA DO MOVIMENTO PRETAS PSOL 106781 149844 FEMININO SUPERIOR COMPLETO PRETA JORNALISTA E REDATOR
50 THAINARA FARIA PT 91388 NA FEMININO SUPERIOR COMPLETO PRETA VEREADOR
53 LECI BRANDÃO PCdoB 90496 64487 FEMININO ENSINO MÉDIO COMPLETO PRETA CANTOR E COMPOSITOR
55 ANALICE FERNANDES PSDB 90135 110089 FEMININO SUPERIOR COMPLETO BRANCA ENFERMEIRO
56 ANDRÉA WERNER PSB 88820 NA FEMININO SUPERIOR COMPLETO BRANCA JORNALISTA E REDATOR
60 MARINA HELOU REDE 85517 39839 FEMININO SUPERIOR COMPLETO BRANCA DEPUTADO
63 EDNA MACEDO REP 82932 84144 FEMININO ENSINO MÉDIO COMPLETO BRANCA DEPUTADO
67 SOLANGE FREITAS UNIÃO 81870 NA FEMININO SUPERIOR COMPLETO BRANCA JORNALISTA E REDATOR
69 DANI ALONSO PL 80337 NA FEMININO SUPERIOR COMPLETO BRANCA EMPRESÁRIO
70 ANA PERUGINI PT 79061 NA FEMININO SUPERIOR COMPLETO BRANCA SERVENTUÁRIO DE JUSTIÇA
79 DELEGADA GRACIELA PL 68955 63089 FEMININO SUPERIOR COMPLETO BRANCA DEPUTADO
80 LETÍCIA AGUIAR PP 68556 60909 FEMININO SUPERIOR INCOMPLETO BRANCA OUTROS
81 MARIA LUCIA AMARY PSDB 66956 70743 FEMININO SUPERIOR COMPLETO BRANCA DEPUTADO
82 FABIANA B. PL 65497 NA FEMININO SUPERIOR COMPLETO PARDA EMPRESÁRIO
83 BETH SAHÃO PT 65407 54900 FEMININO SUPERIOR COMPLETO BRANCA OUTROS
87 CLARICE GANEM PODE 59342 NA FEMININO SUPERIOR COMPLETO BRANCA ADMINISTRADOR

Pergunta 2:

Qual foi a média de votos em 2022 por raça?

Código 2:

Qual foi a média de votos em 2022 por raça?

media_raca <- alesp |>
  group_by(cor_raca) |> 
  summarise(media_votos = mean(votos_2022))

Resposta 2:

Qual foi a média de votos em 2022 por raça?

cor_raca media_votos
BRANCA 125135.7
PARDA 105330.0
PRETA 129313.1

Pergunta 3:

Qual é o ranking de votos totais por partido em 2022?

Código 3:

Qual é o ranking de votos totais por partido em 2022?

votos_partidos <- alesp |>  
  group_by(sigla_partido) |>  
  summarise(total_votos = sum(votos_2022)) |> 
  arrange(desc(total_votos))

Resposta 3:

Qual é o ranking de votos totais por partido em 2022?

sigla_partido total_votos
PL 2659415
PT 2572961
PSDB 1063131
REP 929898
UNIÃO 891227
PSOL 864074
PSD 488167
MDB 424436
PP 353342
PODE 320828
CID 275608
PSB 244817
PSC 123592
NOVO 90688
PCdoB 90496
REDE 85517
PDT 85195
SD 58707

Pergunta 4:

Qual deputado reeleito ganhou mais votos de 2018 para 2022?

Código 4:

Qual deputado reeleito ganhou mais votos de 2018 para 2022?

deputados <- alesp |>  
  filter(!is.na(votos_2018)) |>  
  group_by(nome_urna_candidato) |>  
  summarise(total_votos_2018 = sum(votos_2018),
            total_votos_2022 = sum(votos_2022)) |> 
  mutate(variacao_votos = total_votos_2022 - total_votos_2018,
         pct_variacao_votos = ( variacao_votos * 100 ) / total_votos_2018) |> 
  arrange(desc(pct_variacao_votos))

Resposta 4:

Qual deputado reeleito ganhou mais votos de 2018 para 2022?

nome_urna_candidato total_votos_2018 total_votos_2022 variacao_votos pct_variacao_votos
TENENTE COIMBRA 24109 209705 185596 769.8203990
AGENTE FEDERAL DANILO BALAS 38661 94552 55891 144.5668762
VALERIA BOLSONARO 54519 131557 77038 141.3048662
EMÍDIO DE SOUZA 65898 157834 91936 139.5125800
MARCOS DAMASIO 81695 183219 101524 124.2719873
MARCIO NAKASHIMA 38081 85195 47114 123.7204905
ITAMAR BORGES 82185 183480 101295 123.2524183
MARINA HELOU 39839 85517 45678 114.6564924
CARLA MORANDO 89636 177773 88137 98.3276808
VINICIUS CAMARINHA 65441 123316 57875 88.4384407
MILTON LEITE FILHO 105492 198429 92937 88.0986236
PROFESSORA BEBEL 87169 155983 68814 78.9432023
ANDRÉ DO PRADO 123313 216268 92955 75.3813467
MAJOR MECCA 131531 224462 92931 70.6533061
MARCIA LIA 63751 108587 44836 70.3298772
THIAGO AURICCHIO 73435 123483 50048 68.1527882
LUIZ FERNANDO 85271 141017 55746 65.3750982
CAPITÃO CONTE LOPES 116806 192454 75648 64.7637964
ENIO TATTO 86744 142785 56041 64.6050447
RAFAEL SILVA 71992 118182 46190 64.1599067
ROGÉRIO NOGUEIRA 89040 139756 50716 56.9586703
CARLOS CEZAR 115566 180690 65124 56.3522143
MARTA COSTA 117156 170541 53385 45.5674485
CARLÃO PIGNATARI 74006 105245 31239 42.2114423
LECI BRANDÃO 64487 90496 26009 40.3321600
SEBASTIÃO SANTOS 75280 104374 29094 38.6477152
PAULO FIORILO 80430 110251 29821 37.0769613
PAULO CORRÊA JR 46438 62239 15801 34.0260132
DR. JORGE DO CARMO 61751 82054 20303 32.8788198
CARLOS GIANNAZI 218705 276811 58106 26.5682083
DELEGADO OLIM 161569 201348 39779 24.6204408
MAURO BRAGATO 65475 78142 12667 19.3463154
BETH SAHÃO 54900 65407 10507 19.1384335
BARBA 91394 108071 16677 18.2473685
RICARDO MADALENA 77554 90630 13076 16.8605101
GILMACI SANTOS 82678 96361 13683 16.5497472
ALTAIR MORAES 86230 98515 12285 14.2467819
LETÍCIA AGUIAR 60909 68556 7647 12.5547949
DELEGADA GRACIELA 63089 68955 5866 9.2979759
LEO OLIVEIRA 76703 82145 5442 7.0948985
JORGE WILSON XERIFE CONSUMIDOR 177414 177614 200 0.1127307
RODRIGO MORAES 75845 75094 -751 -0.9901773
BARROS MUNHOZ 87494 86372 -1122 -1.2823736
EDNA MACEDO 84144 82932 -1212 -1.4403879
CARUSO 83758 82209 -1549 -1.8493756
RAFA ZIMBALDI 80789 76910 -3879 -4.8013962
EDMIR CHEDID 135991 129097 -6894 -5.0694531
MARIA LUCIA AMARY 70743 66956 -3787 -5.3531798
GIL DINIZ 214037 196215 -17822 -8.3265977
DANIEL SOARES 97330 81753 -15577 -16.0043152
ANALICE FERNANDES 110089 90135 -19954 -18.1253350
MONICA DO MOVIMENTO PRETAS 149844 106781 -43063 -28.7385548
CAIO FRANÇA 162166 105173 -56993 -35.1448516
ALEX DE MADUREIRA 118294 74340 -43954 -37.1565760

Hora de abrir o R!