E por que no Canadá? Porque o país oferece um dos portais de dados abertos mais completos, organizados e precisos do mundo, com dados sobre quase tudo que acontece no país, desde dados sobre câncer de mama até dados sobre terremotos. Usaremos o registro histórico de terremotos usando os dados mantidos pelo Earthquakes Canada, o departamento responsável pelo assunto. A série é composta por 4 conjuntos de dados de terremotos. Cada conjunto de dados contém os terremotos agrupados por década; 1980-1989, 1990-1999, 2000-2009, 2010-2019. No entanto, o Banco de Dados Nacional de Terremotos disponibiliza dados de boletins sísmicos a partir de 1985 em diante. Para obter uma lista completa dos terremotos atuais e históricos, visite http://www.earthquakescanada.nrcan.gc.ca/.
#pacotes
#install.packages("dplyr")
#install.packages("lubridate")
#install.packages("leaflet")
#install.packages("rvest")
#Biblioteca
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(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(leaflet)
library(rvest)
library(rstatix)
##
## Attaching package: 'rstatix'
## The following object is masked from 'package:stats':
##
## filter
library(emmeans)
library(ggplot2)
library(knitr)
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
library(htmltools)
#Desativa warnings de mudanças futuras nos pacotes
options(warn = -1)
A base de dados vai ser do Canadá site oficial de dados abertos ### Especificamente estamos usando este dataset: ######https://open.canada.ca/data/en/dataset/4cedd37e-0023-41fe-8eff-bea45385e469
# Define a url e onde vamos baixar os dados no formato csv
url <- "http://ftp.maps.canada.ca/pub/nrcan_rncan/Earthquakes_Tremblement-de-terre/canadian-earthquakes_tremblements-de-terre-canadien/eqarchive-en.csv"
####Carregamos os dados a partir da web
# Carregamos os dados a partir da web
df_terremotos <- read.csv(url)
kable(head(df_terremotos))
| date | latitude | longitude | depth | magnitude | magnitude.type | place | X | X.1 |
|---|---|---|---|---|---|---|---|---|
| 1985-01-01T11:01:00+0000 | 47.000 | -66.600 | 5.0 | 1.9 | MN | 61 km E from Plaster Rock | NB | |
| 1985-01-01T12:34:37+0000 | 78.800 | -102.330 | 18.0 | 3.2 | MN | 26 km E from Isachsen | NU | |
| 1985-01-02T00:13:06+0000 | 48.880 | -122.994 | 22.5 | 1.2 | ML | 21 km SW from White Rock | BC | |
| 1985-01-02T00:56:59+0000 | 50.022 | -121.554 | 18.0 | 1.0 | ML | 56 km W from Merritt | BC | |
| 1985-01-02T05:03:03+0000 | 49.459 | -66.752 | 18.0 | 1.8 | MN | 40 km N from Cap-Chat | QC | |
| 1985-01-02T06:43:51+0000 | 50.609 | -130.344 | 10.0 | 2.8 | ML | 202 km W from Port Hardy | BC |
###Dimensões do dataset (Linhas x Colunas)
dim(df_terremotos)
## [1] 101365 9
Visualizar os dados:
View(df_terremotos)
###Análise Exploratória e Limpeza dos Dados
O dataset tem todos os dados históricos de terremotos. Vamos filtrar e retornar somente os dados de 2019. Gravaremos o resultado do filtro em outro dataset.
df_terremotos_2019 <- df_terremotos %>%
filter(year(date) == 2019)
####Dimensão do Dataset
dim(df_terremotos_2019)
## [1] 4800 9
DIminuimos a quatidade de dados
View(df_terremotos_2019)
names(df_terremotos_2019)
## [1] "date" "latitude" "longitude" "depth"
## [5] "magnitude" "magnitude.type" "place" "X"
## [9] "X.1"
df_terremotos_2019 <- df_terremotos_2019[,-c(8,9)]
###Dimensões do Dataset
dim(df_terremotos_2019)
## [1] 4800 7
Agora temos dentrodo nosso Dataset 4800 linhas e 7 colunas
###Tipos de Dados
str(df_terremotos_2019)
## 'data.frame': 4800 obs. of 7 variables:
## $ date : chr "2019-01-01T13:02:19+0000" "2019-01-02T08:48:18+0000" "2019-01-02T10:05:41+0000" "2019-01-03T05:16:01+0000" ...
## $ latitude : num 49.1 46.7 74.4 47.8 53 ...
## $ longitude : num -91.7 -76 -85.6 -69.8 -132.6 ...
## $ depth : num 2 18 18 22.5 16.3 3 18 18.9 20.4 21.9 ...
## $ magnitude : num 1.7 1.7 2.1 1.1 2 2.5 3.1 2.5 1.7 2.5 ...
## $ magnitude.type: chr "MN" "MN" "MN" "MN" ...
## $ place : chr "41 N from Atikokan" "34 N from Maniwaki" "97 W from Dundas Harbour" "CHARLEVOIX SEISMIC ZONE" ...
Ao analisar os dados de terremoto, a magnitude é uma informação relevante.
Aqui tem detalhes sobre a escala da magnitude de terremotos: http://www.geo.mtu.edu/UPSeis/magnitude.html
Vamos analisar a variável magnitude em mais detalhes:
###Tipo de Variavel
str(df_terremotos_2019$magnitude)
## num [1:4800] 1.7 1.7 2.1 1.1 2 2.5 3.1 2.5 1.7 2.5 ...
####PLotar um Histograma
hist(df_terremotos_2019$magnitude)
Do total de terremotos em 2019 podemos verificar que a grande maioria foi de magnitude 2, o que praticamente não causa danos, ainda mais se o epicentro for distante de áreas urbanas.
####Calculo estatístico
summary(df_terremotos_2019)
## date latitude longitude depth
## Length:4800 Min. :40.81 Min. :-146.45 Min. :-0.540
## Class :character 1st Qu.:48.25 1st Qu.:-132.24 1st Qu.: 0.000
## Mode :character Median :50.50 Median :-122.69 Median : 8.720
## Mean :52.84 Mean :-108.08 Mean : 9.601
## 3rd Qu.:55.35 3rd Qu.: -78.11 3rd Qu.:18.000
## Max. :82.61 Max. : -39.32 Max. :92.710
## magnitude magnitude.type place
## Min. :-1.00 Length:4800 Length:4800
## 1st Qu.: 1.60 Class :character Class :character
## Median : 2.00 Mode :character Mode :character
## Mean : 2.05
## 3rd Qu.: 2.40
## Max. : 6.70
Média e Mediana quase idênticas, indicando que essa variável segue uma distribuição normal.
Mas perceba que o valor mínimo é de -1. A escala de magnitude não considera esse valor e, portanto,
##vamos remover esses registros.
####Primeiro, vamos checar o total de registros por valor de magnitude
df_terremotos_2019 %>%
count(magnitude) %>%
head(10)
## magnitude n
## 1 -1.0 1
## 2 -0.7 1
## 3 -0.6 1
## 4 -0.5 1
## 5 -0.3 2
## 6 -0.2 1
## 7 -0.1 3
## 8 0.0 13
## 9 0.1 5
## 10 0.2 8
Temos a quantidade de registo apresentado por sua magnitude.
df_ter_2019_filtro <- df_terremotos_2019[df_terremotos_2019$magnitude > 0, ]
####Dimensões do novo Dataset
dim(df_ter_2019_filtro)
## [1] 4777 7
Para não deixar os gráficos muitos poluídos, vou remover os registros dos terremotos com magnitudes extremas. Observe que terremotos com magnitude menor que 1 e maior que 5 ocorreram poucas vezes e assim podemos retirá-los do mapa. Essa é uma escolha do analista e fique à vontade para deixar esses registros se você desejar.
df_ter_2019_filtro <- df_ter_2019_filtro[df_ter_2019_filtro$magnitude >= 1,]
df_ter_2019_filtro <- df_ter_2019_filtro[df_ter_2019_filtro$magnitude >= 5,]
####Dimensões do Dataset
dim(df_ter_2019_filtro)
## [1] 18 7
####Visualizar os Dados
head(df_ter_2019_filtro)
## date latitude longitude depth magnitude magnitude.type
## 532 2019-02-14T00:34:40+0000 50.5478 -130.2955 10 5.3 Mw
## 1182 2019-04-22T21:44:41+0000 50.0303 -130.2778 10 5.6 Mw
## 1788 2019-07-04T04:30:41+0000 51.0831 -130.7587 10 6.3 Mw
## 1798 2019-07-05T12:58:24+0000 51.0175 -130.9853 10 5.5 Mw
## 1806 2019-07-06T03:32:39+0000 48.8671 -129.4745 10 5.0 Mw
## 2567 2019-08-29T15:07:59+0000 43.5716 -127.8086 12 6.7 Mw
## place
## 532 198 km W of Port Hardy, BC
## 1182 205 km W of Port Alice, BC
## 1788 217 km SW of Bella Bella, BC. Felt
## 1798 234 km SW of Bella Bella, BC
## 1806 223 km SW of Port Alice, BC
## 2567 383 km W of Eugene, Oregon, USA
####Resumo Estatístico
summary(df_ter_2019_filtro)
## date latitude longitude depth
## Length:18 Min. :43.57 Min. :-139.8 Min. : 4.54
## Class :character 1st Qu.:50.35 1st Qu.:-137.0 1st Qu.:10.00
## Mode :character Median :50.78 Median :-130.5 Median :10.00
## Mean :53.12 Mean :-132.9 Mean :10.94
## 3rd Qu.:58.29 3rd Qu.:-130.1 3rd Qu.:10.00
## Max. :59.12 Max. :-127.8 Max. :35.00
## magnitude magnitude.type place
## Min. :5.000 Length:18 Length:18
## 1st Qu.:5.225 Class :character Class :character
## Median :5.550 Mode :character Mode :character
## Mean :5.639
## 3rd Qu.:6.075
## Max. :6.700
####Histograma
hist(df_ter_2019_filtro$magnitude)
Mudei um pouco o shape dos dados, mas isso não é problema, pois não faremos Machine Learning aqui. O principal objetivo é plotar esses dados em um mapa.
##Plot dos Dados em Mapa
E então começamos a adicionar as demais camadas
Vamos incluir pontos ao mapa, usando o dataset com os dados de terremotos em 2019 no Canadá.
# Vamos incluir pontos ao mapa, usando o dataset com os dados de terremotos em 2019 no Canadá.
?addCircleMarkers
## starting httpd help server ... done
leaflet() %>%
addTiles() %>%
addCircleMarkers(data = df_ter_2019_filtro)
## Assuming "longitude" and "latitude" are longitude and latitude, respectively
# Precisamos formatar o mapa, claro.
leaflet() %>%
addTiles() %>%
addCircleMarkers(data = df_ter_2019_filtro,
fillColor = "green",
fillOpacity = 0.8,
color = "black",
weight = 1,
radius = 3)
## Assuming "longitude" and "latitude" are longitude and latitude, respectively