2
Introdução ao [R]
Este arquivo é um R Markdown Notebook. Uma das formas de exibição de resultados em [R] e um padrão muito utilizado para Storytelling de Dados.
Este curso tem por objetivo apresentar os conceitos introdutórios para uso e aprendizagem da linguagem R.
Os tipos de dados no R muitas vezes também são chamados de Estruturas de R. As estruturas em R são os modos como os diferentes tipos de variáveis podem ser arranjadas para otimizar a manipulação das mesmas e a atribuição de atividades computacionais sobre as mesmas.
Vetores são os arranjos de dados mais fundamentais do R, vetores são arrays de elemtos (componentes) de mesmo tipo.
meu_vetor = c (1,5,6)
meu_vetor
## [1] 1 5 6
class(meu_vetor)
## [1] "numeric"
outro_vetor = c (1,5,"a")
outro_vetor
## [1] "1" "5" "a"
class(outro_vetor)
## [1] "character"
Podemos verificar o elemento meu_vetor 1, 5, 6, assim como seu tipo numeric.
Um vetor pode conter um vetor de caracteres de qualquer tipo:
sul = c("Porto Alegre", "RS", "Curitiba", "PR", "Florianópolis", "SC")
Os dados de um vetor podem ser recuperados por sua posição:
sul[1]
## [1] "Porto Alegre"
sul[2]
## [1] "RS"
paste("A capidal do", sul[2], "é", sul[1], sep = " " )
## [1] "A capidal do RS é Porto Alegre"
Vetores numéricos são as mesmas estruturas de vetores, com a facilidade adicional de poderem ser criados utilizando sintaxes numéricas, tais como atribuição de sequencias, intervallos, cálculos, etc.
Sequências:
sequencia1 = seq(10,30)
sequencia1
## [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
sequencia2 = 10:30
sequencia2
## [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Sequência com passos:
sequencia3 = seq(10, 30, 2)
sequencia3
## [1] 10 12 14 16 18 20 22 24 26 28 30
Replicação de vetores:
original = c(1, 3 , 5)
original
## [1] 1 3 5
repeticao1 = rep(original, 3)
repeticao1
## [1] 1 3 5 1 3 5 1 3 5
n = c(3,5,7)
repeticao2 = rep(original, n)
repeticao2
## [1] 1 1 1 3 3 3 3 3 5 5 5 5 5 5 5
O conceito de matriz é o mesmo aplicado no estudo matemático de matrizes, em que as matrizes são objetos de dimensão m*n contendo dados do mesmo tipo. Assim como os vetores numéricos, as matrizes podem ser criadas utilizando atribuições dentro de lógicas computacionais como a criação de uma matriz 5x4 com valores de 5 a 100, com passo de 5:
matriz_numerica = seq(5, 100, 5)
matriz_numerica
## [1] 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95
## [20] 100
dim(matriz_numerica) = c(5,4)
matriz_numerica
## [,1] [,2] [,3] [,4]
## [1,] 5 30 55 80
## [2,] 10 35 60 85
## [3,] 15 40 65 90
## [4,] 20 45 70 95
## [5,] 25 50 75 100
Uma vez criada uma matriz, as operações com matrizes podem ser realizadas, como a transposta, obtida pela função t():
t(matriz_numerica)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 5 10 15 20 25
## [2,] 30 35 40 45 50
## [3,] 55 60 65 70 75
## [4,] 80 85 90 95 100
Uma maneira mais prática de criar matrizes é pela função matriz() que recebe como parametros os valoes e a dimensão da mesma:
matriz = matrix(seq(5, 100, 5), nrow = 5)
matriz
## [,1] [,2] [,3] [,4]
## [1,] 5 30 55 80
## [2,] 10 35 60 85
## [3,] 15 40 65 90
## [4,] 20 45 70 95
## [5,] 25 50 75 100
Por default a função matrix() preenche os valores da matriz coluna a coluna, para contornar isso, pode ser utilizado o parâmetro byrow, passando o valor T = true que gera am atriz por linhas:
matriz = matrix(seq(5, 100, 5), nrow = 5, byrow = T)
matriz
## [,1] [,2] [,3] [,4]
## [1,] 5 10 15 20
## [2,] 25 30 35 40
## [3,] 45 50 55 60
## [4,] 65 70 75 80
## [5,] 85 90 95 100
Recuperando um componente específico da matriz passando posição linhaxcoluna:
matriz[3,2]
## [1] 50
Dados retangulares são os conjuntos de dados que estamos habituados a manipular diárimente por meio de tabelas, planilhas eletrônicas, bancos de dados, etc. Podem ser entendidos como dados retangulares todo conjunto de dados constituidos dentro de um arranjo de linhas e colunas. Assim podemos possuir conjuntos retangulares em que todos valores são de mesmo tipo como no caso de matrizes, ou mesmo conjuntos retangulares com valores de tipos variádos como em tabelas e planilhas, onde as linhas representam as unidades de análise e as colunas seus atributos.
Tipos de dados são os mais variados indo de json a formatos NoSQL.
library(RJSONIO)
modelo = fromJSON("data/modelo.json")
modelo
## $name
## [1] "Customer"
##
## $description
## [1] "A Customer model representing our customers."
##
## $base
## [1] "User"
##
## $idInjection
## [1] FALSE
##
## $strict
## [1] TRUE
##
## $options
## named list()
##
## $properties
## named list()
##
## $hidden
## $hidden[[1]]
## NULL
##
##
## $validations
## $validations[[1]]
## NULL
##
##
## $relations
## named list()
##
## $acls
## $acls[[1]]
## NULL
##
##
## $scopes
## named list()
##
## $indexes
## named list()
##
## $methods
## $methods[[1]]
## NULL
##
##
## $http
## path
## "/foo/mypath"
pessoa = fromJSON("data/pessoa.json")
pessoa
## $ID
## [1] "1" "2" "3" "4" "5" "6" "7" "8"
##
## $Name
## [1] "Rick" "Dan" "Michelle" "Ryan" "Gary" "Nina" "Simon"
## [8] "Guru"
##
## $Salary
## [1] "623.3" "515.2" "611" "729" "843.25" "578" "632.8" "722.5"
##
## $StartDate
## [1] "1/1/2012" "9/23/2013" "11/15/2014" "5/11/2014" "3/27/2015"
## [6] "5/21/2013" "7/30/2013" "6/17/2014"
##
## $Dept
## [1] "IT" "Operations" "IT" "HR" "Finance"
## [6] "IT" "Operations" "Finance"
Tais dados a depender da estruturação, podem ser transformados em dados tabulares, por meio de
acidentes2016 = read.csv("data/acidentes-2016.csv", header = T, sep = ";")
head(acidentes2016)
## ID LONGITUDE LATITUDE LOG1 LOG2
## 1 623243 -51.23386 -30.08521 R ARAPEI R COMANDAI
## 2 622413 -51.23195 -30.10831 R PADRE JOAO BATISTA REUS R JOAO MORA
## 3 622460 -51.21203 -30.04587 AV DO LAMI
## 4 622540 -51.18561 -30.03446 AV DR NILO PECANHA R CARLOS TREIN FILHO
## 5 622181 -51.09736 -30.13143 ESTR JOAO DE OLIVEIRA REMIAO
## 6 622232 -51.22502 -30.04690 AV IPIRANGA
## PREDIAL1 LOCAL TIPO_ACID LOCAL_VIA
## 1 0 Cruzamento ATROPELAMENTO R ARAPEI & R COMANDAI
## 2 0 Cruzamento ABALROAMENTO R PADRE JOAO BATISTA REUS & R JOAO MORA
## 3 0 Logradouro ATROPELAMENTO AV DO LAMI
## 4 0 Cruzamento CHOQUE AV DR NILO PECANHA & R CARLOS TREIN FILHO
## 5 8487 Logradouro CHOQUE 8487 ESTR JOAO DE OLIVEIRA REMIAO
## 6 320 Logradouro COLISAO 320 AV IPIRANGA
## QUEDA_ARR DATA DATA_HORA DIA_SEM HORA FERIDOS FERIDOS_GR
## 1 0 2016-01-01 2016-01-01T14:30:00 SEXTA-FEIRA 14:30 1 0
## 2 0 2016-01-01 2016-01-01T16:45:00 SEXTA-FEIRA 16:45 0 0
## 3 0 2016-01-01 2016-01-01T16:30:00 SEXTA-FEIRA 16:30 1 0
## 4 0 2016-01-01 2016-01-01T05:45:00 SEXTA-FEIRA 05:45 0 0
## 5 0 2016-01-01 2016-01-01T12:00:00 SEXTA-FEIRA 12:00 0 0
## 6 0 2016-01-02 2016-01-02T15:35:00 SABADO 15:35 0 0
## MORTES MORTE_POST FATAIS AUTO TAXI LOTACAO ONIBUS_URB ONIBUS_MET ONIBUS_INT
## 1 0 0 0 1 0 0 0 0 0
## 2 0 0 0 2 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0 0
## 4 0 0 0 1 0 0 0 0 0
## 5 0 1 1 1 0 0 0 0 0
## 6 0 0 0 1 0 0 0 0 1
## CAMINHAO MOTO CARROCA BICICLETA OUTRO TEMPO NOITE_DIA FONTE BOLETIM
## 1 0 0 0 0 0 BOM DIA DEPTRAN 56416
## 2 0 0 0 0 0 NUBLADO DIA EPTC 294286
## 3 0 1 0 0 0 BOM DIA DEPTRAN 13316
## 4 0 0 0 0 0 BOM NOITE EPTC 291292
## 5 0 0 0 0 0 BOM DIA DEPTRAN 216
## 6 0 0 0 0 0 BOM DIA DDT 10031116
## REGIAO DIA MES ANO FX_HORA CONT_ACID CONT_VIT UPS CONSORCIO CORREDOR
## 1 SUL 1 1 2016 14 1 1 5 0
## 2 SUL 1 1 2016 16 1 0 1 0
## 3 CENTRO 1 1 2016 16 1 1 5 0
## 4 LESTE 1 1 2016 5 1 0 1 0
## 5 LESTE 1 1 2016 12 1 1 13 0
## 6 CENTRO 2 1 2016 15 1 0 1 0
dim(acidentes2016)
## [1] 12515 44
length(acidentes2016$ID)
## [1] 12515
names(acidentes2016)
## [1] "ID" "LONGITUDE" "LATITUDE" "LOG1" "LOG2"
## [6] "PREDIAL1" "LOCAL" "TIPO_ACID" "LOCAL_VIA" "QUEDA_ARR"
## [11] "DATA" "DATA_HORA" "DIA_SEM" "HORA" "FERIDOS"
## [16] "FERIDOS_GR" "MORTES" "MORTE_POST" "FATAIS" "AUTO"
## [21] "TAXI" "LOTACAO" "ONIBUS_URB" "ONIBUS_MET" "ONIBUS_INT"
## [26] "CAMINHAO" "MOTO" "CARROCA" "BICICLETA" "OUTRO"
## [31] "TEMPO" "NOITE_DIA" "FONTE" "BOLETIM" "REGIAO"
## [36] "DIA" "MES" "ANO" "FX_HORA" "CONT_ACID"
## [41] "CONT_VIT" "UPS" "CONSORCIO" "CORREDOR"
acidentes2016[1,]
## ID LONGITUDE LATITUDE LOG1 LOG2 PREDIAL1 LOCAL
## 1 623243 -51.23386 -30.08521 R ARAPEI R COMANDAI 0 Cruzamento
## TIPO_ACID LOCAL_VIA QUEDA_ARR DATA DATA_HORA
## 1 ATROPELAMENTO R ARAPEI & R COMANDAI 0 2016-01-01 2016-01-01T14:30:00
## DIA_SEM HORA FERIDOS FERIDOS_GR MORTES MORTE_POST FATAIS AUTO TAXI
## 1 SEXTA-FEIRA 14:30 1 0 0 0 0 1 0
## LOTACAO ONIBUS_URB ONIBUS_MET ONIBUS_INT CAMINHAO MOTO CARROCA BICICLETA
## 1 0 0 0 0 0 0 0 0
## OUTRO TEMPO NOITE_DIA FONTE BOLETIM REGIAO DIA MES ANO FX_HORA CONT_ACID
## 1 0 BOM DIA DEPTRAN 56416 SUL 1 1 2016 14 1
## CONT_VIT UPS CONSORCIO CORREDOR
## 1 1 5 0
acidentes2016[1,11]
## [1] 2016-01-01
## 366 Levels: 2016-01-01 2016-01-02 2016-01-03 2016-01-04 ... 2016-12-31
acidentes2016[20:30,11]
## [1] 2016-01-03 2016-01-03 2016-01-03 2016-01-03 2016-01-03 2016-01-03
## [7] 2016-01-03 2016-01-03 2016-01-03 2016-01-03 2016-01-03
## 366 Levels: 2016-01-01 2016-01-02 2016-01-03 2016-01-04 ... 2016-12-31
table(acidentes2016$CONSORCIO)
##
## CARRIS
## 11740 182
## CARRIS - CARRIS CONORTE
## 1 21
## MAIS (LOTE 6) MAIS (LOTE 6) - CARRIS - MAIS (
## 63 1
## MOB (LOTE 1) MOB (LOTE 2)
## 125 64
## N?O INFORMADO STS
## 13 22
## UNIBUS VIA LESTE (LOTE 5)
## 19 76
## VIA LESTE (LOTE 5) - MOB (LOTE VIA LESTE (LOTE 5) - VIA LESTE
## 1 1
## VIVA SUL (LOTE 3) VIVA SUL (LOTE 3) - CARRIS
## 104 1
## VIVA SUL (LOTE 4)
## 81
table(acidentes2016$FATAIS, acidentes2016$AUTO)
##
## 0 1 2 3 4 5 7
## 0 1389 5364 5033 550 86 4 1
## 1 36 41 6 0 1 0 0
## 2 0 3 1 0 0 0 0
table(acidentes2016$TIPO_ACID, acidentes2016$AUTO)
##
## 0 1 2 3 4 5 7
## ABALROAMENTO 429 3129 2509 98 15 3 0
## ATROPELAMENTO 411 449 10 0 0 0 0
## CAPOTAGEM 4 22 9 1 0 0 0
## CHOQUE 88 493 345 69 11 1 0
## COLISAO 146 1205 2153 381 61 0 1
## EVENTUAL 37 82 12 1 0 0 0
## INCENDIO 1 4 0 0 0 0 0
## QUEDA 308 18 0 0 0 0 0
## TOMBAMENTO 1 6 2 0 0 0 0
acidentes2019 = library(foreign)
acidentes = read.dbf("data/acidentes.dbf")
head(acidentes)
## ID LONGITUDE LATITUDE LOG1 LOG2 PREDIAL1
## 1 660953 0 0 AV ASSIS BRASIL <NA> 6699
## 2 660956 0 0 R DR BARROS CASSAL <NA> 411
## 3 660959 0 0 AV FABIO ARAUJO SANTOS <NA> 1500
## 4 660962 0 0 AV IPIRANGA <NA> 8799
## 5 660963 0 0 AV ASSIS BRASIL <NA> 164
## 6 661175 0 0 AV IPIRANGA R SAO MANOEL 0
## LOCAL TIPO_ACID LOCAL_VIA QUEDA_ARR DATA
## 1 Logradouro ABALROAMENTO 6699 AV ASSIS BRASIL 0 2019-01-01
## 2 Logradouro ABALROAMENTO 411 R DR BARROS CASSAL 0 2019-01-01
## 3 Logradouro CHOQUE 1500 AV FABIO ARAUJO SANTOS 0 2019-01-01
## 4 Logradouro COLISAO 8799 AV IPIRANGA 0 2019-01-01
## 5 Logradouro ABALROAMENTO 164 AV ASSIS BRASIL 0 2019-01-01
## 6 Cruzamento ABALROAMENTO AV IPIRANGA & R SAO MANOEL 0 2019-01-01
## DIA_SEM HORA FERIDOS FERIDOS_GR MORTES MORTE_POST FATAIS AUTO TAXI
## 1 TERCA-FEIRA 02:45 1 0 0 0 0 3 0
## 2 TERCA-FEIRA 07:36 1 0 0 0 0 2 0
## 3 TERCA-FEIRA 16:50 4 0 0 0 0 1 0
## 4 TERCA-FEIRA 19:00 5 0 0 0 0 3 0
## 5 TERCA-FEIRA 22:15 1 0 0 0 0 1 0
## 6 TERCA-FEIRA 04:10 0 0 0 0 0 2 0
## LOTACAO ONIBUS_URB ONIBUS_MET ONIBUS_INT CAMINHAO MOTO CARROCA BICICLETA
## 1 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0
## 5 0 0 0 0 0 1 0 0
## 6 0 0 0 0 0 0 0 0
## OUTRO TEMPO NOITE_DIA FONTE BOLETIM REGIAO DIA MES ANO FX_HORA CONT_ACID
## 1 0 BOM NOITE DEPTRAN 000219 NORTE 1 1 2019 2 1
## 2 0 BOM DIA DEPTRAN 000519 CENTRO 1 1 2019 7 1
## 3 0 BOM DIA DEPTRAN 000919 SUL 1 1 2019 16 1
## 4 0 BOM NOITE DEPTRAN 001119 LESTE 1 1 2019 19 1
## 5 0 BOM NOITE DEPTRAN 001219 NORTE 1 1 2019 22 1
## 6 0 BOM NOITE EPTC 230995 LESTE 1 1 2019 4 1
## CONT_VIT UPS CONSORCIO CORREDOR
## 1 1 5 <NA> 0
## 2 1 5 <NA> 0
## 3 1 5 <NA> 0
## 4 1 5 <NA> 0
## 5 1 5 <NA> 0
## 6 0 1 <NA> 0
table(acidentes$TIPO_ACID)
##
## ABALROAMENTO ATROPELAMENTO CAPOTAGEM CHOQUE COLISAO
## 4077 526 30 615 2280
## EVENTUAL INCENDIO QUEDA TOMBAMENTO
## 118 3 214 15
table(acidentes$TIPO_ACID, acidentes$FATAIS)
##
## 0 1 2
## ABALROAMENTO 4068 9 0
## ATROPELAMENTO 502 24 0
## CAPOTAGEM 29 1 0
## CHOQUE 608 6 1
## COLISAO 2273 6 1
## EVENTUAL 118 0 0
## INCENDIO 3 0 0
## QUEDA 213 1 0
## TOMBAMENTO 15 0 0
table(acidentes$TIPO_ACID, acidentes$REGIAO)
##
## CENTRO LESTE NAO IDENTIFICADO NORTE SUL
## ABALROAMENTO 779 1131 3 1265 899
## ATROPELAMENTO 94 128 1 171 132
## CAPOTAGEM 4 15 0 1 10
## CHOQUE 94 215 0 154 152
## COLISAO 371 758 0 627 524
## EVENTUAL 18 34 0 36 30
## INCENDIO 0 2 0 1 0
## QUEDA 27 49 1 68 69
## TOMBAMENTO 0 6 0 4 5
table(acidentes$REGIAO, acidentes$NOITE_DIA)
##
## DIA NOITE
## CENTRO 993 393
## LESTE 1765 573
## NAO IDENTIFICADO 4 1
## NORTE 1734 591
## SUL 1307 512
acid_regiao = table(acidentes$REGIAO, acidentes$NOITE_DIA)
prop.table(acid_regiao, margin = 1)
##
## DIA NOITE
## CENTRO 0.7164502 0.2835498
## LESTE 0.7549187 0.2450813
## NAO IDENTIFICADO 0.8000000 0.2000000
## NORTE 0.7458065 0.2541935
## SUL 0.7185267 0.2814733
prop.table(acid_regiao, margin = 2)
##
## DIA NOITE
## CENTRO 0.1711183870 0.1898550725
## LESTE 0.3041530243 0.2768115942
## NAO IDENTIFICADO 0.0006892986 0.0004830918
## NORTE 0.2988109598 0.2855072464
## SUL 0.2252283302 0.2473429952
round(prop.table(acid_regiao, margin = 1)*100, 2)
##
## DIA NOITE
## CENTRO 71.65 28.35
## LESTE 75.49 24.51
## NAO IDENTIFICADO 80.00 20.00
## NORTE 74.58 25.42
## SUL 71.85 28.15
round(prop.table(acid_regiao, margin = 2)*100, 2)
##
## DIA NOITE
## CENTRO 17.11 18.99
## LESTE 30.42 27.68
## NAO IDENTIFICADO 0.07 0.05
## NORTE 29.88 28.55
## SUL 22.52 24.73
library(xlsx)
excel = read.xlsx(file = "data/geo_google_api.xlsx", header = T, sheetIndex = 1)
head(excel)
## NA. lat long accuracy
## 1 1 -29.9930694 -51.1277254 street_address
## 2 2 -30.0291398 -51.2173594 premise
## 3 3 -30.0957798 -51.2217337 premise
## 4 4 -30.0626225 -51.15133 street_address
## 5 5 -30.0062468 -51.1842183 street_address
## 6 6 -30.0430998 -51.203983 intersection
## formatted_address
## 1 Av. Assis Brasil, 6699 - Sarandi, Porto Alegre - RS, 91010-004, Brazil
## 2 R. Dr. Barros Cassal, 411 - Independência, Porto Alegre - RS, 90035-072, Brazil
## 3 Av. Fábio Araújo Santos, 1500 - Nonoai, Porto Alegre - RS, 91720-390, Brazil
## 4 Av. Ipiranga, 8799 - Praia de Belas, Porto Alegre - RS, 90160-092, Brazil
## 5 Av. Assis Brasil, 164 - São João, Porto Alegre - RS, 91010-001, Brazil
## 6 Av. Ipiranga & R. São Manoel - Santa Cecilia, Porto Alegre - RS, 90160-091, Brazil
## address_type status index ID LONGITUDE LATITUDE
## 1 street_address OK 1 660953 0 0
## 2 premise OK 2 660956 0 0
## 3 premise OK 3 660959 0 0
## 4 street_address OK 4 660962 0 0
## 5 street_address OK 5 660963 0 0
## 6 intersection OK 6 661175 0 0
## LOG1 LOG2 PREDIAL1 LOCAL
## 1 AV ASSIS BRASIL 6699 Porto Alegre <NA> 6699 Logradouro
## 2 R DR BARROS CASSAL 411 Porto Alegre <NA> 411 Logradouro
## 3 AV FABIO ARAUJO SANTOS 1500 Porto Alegre <NA> 1500 Logradouro
## 4 AV IPIRANGA 8799 Porto Alegre <NA> 8799 Logradouro
## 5 AV ASSIS BRASIL 164 Porto Alegre <NA> 164 Logradouro
## 6 AV IPIRANGA and R SAO MANOEL 0 Porto Alegre R SAO MANOEL 0 Cruzamento
## TIPO_ACID LOCAL_VIA QUEDA_ARR DATA DIA_SEM
## 1 ABALROAMENTO 6699 AV ASSIS BRASIL 0 2019-01-01 TERCA-FEIRA
## 2 ABALROAMENTO 411 R DR BARROS CASSAL 0 2019-01-01 TERCA-FEIRA
## 3 CHOQUE 1500 AV FABIO ARAUJO SANTOS 0 2019-01-01 TERCA-FEIRA
## 4 COLISAO 8799 AV IPIRANGA 0 2019-01-01 TERCA-FEIRA
## 5 ABALROAMENTO 164 AV ASSIS BRASIL 0 2019-01-01 TERCA-FEIRA
## 6 ABALROAMENTO AV IPIRANGA & R SAO MANOEL 0 2019-01-01 TERCA-FEIRA
## HORA FERIDOS FERIDOS_GR MORTES MORTE_POST FATAIS AUTO TAXI LOTACAO
## 1 02:45 1 0 0 0 0 3 0 0
## 2 07:36 1 0 0 0 0 2 0 0
## 3 16:50 4 0 0 0 0 1 0 0
## 4 19:00 5 0 0 0 0 3 0 0
## 5 22:15 1 0 0 0 0 1 0 0
## 6 04:10 0 0 0 0 0 2 0 0
## ONIBUS_URB ONIBUS_MET ONIBUS_INT CAMINHAO MOTO CARROCA BICICLETA OUTRO TEMPO
## 1 0 0 0 0 0 0 0 0 BOM
## 2 0 0 0 0 0 0 0 0 BOM
## 3 0 0 0 0 0 0 0 0 BOM
## 4 0 0 0 0 0 0 0 0 BOM
## 5 0 0 0 0 1 0 0 0 BOM
## 6 0 0 0 0 0 0 0 0 BOM
## NOITE_DIA FONTE BOLETIM REGIAO DIA MES ANO FX_HORA CONT_ACID CONT_VIT UPS
## 1 NOITE DEPTRAN 000219 NORTE 1 1 2019 2 1 1 5
## 2 DIA DEPTRAN 000519 CENTRO 1 1 2019 7 1 1 5
## 3 DIA DEPTRAN 000919 SUL 1 1 2019 16 1 1 5
## 4 NOITE DEPTRAN 001119 LESTE 1 1 2019 19 1 1 5
## 5 NOITE DEPTRAN 001219 NORTE 1 1 2019 22 1 1 5
## 6 NOITE EPTC 230995 LESTE 1 1 2019 4 1 0 1
## CONSORCIO CORREDOR
## 1 <NA> 0
## 2 <NA> 0
## 3 <NA> 0
## 4 <NA> 0
## 5 <NA> 0
## 6 <NA> 0
#install.packages("XML")
library(XML)
library(methods)
empregados <- xmlParse(file = "data/dep_pessoal.xml")
empregados
## <?xml version="1.0"?>
## <RECORDS>
## <EMPLOYEE>
## <ID>1</ID>
## <NAME>Rick</NAME>
## <SALARY>623.3</SALARY>
## <STARTDATE>1/1/2012</STARTDATE>
## <DEPT>IT</DEPT>
## </EMPLOYEE>
## <EMPLOYEE>
## <ID>2</ID>
## <NAME>Dan</NAME>
## <SALARY>515.2</SALARY>
## <STARTDATE>9/23/2013</STARTDATE>
## <DEPT>Operations</DEPT>
## </EMPLOYEE>
## <EMPLOYEE>
## <ID>3</ID>
## <NAME>Michelle</NAME>
## <SALARY>611</SALARY>
## <STARTDATE>11/15/2014</STARTDATE>
## <DEPT>IT</DEPT>
## </EMPLOYEE>
## <EMPLOYEE>
## <ID>4</ID>
## <NAME>Ryan</NAME>
## <SALARY>729</SALARY>
## <STARTDATE>5/11/2014</STARTDATE>
## <DEPT>HR</DEPT>
## </EMPLOYEE>
## <EMPLOYEE>
## <ID>5</ID>
## <NAME>Gary</NAME>
## <SALARY>843.25</SALARY>
## <STARTDATE>3/27/2015</STARTDATE>
## <DEPT>Finance</DEPT>
## </EMPLOYEE>
## <EMPLOYEE>
## <ID>6</ID>
## <NAME>Nina</NAME>
## <SALARY>578</SALARY>
## <STARTDATE>5/21/2013</STARTDATE>
## <DEPT>IT</DEPT>
## </EMPLOYEE>
## <EMPLOYEE>
## <ID>7</ID>
## <NAME>Simon</NAME>
## <SALARY>632.8</SALARY>
## <STARTDATE>7/30/2013</STARTDATE>
## <DEPT>Operations</DEPT>
## </EMPLOYEE>
## <EMPLOYEE>
## <ID>8</ID>
## <NAME>Guru</NAME>
## <SALARY>722.5</SALARY>
## <STARTDATE>6/17/2014</STARTDATE>
## <DEPT>Finance</DEPT>
## </EMPLOYEE>
## </RECORDS>
##
empregados <- xmlToDataFrame("data/dep_pessoal.xml")
empregados
## ID NAME SALARY STARTDATE DEPT
## 1 1 Rick 623.3 1/1/2012 IT
## 2 2 Dan 515.2 9/23/2013 Operations
## 3 3 Michelle 611 11/15/2014 IT
## 4 4 Ryan 729 5/11/2014 HR
## 5 5 Gary 843.25 3/27/2015 Finance
## 6 6 Nina 578 5/21/2013 IT
## 7 7 Simon 632.8 7/30/2013 Operations
## 8 8 Guru 722.5 6/17/2014 Finance
library(tibble)
library(httr)
library(rvest)
## Loading required package: xml2
##
## Attaching package: 'rvest'
## The following object is masked from 'package:XML':
##
## xml
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(lubridate)
##
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
##
## date
library(stringr)
library(purrr)
##
## Attaching package: 'purrr'
## The following object is masked from 'package:rvest':
##
## pluck
ano <- 2018
cdg_url <- sprintf('http://www.chancedegol.com.br/br%02d.htm', ano - 2000)
cdg_html <- cdg_url %>%
httr::GET() %>%
httr::content('text', encoding = 'latin1') %>%
xml2::read_html() %>%
rvest::html_node('table')
cores <- cdg_html %>%
html_nodes(xpath = '//font[@color="#FF0000"]') %>%
html_text()
cdg_data <- cdg_html %>%
html_table(header = TRUE) %>%
setNames(c('dt_jogo', 'mandante', 'placar', 'visitante',
'p_mandante', 'p_empate', 'p_visitante')) %>%
mutate(p_vitorioso = cores) %>%
as_tibble() %>%
mutate(result = 'OK')
cdg_ano <- function(ano) {
cdg_url <- sprintf('http://www.chancedegol.com.br/br%02d.htm', ano - 2000)
cdg_html <- cdg_url %>%
GET() %>%
content('text', encoding = 'latin1') %>%
read_html() %>%
html_node('table')
cores <- cdg_html %>%
html_nodes(xpath = '//font[@color="#FF0000"]') %>%
html_text()
cdg_data <- cdg_html %>%
html_table(header = TRUE) %>%
setNames(c('dt_jogo', 'mandante', 'placar', 'visitante',
'p_mandante', 'p_empate', 'p_visitante')) %>%
mutate(p_vitorioso = cores) %>%
as_tibble() %>%
mutate(result = 'OK')
cdg_data
}
cdg_anos <- function(anos) {
cdg_ano_safe <- failwith(tibble(result = 'erro'), cdg_ano)
anos %>%
setNames(anos) %>%
purrr::map_df(cdg_ano_safe, .id = 'ano')
}
d_cdg <- cdg_anos(c(2017, 2018))
## Warning: Deprecated: please use `purrr::possibly()` instead
d_cdg
## # A tibble: 760 x 10
## ano dt_jogo mandante placar visitante p_mandante p_empate p_visitante
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 2017 13/05/… Flamengo 1x1 Atlético… 56.0 % 21.9 % 22.0 %
## 2 2017 13/05/… Corinth… 1x1 Chapecoe… 47.9 % 29.9 % 22.1 %
## 3 2017 14/05/… Bahia 6x2 Atlético… 54.8 % 32.4 % 12.8 %
## 4 2017 14/05/… Flumine… 3x2 Santos 40.6 % 23.8 % 35.7 %
## 5 2017 14/05/… Palmeir… 4x0 Vasco 70.1 % 21.5 % 8.4 %
## 6 2017 14/05/… Cruzeiro 1x0 São Paulo 50.9 % 23.9 % 25.1 %
## 7 2017 14/05/… Grêmio 2x0 Botafogo 53.9 % 25.2 % 21.0 %
## 8 2017 14/05/… Ponte P… 4x0 Sport 51.3 % 23.1 % 25.6 %
## 9 2017 14/05/… Avaí 0x0 Vitória 39.2 % 27.6 % 33.2 %
## 10 2017 15/05/… Coritiba 4x1 Atlético… 49.4 % 27.2 % 23.4 %
## # … with 750 more rows, and 2 more variables: p_vitorioso <chr>, result <chr>
link <- 'http://www2.sabesp.com.br/mananciais/DivulgacaoSiteSabesp.aspx'
txt <- GET(link)
# tipo pode ser "#__VIEWSTATE" ou "#__EVENTVALIDATION"
pegar_tags <- function(req, tipo) {
req %>%
content('text') %>%
read_html() %>%
html_node(tipo) %>%
html_attr('value')
}
# exemplo
viewstate <- pegar_tags(txt, "#__VIEWSTATE")
eventval <- pegar_tags(txt, "#__EVENTVALIDATION")
sabesp_dados <- function(data, vs, ev) {
data <- as.Date(data)
dados <- list(cmbDia = lubridate::day(data),
cmbMes = lubridate::month(data),
cmbAno = lubridate::year(data),
Imagebutton1.x = '0',
Imagebutton1.y = '0',
'__VIEWSTATE' = vs,
'__EVENTVALIDATION' = ev,
'__VIEWSTATEENCRYPTED' = '')
}
# exemplo
data <- '2017-02-14'
form <- sabesp_dados(data, viewstate, eventval)
# requisicao de busca
result <- POST(link, body = form)
result
## Response [http://www2.sabesp.com.br/mananciais/DivulgacaoSiteSabesp.aspx]
## Date: 2019-11-25 11:12
## Status: 200
## Content-Type: text/html; charset=utf-8
## Size: 43.2 kB
##
##
## <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3...
## <html xmlns="http://www.w3.org/1999/xhtml">
## <head><title>
## Divulgação Informações Mananciais
## </title><link href="estilos.css" rel="stylesheet" type="text/css" /><link hre...
## <!--[if lte IE 8]>
## <script language="javascript" type="text/javascript" src="./flot/exca...
## <![endif]-->
## ...
sabesp_nm_sistemas <- function(r) {
nomes <- r %>%
content('text') %>%
read_html() %>%
html_nodes('img') %>%
html_attr('src') %>%
keep(~str_detect(.x, '\\.gif$')) %>%
map_chr(~str_match(.x, '/(.+)\\.gif')[, 2])
}
sabesp_conteudo <- function(r) {
nomes <- sabesp_nm_sistemas(r)
r %>%
content('text') %>%
read_html() %>%
html_node('#tabDados') %>%
html_table(fill = TRUE) %>%
select(titulo = X1, info = X2) %>%
filter(titulo != '') %>%
mutate(lugar = rep(nomes, each = 4)) %>% #View
mutate(info = info %>%
str_extract('[-0-9, %m]+$') %>%
str_replace_all('^[^:]+:', '') %>%
str_replace_all(',', '.') %>%
str_replace_all('[^0-9.]', '') %>%
as.numeric()) %>%
as_tibble()
}
# exemplo
sabesp_conteudo(result)
## # A tibble: 24 x 3
## titulo info lugar
## <chr> <dbl> <chr>
## 1 índice armazenado 62.5 sistemaCantareira
## 2 pluviometria do dia 0 sistemaCantareira
## 3 pluviometria acumulada no mês 50.1 sistemaCantareira
## 4 pluviometria média histórica do mês 203. sistemaCantareira
## 5 índice armazenado 53.9 sistemaAltoTiete
## 6 pluviometria do dia 0 sistemaAltoTiete
## 7 pluviometria acumulada no mês 54 sistemaAltoTiete
## 8 pluviometria média histórica do mês 195. sistemaAltoTiete
## 9 índice armazenado 78.9 sistemaGuarapiranga
## 10 pluviometria do dia 3.4 sistemaGuarapiranga
## # … with 14 more rows
sabesp_dia <- function(data) {
link <- 'http://www2.sabesp.com.br/mananciais/DivulgacaoSiteSabesp.aspx'
txt <- GET(link)
viewstate <- pegar_tags(txt, "#__VIEWSTATE")
eventval <- pegar_tags(txt, "#__EVENTVALIDATION")
form <- sabesp_dados(data, viewstate, eventval)
result <- POST(link, body = form)
d_res <- sabesp_conteudo(result) %>%
mutate(result = 'OK')
return(d_res)
}
# exemplo
sabesp_dia('2017-02-14')
## # A tibble: 24 x 4
## titulo info lugar result
## <chr> <dbl> <chr> <chr>
## 1 índice armazenado 62.5 sistemaCantareira OK
## 2 pluviometria do dia 0 sistemaCantareira OK
## 3 pluviometria acumulada no mês 50.1 sistemaCantareira OK
## 4 pluviometria média histórica do mês 203. sistemaCantareira OK
## 5 índice armazenado 53.9 sistemaAltoTiete OK
## 6 pluviometria do dia 0 sistemaAltoTiete OK
## 7 pluviometria acumulada no mês 54 sistemaAltoTiete OK
## 8 pluviometria média histórica do mês 195. sistemaAltoTiete OK
## 9 índice armazenado 78.9 sistemaGuarapiranga OK
## 10 pluviometria do dia 3.4 sistemaGuarapiranga OK
## # … with 14 more rows
sabesp_dias <- function(datas) {
sabesp_dia_safe <- failwith(tibble(result = 'erro'), sabesp_dia)
datas %>%
setNames(as.character(datas)) %>%
purrr::map_df(sabesp_dia_safe, .id = 'data')
}
# exemplo
dts <- as.Date('2017-02-14') - lubridate::days(0:13 * 30)
d_sabesp <- sabesp_dias(dts)
## Warning: Deprecated: please use `purrr::possibly()` instead
d_sabesp
## # A tibble: 336 x 5
## data titulo info lugar result
## <chr> <chr> <dbl> <chr> <chr>
## 1 2017-02-14 índice armazenado 62.5 sistemaCantareira OK
## 2 2017-02-14 pluviometria do dia 0 sistemaCantareira OK
## 3 2017-02-14 pluviometria acumulada no mês 50.1 sistemaCantareira OK
## 4 2017-02-14 pluviometria média histórica do m… 203. sistemaCantareira OK
## 5 2017-02-14 índice armazenado 53.9 sistemaAltoTiete OK
## 6 2017-02-14 pluviometria do dia 0 sistemaAltoTiete OK
## 7 2017-02-14 pluviometria acumulada no mês 54 sistemaAltoTiete OK
## 8 2017-02-14 pluviometria média histórica do m… 195. sistemaAltoTiete OK
## 9 2017-02-14 índice armazenado 78.9 sistemaGuarapiran… OK
## 10 2017-02-14 pluviometria do dia 3.4 sistemaGuarapiran… OK
## # … with 326 more rows
library(ggplot2)
d_sabesp %>%
filter(titulo == 'índice armazenado') %>%
mutate(data = ymd(data)) %>%
ggplot(aes(x = data, y = info, colour = lugar)) +
geom_line() +
theme_bw()