Aluno: Luís Fernando Oliveira Guedes
Disciplina: Geração de Energia Elétrica
Turma: 1
Professor: Antonio Guilherme Garcia Lima, DSc.
2024-12-03
Localizada no Rio Iguaçu, no município de Saudade do Iguaçu, no Paraná, a Usina Hidrelétrica Salto Santiago está em operação desde 1980, com concessão válida até 2028. Este empreendimento utiliza um reservatório de acumulação com área de 208 km², que sustenta uma capacidade instalada de 1.420 MW, distribuída em quatro unidades geradoras de 355 MW cada, equipadas com turbinas verticais do tipo Francis. Essas turbinas passaram por um processo de modernização entre 2014 e 2017, garantindo uma operação eficiente. A usina possui uma garantia física de 733,3 MW médios para comercialização.
A Bacia do Iguaçu, localizada na região sul do Brasil, é uma das principais bacias hidrográficas do país e possui grande importância para a geração de energia elétrica. O Rio Iguaçu, que percorre mais de mil quilômetros, atravessa o estado do Paraná e conta com uma série de usinas hidrelétricas ao longo de seu curso. Essas usinas desempenham um papel essencial no suprimento energético regional e nacional, aproveitando o potencial hidráulico do rio para geração de eletricidade. Dentre as usinas situadas na bacia, destacam-se as de Baixo Iguaçu, Gov. José Richa, Salto Osório, Segredo, Foz do Areia e, especialmente, a Usina Hidrelétrica Salto Santiago.
A análise estatística é uma etapa essencial no estudo de dados hidrológicos e energéticos de usinas hidrelétricas, como Salto Santiago. Ferramentas como Box Plot, Histograma e análises de Séries Temporais são amplamente utilizadas para explorar padrões e comportamentos nos dados, proporcionando uma base sólida para a tomada de decisões. Para conduzir este estudo, a linguagem R se destaca como uma ferramenta poderosa e versátil, oferecendo recursos avançados para manipulação, visualização e modelagem de dados. A combinação dessas abordagens permite uma avaliação abrangente e detalhada, garantindo maior precisão e confiabilidade nos resultados.
O Sumário Estatístico é uma ferramenta essencial
para explorar e entender conjuntos de dados. Ele fornece informações
importantes como valores mínimos, máximos, média, mediana e quartis,
permitindo uma visão geral da distribuição dos dados. No R, a função
summary() é amplamente utilizada para gerar essas
estatísticas de forma rápida e eficiente, tanto para variáveis
individuais quanto para dataframes completos.
Um Box Plot (também chamado de diagrama de caixa) é uma ferramenta gráfica que fornece um resumo visual da distribuição de um conjunto de dados. Ele destaca informações como mediana, quartis e possíveis valores discrepantes (outliers), facilitando a comparação entre diferentes conjuntos de dados.
Um Histograma é uma ferramenta gráfica utilizada para visualizar a distribuição de um conjunto de dados numéricos. Ele agrupa os dados em intervalos (ou “bins”) e exibe a frequência de ocorrência ou a probabilidade relativa (%) de valores dentro de cada intervalo. Essa representação permite identificar padrões importantes, como a forma da distribuição (simétrica, assimétrica, unimodal, bimodal, etc.), a presença de valores extremos e a concentração de dados em determinadas faixas.
Uma Série Temporal é uma sequência de dados coletados ou registrados ao longo do tempo, geralmente em intervalos regulares (diários, mensais, anuais, etc.). No contexto de usinas hidrelétricas, séries temporais são de extrema importância, pois permitem monitorar, analisar e prever o comportamento de variáveis críticas, como vazões afluentes, níveis dos reservatórios, geração de energia e precipitação.
Tendência: Representa o comportamento de longo prazo nos dados (ex.: aumento ou diminuição das vazões ao longo dos anos devido a mudanças climáticas ou uso de bacias).
Sazonalidade: Reflete padrões que se repetem periodicamente (ex.: ciclos de cheias e secas ao longo do ano).
Ruído: Flutuações irregulares que não seguem um padrão definido.
Ciclos: Variações que ocorrem em intervalos maiores que a sazonalidade (ex.: eventos climáticos cíclicos como El Niño).
Monitoramento e Planejamento: Analisar séries temporais de vazões permite às usinas hidrelétricas prever períodos de cheia e seca, garantindo uma operação eficiente do reservatório.
Gestão de Energia: O histórico de geração e demanda ajuda no planejamento da produção e na tomada de decisões estratégicas em momentos de escassez ou excesso de energia.
Modelagem Hidrológica: Séries temporais são essenciais para ajustar modelos que simulam o comportamento de rios e reservatórios, permitindo prever impactos ambientais e operacionais.
Estudos Climáticos: A análise de séries temporais de longo prazo ajuda a entender o impacto das mudanças climáticas nos recursos hídricos, fundamentais para a sustentabilidade da geração hidrelétrica.
A etapa inicial do trabalho consistiu em obter as bases de dados necessárias para a análise. Para isso, foram baixados os dados específicos da usina, disponíveis no site do ONS, com registros diários desde 1º de janeiro de 2000 até a data inical do estudo (05/10/2024). As informações coletadas incluíram vazão afluente, vertida, defluente, transferida e de outras estruturas, todas em m³/s, além do nível de montante diário em metros, geração de energia horária em MWm, volume útil diário em porcentagem, energia natural afluente bruta e energia armazenada no subsistema da usina, e o custo marginal de operação semanal. Além desses dados, também foram baixados os arquivos Hidr.xls e as vazões naturais afluentes, diárias e mensais, contendo informações de todas as hidrelétricas do Sistema Interligado Nacional (SIN), disponíveis no portal SINtegre do ONS.
Abaixo é possível analisar o gráfico Volume x Cota da UHE Salto Santiago. De acordo com o arquivo .Hidr desta usina, seu volume máximo é de cerca de 6775 hm³ e seu volume mínimo 2662 hm³. Além disso, a cota máxima é de 506 m e a cota mínima de 481 m.
O polinômio de 4º grau que representa o Volume em função da Cota é dado por:
\[ V(x) = 4,48 \cdot 10^2 + 1,82 \cdot 10^{-2} \cdot x - 2,87 \cdot 10^{-6} \cdot x^2 + 3,00 \cdot 10^{-10} \cdot x^3 - 1,27 \cdot 10^{-14} \cdot x^4 \]
Onde \(x\) representa a cota.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
hidr <- read.csv2("Hidr.csv")
# Gráfico de Volume x Cota
volumes <- seq(hidr$Vol.Máx..hm3., hidr$Vol.min..hm3., length.out = 1000)
cotas <- (hidr$PCV.4.*volumes^4) + (hidr$PCV.3.*volumes^3) + (hidr$PCV.2.*volumes^2) +
(hidr$PCV.1.*volumes^1) + (hidr$PCV.0.)
plot(volumes, cotas, type = "o", col = "black",
xlab = "Volume (hm³)", ylab = "Cota (m)",
main = "Gráfico Volume x Cota",
pch = 20,
cex = 0.7,
lwd = 1)
grid()
A precipitação é a entrada de água da atmosfera para o reservatório, enquanto a evaporação e a transpiração devolvem parte dessa água para a atmosfera, formando o processo de evapotranspiração. No solo, ocorre a infiltração, onde a água penetra e pode alimentar o sistema de águas subterrâneas, enquanto as nascentes contribuem com a vazão afluente para o reservatório. A água armazenada nos rios e reservatórios pode ser direcionada para o escoamento superficial ou para o escoamento defluente, demonstrando a complexa interação entre atmosfera, solo e corpos d’água que sustenta o ciclo hidrológico.
O gráfico de evaporação mensal apresenta a variação da evaporação ao longo dos meses, considerando as áreas máxima, mínima e média do reservatório da UHE Salto Santiago. Observa-se que os maiores valores de evaporação ocorrem entre os meses de maio e julho, período geralmente associado a maior insolação e menor umidade relativa, que favorecem o processo de evaporação. Por outro lado, os menores valores são registrados nos meses de outubro a dezembro, refletindo as condições climáticas típicas dessa época, como maior precipitação e menor incidência solar.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
hidr <- read.csv2("Hidr.csv")
# Determinar a Área do reservatório (em km²) - MÁX, MÍN E MÉDIA.
area_max <- 208 # km² (informado no site da ENGIE - SALTO SANTIAGO)
area_min <- 122.91 # km² (informado no site da ENGIE - SALTO SANTIAGO)
area_media <- (area_max + area_min) / 2
# Evaporação mensal - Dados de Evaporação mensal (Dado em mm)
evap_mensal_mm <- c(hidr$Evap.Men..1., hidr$Evap.Men..2., hidr$Evap.Men..3., hidr$Evap.Men..4.,
hidr$Evap.Men..5., hidr$Evap.Men..6., hidr$Evap.Men..7., hidr$Evap.Men..8.,
hidr$Evap.Men..9., hidr$Evap.Men..10., hidr$Evap.Men..11., hidr$Evap.Men..12.)
# Converter evaporação de mm para metros
evap_mensal_m3 <- evap_mensal_mm * 0.001
evap_m3_max <- evap_mensal_m3 * area_max * 1e6 # Para área máxima em metros quadrados
evap_m3_min <- evap_mensal_m3 * area_min * 1e6 # Para área mínima em metros quadrados
evap_m3_media <- evap_mensal_m3 * area_media * 1e6 # Para área média em metros quadradros
meses_de_analise <- 1:12
plot(meses_de_analise, evap_m3_max, type = "o", col = "blue",
ylim = c(min(evap_m3_min), max(evap_m3_max)),
xlab = "Meses", ylab = "Evaporação Líquida (m³)",
main = "Evaporação Líquida Mensal (m³) - Áreas Mín., Máx. e Média", xaxt = "n")
# Adicionar as outras áreas ao gráfico - Área mínima e média
lines(meses_de_analise, evap_m3_min, type = "o", col = "red")
lines(meses_de_analise, evap_m3_media, type = "o", col = "green")
axis(1, at = seq(1, 12, by = 1), labels = seq(1, 12, by = 1))
legend("topright", legend = c("Área Máxima", "Área Mínima", "Área Média"),
col = c("blue", "red", "green"), lty = 1, pch = 16)
grid()
Ao normalizar os valores de evaporação pelo volume máximo do reservatório, que é de 6775 hm³, fica claro que a evaporação corresponde a uma fração muito pequena do volume total armazenado. Esse fato reforça que, embora haja uma variação mensal significativa e uma dependência da área superficial, o impacto da evaporação no volume total do reservatório é pouco significativo. Isso indica que a evaporação não representa uma restrição operacional relevante para a UHE Salto Santiago.
No entanto, é importante destacar que, mesmo que o impacto seja pequeno em termos percentuais, a evaporação pode ter relevância em situações específicas, como períodos de seca prolongada ou quando o nível da cota está próximo do mínimo operacional.
## Plot normalizado
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# Definindo o volume máximo em m³
volume_max_m3 <- 6775 * 1e6 # 6775 hm³ em m³
# Normalizar os valores de evaporação dividindo pelo volume máximo
evap_m3_max_norm <- evap_m3_max / volume_max_m3
evap_m3_min_norm <- evap_m3_min / volume_max_m3
evap_m3_media_norm <- evap_m3_media / volume_max_m3
# Plotando os valores normalizados
plot(meses_de_analise, evap_m3_max_norm, type = "o", col = "blue",
ylim = c(min(evap_m3_min_norm), max(evap_m3_max_norm)),
xlab = "Meses", ylab = "Evaporação (p.u.)",
main = "Evaporação Mensal Normalizada- Áreas Mín., Máx. e Média", xaxt = "n")
# Adicionar as outras áreas normalizadas ao gráfico - Área mínima e média
lines(meses_de_analise, evap_m3_min_norm, type = "o", col = "red")
lines(meses_de_analise, evap_m3_media_norm, type = "o", col = "green")
axis(1, at = seq(1, 12, by = 1), labels = seq(1, 12, by = 1))
legend("topright", legend = c("Área Máxima", "Área Mínima", "Área Média"),
col = c("blue", "red", "green"), lty = 1, pch = 16)
grid()
Normalizar os dados é importante porque ajusta os valores para uma escala comum, facilitando a comparação entre diferentes conjuntos de dados ou variáveis que possam ter unidades ou magnitudes distintas. Em análises de séries temporais, por exemplo, a normalização ajuda a identificar padrões e anomalias sem que as flutuações de escala interfiram, o que é especialmente útil ao combinar dados de fontes diferentes ou ao observar mudanças ao longo do tempo. Além disso, a normalização melhora o desempenho de muitos métodos estatísticos e algoritmos de aprendizado de máquina, que funcionam melhor quando os dados estão dentro de uma faixa padronizada, evitando que valores maiores dominem a análise e distorçam os resultados. Abaixo está como cada conjunto de dados foi normalizado:
A vazão afluente é a quantidade de água que chega ao reservatório de uma usina hidrelétrica em um determinado ponto e momento. Essa vazão, medida geralmente em metros cúbicos por segundo (m³/s), representa o volume de água escoado superficialmente por unidade de tempo. Ela pode ser determinada através de medições diretas ou estimada por modelos hidrológicos que consideram fatores como precipitação, características do solo e relevo da região. A vazão afluente é uma variável essencial para o cálculo do potencial hidráulico disponível para a geração de energia, pois é a partir dela que a usina define a quantidade de água que movimentará suas turbinas.
No entanto, nem toda a vazão afluente é convertida em energia. Parte da água se perde por evapotranspiração, especialmente em áreas de reservatórios expostos, enquanto outra parte é vertida sem passar pelas turbinas, principalmente em períodos de cheia, quando o reservatório atinge sua capacidade máxima. Além disso, uma porção da vazão contribui para o volume útil do reservatório, garantindo a operação contínua da usina mesmo em épocas de menor afluência.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# Carregar e preparar os dados
vazao_afluente <- read.csv2("Vazao_afluente.csv")
vazao_afluente <- as.numeric(vazao_afluente[1, ])
# Exibir o sumário estatístico
summary(vazao_afluente)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -16 606 964 1095 1308 15397
O histograma da vazão afluente da UHE Salto Santiago mostra que a maioria das vazões está concentrada em valores baixos, predominantemente abaixo de 2000 m³/s, com ocorrências esporádicas de vazões elevadas, superiores a 5000 m³/s. Essa distribuição assimétrica, com uma cauda longa à direita, reflete um regime hidrológico dominado por vazões regulares, intercaladas com eventos extremos ocasionais, como enchentes por exemplo.
# HISTOGRAMA VAZÃO AFLUENTE
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
vazao_afluente<- read.csv2("Vazao_afluente.csv")
vazao_afluente <- as.numeric(vazao_afluente[1, ])
hist_data <- hist(vazao_afluente,
plot = FALSE,
breaks = 150)
total_dados <- length(vazao_afluente)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Afluente ",
xlab = "Vazão Afluente (m³/s)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
O boxplot da vazão afluente da UHE Salto Santiago revela a distribuição dos dados e a presença de valores atípicos significativos acima de 5000 m³/s, indicando eventos extremos, como enchentes. A maior parte das vazões encontra-se concentrada na faixa inferior, próxima à mediana, que é de 964 m³/s, refletindo um regime regular. A média das vazões é de 1095 m³/s, um pouco acima da mediana, o que indica a influência dos valores atípicos mais elevados na sua determinação.
# BOXPLOT VAZÃO AFLUENTE
# VAZÃO AFLUENTE
vazao_afluente<- read.csv2("Vazao_afluente.csv")
vazao_afluente <- as.numeric(vazao_afluente[1, ])
media_vazao <- mean(vazao_afluente, na.rm = TRUE)
# Gerar o box plot dos dados de vazão
boxplot(vazao_afluente,
main = "Box Plot dos Valores de Vazão Afluente",
ylab = "Vazão (m³/s)",
xlab = "Vazão Afluente",
col = "lightblue",
border = "black",
outline = TRUE,
notch = TRUE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
grid()
O boxplot da vazão afluente por ano apresenta a variação anual das vazões observadas na UHE Salto Santiago, evidenciando a dispersão e a ocorrência de valores atípicos em diferentes períodos. Observa-se que, na maioria dos anos, a mediana das vazões fica próxima ou abaixo da média geral, indicando um regime hidrológico relativamente estável, mas com eventos extremos esporádicos que resultam em valores muito elevados, principalmente acima de 5000 m³/s.
Um destaque importante é o maior outlier observado no ano de 2014, onde a vazão alcançou cerca de 15000 m³/s, um evento extremamente elevado que caracteriza uma grande cheia ou um episódio hidrológico extremo. Esse pico é significativamente superior às demais vazões registradas e destaca a necessidade de atenção especial em relação à capacidade do reservatório e aos sistemas de controle durante eventos desse porte. De maneira geral, a maior parte dos dados anuais permanece concentrada em faixas inferiores, reforçando a predominância de condições regulares no regime hidrológico da usina.
Em junho de 2014, a UHE Salto Santiago registrou um evento hidrológico extremo caracterizado por uma cheia de grande magnitude. Esse evento está correlacionado com a notícia publicada pelo G1 em 11 de junho de 2014, que relata a abertura de oito comportas da Usina Hidrelétrica de Salto Santiago devido ao acúmulo excessivo de água no reservatório, resultante de chuvas intensas na região. Essa ação levou a uma cheia que transformou a ponte que liga Rio Bonito do Iguaçu e Saudade do Iguaçu em um atrativo turístico, conforme descrito na reportagem.
# BOXPLOT POR ANO
vazao_afluente <- read.csv2("Vazao_afluente.csv", encoding = "latin1", sep = ";")
nomes_colunas <- colnames(vazao_afluente)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de vazão e seus respectivos anos
df_vazao_anos <- data.frame(
vazao_afluente = as.numeric(vazao_afluente[1, ]),
ano = anos
)
media_vazao <- mean(df_vazao_anos$vazao_afluente, na.rm = TRUE)
# Gerar o boxplot dos dados de vazão por ano
boxplot(vazao_afluente ~ ano, data = df_vazao_anos,
main = "Boxplot Vazão Afluente por Ano",
xlab = "Ano",
ylab = "Vazão Afluente (m³/s)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_vazao, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# Carregar e preparar os dados
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv")
vazao_afluente_normalizado <- as.numeric(vazao_afluente_normalizado[1, ])
# Exibir o sumário estatístico
summary(vazao_afluente_normalizado)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.01461 0.55327 0.88011 1.00000 1.19418 14.05715
O histograma da vazão afluente normalizada pela média da base de dados (964m³/s) mostra a distribuição percentual das vazões em termos de sua relação com a média (em unidades p.u.). Observa-se que a maior concentração de ocorrências está em torno de valores normalizados próximos a 1, indicando que a maioria das vazões se encontra em uma faixa relativamente estável e próxima à média do conjunto de dados. Essa concentração reflete um regime hidrológico consistente e previsível na maior parte do tempo.
A distribuição apresenta uma cauda longa à direita, com valores normalizados que se estendem além de 10 p.u., representando vazões extraordinariamente elevadas que correspondem a eventos extremos, como enchentes. Esses picos, embora raros, possuem impacto significativo na operação e segurança do sistema hidráulico.
# HISTOGRAMA VAZÃO AFLUENTE - NORMALIZADO
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv")
vazao_afluente_normalizado <- as.numeric(vazao_afluente_normalizado[1, ])
hist_data <- hist(vazao_afluente_normalizado,
plot = FALSE,
breaks = 150)
total_dados <- length(vazao_afluente_normalizado)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Afluente ",
xlab = "Vazão Afluente (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
O histograma da vazão afluente com a aplicação do logarítimo aos valores normalizados apresenta uma distribuição mais simétrica em torno do logaritmo da média. Essa transformação reduz a assimetria da distribuição original e facilita a análise de dados com grande variabilidade, especialmente em casos com valores extremos muito elevados.
No gráfico, a maior concentração de ocorrências está centralizada próximo de 0 no eixo do logaritmo, indicando que a maior parte das vazões permanece próxima à média após a normalização e transformação. A cauda longa à esquerda reflete os valores normalizados que, após o logaritmo, aparecem como pequenos desvios negativos significativos (vazões muito baixas). Por outro lado, a cauda à direita, ainda que menos acentuada, representa os valores normalizados mais elevados antes da transformação.
# HISTOGRAMA VAZÃO AFLUENTE - LOGARITMO
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
vazao_afluente_filtrado <- vazao_afluente_normalizado[vazao_afluente_normalizado > 0]
vazao_afluente_log <- log(vazao_afluente_filtrado)
vazao_afluente_log <- vazao_afluente_log[!is.na(vazao_afluente_log)]
# Histograma
hist_data <- hist(vazao_afluente_log,
plot = FALSE,
breaks = 150)
total_dados <- length(vazao_afluente_log)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Afluente",
xlab = "Vazão (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
O boxplot dos valores de vazão afluente normalizados destaca a dispersão e os padrões centrais dos dados, com a média normalizada representada em 1 (indicada pelo ponto vermelho). A maior parte dos valores normalizados está concentrada no intervalo interquartil (entre o 1º e o 3º quartis), refletindo a predominância de um regime hidrológico estável. A mediana, localizada próxima ao centro da caixa, reforça essa estabilidade nos dados.
Tanto no boxplot não normalizado quanto no normalizado, observa-se a presença de outliers significativos. No gráfico normalizado, esses outliers ultrapassam 14 p.u., representando eventos extremos que, no boxplot não normalizado, correspondem a vazões excepcionalmente altas, como cheias de grande magnitude.
# BOXPLOT VAZÃO AFLUENTE - NORMALIZADO
# VAZÃO AFLUENTE
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv")
vazao_afluente_normalizado <- as.numeric(vazao_afluente_normalizado[1, ])
media_vazao <- mean(vazao_afluente_normalizado, na.rm = TRUE)
# Gerar o box plot dos dados de vazão
boxplot(vazao_afluente_normalizado,
main = "Box Plot dos Valores de Vazão Afluente - Normalizado",
ylab = "Vazão (p.u.)",
xlab = "Vazão Afluente",
col = "lightblue",
border = "black",
outline = TRUE,
notch = TRUE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
grid()
O boxplot da vazão afluente normalizada por ano apresenta uma visão detalhada da variação anual das vazões em relação à média, fixada em 1 p.u. (linha vermelha). Observa-se que, na maior parte dos anos, os valores se concentram próximos à média, com o intervalo interquartil (entre o 1º e o 3º quartis) reforçando a estabilidade do regime hidrológico ao longo dos períodos analisados. No entanto, há a presença de outliers em diversos anos, com valores que ultrapassam 2 p.u. e, em casos excepcionais, chegam a 14 p.u., destacando eventos hidrológicos extremos. Quando correlacionado ao boxplot não normalizado, esses outliers correspondem às vazões absolutas mais altas registradas, como cheias excepcionais, enquanto os valores concentrados próximos à média normalizada de 1 p.u. refletem o comportamento típico do regime hidrológico.
# BOXPLOT NORMALIZADO POR ANO
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv", encoding = "latin1", sep = ";")
nomes_colunas <- colnames(vazao_afluente_normalizado)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de vazão e seus respectivos anos
df_vazao_anos <- data.frame(
vazao_afluente_normalizado = as.numeric(vazao_afluente_normalizado[1, ]),
ano = anos
)
media_vazao <- 1
# Gerar o boxplot dos dados de vazão por ano
boxplot(vazao_afluente_normalizado ~ ano, data = df_vazao_anos,
main = "Boxplot Vazão Afluente por Ano - Normalizado",
xlab = "Ano",
ylab = "Vazão Afluente (p.u.)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_vazao, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", media_vazao), col = "red", pch = 19, bty = "n")
O boxplot da vazão afluente normalizado com a aplicação do logaritmo fornece uma visão ajustada da variação anual das vazões, destacando padrões relativos ao longo do tempo e reduzindo a influência visual de valores extremos. A média, representada pelo ponto vermelho, é fixada em 0 no eixo log(p.u.), pois a média normalizada equivale a 1, e o logaritmo de 1 é 0. Isso facilita a análise das variações em torno da média, tornando os desvios mais evidentes de maneira proporcional. A maior parte dos dados concentra-se entre os valores que correspondem a 25% e 75% das observações, representados pela “caixa” no gráfico.
# BOXPLOT NORMALIZADO POR ANO
vazao_afluente_normalizado <- read.csv2("Vazao_afluente_normalizado.csv", encoding = "latin1", sep = ";")
nomes_colunas <- colnames(vazao_afluente_normalizado)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de vazão (com log) e seus respectivos anos
df_vazao_anos <- data.frame(
vazao_afluente_log = log(as.numeric(vazao_afluente_normalizado[1, ])),
ano = anos
)
media_vazao_log <- log(1) # Aplicando log na média original
boxplot(vazao_afluente_log ~ ano, data = df_vazao_anos,
main = "Boxplot Vazão Afluente por Ano - Normalizado (Log)",
xlab = "Ano",
ylab = "Vazão Afluente (log(p.u.))",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_vazao_log, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao_log, 2)), col = "red", pch = 19, bty = "n")
A série temporal da vazão afluente por ano, normalizada em relação à média, foi construída com base nos valores médios anuais de vazão afluente ao longo do período de 2000 a 2024. Essa abordagem permite identificar a variação das condições hidrológicas de maneira simplificada, destacando as médias anuais como representações das condições gerais de cada ano.
Observa-se que há flutuações significativas entre os anos, com picos marcantes de vazões altas, como os registrados em 2012 e 2024, que indicam eventos hidrológicos extremos, como enchentes, evidenciados pelo aumento expressivo da vazão média anual. Em contrapartida, anos como 2006, 2020 e 2021 apresentam os valores mais baixos da série, sugerindo períodos de estiagem ou baixa contribuição hídrica.
#
library(dplyr)
library(lubridate)
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
vazao_data <- read.csv2("Vazao_afluente_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
vazao_annual_mean <- vazao_data %>%
group_by(Ano = year(Data)) %>%
summarize(Vazao_Media = mean(Vazao, na.rm = TRUE))
# Plotar a série temporal anual com marcações de ano
plot(vazao_annual_mean$Ano, vazao_annual_mean$Vazao_Media*10, type = "o",
xlab = "Período", ylab = "Vazão Afluente (p.u.)",
main = "Série Vazão Afluente por Ano - Normalizado", xaxt = "n")
# Adicionar os anos no eixo x
axis(1, at = vazao_annual_mean$Ano, labels = vazao_annual_mean$Ano)
grid()
A série temporal da vazão afluente diária normalizada apresenta a variação contínua dos valores diários ao longo do período de 2000 a 2024, construída diretamente com os dados originais da base, sem o cálculo de médias anuais, como na série anterior.
Além do evento de 2014, que reflete um episódio de cheia de grande magnitude, é possível identificar outros picos relevantes, como em 2012, 2024 e alguns eventos menores em anos como 2003 e 2018. Esses picos correspondem a momentos de aumento significativo da vazão, frequentemente associados a períodos de chuvas intensas ou outros fenômenos hidrológicos que impactam diretamente o regime da bacia.
Por outro lado, o gráfico também revela períodos em que os valores diários de vazão ficaram abaixo da média normalizada (1 p.u.). Esses valores inferiores indicam momentos de estiagem ou de baixa contribuição hídrica, como observado em anos como 2006/2007, 2020 e 2021, que apresentam vazões mais regulares e concentradas em faixas mais baixas. Esses períodos de menor vazão são igualmente importantes para a análise, pois podem representar desafios operacionais durante períodos secos, quando o nível do reservatório pode ser mais crítico para a geração de energia e o atendimento à demanda.
Série da Vazão Afluente Diária - Todo Período de Análise
#
vazao_data <- read.csv2("Vazao_afluente_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Plotar a série temporal diária
plot(vazao_data$Data, vazao_data$Vazao, type = "l",
xlab = "Período", ylab = "Vazão Afluente (p.u.)",
main = "Série Vazão Afluente Diária - Normalizado", xaxt = "n")
axis.Date(1, at = seq(min(vazao_data$Data), max(vazao_data$Data), by = "1 year"), format = "%Y")
grid()
Série da Vazão Afluente Diária em Períodos (2000 - 2012) e (2013 - 2024)
#
vazao_data <- read.csv2("Vazao_afluente_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Dividir os dados em dois períodos (2000 - 2012) e (2013 - 2024)
vazao_periodo1 <- vazao_data %>% filter(Data >= as.Date("2000-01-01") & Data <= as.Date("2012-12-31"))
vazao_periodo2 <- vazao_data %>% filter(Data >= as.Date("2013-01-01") & Data <= as.Date("2024-12-31"))
par(mfrow = c(2, 1), mar = c(4, 4, 2, 1))
# Plotar o primeiro período (2000 - 2012)
plot(vazao_periodo1$Data, vazao_periodo1$Vazao, type = "l",
xlab = "Período", ylab = "Vazão Afluente (p.u.)",
main = "Série Vazão Afluente Diária (2000-2012)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo1$Data), max(vazao_periodo1$Data), by = "1 year"), format = "%Y")
grid()
# Plotar o segundo período (2013 - 2024)
plot(vazao_periodo2$Data, vazao_periodo2$Vazao, type = "l",
xlab = "Período", ylab = "Vazão Afluente (p.u.)",
main = "Série Vazão Afluente Diária (2013-2024)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo2$Data), max(vazao_periodo2$Data), by = "1 year"), format = "%Y")
grid()
par(mfrow = c(1, 1))
#Diária!!!! è essa
library(dplyr)
library(lubridate)
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# Carregar os dados
vazao_data <- read.csv2("Vazao_afluente_normalizado.csv")
# Transpor e renomear a coluna
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
# Criar a coluna de datas
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Converter a série em uma série temporal diária
vazao_ts <- ts(vazao_data$Vazao, start = c(2000, 1), frequency = 365)
# Decompor a série em tendência, sazonalidade e ruído
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
# Configurar layout e margens
par(mfrow = c(3, 1), mar = c(4, 4, 2, 2))
# Componente de tendência
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência")
grid()
# Componente sazonal
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade")
grid()
# Componente randômica
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído")
grid()
# Resetar o layout de plotagem para uma janela única
par(mfrow = c(1, 1))
A vazão natural afluente é uma estimativa das vazões de um rio ou curso d’água que considera o fluxo como ele seria em condições naturais, sem intervenções humanas. Essa medida é obtida a partir do processamento de dados de vazão observada, ajustando-os para remover os efeitos artificiais causados por atividades humanas, como a construção de represas e desvios de água. A vazão natural afluente permite uma análise mais precisa do comportamento hidrológico da bacia, refletindo o regime hídrico que existiria se não houvesse alterações antropogênicas, como se o rio estivesse em seu estado natural ao longo do tempo.
# Definir o diretório de trabalho
vazao_natural_afluente <- read.csv2("Vazao_Natural_Afluente_normal.csv")
vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])
# Fazer o sumário estatístico dos valores de vazão natural afluente
summary(vazao_natural_afluente)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 88.0 437.5 741.0 1032.3 1295.0 16909.0 36284
O histograma da vazão natural afluente mostra a distribuição dos valores da vazão estimada em condições naturais, sem interferências humanas, ao longo do período analisado. Observa-se uma cauda longa à direita, que representa a ocorrência de vazões mais elevadas, embora menos frequentes, relacionadas a eventos naturais de grande magnitude, como cheias sazonais intensas. Esses eventos extremos, ainda que raros, são relevantes para entender a dinâmica hidrológica da bacia em seu estado natural e seus impactos nos ecossistemas aquáticos e na morfologia dos rios.
# Carregar os dados
vazao_natural_afluente <- read.csv2("Vazao_Natural_Afluente_normal.csv")
vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])
media_total <- 1019.28148148148
vazao_afluente_normalizado <- vazao_natural_afluente
hist_data <- hist(vazao_afluente_normalizado,
plot = FALSE,
breaks = 150)
total_dados <- length(vazao_afluente_normalizado)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Natural Afluente ",
xlab = "Vazão (m³/s)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
O boxplot da vazão natural afluente apresenta a distribuição dos valores em m³/s, destacando os padrões centrais e a presença de valores extremos. A média, representada pelo ponto vermelho, é de 1032,26 m³/s situando-se dentro da caixa do gráfico, o que reflete a concentração dos valores em torno dessa faixa.
A maior parte das vazões está concentrada no intervalo interquartil, ou seja, entre os 25% e 75% dos valores centrais, representado pela caixa azul. Isso demonstra a predominância de um regime hidrológico relativamente estável em condições naturais. Contudo, o gráfico evidencia uma quantidade significativa de outliers acima da faixa superior, indicando eventos hidrológicos extremos, como cheias intensas, com vazões que ultrapassam 5000 m³/s e, em casos raros, chegam a valores superiores a 15000 m³/s.
# BOXPLOT VAZÃO NATURAL AFLUENTE
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# VAZÃO AFLUENTE
vazao_natural_afluente <- read.csv2("Vazao_Natural_Afluente_normal.csv")
vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])
media_vazao <- mean(vazao_natural_afluente, na.rm = TRUE)
# Gerar o box plot dos dados de vazão
boxplot(vazao_natural_afluente,
main = "Box Plot dos Valores de Vazão Natural Afluente - Normalizado",
ylab = "Vazão (m³/s)",
xlab = "Vazão Natural Afluente",
col = "lightblue",
border = "black",
outline = TRUE,
notch = TRUE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid()
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
Globalmente, os três períodos mostram que a maior parte dos valores de vazão natural afluente permanece dentro de faixas regulares, próximas à média global de 1032,44 p.u. Contudo, o comportamento hidrológico varia ao longo do tempo, com o primeiro período apresentando maior variabilidade e frequência de extremos, enquanto o segundo período é relativamente mais estável. O terceiro período combina características de estabilidade com eventos pontuais de grande magnitude.
Período 1 (1941-1970): Neste intervalo, observa-se que os valores de vazão natural afluente apresentam uma maior variabilidade, com frequentes outliers em anos como 1947 e 1955, indicando a ocorrência de eventos hidrológicos extremos, como grandes cheias. A maior parte dos valores concentra-se próximo à média global (1032,44 p.u.), como indicado pela linha vermelha no gráfico. Este período é marcado por maior amplitude de vazões, refletindo tanto eventos extremos quanto períodos mais estáveis.
Período 2 (1971-2000): Durante o segundo período, nota-se uma redução na dispersão das vazões em comparação ao primeiro período, com menor frequência de outliers. Este intervalo reflete um comportamento hidrológico mais estável, com a maior parte das vazões dentro de faixas regulares próximas à média global. Ainda assim, destaca-se um evento notável em 1983, representando uma cheia sazonal significativa, enquanto os demais anos mantêm valores mais regulares, com baixa ocorrência de extremos marcantes.
Período 3 (2001-2020): No terceiro período, os valores de vazão voltam a apresentar maior variabilidade, com outliers significativos em anos como 2014 e 2015. Esses picos indicam eventos de cheia extrema. A mediana, em muitos anos, posiciona-se abaixo da média global, refletindo a predominância de períodos de vazões ligeiramente inferiores. A frequência de outliers também é menor em comparação ao primeiro período, mas ainda presente.
data <- read.csv2("Natural_Afluente.csv")
colnames(data)[1] <- "Ano"
# Filtrar os dados a partir de 1940
data <- subset(data, Ano >= 1940)
# Calcular a média global
media_global <- mean(unlist(data[,-1]), na.rm = TRUE)
# Dividir os dados em períodos de 30 anos, excluindo o primeiro período se necessário
periodos <- split(data, ceiling((data$Ano - min(data$Ano)) / 30))
periodos <- periodos[-1] # Excluir o primeiro período, se aplicável
# Gerar o boxplot para cada período separadamente
for (i in seq_along(periodos)) {
periodo <- periodos[[i]]
library(reshape2)
data_long <- melt(periodo, id.vars = "Ano", variable.name = "Mes", value.name = "Vazao")
# Criar o boxplot
boxplot(Vazao ~ Ano, data = data_long, main = paste("Boxplot Vazão Natural Afluente por Ano - Período", i),
ylab = "Vazão Natural Afluente (p.u.)", xlab = "Ano", las=2, cex.axis=0.7)
# Traçar a linha da média global
abline(h = media_global, col = "red", lty = 2)
# Adicionar ponto e texto com o valor da média global
x_pos <- length(unique(data_long$Ano)) * 0.95 # Ajusta para o ano final
y_pos <- max(data_long$Vazao, na.rm = TRUE) * 0.9 # Ajusta a altura
points(x = x_pos, y = y_pos, col = "red", pch = 19)
text(x = x_pos, y = y_pos, paste("Média =", round(media_global, 2)), pos = 3, col = "red", cex = 0.8)
grid()
}
# Definir o diretório de trabalho
vazao_natural_afluente <- read.csv2("Vazao_Natural_Afluente.csv")
vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])
# Fazer o sumário estatístico dos valores de vazão natural afluente
summary(vazao_natural_afluente)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.09 0.42 0.72 1.00 1.25 16.38
O histograma da vazão natural afluente, normalizado pela média dos dados, apresenta a distribuição relativa das vazões em unidades de p.u. (razão entre os valores e a média total). Observa-se que a maior concentração de ocorrências está em faixas de valores próximos a 1 p.u., indicando que a maioria das vazões registradas é relativamente estável e próxima à média histórica da bacia.
A distribuição exibe uma cauda longa à direita, refletindo a ocorrência de eventos extremos de vazão elevada, que, embora sejam raros, podem atingir valores acima de 10 p.u., indicando episódios de cheias naturais de grande magnitude.
# Carregar os dados
vazao_natural_afluente <- read.csv2("Vazao_Natural_Afluente.csv")
vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])
media_total <- 1019.28148148148
vazao_afluente_normalizado <- vazao_natural_afluente
hist_data <- hist(vazao_afluente_normalizado,
plot = FALSE,
breaks = 150)
total_dados <- length(vazao_afluente_normalizado)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Natural Afluente ",
xlab = "Vazão (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
O histograma da vazão natural afluente, com os valores transformados pelo logaritmo natural, apresenta uma distribuição mais simétrica em torno de 0 no eixo logaritmo (p.u.). Essa transformação suaviza a assimetria observada no histograma sem a aplicação do log e permite uma análise mais clara dos padrões centrais, reduzindo o impacto visual de valores extremos.
A maior parte dos dados está concentrada entre os valores de -1 e 1, correspondendo a vazões próximas à média normalizada em escala logarítmica. Essa distribuição evidencia a predominância de valores regulares no regime hidrológico natural, com vazões mais frequentes dentro de uma faixa estável.
Os valores menores que -1 representam vazões muito inferiores à média, como períodos de estiagem ou baixas sazonais, enquanto os valores superiores a 1 indicam vazões significativamente altas, como eventos de cheia natural.
# HISTOGRAMA VAZÃO AFLUENTE - LOGARITMO
# Carregar os dados
vazao_natural_afluente <- read.csv2("Vazao_Natural_Afluente.csv")
vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])
media_total <- 1019.28148148148
vazao_afluente_normalizado <- vazao_natural_afluente
vazao_natural_afluente_log <- log(vazao_natural_afluente)
vazao_natural_afluente_log <- vazao_natural_afluente_log[!is.na(vazao_natural_afluente_log)]
# Histograma
hist_data <- hist(vazao_natural_afluente_log,
plot = FALSE,
breaks = 150)
total_dados <- length(vazao_natural_afluente_log)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Natural Afluente",
xlab = "Vazão (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
# BOXPLOT VAZÃO NATURAL AFLUENTE - NORMALIZADO
# VAZÃO AFLUENTE
vazao_natural_afluente <- read.csv2("Vazao_Natural_Afluente.csv")
vazao_natural_afluente <- as.numeric(vazao_natural_afluente[,2])
media_vazao <- mean(vazao_natural_afluente, na.rm = TRUE)
# Gerar o box plot dos dados de vazão
boxplot(vazao_natural_afluente,
main = "Box Plot dos Valores de Vazão Natural Afluente - Normalizado",
ylab = "Vazão (p.u.)",
xlab = "Vazão Natural Afluente",
col = "lightblue",
border = "black",
outline = TRUE,
notch = TRUE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid()
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
Período 1 (1941-1970): Neste período, os boxplots mostram uma maior dispersão das vazões normalizadas em torno da média (1 p.u.), com eventos significativos de vazões altas, representados por outliers em anos como 1947, 1955 e 1963. Isso reflete a ocorrência de cheias naturais de grande magnitude. Os valores típicos (dentro do intervalo interquartil) estão concentrados próximos à média, mas com maior variabilidade em comparação aos períodos subsequentes, sugerindo um regime hidrológico mais dinâmico nesse intervalo.
Período 2 (1971-2000): No segundo período, observa-se uma redução na variabilidade das vazões, com menor frequência de outliers em relação ao primeiro período. A maior parte dos valores permanece estável em torno da média de 1 p.u., indicando um regime hidrológico mais consistente e menos impactado por eventos extremos. Exceções pontuais incluem anos como 1983, que apresenta um outlier associado a um evento de cheia. Este período é caracterizado por uma estabilidade hidrológica relativa.
Período 3 (2001-2020): No terceiro período, a variabilidade das vazões normalizadas aumenta em relação ao período anterior, com a presença de outliers em anos como 2014 e 2015, que representam eventos hidrológicos extremos de vazão elevada. Apesar disso, a mediana em muitos anos permanece alinhada com a média global (1 p.u.), indicando que os valores típicos ainda refletem um regime hidrológico relativamente estável.
data <- read.csv2("Natural_Afluente.csv")
colnames(data)[1] <- "Ano"
data <- subset(data, Ano >= 1940)
media_total <- mean(unlist(data[,-1]), na.rm = TRUE)
data_norm <- data
data_norm[,-1] <- data[,-1] / media_total
# Dividir os dados em períodos de 30 anos, excluindo o primeiro período se necessário
periodos <- split(data_norm, ceiling((data_norm$Ano - min(data_norm$Ano)) / 30))
periodos <- periodos[-1] # Excluir o primeiro período, se aplicável
# Gerar o boxplot para cada período separadamente
for (i in seq_along(periodos)) {
periodo <- periodos[[i]]
library(reshape2)
data_long <- melt(periodo, id.vars = "Ano", variable.name = "Mes", value.name = "Vazao")
boxplot(Vazao ~ Ano, data = data_long, main = paste("Boxplot Vazão Natural Afluente por Ano - Período", i),
ylab = "Vazão Natural Afluente (p.u.)", xlab = "Ano", las=2, cex.axis=0.7)
abline(h = 1, col = "red", lty = 2)
x_pos <- length(unique(data_long$Ano)) * 0.95 # Ajusta para o ano final
y_pos <- max(data_long$Vazao, na.rm = TRUE) * 0.9 # Ajusta a altura
points(x = x_pos, y = y_pos, col = "red", pch = 19)
text(x = x_pos, y = y_pos, "Média = 1", pos = 3, col = "red", cex = 0.8)
grid()
}
Período 1 (1941-1970): Neste período, os boxplots normalizados e com log mostram uma maior dispersão dos dados em comparação aos períodos subsequentes. A média (log(1) = 0) está representada pela linha vermelha, e a maioria dos valores concentra-se próxima a ela. Ainda assim, anos como 1957 destacam-se por apresentar valores máximos bem acima da faixa típica, indicando eventos de cheia intensa.
Período 2 (1971-2000): O segundo período apresenta um aumento no número de outliers em relação ao primeiro, destacando maior ocorrência de eventos extremos, tanto de cheias quanto de baixas vazões. Anos como 1983 mostram outliers significativos, indicando eventos de cheia natural relevantes. Apesar do maior número de outliers, os valores típicos continuam concentrados em torno da média (0 no eixo logarítmico).
Período 3 (2001-2020): No terceiro período, a quantidade de outliers diminui drasticamente, com apenas um outlier evidente no ano de 2014, que reflete um evento de cheia significativa. A mediana, em muitos anos, está abaixo da média normalizada (log(1) = 0), indicando uma predominância de valores de vazão menores em relação aos períodos anteriores.
data <- read.csv2("Natural_Afluente.csv")
colnames(data)[1] <- "Ano"
data <- subset(data, Ano >= 1940)
# Calcular a média total e normalizar os dados
media_total <- mean(unlist(data[,-1]), na.rm = TRUE)
data_norm <- data
data_norm[,-1] <- data[,-1] / media_total
# Aplicar o log nos valores normalizados (evitar log(0) adicionando uma pequena constante, se necessário)
data_norm[,-1] <- log(data_norm[,-1] + 1e-10)
# Dividir os dados em períodos de 30 anos, excluindo o primeiro período se necessário
periodos <- split(data_norm, ceiling((data_norm$Ano - min(data_norm$Ano)) / 30))
periodos <- periodos[-1] # Excluir o primeiro período, se aplicável
# Gerar o boxplot para cada período separadamente
for (i in seq_along(periodos)) {
periodo <- periodos[[i]]
library(reshape2)
data_long <- melt(periodo, id.vars = "Ano", variable.name = "Mes", value.name = "Vazao")
boxplot(Vazao ~ Ano, data = data_long, main = paste("Boxplot Vazão Natural Afluente (Log) por Ano - Período", i),
ylab = "Log(Vazão Natural Afluente) (p.u.)", xlab = "Ano", las=2, cex.axis=0.7)
abline(h = log(1), col = "red", lty = 2)
x_pos <- length(unique(data_long$Ano)) * 0.95 # Ajusta para o ano final
y_pos <- max(data_long$Vazao, na.rm = TRUE) * 0.9 # Ajusta a altura
points(x = x_pos, y = y_pos, col = "red", pch = 19)
text(x = x_pos, y = y_pos, "Média", pos = 2, col = "red", cex = 0.8)
grid()
}
Período 1 (1940-1969): A série do primeiro período exibe uma variabilidade significativa ao longo dos anos, com flutuações em torno da média normalizada (1 p.u.). Observa-se um padrão de cheias mais regulares, com picos que raramente ultrapassam 3 p.u., indicando eventos de cheia de menor magnitude em relação aos períodos subsequentes.
Período 2 (1970-1999): O segundo período apresenta maior variabilidade, incluindo um evento de cheia marcante em aproximadamente 1983, onde a vazão natural afluente atinge valores próximos a 15 p.u., evidenciando um evento hidrológico extremo. No restante do período, os valores oscilam mais regularmente em torno da média, mas com picos de menor magnitude ocorrendo de forma mais frequente.
Período 3 (2000-2020): No terceiro período, observa-se uma maior frequência de flutuações em relação à média, com picos mais definidos, como o de 2014, que ultrapassa 5 p.u.
No gráfico da vazão natural afluente, a linha vermelha representa a média móvel anual, calculada com uma janela de 12 meses. Essa linha suaviza as variações mensais, reduzindo o impacto de picos ou quedas isoladas, como o grande pico em 1986 por exemplo. Além disso, quando a linha azul está abaixo da média móvel, pode indicar um período prolongado de vazões reduzidas.
library(dplyr)
library(tidyr)
library(stats)
data <- read.csv2("Natural_Afluente.csv")
data_long <- data %>%
pivot_longer(-1, names_to = "mes", values_to = "vazao") %>%
rename(ano = 1)
data_long <- data_long %>%
mutate(
mes = match(mes, tolower(month.abb)),
data = as.Date(paste(ano, mes, "01", sep = "-"))
) %>%
select(data, vazao)
media_global <- mean(data_long$vazao, na.rm = TRUE)
data_long <- data_long %>%
mutate(vazao_normalizada = vazao / media_global)
data_long <- data_long %>%
mutate(ano = as.numeric(format(data, "%Y"))) %>%
filter(ano >= 1940) %>%
mutate(periodo = case_when(
ano >= 1940 & ano < 1970 ~ "1940-1969",
ano >= 1970 & ano < 2000 ~ "1970-1999",
ano >= 2000 & ano <= 2020 ~ "2000-2020"
))
plot_series <- function(data, periodo) {
plot(data$data, data$vazao_normalizada, type = "l", col = "black", lwd = 1.5,
main = paste("Série da Vazão Natural Afluente por Ano Normalizado -", periodo),
xlab = "Data", ylab = "Vazão (p.u.)")
}
data_1949_2020 <- data_long %>% filter(ano >= 1949 & ano <= 2020)
data_1949_2020 <- data_1949_2020 %>%
mutate(media_movel = stats::filter(vazao_normalizada, rep(1/12, 12), sides = 2))
plot(data_1949_2020$data, data_1949_2020$vazao_normalizada, type = "l", col = "black", lwd = 1.5,
main = "Série da Vazão Natural Afluente com Média Móvel - 1949 a 2020",
xlab = "Data", ylab = "Vazão (p.u.)", xaxt = "n")
lines(data_1949_2020$data, data_1949_2020$media_movel, col = "red", lwd = 2)
years <- seq(1949, 2020, by = 10)
axis(1, at = as.Date(paste(years, "-01-01", sep = "")), labels = years)
grid()
legend("topright", legend = c("Série Normalizada", "Média Móvel (12 meses)"),
col = c("black", "red"), lwd = c(1.5, 2), bty = "n")
# Gráfico para 1940-1969
data_1940_1969 <- data_long %>% filter(periodo == "1940-1969")
plot_series(data_1940_1969, "1940 a 1969")
grid()
# Gráfico para 1970-1999
data_1970_1999 <- data_long %>% filter(periodo == "1970-1999")
plot_series(data_1970_1999, "1970 a 1999")
grid()
# Gráfico para 2000-2020
data_2000_2020 <- data_long %>% filter(periodo == "2000-2020")
plot_series(data_2000_2020, "2000 a 2020")
grid()
A série temporal da vazão natural afluente diária normalizada apresenta uma visão detalhada da dinâmica hidrológica ao longo do tempo, considerando os valores reais registrados e normalizados em relação à média histórica. Este tipo de análise permite identificar padrões de variabilidade sazonal, tendências hidrológicas e a ocorrência de eventos extremos, como cheias significativas ou períodos de estiagem.
Período 1 (1940-1960): A série deste período mostra uma variabilidade significativa nos valores de vazão diária, com picos que ocasionalmente ultrapassam 4 p.u., representando eventos de cheia natural. A maior parte dos valores está concentrada abaixo de 2 p.u., indicando um regime hidrológico relativamente estável para a maior parte do tempo. No entanto, eventos como os de 1957 (8 p.u.) refletem desvios extremos, evidenciando a importância de monitorar eventos pontuais de grande magnitude.
Período 2 (1961-1980): O segundo período destaca-se pela maior variabilidade nas vazões diárias, com aumento na frequência e magnitude de eventos extremos. Um exemplo notável é o pico de 1973, que ultrapassa 6 p.u., refletindo uma cheia natural intensa e marcante. Embora os valores típicos permaneçam concentrados abaixo de 2 p.u., a presença de picos mais frequentes indica um regime hidrológico mais dinâmico
Período 3 (1981-2020): No terceiro período, observa-se uma combinação de maior estabilidade com a presença de eventos extremos pontuais, como os registrados em 1983 e 2014. Em 1983, a vazão ultrapassou 15 p.u., representando uma das maiores cheias naturais da série, enquanto em 2014, os valores ultrapassaram 5 p.u., destacando outro evento significativo.
library(dplyr)
library(tidyr)
library(stats)
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
data <- read.csv2("Vazoes_Diarias_1931_2020.csv")
data$Data <- as.Date(data$Data, format = "%d/%m/%Y")
data$Vazao <- as.numeric(gsub(",", ".", data$SLT.SANTIAGO..77.))
data <- na.omit(data)
media_total <- 1019.28148148148
data$Vazao <- data$Vazao / media_total
data_filtrada <- subset(data, as.numeric(format(data$Data, "%Y")) >= 1940 & as.numeric(format(data$Data, "%Y")) <= 2020)
periodo1 <- subset(data_filtrada, as.numeric(format(data_filtrada$Data, "%Y")) >= 1940 & as.numeric(format(data_filtrada$Data, "%Y")) <= 1960)
periodo2 <- subset(data_filtrada, as.numeric(format(data_filtrada$Data, "%Y")) >= 1961 & as.numeric(format(data_filtrada$Data, "%Y")) <= 1980)
periodo3 <- subset(data_filtrada, as.numeric(format(data_filtrada$Data, "%Y")) >= 1981 & as.numeric(format(data_filtrada$Data, "%Y")) <= 2020)
plot_periodo <- function(periodo, titulo) {
plot(periodo$Data, periodo$Vazao, type = "l", col = "black",
xlab = "Ano", ylab = "Vazão Diária Normalizada (p.u.)", main = titulo,
xaxt = "n") # Desativar o eixo x padrão
anos <- seq(from = as.Date(format(min(periodo$Data), "%Y-01-01")),
to = as.Date(format(max(periodo$Data), "%Y-01-01")), by = "5 years")
axis(1, at = anos, labels = format(anos, "%Y"))
}
data_filtrada$Media_Movel <- stats::filter(data_filtrada$Vazao, rep(1/365, 365), sides = 2)
plot(data_filtrada$Data, data_filtrada$Vazao, type = "l", col = "black",
xlab = "Ano", ylab = "Vazão Natural Afluente (p.u.)",
main = "Série da Vazão Natural Afluente Diária - 1949 a 2020",
xaxt = "n")
lines(data_filtrada$Data, data_filtrada$Media_Movel, col = "red", lwd = 2)
anos <- seq(from = as.Date("1949-01-01"), to = as.Date("2020-01-01"), by = "10 years")
axis(1, at = anos, labels = format(anos, "%Y"))
grid()
legend("topright", legend = c("Série Original", "Média Móvel (1 ano)"),
col = c("black", "red"), lwd = c(1, 2), bty = "n")
plot_periodo(periodo1, "Série da Vazão Natural Afluente Diária Normalizada - 1940 a 1960")
grid()
plot_periodo(periodo2, "Série da Vazão Natural Afluente Diária Normalizada - 1961 a 1980")
grid()
plot_periodo(periodo3, "Série da Vazão Natural Afluente Diária Normalizada - 1981 a 2020")
grid()
O primeiro gráfico destaca pontos estatísticos importantes, como o percentil de 95%, que indica que 2,71 p.u. é a vazão que é superada em 95% do tempo; a vazão média, que é de 1 p.u., representando o valor médio das vazões no período analisado; e a mediana, que é de 0,72 p.u. Além disso, o percentil de 5% aponta para uma vazão mínima de 0,22 p.u., indicando que este valor é superado em apenas 5% do tempo.
No segundo gráfico, a posição de cada ponto (Q1, Q2, Q3 e Q4) indica a probabilidade de tempo em que a respectiva quantidade de máquinas estará operando. Sendo assim, o ponto Q4 (vazão de 1,34 p.u.) corresponde a cerca de 20% no eixo de tempo/probabilidade. Da mesma forma, os outros pontos mostram que a operação com três máquinas (Q3) ocorre em cerca de 35% do tempo, duas máquinas (Q2) em aproximadamente 55%, e uma máquina (Q1) em cerca de 85% do tempo. Por fim, a linha verde pontilhada indica os valores de energia assegurada mínima e máxima, que representa o fornecimento mínimo de energia a ser atendido mesmo em condições hidrológicas desfavoráveis.
library(dplyr)
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
data <- read.csv2("Vazao_Natural_Afluente.csv")
data$Data <- as.Date(data$Data, format = "%d/%b/%Y")
colnames(data)[which(names(data) == "SLT.SANTIAGO..77.")] <- "Vazao"
media_vazao <- 1032
Q1 <- 346 / media_vazao
Q2 <- 692 / media_vazao
Q3 <- 1038 / media_vazao
Q4 <- 1384 / media_vazao
vazao_ordenada <- quantile(data$Vazao, probs = seq(0, 1, 0.01))
mediana_vazao <- median(data$Vazao, na.rm = TRUE)
percentil_5 <- quantile(data$Vazao, 0.05, na.rm = TRUE)
percentil_95 <- quantile(data$Vazao, 0.95, na.rm = TRUE)
indice_media <- which.min(abs(vazao_ordenada - 1))
indice_mediana <- which.min(abs(vazao_ordenada - mediana_vazao))
indice_5 <- which.min(abs(vazao_ordenada - percentil_5))
indice_95 <- which.min(abs(vazao_ordenada - percentil_95))
indice_Q1 <- which.min(abs(vazao_ordenada - Q1))
indice_Q2 <- which.min(abs(vazao_ordenada - Q2))
indice_Q3 <- which.min(abs(vazao_ordenada - Q3))
indice_Q4 <- which.min(abs(vazao_ordenada - Q4))
energia_assegurada <- 702.2
k <- 0.008829
canal_de_fuga <- 397.46
altura_max <- 506 - canal_de_fuga
altura_min <- 481 - canal_de_fuga
vazao_max <- 15397
energia_assegurada_pu_min <- energia_assegurada / (k * vazao_max * altura_max)
energia_assegurada_pu_max <- energia_assegurada / (k * vazao_max * altura_min)
plot(rev(vazao_ordenada), type = "l",
xlab = "Tempo/Probabilidade (%)", ylab = "Vazão Afluente (p.u.)",
main = "Gráfico de Persistência - Informações Estatísticas",
xaxt = "n", col = "blue")
axis(1, at = seq(1, length(vazao_ordenada), length.out = 11),
labels = seq(0, 100, by = 10))
points(c(length(vazao_ordenada) - indice_media + 1,
length(vazao_ordenada) - indice_mediana + 1,
length(vazao_ordenada) - indice_5 + 1,
length(vazao_ordenada) - indice_95 + 1),
c(1, mediana_vazao, percentil_5, percentil_95),
col = "blue", pch = 16)
text(length(vazao_ordenada) - indice_media + 1, 1, "Média: 1", pos = 3, col = "blue", offset = 0.5)
text(length(vazao_ordenada) - indice_mediana + 1, mediana_vazao, paste("Mediana:", round(mediana_vazao, 2)), pos = 1, col = "blue", offset = 0.5)
text(length(vazao_ordenada) - indice_5 + 1, percentil_5, paste("5%:", round(percentil_5, 2)), pos = 3, col = "blue", offset = 0.5)
text(length(vazao_ordenada) - indice_95 + 1, percentil_95, paste("95%:", round(percentil_95, 2)), pos = 3, col = "blue", offset = 0.5)
grid()
plot(rev(vazao_ordenada), type = "l",
xlab = "Tempo/Probabilidade (%)", ylab = "Vazão Afluente (p.u.)",
main = "Gráfico de Persistência - Informações Técnicas",
xaxt = "n", col = "blue")
axis(1, at = seq(1, length(vazao_ordenada), length.out = 11),
labels = seq(0, 100, by = 10))
points(c(length(vazao_ordenada) - indice_Q1 + 1,
length(vazao_ordenada) - indice_Q2 + 1,
length(vazao_ordenada) - indice_Q3 + 1,
length(vazao_ordenada) - indice_Q4 + 1),
c(Q1, Q2, Q3, Q4),
col = "red", pch = 16)
text(length(vazao_ordenada) - indice_Q1 + 1, Q1, paste("Q1:", round(Q1, 2)), pos = 4, col = "red", offset = 0.5)
text(length(vazao_ordenada) - indice_Q2 + 1, Q2, paste("Q2:", round(Q2, 2)), pos = 4, col = "red", offset = 0.5)
text(length(vazao_ordenada) - indice_Q3 + 1, Q3, paste("Q3:", round(Q3, 2)), pos = 4, col = "red", offset = 0.5)
text(length(vazao_ordenada) - indice_Q4 + 1, Q4, paste("Q4:", round(Q4, 2)), pos = 4, col = "red", offset = 0.5)
abline(h = energia_assegurada_pu_max, col = "darkgreen", lty = 2)
abline(h = energia_assegurada_pu_min, col = "darkgreen", lty = 2)
text(length(vazao_ordenada) * 0.1, energia_assegurada_pu_max,
paste("EA MAX:", round(energia_assegurada_pu_max, 3)), pos = 3, col = "darkgreen", offset = 0.5, cex = 0.8)
text(length(vazao_ordenada) * 0.1, energia_assegurada_pu_min - 0.8,
paste("EA MIN:", round(energia_assegurada_pu_min, 3)), pos = 3, col = "darkgreen", offset = 0.5, cex = 0.8)
grid()
O primeiro gráfico representa a energia calculada a partir da persistência da vazão natural afluente normalizada. Ele mostra como a energia disponível varia em função dos percentis, refletindo a probabilidade acumulada da vazão ao longo do tempo. A curva decrescente indica que, à medida que se avançam os percentis, a energia disponível diminui significativamente.
library(dplyr)
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
data <- read.csv2("Vazao_Natural_Afluente.csv")
data$Data <- as.Date(data$Data)
colnames(data)[which(names(data) == "SLT.SANTIAGO..77.")] <- "Vazao"
media_vazao <- 1095
vazao <- 1 - quantile(data$Vazao, probs = seq(0, 1, length.out = length(data$Vazao)))
vazao_ordenada <- sort(data$Vazao, decreasing = TRUE)
energia_max <- vazao_ordenada
energia_max_ajustada <- energia_max * vazao
geracao_real <- read.csv2("Geracao_real_formatada.csv")
media <- mean(geracao_real$Dados)
energia_real_gerada_norm <- geracao_real$Dados /media
percentil2 <- 1 - quantile(energia_real_gerada_norm, probs = seq(0, 1, length.out = length(energia_real_gerada_norm)), na.rm = TRUE)
energia_real_ordenada <- sort(energia_real_gerada_norm, decreasing = TRUE)
energia_real_ajustada <- energia_real_ordenada * percentil2
energia_real_ajustada <- rev(energia_real_ajustada)
plot(seq(0, 100, length.out = length(energia_max_ajustada)),
energia_max_ajustada,
type = "l",
col = "blue",
lwd = 2,
xlab = "Percentis",
ylab = "Vazão x Probabilidade",
main = "Persistência: Vazão Natural Afluente")
grid()
plot(seq(0, 100, length.out = length(energia_real_ajustada)),
energia_real_ajustada,
type = "l",
col = "orange",
lwd = 2,
xlab = "Percentis",
ylab = "Energia Gerada x Probabilidade",
main = "Persistência: Energia Gerada Normalizada")
grid()
plot(seq(0, 100, length.out = length(energia_max_ajustada)), energia_max_ajustada, type = "l", col = "blue", lwd = 2,
xlab = "Percentis", ylab = "Valor x Probabilidade",
main = "Persistência: Vazão Natural Afluente x Energia Gerada", ylim = range(c(energia_max_ajustada, energia_real_ajustada)))
lines(seq(0, 100, length.out = length(energia_real_ajustada)), energia_real_ajustada, col = "orange", lwd = 2)
legend("topright",
legend = c("Vazão x Probabilidade", "Energia Gerada x Probabilidade"),
col = c("blue", "orange"),
lwd = 2,
cex = 0.8,
box.lwd = 1,
bg = "white",
inset = 0.05)
grid()
O gráfico analisa o impacto da adição de uma nova máquina (Q5) na geração de energia, considerando diferentes alturas operacionais (máxima, média e mínima). Observa-se que a máquina Q5 opera em menos de 10% do tempo, indicando que sua utilização depende de vazões muito elevadas. Isso demonstra que adicionar mais máquinas pode não ser eficiente, pois o investimento e os custos podem não ser compensados pela baixa frequência de operação.
library(dplyr)
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
data <- read.csv2("Vazao_Natural_Afluente.csv")
data$Data <- as.Date(data$Data, format = "%d/%b/%Y")
colnames(data)[which(names(data) == "SLT.SANTIAGO..77.")] <- "Vazao"
media_vazao <- 1095
vazao_ordenada <- quantile(data$Vazao, probs = seq(0, 1, 0.01))
energia_assegurada <- 702.2
k <- 0.008829
canal_de_fuga <- 397.46
altura_max <- 506 - canal_de_fuga
altura_min <- 481 - canal_de_fuga
altura_media <- (altura_max + altura_min) / 2
energia_max <- vazao_ordenada * k * altura_max
energia_media <- vazao_ordenada * k * altura_media
energia_min <- vazao_ordenada * k * altura_min
Q1 <- 346/1095
Q2 <- 692/1095
Q3 <- 1038/1095
Q4 <- 1384/1095
Q5 <- 1730/1095
indice_Q1 <- which.min(abs(vazao_ordenada - Q1))
indice_Q2 <- which.min(abs(vazao_ordenada - Q2))
indice_Q3 <- which.min(abs(vazao_ordenada - Q3))
indice_Q4 <- which.min(abs(vazao_ordenada - Q4))
indice_Q5 <- which.min(abs(vazao_ordenada - Q5))
energia_max <- rev(energia_max)
energia_media <- rev(energia_media)
energia_min <- rev(energia_min)
plot(energia_max, type = "l",
xlab = "Tempo/Probabilidade (%)", ylab = "Energia (p.u.)",
main = "Adição de uma Nova Máquina - Q5",
xaxt = "n", col = "blue", lwd = 2)
axis(1, at = seq(1, length(energia_max), length.out = 11),
labels = seq(0, 100, by = 10))
lines(energia_media, col = "green", lwd = 2, lty = 2)
lines(energia_min, col = "red", lwd = 2, lty = 3)
abline(v = length(energia_max) - indice_Q1 + 1, col = "purple", lty = 2)
abline(v = length(energia_max) - indice_Q2 + 1, col = "purple", lty = 2)
abline(v = length(energia_max) - indice_Q3 + 1, col = "purple", lty = 2)
abline(v = length(energia_max) - indice_Q4 + 1, col = "purple", lty = 2)
abline(v = length(energia_max) - indice_Q5 + 1, col = "black", lty = 2)
text(length(energia_max) - indice_Q1 + 1, max(energia_max) * 0.9, "Q1", pos = 4, col = "purple")
text(length(energia_max) - indice_Q2 + 1, max(energia_max) * 0.9, "Q2", pos = 4, col = "purple")
text(length(energia_max) - indice_Q3 + 1, max(energia_max) * 0.9, "Q3", pos = 4, col = "purple")
text(length(energia_max) - indice_Q4 + 1, max(energia_max) * 0.9, "Q4", pos = 4, col = "purple")
text(length(energia_max) - indice_Q5 + 1, max(energia_max) * 0.9, "Q5", pos = 4, col = "black")
legend("topright",
legend = c("Altura Máxima", "Altura Média", "Altura Mínima",
"Turbinas Q1-Q4", "Q5 - Nova Máq. Inserida"),
col = c("blue", "green", "red", "purple", "black"),
lty = c(1, 2, 3, 2, 2, 2), lwd = 2,
cex = 0.9,
inset = c(0.01, 0.2),
x.intersp = 0.8,
y.intersp = 0.8)
grid()
O gráfico de autocorrelação da média móvel de 12 meses para a vazão natural afluente indica uma alta correlação entre os valores da série temporal em todos os atrasos (lags), com as barras verticais próximas de 1 ao longo do eixo horizontal. Além disso, não há uma queda significativa na autocorrelação com o aumento dos atrasos, sugerindo que a série apresenta uma forte dependência entre os valores consecutivos.
No histograma, maioria dos valores da média móvel está concentrada em torno de 1, indicando que essa é a vazão predominante. Além disso, observa-se uma assimetria na parte da direita, com ocorrências de vazões mais elevadas. O gráfico mostra que as vazões abaixo de 1 também ocorrem com frequência significativa.
Por fim, o último gráfico apresenta a decomposição de uma série temporal multiplicativa, dividida em quatro componentes: observado, tendência, sazonalidade e aleatoriedade (resíduo). A linha “observed” mostra os valores originais da série ao longo do tempo, evidenciando flutuações cíclicas e variações de longo prazo. A componente “trend” isola a tendência de longo prazo da série, destacando períodos de aumento e diminuição gradual das vazões. A componente “seasonal” captura o comportamento sazonal periódico, indicando padrões repetitivos que ocorrem em intervalos regulares, como variações anuais. Por fim, a componente “random” representa os resíduos, ou seja, as variações que não podem ser explicadas pela tendência ou sazonalidade.
library(zoo)
library(forecast)
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
dados <- read.csv2("Vazoes_Diarias_1931_2020.csv")
dados$Data <- as.Date(dados$Data, format = "%d/%m/%Y")
dados$Vazao <- as.numeric(gsub(",", ".", dados$SLT.SANTIAGO..77.))
dados <- na.omit(dados)
serie_temporal <- zoo(dados$Vazao, order.by = dados$Data)
media_movel_12m <- rollmean(serie_temporal, 365, align = "center", fill = NA)
media_movel_12m <- na.omit(media_movel_12m)
media_movel_12m_pu <- media_movel_12m / 1032
summary(media_movel_12m_pu)
## Index media_movel_12m_pu
## Min. :1941-06-01 Min. :0.3021
## 1st Qu.:1961-03-09 1st Qu.:0.7400
## Median :1980-12-16 Median :0.9683
## Mean :1980-12-16 Mean :1.0040
## 3rd Qu.:2000-09-23 3rd Qu.:1.2057
## Max. :2020-07-02 Max. :2.8047
acf(media_movel_12m_pu, main = "Autocorrelação da Média Móvel (12 meses) Vazão Natural afluente")
hist(media_movel_12m_pu,
main = "Histograma da Média Móvel de 12 Meses da Vazão Natural Afluente",
xlab = "Vazão (p.u.)",
ylab = "Porcentagem de Ocorrência (%)",
col = "lightgreen",
border = "black",
breaks = 300,
freq = FALSE)
ano_inicial <- as.numeric(format(index(media_movel_12m_pu)[1], "%Y"))
media_movel_mensal_pu <- aggregate(media_movel_12m_pu, as.yearmon, mean)
serie_temporal_pu <- ts(coredata(media_movel_mensal_pu), start = c(ano_inicial, 1), frequency = 12)
decomposicao_pu <- decompose(serie_temporal_pu, type = "multiplicative")
plot(decomposicao_pu)
grid()
O gráfico apresenta a variação da vazão natural afluente normalizada ao longo do tempo, mostrando as diferenças entre os valores consecutivos. A linha azul msotra a intensidade das oscilações diárias na série de vazão, evidenciando períodos de maior instabilidade, como observado nas décadas de 1970 e 1980, onde há picos mais expressivos.
vazao_data <- read.csv2("Vazao_Natural_Afluente.csv")
vazao_data$Data <- as.Date(vazao_data$Data, format = "%d/%m/%Y")
vazao_data$Vazao <- as.numeric(gsub(",", ".", vazao_data$SLT.SANTIAGO..77.))
vazao_diff <- diff(vazao_data$Vazao, differences = 1)
vazao_data <- vazao_data[-1, ]
vazao_data$Vazao_diff <- vazao_diff
plot(vazao_data$Data, vazao_data$Vazao_diff, type = "l", col = "blue",
main = "Variação da Vazão Natural Afluente Normalizada",
xlab = "Data", ylab = "Diferença da Vazão (pu)")
grid()
Primeiramente, observa-se que menor média móvel registrada foi de 690,41 MW, ocorrendo entre 18 de fevereiro de 1950 e 17 de agosto de 1957. Durante este período crítico, a média da energia natural afluente foi de 842,14 MW, significativamente inferior à média geral da série histórica, que é de 1011,37 MW.
Comparando com o período crítico do SIN, que se estendeu de 1949 a 1956, como pode ser observado na gráfico do zoom abaixo, percebe-se uma sobreposição parcial entre ambos os períodos críticos. O período do SIN também coincide com eventos hidrológicos desfavoráveis.
library(dplyr)
library(lubridate)
library(zoo)
data <- read.csv2("Vazoes_Diarias_1931_2020.csv")
data$Data <- as.Date(data$Data, format = "%d/%m/%Y")
data$Vazao <- as.numeric(gsub(",", ".", data$SLT.SANTIAGO..77.))
data <- data %>% filter(!is.na(Vazao) & Vazao >= 0)
prod_esp <- 0.008829 # Fator específico de produção da usina em MW/(m³/s) - Hidr
hef <- 506 - 397.46 # Altura efetiva da usina em metros - Hidr
data <- data %>%
mutate(Energia_Natural = Vazao * prod_esp * hef)
data <- data %>%
mutate(Energia_Media_Movel = rollmean(Energia_Natural, k = 2737, fill = NA, align = "right"))
data <- data %>% filter(!is.na(Energia_Media_Movel))
min_media_movel <- min(data$Energia_Media_Movel, na.rm = TRUE)
periodo_critico <- data %>% filter(Energia_Media_Movel == min_media_movel)
data_inicio <- min(periodo_critico$Data)
data_fim <- data_inicio + 2737
dados_criticos <- data %>% filter(Data >= data_inicio & Data <= data_fim)
dados_sin <- data %>% filter(Data >= as.Date("1949-01-01") & Data <= as.Date("1956-12-31"))
plot(data$Data, data$Energia_Natural, type = "l", col = "black", lwd = 1,
main = "Período Crítico",
xlab = "Data", ylab = "Energia Natural Afluente (MW)")
lines(data$Data, data$Energia_Media_Movel, col = "blue", lwd = 2)
lines(dados_criticos$Data, dados_criticos$Energia_Natural, col = "red", lwd = 2)
lines(dados_sin$Data, dados_sin$Energia_Natural, col = "green", lwd = 2)
legend("topleft", legend = c("Energia Natural", "Média Móvel", "Período Crítico Usina", "Período Crítico SIN"),
col = c("black", "blue", "red", "green"), lty = c(1, 1, 1, 1), cex = 0.8)
grid()
dados_criticos <- data %>% filter(Data >= data_inicio & Data <= data_fim)
dados_sin <- data %>%
filter(Data >= as.Date("1949-01-01") & Data <= as.Date("1956-12-31"))
serie_aux <- data %>%
filter(Data >= (data_inicio - years(2)) & Data <= (data_fim + years(2)))
plot(serie_aux$Data, serie_aux$Energia_Natural, type = "l", col = "black", lwd = 1,
main = "Período Crítico - Zoom",
xlab = "Data", ylab = "Energia Natural Afluente (MW)")
lines(serie_aux$Data, serie_aux$Energia_Media_Movel, col = "blue", lwd = 2)
lines(dados_criticos$Data, dados_criticos$Energia_Natural, col = "red", lwd = 2)
lines(dados_sin$Data, dados_sin$Energia_Natural, col = "green", lwd = 2)
legend("topleft", legend = c("Energia Natural", "Média Móvel", "Período Crítico Usina", "Período Crítico SIN"),
col = c("black", "blue", "red", "green"), lty = c(1, 1, 1, 1), cex = 0.8)
grid()
min_media_movel <- min(data$Energia_Media_Movel, na.rm = TRUE)
periodo_critico_valor <- data %>% filter(Energia_Media_Movel == min_media_movel)
print(paste("Menor média móvel: ", min_media_movel, "MW"))
## [1] "Menor média móvel: 690.410263741492 MW"
print(paste("Período crítico inicia em: ", min(periodo_critico_valor$Data)))
## [1] "Período crítico inicia em: 1950-02-18"
print(paste("Período crítico termina em: ", min(periodo_critico_valor$Data) + 2737))
## [1] "Período crítico termina em: 1957-08-17"
media_geral <- mean(data$Energia_Natural, na.rm = TRUE)
media_critico <- mean(dados_criticos$Energia_Natural, na.rm = TRUE)
print(paste("Média geral da energia natural afluente: ", media_geral, "MW"))
## [1] "Média geral da energia natural afluente: 1011.36502931146 MW"
print(paste("Média no período crítico: ", media_critico, "MW"))
## [1] "Média no período crítico: 842.143451211651 MW"
A vazão defluente é o volume de água que escoa de um reservatório, resultante da soma de três componentes principais: a vazão turbinada, que representa a quantidade de água utilizada para geração de energia elétrica através das turbinas; a vazão vertida, que corresponde ao excedente de água liberado pelas comportas quando o reservatório atinge sua capacidade máxima; e a vazão destinada a outros usos, como abastecimento humano, irrigação ou preservação ambiental. Esse parâmetro é essencial para o gerenciamento de recursos hídricos, garantindo tanto a eficiência operacional de usinas quanto a manutenção dos múltiplos usos da água no sistema.
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
vazao_defluente <- read.csv2("Vazao_defluente.csv")
vazao_defluente <- as.numeric(vazao_defluente[1, ])
# Fazer o sumário estatístico dos valores de vazão natural afluente
summary(vazao_defluente)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 601.8 1013.0 1093.5 1342.2 13654.0
O histograma da vazão defluente reflete a distribuição das diferentes condições operacionais do reservatório, considerando a soma das vazões turbinada, vertida e destinada a outros usos. A predominância de vazões mais baixas no gráfico pode indicar períodos em que a água disponível é majoritariamente utilizada para geração de energia, com menor necessidade de vertimento. Já os valores mais altos, embora raros, provavelmente representam momentos em que o reservatório atinge sua capacidade máxima, exigindo o vertimento para evitar transbordamentos.
O histograma mostra que a maior parte das ocorrências se concentra em baixas vazões, próximas de 1000 m³/s, enquanto vazões elevadas são raras. Esse padrão influencia diretamente a operação da usina, pois vazões defluentes mais baixas podem limitar a capacidade de geração de energia, especialmente em períodos de estiagem.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# HISTOGRAMA VAZÃO Defluente
vazao_defluente <- read.csv2("Vazao_defluente.csv")
vazao_defluente <- as.numeric(vazao_defluente[1, ])
hist_data <- hist(vazao_defluente,
plot = FALSE,
breaks = 150)
total_dados <- length(vazao_defluente)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Defluente",
xlab = "Vazão (m³/s)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
O boxplot da vazão defluente apresentado mostra que a maioria dos valores está concentrada em uma faixa baixa, com uma mediana próxima a 1000 m³/s, enquanto a média, destacada em vermelho, é ligeiramente superior a 1093 m³/s, indicando a influência de valores mais altos na distribuição. Os bigodes representam a extensão das vazões dentro de uma variação normal, enquanto os diversos pontos acima do limite superior indicam valores atípicos (outliers), representando vazões muito elevadas, associadas a períodos de cheias.
# BOXPLOT VAZÃO Defluente
# VAZÃO Defluente
vazao_defluente <- read.csv2("Vazao_defluente.csv")
vazao_defluente <- as.numeric(vazao_defluente[1, ])
media_vazao <- mean(vazao_defluente, na.rm = TRUE)
# Gerar o box plot dos dados de vazão
boxplot(vazao_defluente,
main = "Box Plot dos Valores de Vazão Defluente",
ylab = "Vazão (m³/s)",
xlab = "Vazão Defluente",
col = "lightblue",
border = "black",
outline = TRUE,
notch = TRUE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
O boxplot da vazão defluente por ano demonstra a variação interanual das vazões, com a mediana (linha central de cada caixa) indicando o valor central em cada ano e os bigodes mostrando a amplitude das vazões dentro do intervalo esperado. Observa-se que a maioria das vazões está concentrada em faixas baixas, com alguns anos apresentando outliers significativos, representando eventos de cheias ou descargas extraordinárias. A linha vermelha pontilhada, correspondente à média geral de 1093,53 m³/s, está consistentemente acima das medianas anuais, reforçando que os valores extremos influenciam o aumento da média.
# BOXPLOT NORMALIZADO POR ANO
vazao_defluente <- read.csv2("Vazao_defluente.csv", encoding = "latin1", sep = ";")
nomes_colunas <- colnames(vazao_defluente )
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de vazão e seus respectivos anos
df_vazao_anos <- data.frame(
vazao_defluente = as.numeric(vazao_defluente [1, ]),
ano = anos
)
media_vazao <- 1093.53
# Gerar o boxplot dos dados de vazão por ano
boxplot(vazao_defluente ~ ano, data = df_vazao_anos,
main = "Box Plot dos Valores de Vazão Defluente",
ylab = "Vazão (m³/s)",
xlab = "Vazão Defluente",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_vazao, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
vazao_defluente <- read.csv2("Vazao_defluente_normalizado.csv")
vazao_defluente <- as.numeric(vazao_defluente[1, ])
# Fazer o sumário estatístico dos valores
summary(vazao_defluente)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 0.55 0.93 1.00 1.23 12.49
O histograma da vazão defluente normalizada pela média das vazões (em p.u.) destaca que a maior parte das ocorrências está concentrada em valores inferiores a 1 p.u., indicando que, na maior parte do tempo, a vazão defluente da usina está abaixo da média histórica. Isso reflete uma predominância de condições hidrológicas de baixa vazão. A cauda longa à direita, com poucos valores acima de 2 p.u.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# HISTOGRAMA VAZÃO Defluente - NORMALIZADO
vazao_defluente_normalizado <- read.csv2("Vazao_defluente_normalizado.csv")
vazao_defluente_normalizado <- as.numeric(vazao_defluente_normalizado[1, ])
hist_data <- hist(vazao_defluente_normalizado,
plot = FALSE,
breaks = 150)
total_dados <- length(vazao_defluente_normalizado)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Defluente ",
xlab = "Vazão Defluente (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
O histograma da vazão defluente, após a aplicação do logaritmo, apresenta uma distribuição centrada em torno de 0, o que reflete a média dos valores log-transformados. Isso ocorre porque, antes da transformação, a média normalizada era igual a 1, e o logaritmo de 1 é zero. O gráfico revela uma assimetria na distribuição, com maior densidade de ocorrências concentradas em valores ligeiramente abaixo de zero, indicando que a maioria das vazões está abaixo da média normalizada. Os valores positivos correspondem a vazões acima da média, enquanto os valores negativos refletem vazões mais baixas.
vazao_defluente_normalizado <- read.csv2("Vazao_defluente_normalizado.csv")
vazao_defluente_log <- log(vazao_defluente_normalizado)
vazao_defluente_log <- vazao_defluente_log[!is.na(vazao_defluente_log)]
# Histograma
hist_data <- hist(vazao_defluente_log,
plot = FALSE,
breaks = 150)
total_dados <- length(vazao_defluente_log)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Afluente",
xlab = "Vazão (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
O boxplot da vazão defluente normalizada reflete os valores do sumário estatístico, destacando que o mínimo registrado é 0, enquanto o primeiro quartil (Q1) é 0,55, indicando que 25% das vazões estão abaixo desse valor. A mediana, em 0,93, mostra que metade das vazões está abaixo da média normalizada (1), evidenciada pelo ponto vermelho. O terceiro quartil (Q3), em 1,23, revela que 75% das vazões estão abaixo desse limite, enquanto os valores acima disso, especialmente o máximo de 12,49, aparecem como outliers no gráfico, representando eventos extremos.
# BOXPLOT VAZÃO Defluente - NORMALIZADO
# VAZÃO Defluente
vazao_defluente <- read.csv2("Vazao_defluente_normalizado.csv")
vazao_defluente <- as.numeric(vazao_defluente[1, ])
media_vazao <- mean(vazao_defluente, na.rm = TRUE)
# Gerar o box plot dos dados de vazão
boxplot(vazao_defluente,
main = "Box Plot dos Valores de Vazão Defluente - Normalizado",
ylab = "Vazão (m³/s)",
xlab = "Vazão Defluente",
col = "lightblue",
border = "black",
outline = TRUE,
notch = TRUE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
O boxplot da vazão defluente por ano apresenta a variabilidade anual das vazões normalizadas, com a média de 1 destacada pela linha vermelha. A maior parte das vazões está concentrada abaixo da média em todos os anos, como evidenciado pela posição das medianas abaixo ou próximas de 1. Os bigodes mostram a amplitude interquartil, enquanto os diversos outliers ao longo dos anos indicam eventos de alta vazão, com valores superiores a 2 p.u., chegando até 12 p.u. em alguns períodos.
# BOXPLOT NORMALIZADO POR ANO
vazao_defluente <- read.csv2("Vazao_defluente_normalizado.csv", encoding = "latin1", sep = ";")
nomes_colunas <- colnames(vazao_defluente)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de vazão e seus respectivos anos
df_vazao_anos <- data.frame(
vazao_defluente = as.numeric(vazao_defluente[1, ]),
ano = anos
)
media_vazao <- 1
# Gerar o boxplot dos dados de vazão por ano
boxplot(vazao_defluente~ ano, data = df_vazao_anos,
main = "Boxplot Vazão Defluente por Ano",
xlab = "Ano",
ylab = "Vazão Defluente (p.u.)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_vazao, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", media_vazao), col = "red", pch = 19, bty = "n")
# BOXPLOT NORMALIZADO POR ANO
vazao_defluente_normalizado <- read.csv2("Vazao_defluente_normalizado.csv", encoding = "latin1", sep = ";")
nomes_colunas <- colnames(vazao_defluente_normalizado)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de vazão (com log) e seus respectivos anos
df_vazao_anos <- data.frame(
vazao_defluente_log = log(as.numeric(vazao_defluente_normalizado[1, ])),
ano = anos
)
media_vazao_log <- log(1) # Aplicando log na média original
# Gerar o boxplot dos dados de vazão (com log) por ano
boxplot(vazao_defluente_log ~ ano, data = df_vazao_anos,
main = "Boxplot Vazão Afluente (Log) por Ano",
xlab = "Ano",
ylab = "Vazão Afluente (log(p.u.))",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_vazao_log, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("bottomright", legend = paste("Média =", round(media_vazao_log, 2)), col = "red", pch = 19, bty = "n")
A análise da série temporal da vazão defluente anual evidencia flutuações significativas ao longo dos anos, com a vazão média variando entre aproximadamente 4 e 14 p.u. Entre 2000 e 2006, houve uma tendência de queda, com o menor valor registrado em 2006, indicando um período de baixa vazão, possivelmente relacionado a condições de seca. Após esse ponto, observa-se uma recuperação gradual, atingindo um pico em 2012, com vazões médias superiores a 14 p.u., sugerindo um ano de alta afluência ou eventos de cheia.
Entre 2015 e 2020, há novamente uma redução nas vazões médias, destacando 2020 como um dos anos com menor valor médio na série, abaixo de 6 p.u. O aumento expressivo em 2024, voltando a valores superiores a 14 p.u., indica uma possível recuperação nas condições hídricas.
# Série da Vazão Afluente por Ano
library(dplyr)
library(lubridate)
vazao_data <- read.csv2("Vazao_defluente_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
vazao_annual_mean <- vazao_data %>%
group_by(Ano = year(Data)) %>%
summarize(Vazao_Media = mean(Vazao, na.rm = TRUE))
# Plotar a série temporal anual com marcações de ano
plot(vazao_annual_mean$Ano, vazao_annual_mean$Vazao_Media*10, type = "o",
xlab = "Período", ylab = "Vazão Defluente (p.u.)",
main = "Série Vazão Defluente por Ano", xaxt = "n")
# Adicionar os anos no eixo x
axis(1, at = vazao_annual_mean$Ano, labels = vazao_annual_mean$Ano)
grid()
A série geral da vazão defluente diária (2000-2024) apresenta alta variabilidade, com valores oscilando predominantemente abaixo de 2 p.u. em dias regulares, indicando estabilidade na maior parte do período. Entretanto, há picos significativos, ultrapassando 12 p.u., que se destacam como eventos extremos, possivelmente relacionados a cheias ou descargas controladas do reservatório. Esses picos ocorrem de forma esporádica, como em 2006, 2012, 2015, 2020 e 2024, demonstrando a ocorrência de condições hidrológicas excepcionais.
Série da Vazão Defluente Diária - Todo Período de Análise
# Série da Vazão Defluente Diária
vazao_data <- read.csv2("Vazao_defluente_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Plotar a série temporal diária
plot(vazao_data$Data, vazao_data$Vazao, type = "l",
xlab = "Período", ylab = "Vazão Defluente (p.u.)",
main = "Série Vazão Defluente Diária", xaxt = "n")
axis.Date(1, at = seq(min(vazao_data$Data), max(vazao_data$Data), by = "1 year"), format = "%Y")
grid()
Série da Vazão Defluente Diária em Períodos (2000 - 2012) e (2013 - 2024)
# Série da Vazão Defluente Diária em Períodos (2000 - 2012) e (2013 - 2024
vazao_data <- read.csv2("Vazao_defluente_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Dividir os dados em dois períodos (2000 - 2012) e (2013 - 2024)
vazao_periodo1 <- vazao_data %>% filter(Data >= as.Date("2000-01-01") & Data <= as.Date("2012-12-31"))
vazao_periodo2 <- vazao_data %>% filter(Data >= as.Date("2013-01-01") & Data <= as.Date("2024-12-31"))
par(mfrow = c(2, 1), mar = c(4, 4, 2, 1))
# Plotar o primeiro período (2000 - 2012)
plot(vazao_periodo1$Data, vazao_periodo1$Vazao, type = "l",
xlab = "Período", ylab = "Vazão Defluente (p.u.)",
main = "Série Vazão Defluente Diária (2000-2012)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo1$Data), max(vazao_periodo1$Data), by = "1 year"), format = "%Y")
grid()
# Plotar o segundo período (2013 - 2024)
plot(vazao_periodo2$Data, vazao_periodo2$Vazao, type = "l",
xlab = "Período", ylab = "Vazão Defluente (p.u.)",
main = "Série Vazão Defluente Diária (2013-2024)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo2$Data), max(vazao_periodo2$Data), by = "1 year"), format = "%Y")
grid()
par(mfrow = c(1, 1))
#Diária!!!! è essa
library(dplyr)
library(lubridate)
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# Carregar os dados
vazao_data <- read.csv2("Vazao_defluente_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
vazao_ts <- ts(vazao_data$Vazao, start = c(2000, 1), frequency = 365)
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
par(mfrow = c(3, 1), mar = c(4, 4, 2, 2))
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência")
grid()
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade")
grid()
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído")
grid()
par(mfrow = c(1, 1))
O Nível de Montante diário em metros (m) é uma variável crucial para a operação e análise da Usina Hidrelétrica Salto Santiago, pois está diretamente relacionado à eficiência energética e à capacidade de armazenamento do reservatório. De acordo com o arquivo .Hidr fornecido, a cota máxima operacional da usina é de 506 m, representando o limite superior seguro para o armazenamento de água. Este nível indica a altura da lâmina d’água no reservatório, que influencia diretamente na altura efetiva (hef), utilizada no cálculo da energia gerada.
#Nível de Montante
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
nivel_montante <- read.csv2("Nivel_Montante.csv")
nivel_montante <- as.numeric(nivel_montante[1, ])
# Fazer o sumário estatístico dos valores
summary(nivel_montante)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 483.0 494.0 501.0 499.2 505.0 507.0
No histograma apresentado, o eixo Y representa a porcentagem de ocorrência de cada intervalo de nível (m). Observa-se que a maior porcentagem de ocorrência, aproximadamente 20%, está concentrada no intervalo de maior nível de montante, em torno de 505 m. Nos demais intervalos de níveis, a porcentagem de ocorrência é significativamente menor, com valores abaixo de 5% na maioria dos casos.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# HISTOGRAMA
nivel_montante <- read.csv2("Nivel_Montante.csv")
nivel_montante <- as.numeric(nivel_montante[1, ])
hist_data <- hist(nivel_montante,
plot = FALSE,
breaks = 100)
total_dados <- length(nivel_montante)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Vazão Afluente ",
xlab = "Nível (m)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
O boxplot, aliado aos valores do sumário estatístico, reforça a estabilidade do Nível de Montante da usina. O valor mínimo de 483 m e o máximo de 507 m indicam o intervalo total de operação. A mediana de 501 m está próxima da média de 499,2 m, mostrando que a distribuição é quase simétrica, com leve concentração em torno dos valores centrais.
O valor máximo registrado de 507 m, superior à cota máxima operacional de 506 m, pode ter ocorrido devido a condições excepcionais, como um período de chuvas intensas e repentinas que levaram a um aumento rápido do nível do reservatório. Essa situação pode ter excedido momentaneamente a capacidade de controle do vertedouro ou das estruturas de escoamento, resultando em um valor acima do limite.
nivel_montante <- read.csv2("Nivel_Montante.csv")
nivel_montante <- as.numeric(nivel_montante[1, ])
media_vazao <- mean(nivel_montante, na.rm = TRUE)
# Gerar o box plot dos dados de vazão
boxplot(nivel_montante,
main = "Box Plot dos Valores de Nível de Montante",
ylab = "Nível(m)",
xlab = "Nível de Montante",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
O boxplot do Nível de Montante por ano, considerando a cota máxima da usina de 506 m, evidencia a variação do nível de montante ao longo dos anos. Observa-se que a maior parte dos valores médios e quartis superiores estão abaixo dessa cota máxima, o que indica que a operação da usina tem mantido o reservatório geralmente dentro de níveis seguros. Em alguns anos, como os representados pelas caixas mais próximas de 506 m, o nível se aproximou desse limite, destacando períodos em que o reservatório esteve próximo de sua capacidade máxima.
# BOXPLOT NORMALIZADO POR ANO
nivel_montante <- read.csv2("Nivel_Montante.csv", encoding = "latin1", sep = ";")
nomes_colunas <- colnames(nivel_montante)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de vazão e seus respectivos anos
df_vazao_anos <- data.frame(
nivel_montante = as.numeric(nivel_montante[1, ]),
ano = anos
)
media_vazao <- mean(df_vazao_anos$nivel_montante, na.rm = TRUE)
# Gerar o boxplot
boxplot(nivel_montante ~ ano, data = df_vazao_anos,
main = "Box Plot Nível de Montante por Ano",
xlab = "Ano",
ylab = "Nível de Montante (m)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_vazao, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("bottomright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
nivel_montante <- read.csv2("Nivel_Montante_normalizado.csv")
nivel_montante <- as.numeric(nivel_montante [1, ])
# Fazer o sumário estatístico dos valores
summary(nivel_montante )
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9545 0.9763 0.9901 0.9865 0.9980 1.0020
O histograma do Nível de Montante, normalizado pelo valor máximo de 506 m, mostra que a maior parte dos dados está concentrada próxima a 1,00 p.u., ou seja, o nível máximo do reservatório. Isso é evidenciado pela frequência máxima de aproximadamente 20% para essa faixa, indicando que o reservatório frequentemente opera próximo ao seu limite superior normalizado.
Os valores abaixo de 1,00 p.u. apresentam uma distribuição mais dispersa e frequências reduzidas, em sua maioria inferiores a 8%, representando níveis de montante proporcionalmente menores, que ocorrem menos frequentemente.
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# Carregar os dados
nivel_montante_normalizado <- read.csv2("Nivel_Montante_normalizado.csv")
# Transformar os dados em um vetor numérico
nivel_montante_normalizado <- as.numeric(unlist(nivel_montante_normalizado))
hist_data <- hist(nivel_montante_normalizado,
plot = FALSE,
breaks = 100)
total_dados <- length(nivel_montante_normalizado)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma do Nível de Montante ",
xlab = "Nível (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
axis(2,
at = seq(0, max(freq)),
labels = round(seq(0, max(freq)), 4),
las = 1)
grid()
O histograma do Nível de Montante com os valores normalizados e o logaritmo aplicado apresenta uma concentração significativa próxima a 0,00 p.u., o que representa os níveis mais altos do reservatório após a transformação logarítmica. Essa alta frequência de ocorrências nesta faixa, com um pico próximo a 20%, reforça que o reservatório opera frequentemente próximo do limite superior normalizado (506 m).
Nas faixas de valores menores, correspondentes a níveis log-transformados abaixo de 0,00 p.u., observa-se uma maior dispersão e uma frequência gradativamente reduzida, geralmente abaixo de 5%.
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# Carregar os dados
nivel_montante_normalizado <- read.csv2("Nivel_Montante_normalizado.csv")
nivel_montante_normalizado_log <- log(nivel_montante_normalizado)
nivel_montante_normalizado_log <- nivel_montante_normalizado_log[!is.na(nivel_montante_normalizado_log)]
# Histograma
hist_data <- hist(nivel_montante_normalizado_log,
plot = FALSE,
breaks = 150)
total_dados <- length(nivel_montante_normalizado_log)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma do Nível de Montante",
xlab = "Nível (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
O boxplot do Nível de Montante normalizado evidencia uma operação estável do reservatório, com a maioria dos valores concentrados entre 0,9763 p.u. (primeiro quartil) e 0,9980 p.u. (terceiro quartil), enquanto a mediana é de 0,9901 p.u., próxima ao limite máximo normalizado de 1,00 p.u..
# BOXPLOT
nivel_montante_normalizado <- read.csv2("Nivel_Montante_normalizado.csv")
nivel_montante_normalizado <- as.numeric(nivel_montante_normalizado[1, ])
media_vazao <- mean(nivel_montante_normalizado, na.rm = TRUE)
boxplot(nivel_montante_normalizado,
main = "Box Plot do Nível de Montante - Normalizado",
ylab = "Nível (m)",
xlab = "Nível de Montante",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 3)), col = "red", pch = 19, bty = "n")
O boxplot do Nível de Montante normalizado por ano evidencia a variação anual dos níveis em relação à média geral de 0,986 p.u., representada pela linha tracejada vermelha. Observa-se que a maior parte dos anos apresenta uma mediana próxima à média geral, indicando consistência nos níveis de operação do reservatório ao longo do período analisado.
Em 2010, há uma concentração significativa de outliers, indicando que o reservatório enfrentou condições excepcionais, possivelmente devido a períodos de baixa afluência. Já em 2011, o número de outliers é menor, mas ainda significativo, sugerindo que, apesar de condições menos extremas do que no ano anterior, também houve ocorrências de níveis abaixo do padrão esperado.
# Ler os dados de Nível Montante normalizado
nivel_montante_normalizado <- read.csv2("Nivel_Montante_normalizado.csv", encoding = "latin1", sep = ";")
# Extrair os anos das colunas
nomes_colunas <- colnames(nivel_montante_normalizado)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de Nível Montante e seus respectivos anos
df_nivel_anos <- data.frame(
nivel_montante_normalizado = as.numeric(nivel_montante_normalizado[1, ]),
ano = anos
)
# Calcular a média dos valores de Nível Montante
media_nivel <- mean(df_nivel_anos$nivel_montante_normalizado, na.rm = TRUE)
# Gerar o boxplot dos dados de Nível Montante por ano
boxplot(nivel_montante_normalizado ~ ano, data = df_nivel_anos,
main = "Boxplot do Nível Montante por Ano",
xlab = "Ano",
ylab = "Nível Montante (p.u.)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
# Adicionar uma linha horizontal para a média calculada
abline(h = media_nivel, col = "red", lty = 2, lwd = 2)
# Adicionar uma grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar uma legenda com a média calculada
legend("bottomright", legend = paste("Média =", round(media_nivel, 3)), col = "red", pch = 19, bty = "n")
O boxplot do Nível de Montante normalizado com log aplicado por ano fornece uma visão detalhada das variações no nível do reservatório ao longo dos anos, destacando as diferenças em relação à média geral log-transformada de -0,014 (representada pela linha tracejada vermelha).
Em anos como 2010 e 2011 (10 e 11), os outliers continuam evidentes, indicando valores anormalmente baixos de nível de montante após a transformação logarítmica. Isso reforça que esses anos foram marcados por condições hidrológicas ou operacionais atípicas, já destacadas nos gráficos anteriores.
Os dados mostram que, na maioria dos anos, as distribuições estão concentradas próximas à média geral log-transformada, indicando estabilidade geral nos níveis. Contudo, anos como 2005 (5), 2009 (09), 2015 (15) e 2022 (22) apresentam caixas mais alongadas, indicando maior dispersão nos valores.
# BOXPLOT NORMALIZADO POR ANO
# Ler os dados de Nível Montante normalizado
nivel_montante_normalizado <- read.csv2("Nivel_Montante_normalizado.csv", encoding = "latin1", sep = ";")
# Aplicar o logaritmo nos valores da base de dados
nivel_montante_normalizado_log <- log(as.numeric(as.matrix(nivel_montante_normalizado)))
# Substituir valores -Inf (resultado de log(0)) por NA
nivel_montante_normalizado_log[is.infinite(nivel_montante_normalizado_log)] <- NA
# Extrair os anos das colunas
nomes_colunas <- colnames(nivel_montante_normalizado)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de Nível Montante (log) e seus respectivos anos
df_nivel_anos <- data.frame(
nivel_montante_normalizado_log = nivel_montante_normalizado_log,
ano = anos
)
# Calcular a média dos valores de Nível Montante (log)
media_nivel_log <- mean(df_nivel_anos$nivel_montante_normalizado_log, na.rm = TRUE)
# Gerar o boxplot dos dados de Nível Montante (log) por ano
boxplot(nivel_montante_normalizado_log ~ ano, data = df_nivel_anos,
main = "Boxplot do Nível Montante (log) por Ano",
xlab = "Ano",
ylab = "Nível Montante (log)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
# Adicionar uma linha horizontal para a média calculada (log)
abline(h = media_nivel_log, col = "red", lty = 2, lwd = 2)
# Adicionar uma grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar uma legenda com a média calculada (log)
legend("bottomright", legend = paste("Média =", round(media_nivel_log, 3)), col = "red", pch = 19, bty = "n")
A série do Nível de Montante por Ano, representada pela média anual dos valores normalizados, evidencia oscilações nos níveis do reservatório ao longo do tempo, refletindo a influência de condições hidrológicas e operacionais.
Quedas Significativas Os anos de 2006 e 2021 apresentam as menores médias anuais, indicando períodos de desafios significativos. Essas quedas podem ser atribuídas a eventos climáticos como seca prolongada ou a maior demanda por geração de energia, que forçou a operação com níveis mais baixos. O destaque vai para 2021, onde a média anual alcançou um dos valores mais baixos da série.
Recuperações Após períodos de queda, observa-se uma recuperação gradual nos anos subsequentes, como em 2007 e 2022-2024. Esses períodos sugerem a retomada de condições hidrológicas favoráveis ou ajustes operacionais eficazes para elevar os níveis do reservatório.
library(dplyr)
library(lubridate)
vazao_data <- read.csv2("Nivel_Montante_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
vazao_annual_mean <- vazao_data %>%
group_by(Ano = year(Data)) %>%
summarize(Vazao_Media = mean(Vazao, na.rm = TRUE))
# Plotar a série temporal anual com marcações de ano
plot(vazao_annual_mean$Ano, vazao_annual_mean$Vazao_Media*10, type = "o",
xlab = "Período", ylab = "Nível (p.u.)",
main = "Série Nível de Montante por Ano", xaxt = "n")
# Adicionar os anos no eixo x
axis(1, at = vazao_annual_mean$Ano, labels = vazao_annual_mean$Ano)
grid()
A série completa mostra oscilações regulares entre 0,96 p.u. e 1,00 p.u., com quedas recorrentes que indicam períodos de menor afluência ou maior uso do reservatório. Apesar dessas flutuações, os valores frequentemente retornam a níveis próximos de 1,00 p.u.,
Durante a série é possível verificar qie o nível apresneta quedas de valores inferiores a 0.96 p.u., como no ano de 2021 por exemplo. Neste ano em específico é possível verificar que os anos anteriores já vinham apresentando uma queda em relação ao volume total da usina. Outros anos também apresentam quedas próximas, como 2001,2004, 2007 e 2013.
Série do Nível de Montante Diário
vazao_data <- read.csv2("Nivel_Montante_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Plotar a série temporal diária
plot(vazao_data$Data, vazao_data$Vazao, type = "l",
xlab = "Período", ylab = "Nível (p.u.)",
main = "Série Nível de Montante Diária", xaxt = "n")
axis.Date(1, at = seq(min(vazao_data$Data), max(vazao_data$Data), by = "1 year"), format = "%Y")
grid()
Série do Nível de Montante Diário em Períodos (2000 - 2012) e (2013 - 2024)
# Série da Vazão Defluente Diária em Períodos (2000 - 2012) e (2013 - 2024
vazao_data <- read.csv2("Nivel_Montante_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Dividir os dados em dois períodos (2000 - 2012) e (2013 - 2024)
vazao_periodo1 <- vazao_data %>% filter(Data >= as.Date("2000-01-01") & Data <= as.Date("2012-12-31"))
vazao_periodo2 <- vazao_data %>% filter(Data >= as.Date("2013-01-01") & Data <= as.Date("2024-12-31"))
par(mfrow = c(2, 1), mar = c(4, 4, 2, 1))
# Plotar o primeiro período (2000 - 2012)
plot(vazao_periodo1$Data, vazao_periodo1$Vazao, type = "l",
xlab = "Período", ylab = "Nível (p.u.)",
main = "Série Nível de Montante (2000-2012)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo1$Data), max(vazao_periodo1$Data), by = "1 year"), format = "%Y")
grid()
# Plotar o segundo período (2013 - 2024)
plot(vazao_periodo2$Data, vazao_periodo2$Vazao, type = "l",
xlab = "Período", ylab = "Nível (p.u.)",
main = "Série Nível de Montante (2013-2024)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo2$Data), max(vazao_periodo2$Data), by = "1 year"), format = "%Y")
grid()
par(mfrow = c(1, 1))
A análise da geração horária da Usina Hidrelétrica Salto Santiago foi realizada com base nos dados disponíveis no site do ONS, referentes ao dia 15/03/2024. Devido ao extenso período de análise e à alta granularidade da base de dados, com medições realizadas a cada hora, não foi possível extrair a série completa. Optou-se, portanto, por utilizar os dados desse dia específico como uma amostra representativa da operação da usina.
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
data <- read.csv2("Geracao_energia.csv")
data <- as.numeric(data[1, ])
# Fazer o sumário estatístico dos valores
summary(data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 936 1226 1316 1281 1378 1379
O histograma da geração horária da usina Salto Santiago, com capacidade instalada de 1.420 MW, revela que aproximadamente 30% do tempo analisado a geração esteve próxima de 1.350 MWm. Os demais intervalos de geração apresentam ocorrências muito menores, sugerindo que a operação em níveis intermediários (entre 900 MWm e 1.200 MWm) foi pontual ou transitória, possivelmente durante ajustes ou variações operacionais.
# Ler os dados de geração de energia
data <- read.csv2("Geracao_energia.csv")
data <- as.numeric(data[1, ])
hist_data <- hist(data,
plot = FALSE,
breaks = 150)
total_dados <- length(data)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Geração Horária",
xlab = "Geração Horária (MWm)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
O box plot da geração horária da usina Salto Santiago, juntamente com os valores do sumário estatístico, revela uma distribuição concentrada em altos níveis de produção. O valor mínimo registrado foi de 936 MWm, enquanto o máximo atingiu 1379 MWm, próximo à capacidade instalada de 1.420 MW. A média da geração horária ficou em 1281 MWm, e a mediana em 1316 MWm, indicando que 50% das observações estão acima de 1316 MWm, o que evidencia uma tendência para valores elevados de geração.
data <- read.csv2("Geracao_energia.csv")
data <- as.numeric(data[1, ])
media_vazao <- mean(data, na.rm = TRUE)
# Gerar o box plot dos dados de vazão
boxplot(data,
main = "Box Plot dos Valores de Geração Horária",
ylab = "Geração Horária (MWm)",
xlab = "Geração Horária",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
O box plot da geração diária, analisando a distribuição ao longo das 24 horas, mostra uma variação significativa entre os períodos do dia. Durante as primeiras horas (de 0h a 3h), observa-se uma tendência de geração em níveis elevados, próximos a 1300 MWm, indicando um padrão consistente. Entre 4h e 13h, há uma redução gradativa nos valores, com maior dispersão em algumas horas, como ao 12h e 13h, onde há quedas mais acentuadas e maior variabilidade. A partir de 14h, os valores começam a se estabilizar, e nas horas finais do dia, entre 18h e 23h, a geração retorna aos níveis mais altos, consistentemente acima de 1300 MWm, evidenciando uma operação próxima à capacidade máxima da usina.
# BOXPLOT NORMALIZADO POR ANO
# Ler os dados de geração horária
data <- read.csv2("Geracao_energia.csv", encoding = "latin1", sep = ";")
# Extrair valores de geração e atribuir horas
valores <- as.numeric(data[1, ])
horas <- 0:(length(valores) - 1) # Criar sequência de 0 a 23 para as horas
# Criar data frame com valores e horas
df_geracao_horas <- data.frame(
geracao = valores,
hora = factor(horas) # Converter horas para fator para o boxplot
)
# Calcular a média de geração
media_geracao <- mean(df_geracao_horas$geracao, na.rm = TRUE)
# Gerar o boxplot por hora
boxplot(geracao ~ hora, data = df_geracao_horas,
main = "Box Plot de Geração Horária",
xlab = "Hora do Dia",
ylab = "Geração Horária (MWm)",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 2, # Rotação dos rótulos do eixo x para facilitar a leitura
cex.axis = 0.8)
# Adicionar linha horizontal para a média
abline(h = media_geracao, col = "red", lty = 2, lwd = 2)
# Adicionar grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar legenda com a média
legend("bottomright", legend = paste("Média =", round(media_geracao, 2)), col = "red", pch = 19, bty = "n")
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
data <- read.csv2("Geracao_energia_normalizado.csv")
data <- as.numeric(data[1, ])
# Fazer o sumário estatístico dos valores
summary(data)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.6592 0.8632 0.9264 0.9020 0.9704 0.9711
O histograma da geração horária normalizada, considerando o valor máximo de 1379 MWm como base (1 p.u.), revela que a maior concentração de valores está próxima a 0,98 p.u., o que equivale a aproximadamente 1348 MWm. Essa faixa representa cerca de 30% das ocorrências, indicando que a usina operou, em boa parte do tempo, muito próxima de sua capacidade máxima. As demais faixas de geração possuem frequência significativamente menor, com valores dispersos abaixo de 0,85 p.u. (cerca de 1172 MWm), sugerindo momentos de menor geração, mas que foram menos representativos no dia analisado.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
data <- read.csv2("Geracao_energia_normalizado.csv")
data <- as.numeric(data[1, ])
hist_data <- hist(data,
plot = FALSE,
breaks = 150)
total_dados <- length(data)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Geração Horária",
xlab = "Geração Horária (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
Os valores normalizados e com log estão concentrados próximos ao limite superior, sugerindo que a usina operou predominantemente em níveis próximos à sua capacidade máxima (1 p.u.). Observa-se um pico considerável nas faixas superiores, indicando que essas foram as condições de operação mais frequentes.
As frequências em faixas menores de geração, localizadas à esquerda no gráfico (valores negativos após o logaritmo), mostram que períodos de baixa geração ocorreram com menor representatividade.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
data <- read.csv2("Geracao_energia_normalizado.csv")
data <- as.numeric(data[1, ])
data <- data[data > 0]
data_log <- log(data)
data_log <- data_log[!is.na(data_log)]
# Histograma
hist_data <- hist(data_log,
plot = FALSE,
breaks = 150)
total_dados <- length(data_log)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Geração Horária",
xlab = "Geração Horária (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
O box plot da geração horária normalizada, considerando o sumário estatístico, revela que a geração variou entre o valor mínimo de 0,6592 p.u. e o máximo de 0,9711 p.u., com uma média de 0,9020 p.u. e uma mediana de 0,9264 p.u. O intervalo interquartil (entre 0,8632 p.u. no primeiro quartil e 0,9704 p.u. no terceiro quartil) contém 50% dos dados e mostra que a geração esteve predominantemente em faixas próximas ao limite superior de operação.
A mediana mais próxima do limite superior sugere uma leve assimetria positiva na distribuição, reforçando que a maior parte do tempo foi gasta em níveis elevados de geração. A presença de outliers abaixo do primeiro quartil, representados por valores menores que 0,7 p.u., indica momentos pontuais de baixa geração.
# BOXPLOT
data <- read.csv2("Geracao_energia_normalizado.csv")
data <- as.numeric(data[1, ])
media_vazao <- mean(data, na.rm = TRUE)
boxplot(data,
main = "Box Plot da Geração Horária - Normalizado",
ylab = "Geração Horária (p.u.)",
xlab = "Geração Horária",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 3)), col = "red", pch = 19, bty = "n")
A série temporal da geração horária de energia ao longo de um dia apresenta uma variação significativa, normalizada em relação ao valor máximo. Durante a madrugada, entre 0h e 4h, a geração se mantém alta, próxima de 0,95 p.u., indicando operação consistente em níveis elevados. Entre 5h e 11h, há uma redução gradual e significativa, resultando em um mínimo de aproximadamente 0,65 p.u. por volta das 12h.
A partir das 13h, a geração começa a se recuperar, retornando a níveis elevados próximos a 0,95 p.u. entre 16h e 23h, com estabilização até o final do dia.
# Ler os dados da base de geração de energia
geracao_energia <- read.csv2("Geracao_energia_normalizado.csv", encoding = "latin1", sep = ";")
# Extrair os valores de geração e associar às horas do dia
valores <- as.numeric(geracao_energia[1, ]) # Os valores de geração
horas <- 0:(length(valores) - 1) # Criar sequência de 0h a 23h
# Criar o gráfico de série temporal
plot(horas, valores, type = "o", pch = 19, col = "blue",
main = "Série Temporal da Geração de Energia (1 Dia)",
xlab = "Hora do Dia",
ylab = "Geração Horária (p.u.)",
xaxt = "n") # Desativar o eixo x padrão
# Adicionar rótulos ao eixo x
axis(1, at = horas, labels = horas, las = 2)
# Adicionar uma grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
O volume útil do reservatório de uma usina hidrelétrica é a diferença entre o volume máximo e o volume morto, representando a parcela de água armazenada que pode ser efetivamente utilizada para a geração de energia. Ele desempenha um papel crucial no controle do fluxo de água para geração de energia, garantindo que a usina possa atender à demanda mesmo em períodos de baixa afluência hídrica.
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# VOLUME ÚTIL (%)
volume_util <- read.csv2("Volume_Util.csv")
volume_util <- as.numeric(volume_util[1, ])
# Fazer o sumário estatístico dos valores
summary(volume_util)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7.08 44.83 73.88 68.76 94.97 102.55
O histograma do volume útil do reservatório demonstra que a maior parte do tempo o reservatório opera próximo de sua capacidade máxima, com volumes úteis acima de 90%. Há um pico claro na faixa entre 95% e 100%, indicando que o reservatório se mantém frequentemente próximo do limite superior de armazenamento.
Volumes úteis inferiores a 90% ocorrem com menor frequência, mas o histograma mostra uma distribuição mais dispersa em faixas intermediárias, especialmente entre 40% e 80%. Esses valores podem representar períodos de ajustes sazonais ou de operação durante estiagens.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
volume_util <- suppressWarnings(read.csv2("Volume_Util.csv"))
volume_util <- as.numeric(unlist(volume_util))
volume_util <- volume_util[!is.na(volume_util)]
# Criar histograma
hist_data <- hist(volume_util,
plot = FALSE,
breaks = 150)
total_dados <- length(volume_util)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma do Volume Útil",
xlab = "Volume Útil (%)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduz a 2 casas decimais
las = 1)
grid()
O box plot do volume útil apresenta uma distribuição variando entre o valor mínimo de 7,08% e o máximo de 102,55% (ligeiramente acima do limite de 100%, possivelmente devido a algum excesso no volume de forma momentânea). A média de 68,76% e a mediana de 73,88% indicam que a maior parte do tempo o reservatório opera em volumes úteis relativamente elevados.
volume_util <- read.csv2("Volume_Util.csv")
volume_util <- as.numeric(volume_util[1, ])
media_vazao <- mean(volume_util, na.rm = TRUE)
# Gerar o box plot dos dados
boxplot(volume_util,
main = "Box Plot dos Valores de Volume Útil",
ylab = "Volume (%)",
xlab = "Volume Útil",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
Observa-se que há anos em que o volume útil se mantém majoritariamente acima da média geral de 68,76%, como ocorre em anos representados pelos box plots mais elevados e compactos (Ex: 2010, 2012, 2016, 2023 e 2024), indicando menor variação nos níveis e uma maior estabilidade operacional.
Por outro lado, há anos em que a dispersão dos valores é maior, como evidenciado por box plots mais alongados verticalmente(Ex: 2000, 2003, 2009 e 2022), o que sugere variações significativas nos níveis do reservatório. Isso pode estar associado a períodos de estiagem, maior utilização do volume útil.
Alem disso, presença de outliers em alguns anos indica momentos pontuais de operação em volumes baixos ou altos, que podem estar ligados a condições climáticas extremas ou necessidades operacionais.
# BOXPLOT NORMALIZADO POR ANO
volume_util <- read.csv2("Volume_Util.csv", encoding = "latin1", sep = ";")
nomes_colunas <- colnames(volume_util)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de vazão e seus respectivos anos
df_vazao_anos <- data.frame(
volume_util = as.numeric(volume_util[1, ]),
ano = anos
)
media_vazao <- mean(df_vazao_anos$volume_util, na.rm = TRUE)
# Gerar o boxplot
boxplot(volume_util ~ ano, data = df_vazao_anos,
main = "Box Plot dos Valores de Volume Útil",
ylab = "Volume (%)",
xlab = "Volume Útil",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_vazao, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("bottomright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
volume_util <- read.csv2("Volume_Util_normalizado.csv")
volume_util <- as.numeric(volume_util [1, ])
summary(volume_util)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0700 0.4500 0.7400 0.6877 0.9500 1.0300
O histograma do volume útil normalizado por 100% apresenta uma distribuição que reforça a predominância de operação do reservatório em níveis próximos ao valor máximo (1,0 p.u.). A maior concentração de ocorrências está situada entre 0,9 e 1,0 p.u., representando aproximadamente 10%.
As faixas de menor volume útil, abaixo de 0,6 p.u., apresentam uma % reduzida, o que demonstra que o reservatório opera menos em condições críticas de armazenamento.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
volume_util <- suppressWarnings(read.csv2("Volume_Util_normalizado.csv"))
volume_util <- as.numeric(unlist(volume_util))
volume_util <- volume_util[!is.na(volume_util)]
# Criar histograma
hist_data <- hist(volume_util,
plot = FALSE,
breaks = 150)
total_dados <- length(volume_util)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma do Volume Útil",
xlab = "Volume Útil (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduz a 2 casas decimais
las = 1)
grid()
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
volume_util <- suppressWarnings(read.csv2("Volume_Util_normalizado.csv"))
volume_util <- as.numeric(unlist(volume_util))
volume_util <- volume_util[!is.na(volume_util)]
volume_util_log <- log(volume_util)
volume_util_log <- volume_util_log[!is.na(volume_util_log)]
# Criar histograma
hist_data <- hist(volume_util_log,
plot = FALSE,
breaks = 150)
total_dados <- length(volume_util_log)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma do Volume Útil",
xlab = "Volume Útil (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduz a 2 casas decimais
las = 1)
grid()
A concentração de valores próximos a zero no eixo do volume útil (após a transformação logarítmica) reforça que, na maior parte do tempo, o reservatório opera em níveis elevados, próximos à capacidade máxima, uma vez que seu valor máximo está proximo de 1 p.u.
À medida que os valores se afastam de zero no sentido negativo, a % diminui consideravelmente, indicando que volumes mais baixos (representados por valores com log mais negativos) são menos frequentes.
# BOXPLOT
volume_util <- suppressWarnings(read.csv2("Volume_Util_normalizado.csv"))
volume_util <- as.numeric(volume_util [1, ])
media_vazao <- mean(volume_util, na.rm = TRUE)
boxplot(volume_util ,
main = "Box Plot dos Valores de Volume Útil",
ylab = "Volume (p.u.)",
xlab = "Volume Útil",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
É possível observar que nos anos de 2001, 2010, 2011 e 2022 apresentam valores mais próximos do valor máximo normalizado, indicando que, nesses períodos, o reservatório operou em níveis elevados, provavelmente devido a condições hídricas favoráveis. Por outro lado, anos como 2000, 2003, 2006 e 2020 apresentam volumes úteis predominantemente abaixo da média de 0,688 p.u.
volume_util <- suppressWarnings(read.csv2("Volume_Util_normalizado.csv", encoding = "latin1", sep = ";"))
# Extrair os anos das colunas
nomes_colunas <- colnames(volume_util)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
df_nivel_anos <- data.frame(
volume_util = as.numeric(volume_util[1, ]),
ano = anos
)
media_nivel <- mean(df_nivel_anos$volume_util, na.rm = TRUE)
boxplot(volume_util ~ ano, data = df_nivel_anos,
main = "Box Plot dos Valores de Volume Útil",
ylab = "Volume (p.u.)",
xlab = "Volume Útil",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_nivel, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("bottomleft", legend = paste("Média =", round(media_nivel, 3)), col = "red", pch = 19, bty = "n")
A linha média de -0,484 em escala logarítmica indica que a maioria dos anos possui uma concentração de valores próxima ou acima deste ponto, embora ainda exista uma dispersão considerável em alguns períodos.
# BOXPLOT NORMALIZADO POR ANO
volume_util <- suppressWarnings(read.csv2("Volume_Util_normalizado.csv", encoding = "latin1", sep = ";"))
# Aplicar o logaritmo nos valores da base de dados
volume_util_log <- log(as.numeric(as.matrix(volume_util)))
volume_util_log[is.infinite(volume_util_log)] <- NA
# Extrair os anos das colunas
nomes_colunas <- colnames(volume_util)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
df_nivel_anos <- data.frame(
volume_util_log = volume_util_log,
ano = anos
)
media_nivel_log <- mean(df_nivel_anos$volume_util_log, na.rm = TRUE)
boxplot(volume_util_log ~ ano, data = df_nivel_anos,
main = "Box Plot dos Valores de Volume Útil",
ylab = "Volume Log(p.u.)",
xlab = "Volume Útil",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_nivel_log, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("bottomright", legend = paste("Média =", round(media_nivel_log, 3)), col = "red", pch = 19, bty = "n")
Anos como 2001, 2011, 2016 e 2022 se destacam com médias anuais mais altas, próximas de 9 p.u., indicando que nesses anos o reservatório operou predominantemente com níveis elevados, refletindo boas condições hídricas. No entanto, anos como 2006, 2014 e 2021 apresentam médias anuais mais baixas, próximas de 4 p.u., sugerindo períodos críticos de operação com volumes reduzidos, provavelmente devido a estiagens severas ou maior demanda energética.
library(dplyr)
library(lubridate)
# Ler o arquivo CSV com suppressWarnings para ignorar o warning
vazao_data <- suppressWarnings(read.csv2("Volume_Util_normalizado.csv"))
# Transpor e formatar como data frame
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
# Criar a sequência de datas
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Calcular a média anual
vazao_annual_mean <- vazao_data %>%
group_by(Ano = year(Data)) %>%
summarize(Vazao_Media = mean(as.numeric(Vazao), na.rm = TRUE))
# Plotar a série temporal anual com marcações de ano
plot(vazao_annual_mean$Ano, vazao_annual_mean$Vazao_Media * 10, type = "o",
xlab = "Período", ylab = "Volume Útil (p.u.)",
main = "Série do Volume Útil por Ano", xaxt = "n")
# Adicionar os anos no eixo x
axis(1, at = vazao_annual_mean$Ano, labels = vazao_annual_mean$Ano)
grid()
Série do Volume Útil Diário
bserva-se um padrão cíclico em que os valores frequentemente atingem níveis elevados, próximos de 1,0 p.u., seguidos por quedas acentuadas que atingem níveis mínimos. É possível observar que durante os anos de 2001 e 2002 as quedas foram menores, o que reflete em níveis mais próximos do máximo (1 p.u.). Entre os anos de 2005 e 2006, 2012 e 2013 e, mais recentemente entre 2020 e 2021 constata-se uma brusca redução do volume, atingindo valores inferiores a 0.2 p.u.
Durante este último periodo destacado (entre 2020 e 2021), a crise hídrica atingiu diversas regiões do país, como pode ser observado na nóticia abaixo. Dessa forma, o governo autorixou o uso de Usinas Termelétricas para evitar um eventual racionamento no país.
vazao_data <- suppressWarnings(read.csv2("Volume_Util_normalizado.csv"))
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
plot(vazao_data$Data, as.numeric(vazao_data$Vazao), type = "l",
xlab = "Período", ylab = "Volume Útil (p.u.)",
main = "Série do Volume Útil Diário", xaxt = "n")
axis.Date(1, at = seq(min(vazao_data$Data), max(vazao_data$Data), by = "1 year"), format = "%Y")
grid()
Série do Volume Útil Diário em Períodos (2000 - 2012) e (2013 - 2024)
library(dplyr)
vazao_data <- suppressWarnings(read.csv2("Volume_Util_normalizado.csv"))
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Dividir os dados em dois períodos (2000 - 2012) e (2013 - 2024)
vazao_periodo1 <- vazao_data %>% filter(Data >= as.Date("2000-01-01") & Data <= as.Date("2012-12-31"))
vazao_periodo2 <- vazao_data %>% filter(Data >= as.Date("2013-01-01") & Data <= as.Date("2024-12-31"))
par(mfrow = c(2, 1), mar = c(4, 4, 2, 1))
# Plotar o primeiro período (2000 - 2012)
plot(vazao_periodo1$Data, as.numeric(vazao_periodo1$Vazao), type = "l",
xlab = "Período", ylab = "Volume Útil (p.u.)",
main = "Série do Volume Útil Diário (2000-2012)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo1$Data), max(vazao_periodo1$Data), by = "1 year"), format = "%Y")
grid()
# Plotar o segundo período (2013 - 2024)
plot(vazao_periodo2$Data, as.numeric(vazao_periodo2$Vazao), type = "l",
xlab = "Período", ylab = "Volume Útil (p.u.)",
main = "Série do Volume Útil Diário (2013-2024)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo2$Data), max(vazao_periodo2$Data), by = "1 year"), format = "%Y")
grid()
# Resetar o layout para gráficos únicos
par(mfrow = c(1, 1))
A maior concentração de variações próximas de zero reflete ajustes operacionais cotidianos e um equilíbrio entre entrada e saída de água no reservatório. As oscilações continuam centradas em torno de zero, com variações positivas e negativas indicando, respectivamente, aumentos e reduções no volume útil. A presença de picos positivos mais altos e negativos mais baixos em determinados períodos, como entre 2001 e 2004, 2010 e 2012, e 2020, sugere eventos extraordinários, como chuvas intensas ou seca prolongada.
# Carregar os dados
vazao_data <- read.csv2("Transposed_Volume_Data.csv")
vazao_data$Date <- as.Date(vazao_data$Date, format = "%d de %b. de %y")
vazao_data <- vazao_data[!is.na(vazao_data$Date), ]
vazao_data$Volume <- as.numeric(gsub(",", ".", vazao_data$Volume))
volume_diff <- diff(vazao_data$Volume)
vazao_data <- vazao_data[-1, ]
vazao_data$Volume_diff <- volume_diff
plot(vazao_data$Date, vazao_data$Volume_diff, type = "l", col = "blue",
main = "Variação do Volume ao Longo do Tempo",
xlab = "Data", ylab = "Diferença do Volume", xaxt = "n")
grid()
axis(1, at = seq(min(vazao_data$Date, na.rm = TRUE), max(vazao_data$Date, na.rm = TRUE), by = "2 years"),
labels = format(seq(min(vazao_data$Date, na.rm = TRUE), max(vazao_data$Date, na.rm = TRUE), by = "2 years"), "%Y"))
A Energia Natural Afluente (ENA) representa a quantidade de água proveniente dos rios que abastecem o sistema hídrico de uma usina e que pode ser convertida em energia elétrica. Esse dado é fundamental para monitorar a evolução dos recursos hidroenergéticos no país e avaliar a eficiência produtiva de cada usina geradora. O acompanhamento das taxas de ENA é realizado pelo Operador Nacional do Sistema Elétrico (ONS), órgão responsável por monitorar e coordenar o setor elétrico brasileiro.
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_subs <- read.csv2("Energia_Natural_Afluente _Bruta.csv")
energia_subs <- as.numeric(energia_subs[1, ])
# Fazer o sumário estatístico dos valores
summary(energia_subs)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 706 3929 6478 9049 11146 102107
O histograma da Energia Natural Afluente (ENA) do subsistema apresenta uma distribuição assimétrica à direita, com uma grande concentração de valores em faixas mais baixas, predominantemente abaixo de 20.000 MWm.
# Ajustar as opções para evitar notação científica
options(scipen = 999)
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_subs <- read.csv2("Energia_Natural_Afluente _Bruta.csv")
energia_subs <- as.numeric(energia_subs[1, ])
hist_data <- hist(energia_subs,
plot = FALSE,
breaks = 150)
total_dados <- length(energia_subs)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Energia Natural Afluente Bruta do Subs.",
xlab = "Energia Natural (MWm)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
O box plot da Energia Natural Afluente Bruta do subsistema, com base no sumário estatístico, mostra uma distribuição altamente assimétrica. A mediana, em 6478 MWm, está significativamente abaixo da média de 9048,53 MWm, o que evidencia a presença de valores extremos (outliers) que puxam a média para cima.
# Ajustar as opções para evitar notação científica
options(scipen = 999)
# Carregar os dados
energia_subs <- read.csv2("Energia_Natural_Afluente _Bruta.csv")
# Converter os dados para formato numérico
energia_subs <- as.numeric(energia_subs[1,]) # Ajustado para pegar toda a coluna
# Calcular a média da energia natural afluente
media_vazao <- mean(energia_subs, na.rm = TRUE)
# Gerar o box plot dos dados
boxplot(energia_subs,
main = "Box Plot da Energia Natural Afluente Bruta do Subsistema",
ylab = "Energia Natural (MWm)",
xlab = "Energia Natural Afluente Bruta do Subsistema",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
# Adicionar a média ao gráfico
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
# Adicionar a grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar a legenda ao gráfico
legend("topright", legend = paste("Média =", round(media_vazao, 2), "MW"), col = "red", pch = 19, bty = "n")
Em geral, a maioria dos anos apresenta a mediana de ENA abaixo da média geral de 9048,53 MWm, marcada pela linha vermelha, o que reflete uma concentração de valores em faixas mais baixas. Anos como 2011, 2014 e 2023 exibem maior dispersão de valores e outliers que se estendem significativamente acima da faixa interquartil, indicando eventos de afluência elevada.
Por outro lado, anos como 2001, 2003 e 2008 apresentam menores amplitudes de variação, com valores mais concentrados na faixa interquartil, sugerindo condições mais regulares de afluência hídrica. Esses anos apresentam menor número de outliers extremos, com seus valores predominantemente abaixo da média.
# Carregar os dados
energia_subs <- read.csv2("Energia_Natural_Afluente _Bruta.csv", encoding = "latin1", sep = ";")
# Obter os nomes das colunas e extrair os anos
nomes_colunas <- colnames(energia_subs)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores de vazão e seus respectivos anos
df_vazao_anos <- data.frame(
energia_subs = as.numeric(energia_subs[1, ]),
ano = anos
)
# Calcular a média das vazões
media_vazao <- mean(df_vazao_anos$energia_subs, na.rm = TRUE)
# Gerar o boxplot, garantindo controle sobre os rótulos do eixo X
boxplot(energia_subs ~ ano, data = df_vazao_anos,
main = "Box Plot da Energia Natural Afluente Bruta do Subsistema",
ylab = "Energia Natural (MWm)",
xlab = "Anos (2000 - 2024)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 2, # Rotaciona os rótulos no eixo X
cex.axis = 0.7, # Ajusta o tamanho do texto
at = unique(df_vazao_anos$ano)) # Garantir que os anos sejam todos representados
# Adicionar uma linha horizontal com a média
abline(h = media_vazao, col = "red", lty = 2, lwd = 2)
# Adicionar a grade
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar uma legenda
legend("topleft", legend = paste("Média =", round(media_vazao, 2)), col = "red", lty = 2, bty = "n")
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_subs_norm <- read.csv2("Energia_Natural_Afluente _Bruta_normalizado.csv")
energia_subs_norm <- as.numeric(energia_subs_norm[1, ])
summary(energia_subs_norm)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.01000 0.04000 0.06000 0.08869 0.11000 1.00000
O histograma da Energia Natural Afluente Bruta do subsistema, normalizado pelo valor máximo da base de dados (102107 MWm), também apresenta uma distribuição assimétrica. Essa concentração reflete que, na maioria do tempo, a ENA operou em condições moderadas ou baixas em relação ao máximo registrado.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_subs_norm <- read.csv2("Energia_Natural_Afluente _Bruta_normalizado.csv")
energia_subs_norm <- as.numeric(energia_subs_norm[1, ])
hist_data <- hist(energia_subs_norm,
plot = FALSE,
breaks = 150)
total_dados <- length(energia_subs_norm)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Energia Natural Afluente Bruta do Subs.",
xlab = "Energia Natural (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
A distribuição mostra uma concentração significativa de valores logarítmicos negativos próximos de -4, refletindo que a maior parte das observações corresponde a baixas taxas de afluência em relação ao valor máximo. À medida que os valores logarítmicos aumentam (se aproximam de 0), a frequência diminui, indicando que eventos de alta afluência (relativos ao máximo normalizado) são menos comuns.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_subs_norm <- read.csv2("Energia_Natural_Afluente _Bruta_normalizado.csv")
energia_subs_norm <- as.numeric(energia_subs_norm[1, ])
energia_subs_norm_log <- log(energia_subs_norm)
energia_subs_norm_log <- energia_subs_norm_log[!is.na(energia_subs_norm_log)]
hist_data <- hist(energia_subs_norm_log,
plot = FALSE,
breaks = 150)
total_dados <- length(energia_subs_norm_log)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Energia Natural Afluente Bruta do Subs.",
xlab = "Energia Natural (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
A média, de 0.08869 p.u., está ligeiramente acima da mediana, indicando a influência de outliers positivos, ou seja, eventos de alta afluência que, embora raros, puxam a média para cima. O terceiro quartil, de 0.11 p.u., mostra que 75% dos valores estão abaixo desse ponto, concentrando a maior parte dos dados em níveis inferiores a 0.2 p.u. Os outliers, que se estendem até o valor máximo de 1.0 p.u.
# BOXPLOT
energia_subs_norm <- read.csv2("Energia_Natural_Afluente _Bruta_normalizado.csv")
energia_subs_norm <- as.numeric(energia_subs_norm [1, ])
media_vazao <- mean(energia_subs_norm, na.rm = TRUE)
boxplot(energia_subs_norm ,
main = "Box Plot da Energia Natural Afluente Bruta do Subsistema",
ylab = "Energia Natural (p.u.)",
xlab = "Energia Natural Afluente Bruta do Subsistema",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 3)), col = "red", pch = 19, bty = "n")
Observa-se que alguns anos, como 2011, 2014, 2017 e 2022, apresentam maior dispersão e um número significativo de outliers positivos, indicando períodos de afluência excepcionalmente alta. Esses anos podem estar associados a condições climáticas favoráveis ou eventos sazonais, como enchentes, que aumentaram significativamente os volumes afluentes.
Por outro lado, anos como 2002, 2004 e 2006 mostram uma distribuição mais compacta, com menos outliers e uma concentração próxima ao primeiro quartil, indicando condições mais regulares e afluências predominantemente baixas.
energia_subs_norm <- read.csv2("Energia_Natural_Afluente _Bruta_normalizado.csv", encoding = "latin1", sep = ";")
# Extrair os anos das colunas
nomes_colunas <- colnames(energia_subs_norm)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
df_nivel_anos <- data.frame(
energia_subs_norm = as.numeric(energia_subs_norm[1, ]),
ano = anos
)
media_nivel <- mean(df_nivel_anos$energia_subs_norm, na.rm = TRUE)
boxplot(energia_subs_norm ~ ano, data = df_nivel_anos,
main = "Box Plot da Energia Natural Afluente Bruta do Subsistema",
ylab = "Energia Natural (p.u.)",
xlab = "Anos (2000 -2024)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 2,
cex.axis = 0.7, # Ajusta o tamanho do texto
at = unique(df_vazao_anos$ano))
# Adicionar uma linha horizontal para a média calculada
abline(h = media_nivel, col = "red", lty = 2, lwd = 2)
# Adicionar uma grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar uma legenda com a média calculada
legend("topleft", legend = paste("Média =", round(media_nivel, 3)), col = "red", pch = 19, bty = "n")
A linha de referência da média, em -2,728 na escala logarítmica, indica que a maior parte dos anos apresenta valores medianos próximos ou abaixo dessa média, evidenciando níveis baixos na escala relativa ao máximo.
# BOXPLOT NORMALIZADO POR ANO
energia_subs_norm <- read.csv2("Energia_Natural_Afluente _Bruta_normalizado.csv", encoding = "latin1", sep = ";")
# Aplicar o logaritmo nos valores da base de dados
energia_subs_norm_log <- log(as.numeric(as.matrix(energia_subs_norm )))
energia_subs_norm_log[is.infinite(energia_subs_norm_log)] <- NA
# Extrair os anos das colunas
nomes_colunas <- colnames(energia_subs_norm )
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
df_nivel_anos <- data.frame(
energia_subs_norm_log = energia_subs_norm_log,
ano = anos
)
media_nivel_log <- mean(df_nivel_anos$energia_subs_norm_log, na.rm = TRUE)
boxplot(energia_subs_norm_log ~ ano, data = df_nivel_anos,
main = "Box Plot da Energia Natural Afluente Bruta do Subst.",
ylab = "Energia Natural (p.u.)",
xlab = "Anos (2000 - 2014)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 2,
cex.axis = 0.7, # Ajusta o tamanho do texto
at = unique(df_vazao_anos$ano))
# Adicionar uma linha horizontal para a média calculada (log)
abline(h = media_nivel_log, col = "red", lty = 2, lwd = 2)
# Adicionar uma grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar uma legenda com a média calculada (log)
legend("topleft", legend = paste("Média =", round(media_nivel_log, 3)), col = "red", pch = 19, bty = "n")
A série temporal da Energia Natural Afluente Bruta do subsistema, considerando a média anual dos valores normalizados, revela uma variação significativa ao longo dos anos, com picos e quedas. Anos como 2011, 2015 e 2023/2024 apresentam médias anuais mais altas, indicando períodos de maior afluência hídrica no subsistema.
Por outro lado, anos como 2003, 2006, 2012 e 2020/2021 apresentam médias anuais mais baixas, sugerindo condições de baixa afluência. Porém, observa-se a tendência de recuperação após anos críticos, como observado em 2004, 2007, 2016 e 2022, quando a média anual volta a subir após períodos de baixa.
library(dplyr)
library(lubridate)
vazao_data <- read.csv2("Energia_Natural_Afluente _Bruta_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
vazao_annual_mean <- vazao_data %>%
group_by(Ano = year(Data)) %>%
summarize(Vazao_Media = mean(Vazao, na.rm = TRUE))
# Plotar a série temporal anual com marcações de ano
plot(vazao_annual_mean$Ano, vazao_annual_mean$Vazao_Media*10, type = "o",
xlab = "Anos", ylab = "Energia Natural (p.u.)",
main = "Série da Energia Natural Afluente Bruta do Subst.", xaxt = "n")
# Adicionar os anos no eixo x
axis(1, at = vazao_annual_mean$Ano, labels = vazao_annual_mean$Ano)
grid()
Série da Energia Natural Afluente Bruta do Subsistema Diária
É possível observar que a maioria dos valores se concentra em níveis baixos, refletindo as condições de afluência hídrica predominantes no sistema. No entanto, há picos bem definidos distribuídos ao longo do tempo, possivelmente associados a enchentes ou períodos de chuvas intensas. Esses picos são mais evidentes em anos como 2012, 2015 e 2024, sugerindo a ocorrência de condições climáticas que aumentaram as vazões dos rios.
vazao_data <- read.csv2("Energia_Natural_Afluente _Bruta_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Plotar a série temporal diária
plot(vazao_data$Data, vazao_data$Vazao, type = "l",
xlab = "Anos", ylab = "Energia Natural (p.u.)",
main = "Série da Energia Natural Afluente Bruta do Subst.", xaxt = "n")
axis.Date(1, at = seq(min(vazao_data$Data), max(vazao_data$Data), by = "1 year"), format = "%Y")
grid()
Série da Energia Natural Afluente Bruta do Subsistema Diária em Períodos (2000 - 2012) e (2013 - 2024)
vazao_data <- read.csv2("Energia_Natural_Afluente _Bruta_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Dividir os dados em dois períodos (2000 - 2012) e (2013 - 2024)
vazao_periodo1 <- vazao_data %>% filter(Data >= as.Date("2000-01-01") & Data <= as.Date("2012-12-31"))
vazao_periodo2 <- vazao_data %>% filter(Data >= as.Date("2013-01-01") & Data <= as.Date("2024-12-31"))
par(mfrow = c(2, 1), mar = c(4, 4, 2, 1))
# Plotar o primeiro período (2000 - 2012)
plot(vazao_periodo1$Data, vazao_periodo1$Vazao, type = "l",
xlab = "Anos", ylab = "Vazão Defluente (p.u.)",
main = "Série da Energia Natural Afluente Bruta do Subst. (2000-2012)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo1$Data), max(vazao_periodo1$Data), by = "1 year"), format = "%Y")
grid()
# Plotar o segundo período (2013 - 2024)
plot(vazao_periodo2$Data, vazao_periodo2$Vazao, type = "l",
xlab = "Anos", ylab = "Vazão Defluente (p.u.)",
main = "Série da Energia Natural Afluente Bruta do Subst. (2013-2024)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo2$Data), max(vazao_periodo2$Data), by = "1 year"), format = "%Y")
grid()
par(mfrow = c(1, 1))
A energia armazenada de um subsistema representa a energia disponível nos reservatórios, calculada com base na energia produzível pelo volume de água armazenado, considerando os respectivos níveis operativos. Esse parâmetro é essencial para avaliar a capacidade do subsistema de atender à demanda energética
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_arm <- read.csv2("Energia_Armazenda.csv")
energia_arm <- as.numeric(energia_arm[1, ])
# Fazer o sumário estatístico dos valores
summary(energia_arm)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2157 6614 8972 8994 11525 14625
O histograma da energia armazenada no subsistema apresenta uma distribuição relativamente simétrica, com maior concentração de ocorrências em torno da mediana, que é de 8972 GWh, e da média de 8994 GWh. A maior frequência de valores está entre o primeiro quartil (6614 GWh) e o terceiro quartil (11525 GWh), indicando que a maior parte do tempo o sistema opera em níveis intermediários de armazenamento de energia.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_arm <- read.csv2("Energia_Armazenda.csv")
energia_arm <- as.numeric(energia_arm[1, ])
hist_data <- hist(energia_arm,
plot = FALSE,
breaks = 150)
total_dados <- length(energia_arm)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Energia Armazenada do Subs.",
xlab = "Energia Armazenada (GWh)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2),
las = 1)
grid()
O box plot da energia armazenada diária no subsistema reflete uma distribuição concentrada em torno da média de 8993,89 GWh, com valores variando de um mínimo de aproximadamente 2157 GWh a um máximo próximo de 14625 GWh e a mediana em torno de 8972 GWh.
# Carregar os dados
energia_arm <- read.csv2("Energia_Armazenda.csv")
# Transpor os dados para reorganizar as colunas em linhas
energia_arm_t <- as.data.frame(t(energia_arm))
# Adicionar os nomes das colunas e converter para o formato correto
colnames(energia_arm_t) <- c("Energia")
energia_arm_t$Data <- rownames(energia_arm_t)
energia_arm_t$Energia <- as.numeric(energia_arm_t$Energia)
# Calcular a média da energia armazenada
media_energia <- mean(energia_arm_t$Energia, na.rm = TRUE)
# Gerar o boxplot dos dados
boxplot(energia_arm_t$Energia,
main = "Box Plot da Energia Armazenada Diária do Subsistema",
ylab = "Energia Armazenada (GWh)",
xlab = "Energia Armazenada Diária do Subsistema",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
# Adicionar a média ao gráfico
points(1, media_energia, col = "red", pch = 19, cex = 1.5)
# Adicionar a grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar a legenda ao gráfico
legend("topright", legend = paste("Média =", round(media_energia, 2), "GWh"), col = "red", pch = 19, bty = "n")
# Carregar os dados
energia_arm <- read.csv2("Energia_Armazenda.csv", encoding = "latin1", sep = ";")
# Obter os nomes das colunas e extrair os anos
nomes_colunas <- colnames(energia_arm)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
# Criar um data frame para armazenar os valores
df_vazao_anos <- data.frame(
energia_arm = as.numeric(energia_arm[1, ]),
ano = anos
)
media_vazao <- mean(df_vazao_anos$energia_arm, na.rm = TRUE)
# Gerar o boxplot, garantindo controle sobre os rótulos do eixo X
boxplot(energia_arm ~ ano, data = df_vazao_anos,
main = "Box Plot da Energia Armazenada Diária do Subsistema",
ylab = "Energia Armazenada (GWh)",
xlab = "Anos (2000 - 2024)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 2,
cex.axis = 0.7,
at = unique(df_vazao_anos$ano))
abline(h = media_vazao, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topleft", legend = paste("Média =", round(media_vazao, 2)), col = "red", lty = 2, bty = "n")
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_arm_norm <- read.csv2("Energia_Armazenda_normalizado.csv")
energia_arm_norm <- as.numeric(energia_arm_norm [1, ])
summary(energia_arm_norm)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.150 0.450 0.610 0.615 0.790 1.000
O histograma da energia armazenada, normalizado pelo valor máximo (1,0 p.u.), também apresenta uma distribuição relativamente simétrica, com maior concentração de ocorrências entre 0,4 p.u. e 0,7 p.u., indicando que, na maior parte do tempo, o subsistema opera em níveis intermediários. Além disso,o intervalo entre 0,8 p.u. e 1,0 p.u. Isso sugere que, além de períodos intermediários entre 0,4 p.u. e 0,7 p.u., o subsistema mantém um energia armazenado elevada em um período de tempo considerável.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_arm_norm <- read.csv2("Energia_Armazenda_normalizado.csv")
energia_arm_norm <- as.numeric(energia_arm_norm [1, ])
hist_data <- hist(energia_arm_norm,
plot = FALSE,
breaks = 150)
total_dados <- length(energia_arm_norm)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Energia Armezanada",
xlab = "Energia Armazenada (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
A concentração mais elevada de ocorrências está em torno dos valores logarítmicos entre -0,5 e 0,0, que correspondem a altos níveis de armazenamento normalizado (próximos de 0,8 a 1,0 na escala original). As faixas mais negativas, abaixo de -1,0, correspondem a períodos de menor energia armazenada. Embora menos frequentes, esses valores refletem condições críticas.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
energia_arm_norm <- read.csv2("Energia_Armazenda_normalizado.csv")
energia_arm_norm <- as.numeric(energia_arm_norm [1, ])
energia_arm_norm_log <- log(energia_arm_norm)
energia_arm_norm_log <- energia_arm_norm_log[!is.na(energia_arm_norm_log)]
# Histograma
hist_data <- hist(energia_arm_norm_log,
plot = FALSE,
breaks = 150)
total_dados <- length(energia_arm_norm_log)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma da Energia Armezanada",
xlab = "Energia Armazenada (p.u.)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
O box plot da energia armazenada diária do subsistema, normalizado pelo valor máximo, reflete uma distribuição concentrada em torno da média de 0,615 p.u., próxima à mediana de 0,610 p.u. O intervalo interquartil, delimitado entre o primeiro quartil de 0,450 p.u. e o terceiro quartil de 0,790 p.u., concentra 50% dos dados. Os valores mínimos e máximos normalizados, de 0,150 p.u. e 1,000 p.u., respectivamente, representam os extremos do armazenamento.
# BOXPLOT
energia_arm_norm <- read.csv2("Energia_Armazenda_normalizado.csv")
energia_arm_norm <- as.numeric(energia_arm_norm [1, ])
media_vazao <- mean(energia_arm_norm , na.rm = TRUE)
boxplot(energia_arm_norm ,
main = "Box Plot da Energia Armazenada Diária do Subsistema",
ylab = "Energia Armazenada (p.u.)",
xlab = "Energia Armazenada Diária do Subsistema",
col = "lightblue",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_vazao, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média =", round(media_vazao, 2)), col = "red", pch = 19, bty = "n")
energia_arm_norm <- read.csv2("Energia_Armazenda_normalizado.csv", encoding = "latin1", sep = ";")
# Extrair os anos das colunas
nomes_colunas <- colnames(energia_arm_norm)
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
df_nivel_anos <- data.frame(
energia_arm_norm = as.numeric(energia_arm_norm[1, ]),
ano = anos
)
media_nivel <- mean(df_nivel_anos$energia_arm_norm, na.rm = TRUE)
boxplot(energia_arm_norm ~ ano, data = df_nivel_anos,
main = "Box Plot da Energia Armazenada Diária do Subsistema",
ylab = "Energia Armazenada (p.u.)",
xlab = "Anos (2000 - 2024)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 2,
cex.axis = 0.7, # Ajusta o tamanho do texto
at = unique(df_vazao_anos$ano))
# Adicionar uma linha horizontal para a média calculada
abline(h = media_nivel, col = "red", lty = 2, lwd = 2)
# Adicionar uma grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar uma legenda com a média calculada
legend("topleft", legend = paste("Média =", round(media_nivel, 3)), col = "red", pch = 19, bty = "n")
# BOXPLOT NORMALIZADO POR ANO
energia_arm_norm <- read.csv2("Energia_Armazenda_normalizado.csv", encoding = "latin1", sep = ";")
# Aplicar o logaritmo nos valores da base de dados
energia_arm_norm_log <- log(as.numeric(as.matrix(energia_arm_norm )))
energia_arm_norm_log[is.infinite(energia_arm_norm_log)] <- NA
# Extrair os anos das colunas
nomes_colunas <- colnames(energia_subs_norm )
anos <- substr(nomes_colunas, nchar(nomes_colunas) - 1, nchar(nomes_colunas))
anos <- as.numeric(anos)
df_nivel_anos <- data.frame(
energia_arm_norm_log = energia_arm_norm_log,
ano = anos
)
media_nivel_log <- mean(df_nivel_anos$energia_arm_norm_log, na.rm = TRUE)
boxplot(energia_arm_norm_log ~ ano, data = df_nivel_anos,
main = "Box Plot da Energia Armazenada Diária do Subsistema",
ylab = "Energia Armazenada (p.u.)",
xlab = "Anos (2000 - 2024)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 2,
cex.axis = 0.7, # Ajusta o tamanho do texto
at = unique(df_vazao_anos$ano))
# Adicionar uma linha horizontal para a média calculada (log)
abline(h = media_nivel_log, col = "red", lty = 2, lwd = 2)
# Adicionar uma grade ao gráfico
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
# Adicionar uma legenda com a média calculada (log)
legend("topleft", legend = paste("Média =", round(media_nivel_log, 3)), col = "red", pch = 19, bty = "n")
A série da média anual da energia armazenada no subsistema mostra uma significativa oscilação ao longo dos anos, evidenciando a influência de variabilidades climáticas e operacionais no comportamento do sistema. Períodos como 2011, 2016 e 2023/2024 se destacam por apresentarem os maiores valores médios anuais de energia armazenada.
Por outro lado, anos como 2006, 2012 e, especialmente, 2020 registram os valores médios mais baixos, sugerindo períodos críticos de baixa afluência hídrica.
library(dplyr)
library(lubridate)
vazao_data <- read.csv2("Energia_Armazenda_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
vazao_annual_mean <- vazao_data %>%
group_by(Ano = year(Data)) %>%
summarize(Vazao_Media = mean(Vazao, na.rm = TRUE))
# Plotar a série temporal anual com marcações de ano
plot(vazao_annual_mean$Ano, vazao_annual_mean$Vazao_Media*10, type = "o",
xlab = "Anos", ylab = "Energia Armazemada (p.u.)",
main = "Série da Energia Armazenada do Subsistema por Ano", xaxt = "n")
# Adicionar os anos no eixo x
axis(1, at = vazao_annual_mean$Ano, labels = vazao_annual_mean$Ano)
grid()
Série da Energia Armazenada do Subsistema Diária
Os períodos de alta energia armazenada, próximos a 1,0 p.u., ocorrem de forma regular, indicando momentos de cheia nos reservatórios, geralmente associados a estações chuvosas ou períodos de afluência elevada. Por outro lado, os períodos de baixa energia armazenada, com valores próximos a 0,2 p.u., representam condições críticas, como estiagens prolongadas ou maior utilização dos volumes armazenados para atender à demanda.
Entre 2018 e 2021, nota-se uma sequência de oscilações mais pronunciadas, com níveis mínimos mais frequentes, indicando uma possível fase de maior pressão sobre o sistema, causada por condições hidrológicas adversas ou aumento da demanda. Já anos mais recentes, como 2023 e 2024, os valores demostram uma recuperação dos valores de energia armazenada.
vazao_data <- read.csv2("Energia_Armazenda_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Plotar a série temporal diária
plot(vazao_data$Data, vazao_data$Vazao, type = "l",
xlab = "Anos", ylab = "Energia Armazenada (p.u.)",
main = "Série da Energia Armazenada do Subsistema Diária", xaxt = "n")
axis.Date(1, at = seq(min(vazao_data$Data), max(vazao_data$Data), by = "1 year"), format = "%Y")
grid()
Série da Energia Armazenada do Subsistema Diária em Períodos (2000 - 2012) e (2013 - 2024)
vazao_data <- read.csv2("Energia_Armazenda_normalizado.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2000-01-01")
vazao_data$Data <- seq(data_inicial, by = "day", length.out = nrow(vazao_data))
# Dividir os dados em dois períodos (2000 - 2012) e (2013 - 2024)
vazao_periodo1 <- vazao_data %>% filter(Data >= as.Date("2000-01-01") & Data <= as.Date("2012-12-31"))
vazao_periodo2 <- vazao_data %>% filter(Data >= as.Date("2013-01-01") & Data <= as.Date("2024-12-31"))
par(mfrow = c(2, 1), mar = c(4, 4, 2, 1))
# Plotar o primeiro período (2000 - 2012)
plot(vazao_periodo1$Data, vazao_periodo1$Vazao, type = "l",
xlab = "Anos", ylab = "Energia Armazenada (p.u.)",
main = "Série da Energia Natural Afluente Bruta do Subst. (2000-2012)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo1$Data), max(vazao_periodo1$Data), by = "1 year"), format = "%Y")
grid()
# Plotar o segundo período (2013 - 2024)
plot(vazao_periodo2$Data, vazao_periodo2$Vazao, type = "l",
xlab = "Anos", ylab = "Energia Armazenada (p.u.)",
main = "Série da Energia Natural Afluente Bruta do Subst. (2013-2024)", xaxt = "n")
axis.Date(1, at = seq(min(vazao_periodo2$Data), max(vazao_periodo2$Data), by = "1 year"), format = "%Y")
grid()
par(mfrow = c(1, 1))
O Custo Marginal de Operação (CMO) é um indicador econômico essencial divulgado pelo Operador Nacional do Sistema Elétrico (ONS). Ele representa o custo necessário para produzir o próximo megawatt-hora (MWh) que o sistema requer, funcionando como uma medida de eficiência econômica do sistema elétrico.
Os valores do CMO por semana operativa e por subsistema estão disponíveis no conjunto de dados CMO Semanal, permitindo uma análise detalhada da variação desse indicador ao longo do tempo e entre diferentes regiões do país.
O maior valor encontrado na base de dados é 3044.45, registrado em 14 de agosto de 2021, um período que coincide com a grave crise hídrica enfrentada pelo Brasil em 2021. Esse ano foi marcado por uma das piores secas das últimas décadas, afetando drasticamente os reservatórios das principais hidrelétricas do país. Como destacado na reportagem abaixo, a cise hídricaelevou os custos de geração de energia, forçando o acionamento de termelétricas e a adoção da bandeira tarifária (ex: amarela, vermelha 1/2), o que resultou em um aumentono no valor da conta de luz.
# Definir o diretório de trabalho
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
# CUSTO MARGINAL
custo_marginal <- read.csv2("Custo_Marginal.csv")
custo_marginal <- as.numeric(custo_marginal[1, ])
custo_marginal <- na.omit(custo_marginal)
summary(custo_marginal)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 27.2 95.2 201.4 222.4 3044.4
O histograma do Custo Marginal de Operação (CMO) do subsistema apresenta uma distribuição altamente assimétrica, com uma concentração significativa de ocorrências em valores baixos, principalmente próximos de 0 R$/MWh.
À medida que os valores aumentam, a frequência diminui drasticamente, com poucas ocorrências acima de 500. Os valores mais altos, que se estendem até cerca de 3000 R$/MWh, representam situações excepcionais de alta pressão no sistema, como períodos de estiagem severa.
setwd("/Users/luisfernandoguedes/Downloads/Trabalho_Geracao")
custo_marginal <- read.csv2("Custo_Marginal.csv")
custo_marginal <- as.numeric(custo_marginal[1, ])
custo_marginal <- na.omit(custo_marginal)
hist_data <- hist(custo_marginal,
plot = FALSE,
breaks = 150)
total_dados <- length(custo_marginal)
freq <- (hist_data$counts / total_dados) * 100
plot(hist_data$mids, freq, type = "h",
lwd = 2, main = "Histograma do Custo Marginal do Subsistema",
xlab = "Custo Marginal (R$/MWh)", ylab = "Porcentagem de Ocorrência (%)", las = 1)
y_ticks <- seq(0, max(freq), by = 5)
axis(2,
at = y_ticks,
labels = round(y_ticks, 2), # Reduza para 2 casas decimais
las = 1)
grid()
O box plot do Custo Marginal de Operação (CMO) do subsistema apresenta o mínimo de 0 e o primeiro quartil em 27,2 R$/MWh indicam que, em pelo menos 25% do tempo, o sistema operou com custos marginais baixos. A mediana de 95,2, reforça a predominância de custos operacionais reduzidos no sistema.
A média, em 201,4, está consideravelmente acima da mediana, evidenciando a influência de valores extremos (outliers) na parte superior da distribuição. O terceiro quartil, de 222,4 R$/MWh, delimita a faixa onde estão concentrados 75% dos valores, enquanto os valores acima disso representam custos mais elevados.
# BOXPLOT DO CUSTO MARGINAL
custo_marginal <- read.csv2("Custo_Marginal.csv")
custo_marginal <- as.numeric(custo_marginal[1, ])
media_nivel_montante <- mean(custo_marginal, na.rm = TRUE)
boxplot(custo_marginal,
main = "Box Plot do Custo Marginal do Subsistema",
ylab = "Custo Marginal (R$/MWh)",
xlab = "Custo Marginal de Operação (R$/MWh) ",
col = "lightblue",
border = "black",
outline = TRUE,
las = 1,
cex.axis = 0.8,
frame.plot = FALSE)
points(1, media_nivel_montante, col = "red", pch = 19, cex = 1.5)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topright", legend = paste("Média = R$/MWh", round(media_nivel_montante, 2)), col = "red", pch = 19, bty = "n")
Observa-se que a maioria dos anos apresenta valores médios anuais abaixo da média geral de 201,39 R$/MWh (marcada pela linha vermelha), indicando que o sistema operou frequentemente em condições de custo reduzido.
Anos como 2014, 2015 e 2021 destacam-se por apresentar medianas e amplitudes significativamente maiores, além mais outliers, indicando períodos críticos sobre o sistema elétrico. Esses anos foram marcados por condições hidrológicas ruins, como seca severa, que elevaram os custos marginais devido ao despacho de usinas térmicas com alto custo de operação.
par(mar = c(5, 4, 4, 6) + 0.1)
# Carregar os dados
custo_marginal <- read.csv2("Custo_Marginal.csv")
custo_marginal <- as.numeric(custo_marginal[1, ])
datas <- seq(as.Date("2005-01-01"), by = "week", length.out = length(custo_marginal))
df_custo_marginal <- data.frame(Data = datas, Custo_Marginal = custo_marginal)
df_custo_marginal$Ano <- format(df_custo_marginal$Data, "%Y")
media_custo_marginal <- mean(df_custo_marginal$Custo_Marginal, na.rm = TRUE)
boxplot(Custo_Marginal ~ Ano, data = df_custo_marginal,
main = "Boxplot do Custo Marginal por Ano",
xlab = "Ano",
ylab = "Custo Marginal de Operação (R$/MWh)",
col = "lightgray",
border = "black",
outline = TRUE,
notch = FALSE,
las = 1,
cex.axis = 0.8)
abline(h = media_custo_marginal, col = "red", lty = 2, lwd = 2)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
legend("topleft", legend = paste("Média = R$/MWh", round(media_custo_marginal, 3)), col = "red", pch = 19, bty = "n")
A série temporal do Custo Marginal de Operação (CMO) considerando as médias anuais. Anos como 2014 e 2015 apresentam picos, com o CMO médio ultrapassando os 800 R$/MWh em 2015.
Por outro lado, anos como 2005, 2009, 2011 e 2023 apresentam valores médios baixos, próximos de 0 R$/MWh, indicando condições favoráveis com disponibilidade de energia hídrica ou renovável.
library(dplyr)
library(lubridate)
# Carregar os dados
custo_marginal <- read.csv2("Custo_Marginal.csv")
custo_marginal <- as.data.frame(t(custo_marginal))
colnames(custo_marginal) <- "Custo"
data_inicial <- as.Date("2005-01-01")
custo_marginal$Data <- seq(data_inicial, by = "week", length.out = nrow(custo_marginal))
custo_anual_medio <- custo_marginal %>%
group_by(Ano = year(Data)) %>%
summarize(Custo_Medio = mean(Custo, na.rm = TRUE))
plot(custo_anual_medio$Ano, custo_anual_medio$Custo_Medio, type = "o",
xlab = "Anos", ylab = "Custo Marginal Médio (R$/MWh)",
main = "Série Temporal do Custo Marginal de Operação por Ano", xaxt = "n",
col = "black", pch = 1, lty = 1, lwd = 1)
axis(1, at = custo_anual_medio$Ano, labels = custo_anual_medio$Ano)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")
A série temporal do Custo Marginal de Operação (CMO) por semana operativa foi feita considerando todos os valores da base de dados. Durante boa parte do período analisado, especialmente entre 2008 e 2012, o CMO permaneceu em níveis baixos, refletindo condições favoráveis de geração renovável.
No entanto, a partir de 2013, observa-se uma maior frequência e intensidade de picos, com destaque para os anos de 2014, 2015 e 2021, onde o CMO ultrapassou 1500 em algumas semanas, em específico Semana Operativa de 14/08 a 20/08/2021,, atingiu valores máximos de R$/MWh 3044.
A figura abaixo mostra a evolução das semanas anterires até atingir o valor máximo na semana operativa do dia 14/08.
vazao_data <- read.csv2("Custo_Marginal.csv")
vazao_data <- as.data.frame(t(vazao_data))
colnames(vazao_data) <- "Vazao"
data_inicial <- as.Date("2005-01-01")
vazao_data$Data <- seq(data_inicial, by = "week", length.out = nrow(vazao_data))
plot(vazao_data$Data, vazao_data$Vazao, type = "l",
xlab = "Anos", ylab = "Custo Marginal (R$/MWh)",
main = "Série Temporal do CMO por Semana", xaxt = "n",
ylim = c(0, 3500)) # Define o limite do eixo y
# Ajustar o eixo x com as datas
axis.Date(1, at = seq(min(vazao_data$Data), max(vazao_data$Data), by = "1 year"), format = "%Y")
grid()