Este documento relata os critérios utilizados para definição do período de análise dos dados de radiação solar incidente. Foram utilizados dados de 2000 a 2015 de 37 estações automáticas (EMAs) do Estado do Rio Grande do Sul, os dados foram fornecidos do Instituto Nacional de Meteorologia (INMET). Primeiramente será mostrado a distribuição das estações por todo o Estado, sua localização e as estações mais próximas.
Carregando pacotes necessários.
# vetor com nome dos pacotes a serem usados
pcks <- c("magrittr", "plyr", "dplyr", "tidyr", "doBy" # manipulação de dados
,"lubridate", "stringr" # manipulação de datas e strings
,"psych" # resumo estatístico dos dados
,"openair" # gráficos
,"rworldmap", "TeachingDemos", "ReadImages", "ggmap", "mapproj", "ggplot2" # mapas
, "sp", "rgeos", "FNN", "spatstat", "spdep", "RANN", "geosphere" #para as distancias
# ,"XLConnect" # ler arquivos xls e xlsx
,"RCurl" # download de arquivo da internet
,"raster")
# looping para carregar cada pacote
invisible(
sapply(X = pcks
,FUN = require
,character.only = TRUE
,quietly = TRUE)
)Os dados são armazenados usando o Tempo Universal Coordenado UTC. Portanto, podemos definir esse horário como padrão nessa sessão do R. Assim qualquer conversão ou operação com datas e horários usando objetos POSIX serão realizadas em UTC.
# definindo globalmente tz = "UTC"
Sys.setenv(TZ = "UTC")# informações das EMA
state <- "RS"
info_file <- gsub("EE", state, "../output/data_inmet_SUL_2000_2015_RS_acosta.rds")
info <- readRDS(file = info_file)
glimpse(info)## Observations: 2,806,728
## Variables: 19
## $ site (chr) "A801", "A801", "A801", "A801", "A801", "A801", "A801", ...
## $ date (time) 2000-09-22 00:00:00, 2000-09-22 01:00:00, 2000-09-22 02...
## $ tair (dbl) NA, NA, NA, NA, 15.5, 15.3, 15.1, 14.8, 14.5, 14.4, 14.4...
## $ td (dbl) NA, NA, NA, NA, 14.6, 14.5, 14.1, 13.9, 13.5, 11.9, 12.1...
## $ tmax (dbl) NA, NA, NA, NA, 15.6, 15.6, 15.4, 15.1, 14.8, 14.7, 14.7...
## $ tdmax (dbl) NA, NA, NA, NA, 14.8, 14.6, 14.5, 14.1, 13.9, 13.5, 12.1...
## $ tmin (dbl) NA, NA, NA, NA, 15.5, 15.3, 15.1, 14.8, 14.5, 14.3, 14.2...
## $ tdmin (dbl) NA, NA, NA, NA, 14.6, 14.5, 14.1, 13.9, 13.5, 11.9, 11.5...
## $ rh (dbl) NA, NA, NA, NA, 94, 95, 94, 95, 94, 85, 86, 84, 76, 62, ...
## $ rhmax (dbl) NA, NA, NA, NA, 95, 95, 95, 95, 95, 94, 86, 85, 84, 74, ...
## $ rhmin (dbl) NA, NA, NA, NA, 94, 94, 94, 93, 94, 83, 82, 83, 73, 58, ...
## $ prec (dbl) NA, NA, NA, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ p (dbl) NA, NA, NA, NA, 1013.9, 1014.4, 1013.8, 1013.6, 1014.2, ...
## $ pmax (dbl) NA, NA, NA, NA, 1014.2, 1014.7, 1014.7, 1014.0, 1014.2, ...
## $ pmin (dbl) NA, NA, NA, NA, 1013.2, 1012.2, 1013.6, 1012.7, 1012.8, ...
## $ rg (dbl) NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 16.944444, 141.1...
## $ wd (dbl) NA, NA, NA, NA, 231, 255, 245, 246, 239, 177, 217, 166, ...
## $ wsmax (dbl) NA, NA, NA, NA, 4.4, 4.2, 4.1, 3.9, 3.3, 6.7, 7.6, 5.3, ...
## $ ws (dbl) NA, NA, NA, NA, 1.2, 2.2, 1.9, 1.5, 1.7, 1.7, 1.8, 2.2, ...
#criação de um dataframe com o código da estação, cidade e localização
estacoes_localiz <- data.frame(site = c("A801", "A802", "A803", "A805", "A808", "A809", "A810", "A811", "A812", "A813", "A826", "A827", "A828", "A829", "A830", "A831", "A832", "A833", "A834", "A836", "A837", "A838", "A839", "A840", "A844", "A852", "A853", "A854", "A856", "A878", "A879", "A880", "A881", "A882", "A883", "A884", "A899"),
cidade = c("Porto Alegre", "Rio Grande", "Santa Maria", "Santo Augusto", "Torres", "Uruguaiana", "Santa Rosa", "Canguçu", "Caçapava do Sul", "Rio Pardo", "Alegrete", "Bagé", "Erechim", "São José dos Ausentes", "São Borja", "Quarai", "São Gabriel", "Santiago", "Tramandaí", "Jaguarão", "Soledade", "Camaquã", "Passo Fundo", "Bento Gonçalves", "Lagoa Vermelha", "São Luiz Gonzaga", "Cruz Alta", "Frederico Westphalen", "Palmeira das Missões", "Mostardas", "Canela", "Vacaria", "Dom Pedrito", "Teutonia", "Ibiruba", "Campo Bom", "Chuí"),
latitude = c(-30.05, -32.07, -29.72, -27.85, -29.35, -29.83, -27.89, -31.43, -30.54, -29.87, -29.70, -31.34, -27.65, -28.74, -28.65, -30.36, -30.34, -29.19, -30.01, -32.53, -28.85, -30.80, -28.22, -29.16, -28.22, -28.41, -28.60, -27.39, -27.92, -31.24, -29.36, -28.51, -30.99, -29.45, -28.65, -29.67, -33.74),
longitude = c(-51.17, -52.16, -53.72, -53.79, -49.73, -57.08, -54.48, -52.70, -53.46, -52.38, -55.52, -54.01, -52.30, -50.05, -56.01, -56.43, -54.31, -54.88, -50.13, -53.37, -52.54, -51.83, -52.40, -51.53, -51.51, -54.96, -53.67, -53.42, -53.91, -50.90, -50.82, -50.88, -54.81, -51.82, -53.11, -51.06, -53.37))
#para visualizar
#estacoes_localiz
#para saber a descrição do arquivo data.frame criado anteriormente
str(estacoes_localiz)## 'data.frame': 37 obs. of 4 variables:
## $ site : Factor w/ 37 levels "A801","A802",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ cidade : Factor w/ 37 levels "Alegrete","Bagé",..: 20 22 24 27 34 36 25 8 4 23 ...
## $ latitude : num -30.1 -32.1 -29.7 -27.9 -29.4 ...
## $ longitude: num -51.2 -52.2 -53.7 -53.8 -49.7 ...
#selecionando os dados de latitude e longitude para localização das EMAs
long_lat <- list(x = estacoes_localiz[,"longitude"], y = estacoes_localiz[,"latitude"])
#colocando mapa a partir de mapaz do google
long <- estacoes_localiz[,"longitude"]
lat <- estacoes_localiz[,"latitude"]
long_lat <- list(long, lat)
map <- get_map(location = c(lon = -53.72589463, lat = -29.7232836), zoom = 6)
#para viasualizar apenas o mapa/área que foi aproximado
#ggmap(map)
ggmap(map)+geom_point(aes(x = long, y = lat), data = data.frame(x=estacoes_localiz$longitude,y=estacoes_localiz$latitude),
alpha = .5, color="darkred", size = 2)Para verificar a qualidade dos dados de prec é importante verificar a sua ocorrência na vizinhança da estação. Para isso podemos usar n (n = 5) estações mais próximas daquela de interesse. Portanto precisamos calcular as distâncias entre as estações.
# Funcao para calcular as n estações mais próximas
# para uma dada tabela com coordendas das emas
lat <- estacoes_localiz[,"latitude"]
long <- estacoes_localiz[,"longitude"]
#criando uma matriz com as longitudes e latitudes
long_lat3 <- cbind(long, lat)
nndist(long,lat, k=5)## [1] 0.9990495 1.9888187 1.2753431 1.0499524 1.4241138 2.5492156 1.1720068
## [8] 1.3130880 1.2709445 1.2233152 1.4063072 1.3511847 1.2868955 1.3729530
## [15] 1.7083618 1.9420093 1.2835108 1.2835108 1.2725172 1.9920341 1.0565037
## [22] 1.3121738 1.2808200 0.9402127 1.2073939 1.2971122 1.1211155 1.2355566
## [29] 1.0830051 1.5781318 0.9479451 1.1738824 1.6736188 0.9372300 1.0830051
## [36] 0.9902020 3.1042068
#encontrando as estações mais próximas
#a resposta aqui nos dará a primeira coluna da própria estação, pois tecnicamente ela mesmo é a mais próxima
#e mais outras 5 colunas mostrando as 5 estações mais próximas
#na ssegunda parte desta resposta temos a distância entre as estações
nn <- get.knnx(long_lat3, query = long_lat3, k=6)
#também podemos encontrar as estações mais próximas dessa forma
closest <- nn2(data=long_lat3, k=6)[[1]]
#para visualizar
#closest
#criando tabela com as estações(site), localidade(cidade), estação mais próximas(nn[1]) e distância entre elas
#(nn[2])
#Estação mais próxima = P.nn.index.
#Distância entre as estações = D.nn.dist.
tab_est <- data.frame(Site = estacoes_localiz$site,
Cidade = estacoes_localiz$cidade,
P = nn[1],
D = nn[2])
#para visualizar
#tab_est
#head(tab_est)
#organizando a tabela intercalando a tabela da distância
tab_est2 <- tab_est[, c(1,2, 4, 10, 5, 11, 6, 12, 7, 13, 8, 14)]
head(tab_est2)## Site Cidade P.nn.index.2 D.nn.dist.2 P.nn.index.3 D.nn.dist.3
## 1 A801 Porto Alegre 36 0.3956008 31 0.7736924
## 2 A802 Rio Grande 8 0.8373769 20 1.2944883
## 3 A803 Santa Maria 17 0.8558621 9 0.8602325
## 4 A805 Santo Augusto 29 0.1389244 28 0.5903389
## 5 A808 Torres 14 0.6888396 19 0.7717513
## 6 A809 Uruguaiana 16 0.8386895 11 1.5654073
## P.nn.index.4 D.nn.dist.4 P.nn.index.5 D.nn.dist.5 P.nn.index.6
## 1 34 0.8845903 24 0.9600521 22
## 2 22 1.3121738 30 1.5088075 12
## 3 27 1.1211155 35 1.2316655 18
## 4 7 0.6911584 27 0.7595393 35
## 5 31 1.0900459 36 1.3679547 32
## 6 15 1.5928905 18 2.2912006 33
## D.nn.dist.6
## 1 0.9990495
## 2 1.9888187
## 3 1.2753431
## 4 1.0499524
## 5 1.4241138
## 6 2.5492156
#nos fornece a radiação diária de cada estação
Rdmed_io_dly2 <-
info %>%
group_by(site, month = as.Date(date)) %>%
dplyr::summarise(Rdmed_24h_obs = mean(rg, na.rm = TRUE)
)
#para vizualizar
Rdmed_io_dly2## Source: local data frame [116,947 x 3]
## Groups: site [?]
##
## site month Rdmed_24h_obs
## (chr) (date) (dbl)
## 1 A801 2000-09-22 474.7222
## 2 A801 2000-09-23 450.3241
## 3 A801 2000-09-24 155.5128
## 4 A801 2000-09-25 506.0470
## 5 A801 2000-09-26 510.6410
## 6 A801 2000-09-27 488.2692
## 7 A801 2000-09-28 508.0556
## 8 A801 2000-09-29 498.4188
## 9 A801 2000-09-30 340.1068
## 10 A801 2000-10-01 256.4316
## .. ... ... ...
#nos fornece a média por estação em todo o período
Rdmed_io_dly3 <-
info %>%
group_by(site) %>%
dplyr::summarise(Rdmed_24h_obs = mean(rg, na.rm = TRUE)
)
#para visualizar
Rdmed_io_dly3## # A tibble: 37 x 2
## site Rdmed_24h_obs
## <chr> <dbl>
## 1 A801 343.0598
## 2 A802 354.4051
## 3 A803 351.4977
## 4 A805 362.3631
## 5 A808 354.4075
## 6 A809 403.2499
## 7 A810 391.3579
## 8 A811 344.6956
## 9 A812 373.8528
## 10 A813 356.1680
## # ... with 27 more rows