8 Obtendo dados

A base da ciência de dados é, obviamente, o DADO. Portanto, é fundamental sempre ter boas fontes de dados. Se você der sorte, conseguirá dados estruturados para iniciar sua análise. Porém, eventualmente precisará recorrer a fontes de dados não estruturados ou semiestruturados.

Muito provavelmente você algum dia precisará recorrer a uma Application Programming Interface (API) de dados, ou até mesmo precisará utilizar técnicas de Web Scrapping para obter dados diretamente em um próprio site.

8.1 API

API é uma forma de comunicação de dados mais apropriada para as trocas de informações entre softwares. Normalmente APIs trocam dados em formato hierárquico. Os dois formatos hierárquicos mais comuns são Javascript Object Notation (JSON) e eXtensible Markup Language (XML).

Para obter-se e utilizar-se dados de API em R recomendamos a utilização do pacote jsonlite.

library(jsonlite)

A seguir apresentaremos alguns exemplos de APIs e seu uso. Existem diversas APIs e formas de consumi-las, portanto não iremos exaurir nesse texto todas as possibilidades de uso de APIs. O principal aqui é entender-se APIs como uma fonte rica de dados que pode ser explorada em suas análises.

No exemplo a seguir utilizamos a API do github (portal para repositórios) e veremos quais os repositórios do Hadley Wickham:

hadley.rep <- jsonlite::fromJSON("https://api.github.com/users/hadley/repos")

dim(hadley.rep)
## [1] 30 71
head(hadley.rep[,c('name', 'description')], 15)
##                     name
## 1  15-state-of-the-union
## 2      15-student-papers
## 3                  18-fp
## 4               500lines
## 5                  adv-r
## 6                appdirs
## 7             assertthat
## 8              babynames
## 9         beautiful-data
## 10                 bench
## 11                bigvis
## 12        bigvis-infovis
## 13               bizarro
## 14        boxplots-paper
## 15                 broom
##                                                                                          description
## 1                                                                                               <NA>
## 2                                              Graphics & computing student paper winners @ JSM 2015
## 3                                                                                               <NA>
## 4                                                                                  500 Lines or Less
## 5                                                                     Advanced R programming: a book
## 6  A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
## 7                                                                     User friendly assertions for R
## 8                                              An R package contain all baby names data from the SSA
## 9                                                                    Book chapter for beautiful data
## 10                                                                           Bechmarking tools for R
## 11                        Exploratory data analysis for large datasets (10-100 million observations)
## 12                       Paper describing the bigvis package and framework submitted to Infovis 2013
## 13                                                                                     Bizarro world
## 14                                                                                              <NA>
## 15                                      Convert statistical analysis objects from R into tidy format

Outro exemplo de API muito interessante é o portal de dados abertos da Câmara dos Deputados. Eles possuem diversas APIs para consultar os dados do processo legislativo. Veja o exemplo a seguir, que resgata as proposições utilizando API:

proposicoes <- jsonlite::fromJSON("https://dadosabertos.camara.leg.br/api/v2/proposicoes")

head(proposicoes$dados %>% select(siglaTipo, numero, ano, ementa))
##   siglaTipo numero  ano
## 1        PL    465 1999
## 2        PL    688 1999
## 3        PL   1070 1995
## 4        PL   1292 1995
## 5        PL   1816 1999
## 6        PL   1949 1999
##                                                                                                                                                                                                          ementa
## 1              Inclui inciso no art. 20 da Lei nº 8.036, de 11 de maio de 1990, e dá outras providências. NOVA EMENTA DA REDAÇÃO FINAL: Acrescenta inciso ao artigo 20 da Lei nº  8.036, de 11 de maio de 1990.
## 2                                                                                                                                                        Dispõe sobre o Contrato de Trabalho da Terceira Idade.
## 3                                                                                                                  Dispõe sobre crimes oriundos da divulgação de material pornográfico através de computadores.
## 4 Altera a lei nº 8.666, de 21 de junho de 1993, que regulamenta o art. 37, inciso XXI, da Constituição Federal, institui normas para licitações e contratos da Administração Pública e dá outras providências.
## 5                                                                                                                                                   Insitui o "Dia Nacional dos Agentes Comunitários de Saúde".
## 6                           Institui o contrato-padrão para a prestação dos serviços de telecomunicações, energia elétrica, gás, água e saneamento por empresas públicas ou privadas, e dá outras providências.

Hoje em dia, todas as redes sociais possuem APIs para consumir os dados dos usuários e postagens. Normalmente essas APIs pedem um cadastro anterior (apesar de gratuitas, em sua maior parte). O R possui diversos pacotes para consumir APIs interessantes:

  • Quandl: pacote que fornece diversos dados econômicos de diversos países;
  • Rfacebook: pacote que facilita o uso da API do facebook (requer cadastro prévio);
  • twitterR: pacote que facilita o uso da API do twitter (requer cadastro prévio);
  • ggmap: pacote que facilita o uso da API do google maps.

Sempre procure por APIs para obter dados que possam enriquecer suas análises.

8.2 Web Scrapping

Eventualmente você não terá dados estruturados de forma fácil e nem terá uma API com os dados que procura. Nesses casos pode ser que um próprio site da internet seja sua fonte de dados. Para isso utiliza-se técnicas chamadas de Web Scrapping.

Sites da internet são construídos utilizando-se uma linguagem que é interpretada pelos browsers: HyperText Markup Language (HTML). Esta é uma linguagem que trabalha com tags de forma hierárquica. Nesse site você pode aprender um pouco mais sobre o que é HTML: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_basic_document

Existe um pacote em R que facilita muito o cosumo de dados em HTML: rvest, criado também por Hadley Wickham. O rvest mapeia os elementos HTML (tags) de uma página web e facilita a “navegação” do R por esses nós da árvore do HTML. Veja o exemplo a seguir:

library(rvest)

html <- read_html("https://pt.wikipedia.org/wiki/Lista_de_redes_de_televis%C3%A3o_do_Brasil")

html.table <- html %>% html_nodes("table")
dados <- html.table[[1]] %>% html_table()

dados <- dados %>% 
  select(-`Lista de emissoras`)

head(dados)

Obtivemos todo o HTML da página, mapeamos os nós de tabela (table) e pegamos seu conteúdo. A partir daí, trata-se de um dataframe normal, que pode ser manipulado com o dplyr.

8.3 Exercícios

  1. Obtenha a tabela exibida em http://globoesporte.globo.com/futebol/brasileirao-serie-a/ e chegue ao seguinte resultado:

  2. Escolha um site do seu interesse e faça um dataframe com uma parte do seu conteúdo (tabelas, listas etc.).