Todo mundo que trabalha com Ciência de Dados uma hora ou outra vai se ver mexendo com informações públicas, direta ou indiretamente. O governo é um grande repositório de dados, por isso é muito provável que uma hora ou outra algum dado disponibilizado publicamente seja relevante para você.
Mesmo sendo tão importante, também é muito comum que as bases de dados públicas demandem grandes trabalhos de limpeza e organização, assim como todas as bases de dados, públicas ou não. As dificuldades quando se mexe com bases de dados públicas muitas vezes acontecem pois elas agregam informações de toda a população e, por isso, ficam muito grandes. Soma-se a isso o fato de existirem bases para os mais variados fins, o que não necessariamente otimiza o uso para quem analisará esses dados.
Para simplificar a nossa vida, o pessoal do Base dos Dados ou BD+, para quem tem intimidade, faz o hercúleo trabalho de organizar, limpar e disponibilizar mais de 900 (!!!!) bases de dados gratuitamente para toda a comunidade! Como se não bastasse, a galera do BD+ ainda construiu um pacote de R para facilitar o acesso da nossa comunidade ao seu repositório de dados.
No post de hoje, vamos explorar o pacote basedosdados
e também vamos ver como aproveitar tudo que está disponível no BigQuery
do BD+ usando a sintaxe usual do dplyr
.
O pacote basedosdados
Os dados do BD+ são dispobinibilizados em uma instância do BigQuery
, um serviço da Google Cloud Platform
que possibilita a construção de um data warehouse sem servidor, escalável e de alto desempenho. As consultas à plataforma podem ser realizados em ANSI SQL (uma linguagem de consultas segundo o padrão americano). O pacote basedosdados
oferece algumas funções auxiliares para simplificar o processo de submissão de uma query.
Antes de explorar as funções do pacote, é necessário que você crie um projeto na GCP
, pois o BigQuery
do BD+ é apenas o repositório dos dados: a execução das queries propriamente ditas é realizada e cobrada na ponta que submeteu as queries. Ou seja, tipicamente você criaria uma query para ser executada tomando como referência o BigQuery
do BD+, mas os custos de execução ficam atrelados à sua própria conta GCP
. Entretanto, isso não é motivo para preocupação: a GCP
atualmente disponibiliza gratuitamente a manipulação de 1 TB de dados/mês e o armazenamento de 100 GB para qualquer pessoa.
Para seguir os próximos passos e aprender mais sobre a GCP
acesse https://console.cloud.google.com/.
Acessando o BD+ com o pacote basedosdados
O pacote basedosdados
tem quatro funções: read_sql
, download
, set_billing_id
e get_billing_id
. Os ingredientes principais para usar essas funções são o billing_id
, que é o nome da sua conta criada na GCP
e query
, uma consulta escrita na linguagem SQL própria do BigQuery
.
No exemplo abaixo vamos baixar os PIBs de alguns anos lá da BD+
:
library(basedosdados)
# aqui você define o seu projeto billing_id
basedosdados::set_billing_id("seu_billing_id")
# aqui definimos a nossa query
query <- "SELECT
pib.id_municipio,
pop.ano,
pib.PIB / pop.populacao * 1000 as pib_per_capita
FROM `basedosdados.br_ibge_pib.municipios` as pib
JOIN `basedosdados.br_ibge_populacao.municipios` as pop
ON pib.id_municipio = pop.id_municipio
LIMIT 20 "
# aqui carregamos o arquivo para o R
pib_per_capita <- read_sql(query)
# também seria possível baixar o resultado e salvá-lo em um arquivo .csv
# download(query, "pib_per_capita.csv")
Note que, uma vez que o código foi executado, aparece uma mensagem informando uma quantidade de dados que foi consumida na sua conta. Até que o montante de dados consumido pela sua conta ultrapasse os 100TB, você não vai precisar fazer nenhum pagamento.
Acessando o BD+ com o pacote bigrquery
e dplyr
Com o pacote bigrquery
, que faz parte da iniciativa R-DBI
de integração de R e Bancos de Dados, é possível acessar uma instância BigQuery
como se acessa qualquer outra base dados e inclusive aproveitar a conveniência do pacote dbplyr
para escrever código dplyr
que será traduzido diretamente para BigQuery
.
Dê uma olhada no código abaixo, que calcula o IDEB médio por município:
library(bigrquery)
library(tidyverse)
conexao_ideb <- dbConnect(
bigrquery::bigquery(),
project = "basedosdados",
dataset = "br_inep_ideb",
billing = "seu_billing_id"
)
escola <- tbl(conexao_ideb, "escola") %>%
group_by(ano, estado_abrev, municipio) %>%
summarise(ideb = mean(ideb, na.rm = TRUE)) %>%
# até aqui foi só dplyr básico
ungroup() %>%
# a mágica acontece nesse collect!
collect()
Show de bola, né? Então vai agora apoiar a galera do BD+ pra garantir que a gente continue contando com uma iniciativa tão legal na nossa comunidade!
Gostou? Quer saber mais?
Acesse o site do BD+ e todas as suas redes sociais. Veja também a nossa live se quiser ver outros códigos parecidos com esses que montamos aqui.
Se você quiser aprender um pouco mais sobre manipulação de dados com R, dê uma olhada no nosso curso R para Ciência de Dados I e aproveite!
Caso você tenha dúvidas, entre em contato com a gente pelos comentários aqui embaixo, pelo nosso Discourse ou pelo e-mail contato@curso-r.com.