forked from paulofelipe/livro_intro_r
-
Notifications
You must be signed in to change notification settings - Fork 6
/
10-obtendo_dados.Rmd
executable file
·78 lines (49 loc) · 4.72 KB
/
10-obtendo_dados.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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.
## 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`.
```{r 10-obtendo-dados-1, message=FALSE, warning=FALSE}
library(jsonlite)
```
```{r 10-obtendo-dados-2, message=FALSE, echo=FALSE}
library(tidyverse)
```
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:
```{r 10-obtendo-dados-3}
hadley.rep <- jsonlite::fromJSON("https://api.github.com/users/hadley/repos")
dim(hadley.rep)
head(hadley.rep[,c('name', 'description')], 15)
```
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:
```{r 10-obtendo-dados-4}
proposicoes <- jsonlite::fromJSON("https://dadosabertos.camara.leg.br/api/v2/proposicoes")
head(proposicoes$dados %>% select(siglaTipo, numero, ano, ementa))
```
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.
## 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.
O pacote funciona da seguinte forma: Um string que contem o link é usado como input da função `read_html()`. A partir daí as funções do pacote `rvest` podem ser usadas para extrair dados da página. `html_table()`, por exemplo, extrai dados tabulares da página.
Algo que torna o Web Scraping muito complexo é que essa tarefa é muito dependente do código-fonte da página. Caso ela sofra mudanças, o código provavelmente não irá mais funcionar. Um exemplo é o que se vê neste post sobre Web Scraping do OLX, que não funciona mais.
Devido a isso, este material opta por não entrar a fundo no assunto além de mostrar um exemplo superficial abaixo de scraping de uma [tabela da Wikipedia](https://pt.wikipedia.org/wiki/Campeonato_Brasileiro_de_Futebol_de_2018_-_S%C3%A9rie_A#Classifica%C3%A7%C3%A3o):
```{r 10-obtendo-dados-5, echo=TRUE, eval=FALSE, message=FALSE, eval=FALSE}
library(rvest)
url <- "https://pt.wikipedia.org/wiki/Campeonato_Brasileiro_de_Futebol_de_2018_-_Série_A" %>%
read_html()
tb <- html_table(url, fill = TRUE)
tb <- tb[[6]]
tb %>%
as_tibble() %>%
mutate(SG = ifelse(str_detect(SG,"\\+"),
readr::parse_number(SG),
-1 * readr::parse_number(SG)))
```