All Posts By

Fernando da Silva

Coleta e tratamento de dados eleitorais

By | Data Science

Hoje inauguramos uma série de exercícios temáticos sobre as Eleições de 2022, trazendo dados, análises e códigos sobre esse tema polêmico. De início, exploramos os dados disponíveis, verificando formas de acesso e análises que podem ser feitas, utilizando a linguagem R. Como exemplo, hoje analisamos a estratégia de redes sociais dos candidatos/partidos com os dados do TSE.

Aviso: dados e análises aqui apresentadas não refletem apoio político do autor ou da empresa Análise Macro.

Dados

Existem vários conjuntos de dados disponíveis, estruturados ou não, sobre a temática eleição e política aqui no Brasil. Para colocar em números, somente no TSE existem mais de 130 datasets até a data de hoje. Em geral, você encontra estruturas de dados do tipo microdados e séries temporais. Abaixo listamos alguns exemplos de datasets disponíveis, por fonte:

  • Portal de Dados Abertos do TSE:
    • Candidatos: informações sobre os candidatos nas eleições (desde 1933), como perfil, cargo concorrido, partido, declarações de bens, etc;
    • Resultados: informações sobre os resultados das eleições (desde 1933), em termos de votação, boletim da urna, da seção eleitoral, etc;
    • Pesquisas eleitorais: informações sobre pesquisas eleitorais (desde 2012), como questionários, notas fiscais, plano amostral, metodologia, etc;
    • Eleitorado: informações sobre os eleitores nas eleições (desde 1994), como perfil, domicílio eleitoral, grau de escolaridade, gênero, etc.
  • Poder 360: pesquisas eleitorais da empresa Poder360;
  • CEPESP Data: dados do TSE tratados e disponibilizados de forma integrada, com indicadores analíticos e aplicativos web para consulta e interação.

Formas de acesso

O acesso aos conjuntos de dados sobre a temática de eleições pode ser feito por diferentes meios, a depender da forma de disponibilização (arquivos de download, API, etc.). Usando as linguagens R ou Python destacam-se algumas opções:

  • Base dos Dados: projeto colaborativo que disponibiliza um banco de dados estruturado com tabelas tratadas, podendo ser consultadas através de pacotes/bibliotecas no R, Python, SQL, etc;
  • Portal de Dados Abertos do TSE: arquivos brutos (geralmente compactados como .zip), organizados por tema e ano, podendo ser importados e tratados em um ambiente de programação através de links de download;
  • Pacote {electionsBR} no R: oferece funções para coleta e tratamento automatizado dos dados do TSE, simplificando e economizando várias linhas de código.

Neste exercício vamos mostrar como "beber diretamente da fonte", ou seja, vamos coletar e tratar os dados brutos do TSE diretamente de seu Portal. Essa opção tem como vantagem a maior flexibilidade de escolha de quais dados serão alvo de análise, assim como quais tratamentos serão aplicados, possibilitando analisar dados novos/recém lançados ou que ainda não estão disponíveis nas outras opções.

Exemplo no R

Como exemplo didático, neste exercício vamos mostrar como acessar os dados eleitorais do TSE limitando o escopo a apenas dois conjuntos de dados:

  • Candidatos: traz informações sobre o cargo do candidato, nome, número, partido, coligação, situação do registro de candidatura, gênero, escolaridade, a unidade eleitoral (abrangência territorial), prestação de contas, chave para cruzamento com outras tabelas do TSE e etc;
  • Redes sociais dos candidatos: traz informações da chave de identificação do candidato para cruzamento com outras tabelas do TSE e sobre as redes sociais (links) de campanha declaradas pelo candidato.

Conforme mencionado, os conjuntos de dados são organizados por ano da eleição, portanto focaremos na eleição deste ano (2022). Por ser a eleição atual, vale dizer que a maioria dos cadastros dos candidatos ainda está em situação de "cadastro" na data de hoje (10 de agosto de 2022), ainda esperando o julgamento da Justiça Eleitoral para serem alterados para "apto" ou "inapto". Portanto, recomendamos cuidado e atenção ao analisar os dados, além de sempre consultar a documentação das tabelas no arquivo de "LEIA ME" que é disponibilizado em conjunto aos dados.

O Portal de Dados do TSE pode ser acessado pelo link: https://dadosabertos.tse.jus.br/

Agora vamos aos códigos!

primeiro passo é localizar no Portal do TSE o(s) link(s) para o(s) conjunto(s) de dados de interesse. Em nosso exemplo, as tabelas de Candidatos e de Redes sociais estão organizadas dentro do dataset "Candidatos - 2022", onde encontramos os links abaixo para os arquivos compactados (.zip) que possuem os CSVs para importação. Partindo do princípio de que você não gosta de procedimentos manuais, o segundo passo é utilizar uma função de download apontando os links identificados para automatizar a extração dos dados, conforme abaixo:

Com o código acima nós utilizamos o poder do R para facilmente acessar o Portal do TSE e baixar os arquivos dos conjuntos de dados de interesse para o computador. Note que o código salva tudo em uma pasta "data" no diretório atual de trabalho do R. Em seguida, o terceiro passo é descompactar os arquivos .zip baixados para disponibilizar os arquivos CSV para importação (quarto passo). Para importar os dados é necessário especificar a codificação de caracteres do arquivo, que neste caso é "Latin-1". O código abaixo faz isso de maneira automatizada:

Por fim, cruzamos as duas tabelas utilizando a chave interna do TSE — variável SQ_CANDIDATO, não é o número de campanha do candidato —, de modo a possibilitar a análise dos dados em uma única tabela com as variáveis de interesse:

Análises

A parte (nem tanto) difícil já passou e agora que você tem os dados em mãos fica mais fácil analisá-los, ainda mais ao utilizar os pacotes do {tidyverse} no R. Diversas análises podem ser feitas com estes dados: no exemplo abaixo relacionamos as principais redes sociais cadastradas pelos candidatos, apresentando o quantitativo de candidatos em cada rede (note que um mesmo candidato pode cadastrar mais de uma rede social para campanha política):

Códigos de replicação deste exercício estão disponíveis para membros do Clube AM.

Podemos notar que a maioria dos candidatos tem como estratégia de campanha o uso de redes sociais "consagradas", como o Facebook e Instagram. Podemos fazer essa mesma análise em termos mais desagregados, olhando no nível estadual:

O mapa mostra um padrão interessante e, ao mesmo tempo, curioso: as redes sociais Facebook e Instagram predominam na estratégia de campanha da maioria dos candidatos e "dividem" o país meio a meio. Por fim, apresentamos dados sumarizados sobre as redes sociais dos candidatos a nível de partido na tabela abaixo:

Saiba mais

Para saber mais sobre dados eleitorais, R, programação e análise de dados faça parte do Clube AM e confira o curso de Microdados Brasileiros, onde tratamos de dados eleitorais e vários outros.

Códigos de replicação deste exercício estão disponíveis para membros do Clube AM.

Na próxima semana analisaremos o efeito das eleições sobre os preços de ações de empresas estatais brasileiras, não perca!

{tidyverts}: séries temporais no R

By | Data Science

{tidyverts} é uma família de pacotes de R criada para ser a próxima geração de ferramentas para modelagem e previsão de séries temporais, substituindo o famoso pacote {forecast}.

Utilizando uma interface simples e integrada com os pacotes do tidyverse, é possível construir uma ampla gama de modelos de previsão univariados e multivariados: ARIMA, VAR, suavização exponencial via espaço de estado (ETS), modelo linear (TSLM), autorregressivo (AR), passeio aleatório (RW), autoregressão de rede neural (NNETAR), Prophet, etc.

Neste exercício, daremos uma breve introdução aplicada a modelagem e previsão de séries temporais usando os pacotes do {tidyverts}.

Conhecendo os pacotes

Um breve resumo do que a família de pacotes do {tidyverts} tem a oferecer:

fable

  • Coleção de modelos univariados e multivariados de previsão
  • Modelagem de séries temporais em formato "tidy"
  • Especificação de modelos utiliza terminologia de fórmula (y ~ x)

fabletools

  • Extensões e ferramentas para construção de modelos
  • Combinação de modelos, previsão hierárquica e extração de resultados
  • Obtenção de medidas de acurácia e visualização de dados

feasts

  • Decomposição de séries temporais
  • Extração e visualização de componentes de séries temporais
  • Análise de autocorrelação, testes de raiz unitária, etc.

tsibble

  • Estrutura de dados tidy para séries temporais no R
  • Funções para tratamento de dados
  • Objeto orientado aos dados e a modelos, integrado ao tidyverse

Fluxo de trabalho para previsão

Com o tidyverts o processo de construir um modelo de previsão pode ser dividido em poucos passos:

Com esse esquema em mente, vamos ilustrar esse processo com um exercício prático e didático: construir um modelo de previsão para a taxa de crescimento do PIB brasileiro.

Pacotes

Para reproduzir o exercício a seguir você precisará dos seguintes pacotes:

Dados tidy

Utilizaremos o dataset global_economy armazenado como um objeto tsibble, trazendo variáveis econômicas em frequência anual para diversos países. Nosso interesse é a série da taxa de crescimento do PIB brasileiro:

Visualização de dados

Visualização é uma etapa essencial para entender os dados, o que permite identificar padrões e modelos apropriados. No nosso exemplo, criamos um gráfico de linha para plotar a série do PIB brasileiro usando a função autoplot():

Podemos também plotar os correlogramas ACF e PACF para identificar o processo estocástico da série, obtendo alguns modelos candidatos:

Especificação do modelo

Existem muitos modelos de séries temporais diferentes que podem ser usados para previsão, e especificar um modelo apropriado para os dados é essencial para produzir previsões.

Os modelos no framework do fable são especificados usando funções com nomenclatura abreviada do nome do modelo (por exemplo, ARIMA(), AR(), VAR(), etc.), cada uma usando uma interface de fórmula (y ~ x). As variáveis de resposta são especificadas à esquerda da fórmula e a estrutura do modelo é escrita à direita.

Por exemplo, um modelo ARIMA(1,0,2) para a taxa de crescimento do PIB pode ser especificado com: ARIMA(Growth ~ pdq(1, 0, 2)).

Neste caso, a variável resposta é Growth e está sendo modelada usando a estrutura de um modelo ARMA(1, 2) especificada na função especial pdq().

Existem diversas funções especiais para definir a estrutura do modelo e em ambos os lados da fórmula pode ser aplicado transformações. Consulte detalhes da documentação do fable.

Estimar o modelo

Identificado um modelo (ou mais) apropriado, podemos em seguida fazer a estimação usando a função model()1.Neste exemplo, estimaremos os seguintes modelos: ARIMA(1,0,2), ARIMA(1,0,0), ARIMA(0,0,2), o algoritmo de seleção automatizada do auto ARIMA criado pelo prof. Rob Hyndman e um passeio aleatório.

Diagnóstico do modelo

O objeto resultante é uma "tabela de modelo" ou mable, com a saída de cada modelo em cada coluna:

Para obter os critérios de informação use a função glance():

Os critérios de informação indicam que, dos modelos estimados, o modelo automatizado ARIMA(1,1,1) apresentou o menor valor de AICc - seguido pelos demais identificados pelos correlogramas ACF e PACF. Com a função gg_tsresiduals() podemos verificar o comportamento dos resíduos deste modelo, indicando que os resíduos se comportam como ruído branco:

Um teste de autocorrelação (Ljung Box) retorna um p-valor grande, também indicando que os resíduos são ruído branco:

Também pode ser interessante visualizar o ajuste do modelo. Utilize a função augment() para obter os valores estimados:

Previsão

Com o modelo escolhido, previsões podem ser geradas com a função forecast() indicando um horizonte de escolha.

Perceba que os pontos de previsão médios gerados são bastante similares a um processo de passeio aleatório (equivalente a um ARIMA(0,1,0)). O trabalho adicional de especificar termos AR e MA trouxe pouca diferença para os pontos de previsão neste exemplo, apesar de ser perceptível que os intervalos de confiança do modelo auto ARIMA são mais estreitos do que de um passeio aleatório.

Além disso, a previsão fora da amostra gerada ficou bastante aquém dos dados reais para a taxa de crescimento do PIB brasileiro observados no horizonte em questão, configurando apenas um exercício didático.

Saiba mais

Estes são apenas alguns dos recursos e ferramentas disponíveis na família de pacotes do tidyverts. Para uma referência aprofundada, confira o livro Forecasting: Principles and Practice, 3rd Edition, de Hyndman e Athanasopoulos (2021).

Aprenda com maior profundidade sobre sobre os temas abordados nos cursos de Séries Temporais e de Previsão Macro. Faça parte do Clube AM para acesso completo aos códigos de R e Python deste e de outros exercícios.

Confira outros exercícios aplicados com pacotes do tidyverts:

 


[1] A função suporta estimação dos modelos com computação paralela usando o pacote future, veja detalhes na documentação e este post para saber mais sobre o tema.

 

 

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais
e conteúdos exclusivos sobre Análise de Dados!

Assinar Gratuitamente