As informações referente a Hidreletrica de Sobradinho neste capitulo encontram-se em Wikipedia (2024) e Companhia Hidro Elétrica do São Francisco (CHESF) (2024). A Usina Hidrelétrica de Sobradinho, localizada no rio São Francisco, mais especificamente na Bahia, é uma das maiores do Brasil em capacidade de armazenamento de água. Concluída em 1979 e operada pela Companhia Hidro Elétrica do São Francisco (CHESF), a usina é estratégica para o sistema elétrico brasileiro. Seu lago, com 4.214 km² de área e capacidade de 34,1 bilhões de metros cúbicos em sua cota nominal.
A usina possui uma potência instalada de 1.050 MW, com seis unidades geradoras acionadas por turbinas Kaplan de 175.050 kW cada. Abaixo, seguem os principais dados da usina e do reservatorio, retirados do próprio site da chesf em Companhia Hidro Elétrica do São Francisco (CHESF) (2024).
Usina:
.
Reservatório:
O objetivo do trabalho é analisar diversos dados da hidreletrica de sobradinho. Dentre eles: Vazão afluente diária, Vazão vertida diária, Vazão defluente diária, Nível de Montante diário, geração de Energia horária (24 horas), Volume útil diário, Energia Natural Afluente Bruta do subsistema(Nordeste), Energia Armazenada diária no subsistema (Nordeste). Além desta analise, também foram estudas no presente relatório curvas caracteristicas como por exemplo a curva cota x volume. Esses dados foram obtidos por meio de planilhas de excel e tratados em R para análise e apresentação. Essas informações podem ser encontradas nas referências Operador Nacional do Sistema Elétrico (ONS) (2024b) e Operador Nacional do Sistema Elétrico (ONS) (2024a). Ambas do ONS (Operador Nacional do Sistema Elétrico).
A teoria básica de estatistica, foi retirada de uma apostila aberta, no qual o seu endereço pode ser encontrada em Matemática e Estatística - UFRGS (2024) e Guilherme (2024).
A média, é talvez o principal conceito da estatistica e também o mais popular, em que relaciona os valores de um grupo de dados com o número total de dados, como demontra a equação (1).
\[ \bar{x} = \frac{1}{n} \sum_{i=1}^n x_i \tag{1} \] Onde n é o número de dados e \(x_{i}\) são os valores dos dados, obviamente válidos para casos de amostras totalmente númericas. Um dos maiores problemas da média é que não é possível notar como os dados são dispersos, por exemplo numa média escolar (caso em que não há pesos por matéria) é esperado que um aluno média 9 tenha grande desempenho em todas as matérias. Porém, esse aluno pode ser muito mal em geografia mas caso haja um grande número de matérias seu alto desempenho nas demais, esta deficiência pode ser mascarada pela média, não ajudando assim o aluno, professores e responsáveis a observar essa dificuldade.
O conceito de mediana é o de dividir os dados ao meio, ou seja, separar em dois grupos por meio de um valor central. Caso o número de dados, \(n\) seja ímpar, a posição da mediana é dada pela equação (2).
\[ {p} = \frac{n+1}{2} \tag{2} \] Sendo \(p\) a posição do valor em que se encotra a mediana. Por exemplo, numa amostra de 3 valores, o p é igual a dois e significa que o segundo valor na ordem crescente, ou descrecente já que é um valor central, é a mediana. Enquanto para valores pares a mediana é dada pela média dos dois valores centrais \(p_{1}\) e \(p_{2}\), como mostrado na equação (3).
\[ {M_d} = \frac{p_{1}+p_{2}}{2} \tag{3} \] Onde \(M_d\) é a o próprio valor da mediana.
A mediana assim como a média não apresenta como os dados são dispersos, a mesma somente divide os dados por meio de um valor central que muitas vezes podem “mascarar” dados com um comportamento incomum que precisam ser analisados.
Os quartis (medidas separatrizes) que delimitam proporções por meio de valores.:
-Primeiro Quartil (Q1): 25% dos valores são iguais ou menores que Q1.
-Segundo Quartil (Q2): 50% dos valores são iguais ou menores que Q2, que também corresponde a mediana.
-Terceiro Quartil(Q3): 75% dos valores são iguais ou menores que Q3.
Os quartis podem ser úteis para analisar caso se tenha interesse em como está divididos a grande parte dos valores, por exemplo, analisar o intervalo de Q1 a Q3 permite uma analise de como metade dos valores estão distantes ou próximos entre sí, porém, assim no caso da média e da mediana não é possível perceber valores nas extremidades.
Também chamado de gráfico de caixa, o boxplot é uma forma de demonstrar como os dados são dispersos usando conceitos previamente discutidos na seção 2.1. O boxplot, monta a partir dos dados de primeiro quartil, mediana e terceiro quartil um gráfico no modelo caixa, como mostrado na figura abaixo retirado da referência Matemática e Estatística - UFRGS (2024).
Onde termo \(IQR\) é igual a diferença entre \(Q_3\) e \(Q_1\). É comum em base de dados aparecerem os conhecidos outliers, que são pontos fora dos intervalos destacados. Estes pontos normalmente indicam condições extremas e anormais, mas também podem ser resultados de uma amostra pequena que não abrange uma quantidade de dados necessários. Exemplificando, quando vai se medir a temperatura durante um certo número de dias e acaba que o dia mais quente é um dos outliers, não quer dizer que seja uma condição extrema e nem anormal, pois se essa amostra for pequena isso pode indicar apenas uma mudaça de estação, por exemplo.
Os histogramas nada mais são que gráficos que permitem analisar a densidade de dados a partir de intervalos. Por isso, nesse estudo para facilitar essa visão a frequência de cada intervalo de dados foi dividida pelo número de dados, com isso o eixo Y tem valores no intervalo de 0 a 1.
Na figura acima retirada da referência Júnior (2024) que os valores no eixo denominado frequência dificultam a visualização de quantos por cento esse intervalo é definido.
Porém, nesta ultima figura é utilizado o conceito de densidade a fim de tornar essa análise mais rápida e fácil.
Está relacionado a função probabilidade acumulada e é a probabilidade de ocorrência de um certo valor ser maior que x, de acordo com os dados fornecidos. No R, o eixo x é o da porcentagem enquanto o eixo y é o eixo dos dados, logo, uma interpretação desse gráfico seria: Para um ponto pertencente a curva (\(x_1\), \(y_1\)) significa que quando se escolhe um valor qualquer da base dados, a probabilidade deste valor ser maior que \(y_1\) é \(x_1\). A figura abaixo mostra o formato de uma gráfico utilizando a função percentil no R.
As séries temporais nada mais são que funções aleatórias de uma variavel. Ela ajuda a satisfazer a necessidade de “prever” o futuro, já que esse não é um fator que pode ser encontrado de forma deterministica.
Ao utilizar o R é possível retirar 3 gráficos:
-Componente de tendência: Indica a direção geral da série, se está crescendo, decresndo ou estável.
-Componente sazonal: Mostra os ciclos que se repetem ao longo do tempo.
-Componente Randômica: São uma espécie de “ruídos” pertencentes a série.
É o gráfico que relaciona os valores em sequência pela variação, ou seja, pela carcterizando-os pela diferença entre eles pela seguinte equação 4:
\[ \text{Variação Percentual} = \frac{\text{Valor Atual} - \text{Valor Anterior}}{\text{Valor Anterior}} \times 100 \tag{4} \] Esse gráfico é fundamental para o entendimento da variação e é muito útil para analisar com que frequência uma série tem uma mudança extrema, pois, em alguns casos taxas de variações extremas em um curto intervalo de tempo são piores que valores extremos.
Autocorrelação é uma técnica utilizada para analisar a relação de uma série temporal com seus próprios valores passados. Ela mede o grau de correlação entre os dados em diferentes intervalos de tempo (defasagens), ajudando a identificar padrões ou dependências temporais nos dados. Ou seja, mede a dependência de um valor com seu histórico, por exemplo, um atleta de alto nível se prepara para uma maratona olimpica em um periódo de 2 anos, de um dia para o outro não haverá muita evolução em relação a sua velocidade máxima, força física, massa magra e outros fatores que podem ser medidos, além do fato de que nem todos os dias ele irá evoluir pois podem acontecer problemas que não o permita treinar como doenças, problemas familiares e etc. Mas ao observar em uma “janela” de tempo maior, como 2 meses, será possível ver uma boa evolução, ou seja, a correlação entre os dados analisados que medem seu desempenho é menor que ao observar de forma diária, esses padrões são frequentemente representados graficamente por meio de uma Função de Autocorrelação (ACF), que mostra como as correlações variam em diferentes defasagens.
A linha azul pontilhada indica os limites de significância estatística para os valores de autocorrelação em cada defasagem (lag). Esses limites são calculados para verificar se a correlação observada em um dado lag é estatisticamente significativa ou um evendo causado por acaso, ruídos. Se as barras de autocorrelação ultrapassam a linha azul, isso indica que há uma relação significativa entre os valores da série no lag correspondente. Ou seja, os dados atuais influenciam diretamente os valores passados ou futuros com essa defasagem. Caso as barras fiquem dentro dos limites das linhas azuis, a autocorrelação para aquele lag pode ser considerada não significativa, sugerindo que não há uma relação forte com os valores em intervalos passados.
As informações foram baseadas na Referência IBM (2024) assim como a imagem.
Este tópico busca principalmente descrever os dados que foram analisados no presente trabalho. Como dito anteriormente, diversas informações podem ser retiradas da referência Operador Nacional do Sistema Elétrico (ONS) (2024a). Os principais dados retirados e sua descrição são:
-Vazão Afluente diária: Vazão diária que chega para a usina;
-Vazão vertida diária: Vazão diária liberada por um reservatório através de vertedouros;
-Vazão defluente diária: Vazão diária que sai da usina;
-Nível de Montante diário: Nível da água diário na usina, equivalente a cota;
-Geração de Energia horária: É a gração de energia por hora da usina em um determinado periodo previamente definido;
-Volume útil diário: É dado pelo volume da usina desconsiderando o volume morto, ou seja, é o volume capaz de produzir energia;
-Energia Natural Afluente Bruta do subsistema: Energia elétrica que pode ser gerada a partir da vazão natural do subsistema;
-Energia Armazenada diária no subsistema: É relativo a capacidade do sistema de armazenar volume de água para de certa forma “guardar energia” para que seja aproveitado posteriormente;
-Custo Marginal de operação semanal do subsistema: É o valor do custo para produzir um pouco mais de um MWh de energia que o sistema precisa.
A data de análise desses dados foi de 01/01/2000 até 06/10/2024, menos a geração de energia horária que apresentou problemas durante sua extração de dados em que só era possível obter um único dia (16 de março de 2024).
Outro dado retirado foi a vazão natural afluente, que como o nome diz é a vazão afluente mas de forma que não haja intervensão humana. Para este foi utilizado todo o periodo de tempo disponivel (01/01/1931 a 31/12/2020).
Um dos tópicos a ser relacionado no presente trabalho é apresentar o gráfico cota x volume, onde a cota é dada em metros e representa o nível do reservatório. Seus valores máximos e mínimo são encontrados no arquivo Hidr.xls, da mesma forma para o volume dado em hectometro cúbico. O primeiro passo dessa ánalise consistiu em contruir o polinômio que relaciona essas duas grandezas. No Hidr.xls é disponibilizado os fatores por meio do nome PCV e de um índice em parênteses que representa qual a potência esse fator se relaciona. Por exemplo, a coluna PCV(2) é o fator que multiplica o volume elevado a 2 para encontrar a cota. Desta forma, a relação entre cota e o volume é dada pela seguinte expressão:
\[ C = (-9.55E-18){V^4}+(1,16E-12){V^3}+(-5.35E-8){V^2}+(1.40E-3){V^1}+3.74E2\tag{3} \] Na equação 3, a variavel \(C\) é a cota e a \(V\) é o volume. Com isso, transformou-se a variavel de volume em um vetor de tamanho 1000 que vai do valor mínimo de volume ao valor máximo e com isso, foi definido o intervalo de aplicação da equação 3, como apresentado pela figura abaixo:
setwd("C:/Geracao")
df <- read.csv2("Hidr.csv")
#summary(df)
# Remover linhas com NA em colunas PCV
df <- df[!is.na(df$PCV.4.) & !is.na(df$PCV.3.) &
!is.na(df$PCV.2.) & !is.na(df$PCV.1.) &
!is.na(df$PCV.0.), ]
# Definir volume máximo e mínimo
Vol_max <- 34116
vol_min <- 5447
# Criar sequência de volumes
volume <- seq(Vol_max, vol_min, length.out = 1000)
#print(df$PCV.4.)
# Garantir que os coeficientes sejam numéricos
df$PCV.4. <- as.numeric(df$PCV.4.)
df$PCV.3. <- as.numeric(df$PCV.3.)
df$PCV.2. <- as.numeric(df$PCV.2.)
df$PCV.1. <- as.numeric(df$PCV.1.)
df$PCV.0. <- as.numeric(df$PCV.0.)
# Criar o polinômio usando a primeira linha
cota <- (df$PCV.4. * volume^4)+(df$PCV.3.*volume^3)+(df$PCV.2.*volume^2)+(df$PCV.1. * volume)+(df$PCV.0.)
# Verificar valores gerados
#print(head(volume))
#print(head(cota))
# Plotar o gráfico
plot(volume, cota, type = "l", col = "blue",
xlab = "Volume (hm³)", ylab = "Cota (m)",
main = "Gráfico de Cota vs Volume")
grid()
Observa-se no gráfico acima que houve coerência nos valores, já que o a partir dos limites de volume mínimo e máximo é possível observar pelo polinômio que ao aplicar a função cota x volume estes limites atingem os valores de cota mínima e máxima, reespectivamente.
A evaporação mensal é dada no arquivo Hidr.xls, por mês e em mm. É um valor dado em mílimitro porque toma como referência a altura que alguma refêrencia evapora. Tomando como base o reservatório, basta multiplicar pela área do reservatório para se obter o volume. Com isso, tem-se duas curvas: área máxima e área mínima, com ambas, foi possível obter uma área média dado pela média dos dois valores. O primeiro passo é passar a área e o volume para metros, o volume máximo foi usado como base para a normalização do gráfico. Posteriormente, criou-se um vetor com os 12 valores obtidos de evaporação e, posteriormente, mais 3 vetores foram criados para representar a evaporação pelas áreas mínima, média e máxima, passando a evaporação para metros também. Por fim, esses vetores foram normalizados e foi possível plotar o gráfico mensal para essas três curvas. Abaixo segue o gráfico em m³ e seguido do gráfico normalizado
setwd("C:/Geracao")
# Carregar o dataframe
df <- read.csv2("Hidr.csv")
# Definir as áreas e volume máximo
area_max <- 4214 * 1000000 # Área máxima em m²
area_min <- 1143.2* 1000000 # Área mínima em m²
area_med <- (area_min + area_max) / 2 # Área média em m²
Vol_max <- 34116 * 1000000 # Volume máximo em m³
# Selecionar as colunas de evaporação "Evap.Men.1." até "Evap.Men.12."
evaporacao <- df[, paste0("Evap.Men..", 1:12, ".")]
# Remover linhas com NA nas colunas de evaporação
evaporacao_clean <- na.omit(evaporacao)
# Converter as colunas para numéricas
evaporacao_clean <- as.data.frame(lapply(evaporacao_clean, as.numeric))
# Calcular a evaporação para cada área (mínima, média, máxima) sobre o volume máximo e passando para metros
evaporacao_min <- (evaporacao_clean * area_min* 0.001)
evaporacao_med <- (evaporacao_clean * area_med* 0.001)
evaporacao_max <- (evaporacao_clean * area_max* 0.001)
# Criar uma sequência de meses (1 a 12)
meses <- 1:12
# Plotar o gráfico com as 3 linhas de evaporação para as 3 áreas
plot(meses, evaporacao_min, type = "l", col = "blue", lwd = 2,
xlab = "Meses", ylab = "Evaporação m³",
main = "Evaporação por Mês (Área Min, Média, Máxima)",
xlim = c(1, 12), ylim = range(c(evaporacao_min, evaporacao_med, evaporacao_max)),
xaxt = "n", col.axis = "darkblue", col.lab = "darkblue")
# Personalizar os valores do eixo X (meses)
axis(1, at = 1:12, labels = c("Jan", "Fev", "Mar", "Abr", "Mai", "Jun",
"Jul", "Ago", "Set", "Out", "Nov", "Dez"), las = 2, col.axis = "darkblue")
# Adicionar as linhas para evaporação média e máxima
lines(meses, evaporacao_med, type = "l", col = "red", lwd = 2)
lines(meses, evaporacao_max, type = "l", col = "green", lwd = 2)
# Adicionar a legenda
legend("topleft", legend = c("Evaporação Mínima", "Evaporação Média", "Evaporação Máxima"),
col = c("blue", "red", "green"), lty = 1, lwd = 2, pch = 16,
bty = "n", cex = 0.8, text.col = "black")
# Adicionar a grade para facilitar a leitura
grid(col = "gray", lty = "dotted")
#___________________________________________________________________________________________
#Normalizado
# Selecionar as colunas de evaporação "Evap.Men.1." até "Evap.Men.12."
evaporacao <- df[, paste0("Evap.Men..", 1:12, ".")]
# Remover linhas com NA nas colunas de evaporação
evaporacao_clean <- na.omit(evaporacao)
# Converter as colunas para numéricas
evaporacao_clean <- as.data.frame(lapply(evaporacao_clean, as.numeric))
# Calcular a evaporação para cada área (mínima, média, máxima) sobre o volume máximo e passando para metros
evaporacao_min <- (evaporacao_clean * area_min* 0.001) / Vol_max
evaporacao_med <- (evaporacao_clean * area_med* 0.001) / Vol_max
evaporacao_max <- (evaporacao_clean * area_max* 0.001) / Vol_max
# Criar uma sequência de meses (1 a 12)
meses <- 1:12
# Plotar o gráfico com as 3 linhas de evaporação para as 3 áreas
plot(meses, evaporacao_min, type = "l", col = "blue", lwd = 2,
xlab = "Meses", ylab = "Evaporação p.u.",
main = "Evaporação por Mês (Área Min, Média, Máxima)",
xlim = c(1, 12), ylim = range(c(evaporacao_min, evaporacao_med, evaporacao_max)),
xaxt = "n", col.axis = "darkblue", col.lab = "darkblue")
# Personalizar os valores do eixo X (meses)
axis(1, at = 1:12, labels = c("Jan", "Fev", "Mar", "Abr", "Mai", "Jun",
"Jul", "Ago", "Set", "Out", "Nov", "Dez"), las = 2, col.axis = "darkblue")
# Adicionar as linhas para evaporação média e máxima
lines(meses, evaporacao_med, type = "l", col = "red", lwd = 2)
lines(meses, evaporacao_max, type = "l", col = "green", lwd = 2)
# Adicionar a legenda
legend("topleft", legend = c("Evaporação Mínima", "Evaporação Média", "Evaporação Máxima"),
col = c("blue", "red", "green"), lty = 1, lwd = 2, pch = 16,
bty = "n", cex = 0.8, text.col = "black")
# Adicionar a grade para facilitar a leitura
grid(col = "gray", lty = "dotted")
Os sumarios estatísticos são um resumo dado pelo R, a partir da função summary. As base de dados contém tanto os valores dos dados em sí como uma base para as datas. O valores dos dados estão organizados no dataframe chamado “SOBRADINHO”, menos a geração de energia horária que está com a data que foi retirada o dado (15 de março).
setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
summary(df)
## datas SOBRADINHO
## Length:9045 Min. :-997
## Class :character 1st Qu.: 770
## Mode :character Median :1109
## Mean :1580
## 3rd Qu.:2000
## Max. :7791
Normalizando a vazão alfuente e aplicando utilizando a função summary em R:
setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
summary(vazao_afluente_normalizada)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.6310 0.4874 0.7019 1.0000 1.2659 4.9311
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
summary(df)
## datas SOBRADINHO
## Length:32873 Min. : 156
## Class :character 1st Qu.: 1095
## Mode :character Median : 1742
## Mean : 2521
## 3rd Qu.: 3422
## Max. :18525
Normalizando a vazão natural afluente e aplicando utilizando a função summary em R:
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
summary(vazao_afluente_normalizada)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.06189 0.43443 0.69112 1.00000 1.35765 7.34965
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
summary(df)
## datas SOBRADINHO
## Length:9046 Min. : 0.00
## Class :character 1st Qu.: 0.00
## Mode :character Median : 0.00
## Mean : 27.28
## 3rd Qu.: 0.00
## Max. :3590.00
Normalizando a vazão vertida e desconsiderando os zeros para analise, tem-se
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
summary(dados_filtrados)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.0 540.5 865.5 1045.7 1490.8 3590.0
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
dados_filt_normal<-dados_filtrados/mean(dados_filtrados)
summary(dados_filt_normal)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.001913 0.516883 0.827683 1.000000 1.425613 3.433138
setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
summary(df)
## datas SOBRADINHO
## Length:9046 Min. : 551
## Class :character 1st Qu.:1099
## Mode :character Median :1435
## Mean :1559
## 3rd Qu.:1975
## Max. :6098
Normalizando a vazão defluente e aplicando utilizando a função summary em R:
setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
vazao_afluente_defluente <- df$SOBRADINHO / mean(df$SOBRADINHO)
summary(vazao_afluente_defluente)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.3535 0.7050 0.9206 1.0000 1.2670 3.9120
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
summary(df)
## SOBRADINHO datas
## Min. :380.8 Length:9046
## 1st Qu.:385.6 Class :character
## Median :388.1 Mode :character
## Mean :387.8
## 3rd Qu.:390.2
## Max. :392.6
Normalizando o nível do montante diário pela cota máxima (392,5 metros):
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo <- 392.5
nivel <- df$SOBRADINHO / maximo
summary(nivel)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9702 0.9825 0.9888 0.9881 0.9941 1.0003
setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
summary(df)
## X15.de.marco
## Min. :405.0
## 1st Qu.:408.8
## Median :411.0
## Mean :410.8
## 3rd Qu.:412.2
## Max. :416.0
A geração de energia horária foi normalizada pelo seu valor máximo e posteriormente aplicado a função summary no R.
setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo<- max(df$X15.de.marco)
normal<-df$X15.de.marco/maximo
summary(normal)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9736 0.9826 0.9880 0.9875 0.9910 1.0000
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
summary(df)
## SOBRADINHO datas
## Min. : 1.00 Length:9046
## 1st Qu.: 27.70 Class :character
## Median : 48.00 Mode :character
## Mean : 49.51
## 3rd Qu.: 70.40
## Max. :101.50
O volume útil diário, como foi dado em porcentagem, basta dividir 100 para encontrar o valor em p.u:
maximo <- 100
nivel <- df$SOBRADINHO / maximo
summary(nivel)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0100 0.2770 0.4800 0.4951 0.7040 1.0150
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
summary(df)
## datas SOBRADINHO
## Length:9046 Min. : 618
## Class :character 1st Qu.: 2172
## Mode :character Median : 3569
## Mean : 5508
## 3rd Qu.: 7310
## Max. :33141
A energia natural afluente bruta do subsistema nordeste foi normalizada considerando o valor máximo:
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
maximo <- max(df$SOBRADINHO)
nivel <- df$SOBRADINHO / maximo
summary(nivel)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.01865 0.06555 0.10769 0.16620 0.22056 1.00000
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
summary(df)
## datas SOBRADINHO
## Length:9046 Min. : 1641
## Class :character 1st Qu.:12336
## Mode :character Median :19692
## Mean :19694
## 3rd Qu.:27248
## Max. :37635
A Energia armazenada diária do subsitema nordeste foi normalizada considerando o valor máximo:
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
maximo <- max(df$SOBRADINHO)
nivel <- df$SOBRADINHO / maximo
summary(nivel)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0436 0.3278 0.5232 0.5233 0.7240 1.0000
setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
summary(df)
## datas SOBRADINHO
## Length:1032 Min. : 0.00
## Class :character 1st Qu.: 13.25
## Mode :character Median : 96.67
## Mean : 184.61
## 3rd Qu.: 229.77
## Max. :3044.45
setwd("C:/Geracao")
df <- read.csv2("vazao_afluente.csv")
# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de Vazão afluente",
xlab = "[m³/s]", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
A vazão afluente foi normalizada pela média, como mostra o resultado a seguir do seu histograma:
setwd("C:/Geracao")
df <- read.csv2("vazao_afluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
hist_data <- hist(vazao_afluente_normalizada,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de Vazão afluente normalizada",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Por fim, foi aplicado o log nos valores normalizados
#Histograma com Log
setwd("C:/Geracao")
df <- read.csv2("vazao_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
log <- log(normal)
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de Vazão afluente normalizado com log aplicado",
xlab = "p.u.", ylab = "Proporção", las = 1,)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Os histogramas apresentam uma concentração significativa de valores nas faixas mais baixas, próximas de 0 a 2000 m³/s, e uma “cauda” (Valores dispersos do conjunto que formam algo similiar a uma calda) longa para os valores mais elevados, acima de 2000 m³/s. Como a calda é maior no sentido positivo, observa-se que há uma tendência maior para extremos relacionados a enchentes, chuvas fortes do que secas. O que não significa que sejam os piores cenários para o sistema. Ao aplicar o logaritmo na vazão normalizada, a distribuição torna-se mais simétrica, aproximando-se de uma distribuição normal. O histograma log-normalizado revela que a maior parte dos valores se concentra entre -1 e 0, indicando que os valores estam concentrados abaixo da média, apesar de que os maiores outliers serem positivos, e ainda o valor de maior proporção está em torno de (-0,5) no gráfico com log.
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de Vazão natural afluente",
xlab = "[m³/s]", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
A vazão natural afluente foi normalizada pela média, como mostra o
resultado a seguir do seu histograma:
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
hist_data <- hist(vazao_afluente_normalizada,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de Vazão natural afluente normalizada",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Por fim, foi aplicado o log nos valores normalizados
#Histograma com Log
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
log <- log(normal)
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de Vazão natural afluente com log aplicado",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
A maior parte dos valores está concentrada entre 0,4 e 1,5 p.u., com uma proporção muito baixa acima de 2 p.u. A presença de vazões extremas, com picos que ultrapassam 18.000 m³/s, evidencia a ocorrência de enchentes fortes que podem ocasionar vazões muito acima do “comum”.
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
#Fazer um histograma sem normalização
# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma vazão vertida",
xlab = "[m³/s]", ylab = "Proporção", las = 1)
A vazão vertida por ter muitos zeros, foi feita duas vezes desconsiderando os zeros:
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
hist_data <- hist(dados_filtrados,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma vazão vertida desconsiderando o zero",
xlab = "[m³/s]", ylab = "Proporção")
Normalizou-se a Vazão vertida pela média:
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
hist_data <- hist(vazao_afluente_normalizada,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de vazão vertida normalizada",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Desconsiderando os zeros tem-se:
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
hist_data <- hist(dados_filtrados/mean(dados_filtrados),
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Vazão vertida normalizada desconsiderando o zero",
xlab = "p.u.", ylab = "Proporção")
Com isso, aplicou-se o log na normalizada desconsiderando o log:
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
log <- log(dados_filtrados/mean(dados_filtrados))
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma vazão vertida normalizada com log",
xlab = "p.u.", ylab = "Proporção")
A análise desconsiderando os valores zero nos dados de vazão vertida permite compreender melhor os padrões de distribuição nos períodos em que houve vertimento. A predominância de vazões entre 0 e 1.000 m³/s sugere que, nos períodos em que há vertimento, ele ocorre de forma controlada, com grandes volumes sendo exceções. Vazões muito acima de 2,0 p.u. são incomuns e indicam momentos críticos de operação do reservatório.
setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de Vazão defluente",
xlab = "[m³/s]", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1) # Coloca o texto na horizontal
Normalizou-se a Vazão defluente pela média:
setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
vazao_afluente_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
hist_data <- hist(vazao_afluente_normalizada,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de Vazão defluente normalizada",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Com isso aplicou-se o log:
#Histograma com Log
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
log <- log(normal)
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma de Vazão defluente normalizado com log aplicado",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
A maior frequência de valores está concentrada entre aproximadamente 500 e 2.000 m³/s, com uma redução gradual na frequência para vazões mais altas. A maior parte do tempo, a usina opera liberando vazões moderadas (entre 0,5 e 1,5 p.u), provavelmente ajustadas à geração de energia e ao atendimento de demandas a jusante. Os picos observados representam momentos críticos, como períodos de enchentes ou aumento na demanda energética, que requerem maior vazão defluente. A distribuição logarítmica apresenta uma forma mais simétrica em relação aos histogramas anteriores, concentrando a maioria dos valores entre -1 e 0.
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(df$SOBRADINHO,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma do nível de montante diário",
xlab = "[m]", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1) # Coloca o texto na horizontal
Normalizou-se o nível do montante diário pela cota máxima da usina, retirado do Hidr.xls.
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo <- 392.5
nivel <- df$SOBRADINHO / maximo
hist_data <- hist(nivel,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma do nível de montante diário normalizada",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Aplicando o log:
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo <- 392.5
normal<-df$SOBRADINHO/maximo
log <- log(normal)
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma do nivel de montante normalizado com log",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Observa-se que pela característica da normalização que foi o valor máximo da cota, então o logaritimo não tem mais o zero como um valor central e sim como o limite. Pois o log máximo é 0 (log(1)) e os demais são negativos pois estão entre 0 e 1. Além de que, o único valor acima do máximo é decorrente de possiveis aproximações na base de dados já que representa apenas 1,0003 p.u como indicado no summary. Os valores estão concentrados entre 386 e 392 metros, com maior frequência em torno de 390 metros.Porém, houveram periodos em que o reservatório esteve perto do seu limite. Níveis próximos ou acima da cota máxima (392,5 metros) podem levar a necessidade de vertimento. Já níveis menores observados (380,8 metros, sendo que o mínimo é 380,5 segundo a base de dados) indicam períodos críticos, possivelmente associados a secas ou maior uso do volume armazenado.
setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
hist_data <- hist(df$X15.de.marco,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 25)
n <- length(df$X15.de.marco)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma da Geração Horária dia 15/03/24",
xlab = "MW", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
A geração de energia horária foi normalizada pelo valor máximo:
setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo<- max(df$X15.de.marco)
hist_data <- hist(df$X15.de.marco/maximo,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 25)
n <- length(df$X15.de.marco)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma da Geração Horária dia 15/03/24 normalizado",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Com isso, como o valor máximo foi usado para normalizar, o valor máximo no eixo x será 0, pois corresponde ao valor máximo.
setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo <- max(df$X15.de.marco)
normal<-df$X15.de.marco/maximo
log <- log(normal)
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 25)
n <- length(df$X15.de.marco)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Geração horáia normalizado com log aplicado",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Os valores estão distribuídos de maneira concentrada entre 410 e 413 MW, com maior frequência em torno de 411 MW. Ao aplicação do log destaca variações sutis em torno do valor máximo, comprimindo as extremidades e evidenciando a estabilidade da geração neste dia por conta da grande semelhança entre os gráficos.
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
hist_data <- hist(df$SOBRADINHO,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma do volume útil diário",
xlab = "%", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1) # Coloca o texto na horizontal
O volume útil já veio em porcentagem, logo para passa-lo para p.u. basta dividir por 100:
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
maximo <- 100
nivel <- df$SOBRADINHO / maximo
hist_data <- hist(nivel,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma do volume útil diário normalizada",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Aplicando o log:
normal<-df$SOBRADINHO/100
log <- log(normal)
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma volume útil normalizado normalizado com log",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Observa-se que pela característica da normalização que foi 100% o logaritimo não tem mais o zero como um valor central e sim como o limite. Pois o log máximo é 0 (log(1)) e os demais são negativos pois estão entre 0 e 1. O volume útil chegou a atingir 1% indicando períodos críticos com quase total esgotamento da reserva da usina (desconsiderando o volume morto).Os valores estão distribuídos entre 0% e 100%, com maior concentração entre 40% e 70%, indicando que o reservatório frequentemente opera em níveis consideravel intermediários. Há uma concentração de valores próximos de 100% sugerindo que, embora esporadicos, há periodos em que o reservatório está completamente cheio, provavelmente durante chuvas fortes.
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
hist_data <- hist(df$SOBRADINHO,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma da energia natural afluente bruta do subsistema nordeste",
xlab = "MWm", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1) # Coloca o texto na horizontal
A normalização da energia natural afluente bruta do subsistema nordeste foi feita a partir do valor máximo da mesma.
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
maximo <- max(df$SOBRADINHO)
nivel <- df$SOBRADINHO / maximo
hist_data <- hist(nivel,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "energia natural afluente bruta do subsistema nordeste normalizado",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Como em alguns casos anteriores, ao aplicar o log o valor mais a direita no eixo x do histograma será 0 e corresponde ao valor máximo.
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
normal<-df$SOBRADINHO/max(df$SOBRADINHO)
log <- log(normal)
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "log da energia natural afluente bruta do subsistema",
xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
hist_data <- hist(df$SOBRADINHO,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma da energia armazenada diária no subsitema nordeste",
xlab = "GWh", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1) # Coloca o texto na horizontal
A normalização da energia armazenada diária do subsistema nordeste foi feita a partir do valor máximo da mesma.
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
maximo <- max(df$SOBRADINHO)
nivel <- df$SOBRADINHO / maximo
hist_data <- hist(nivel,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "energia armazenada diária do subsistema nordeste normalizado",
xlab = "p.u.", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
O mesmo que o caso que a energia natural afluente bruta do subsistema nordeste ocorre ao logaritimizar:
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
normal<-df$SOBRADINHO/max(df$SOBRADINHO)
log <- log(normal)
log2 <- log[!is.na(log)]
hist_data <- hist(log2,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "log da energia armazenada diária do subsistema",
xlab = "p.u.", ylab = "Proporção", las = 1,color='blue')
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
# Substituir os meses abreviados por seu número correspondente
df$datas <- gsub("jan.", "01", df$datas)
df$datas <- gsub("fev.", "02", df$datas)
df$datas <- gsub("mar.", "03", df$datas)
df$datas <- gsub("abr.", "04", df$datas)
df$datas <- gsub("mai.", "05", df$datas)
df$datas <- gsub("jun.", "06", df$datas)
df$datas <- gsub("jul.", "07", df$datas)
df$datas <- gsub("ago.", "08", df$datas)
df$datas <- gsub("set.", "09", df$datas)
df$datas <- gsub("out.", "10", df$datas)
df$datas <- gsub("nov.", "11", df$datas)
df$datas <- gsub("dez.", "12", df$datas)
# Substituir o ano com dois dígitos para quatro dígitos
df$datas <- gsub(" de (\\d{2})$", " de 20\\1", df$datas)
# Convertendo as datas para o formato 01/01/2000
df$datas <- as.Date(df$datas, format = "%d de %m de %Y")
# Agora formate para 'dd/mm/yyyy'
df$datas_formatada <- format(df$datas, "%d/%m/%Y")
hist_data <- hist(df$SOBRADINHO,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 150)
n <- length(df$SOBRADINHO)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Custo marginal de operação semanal do subsitema nordeste",
xlab = "custo marginal (R$)", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1) # Coloca o texto na horizontal
O custo marginal de operação não foi normalizada.
Nas séries, foi desenhado além dos item citados no capítulo de bloxplot, também foi feito uma linha pontilhada vermelha que coincide com a média.
As séries são normalizadas da mesma forma que o sumário estatístico e os histrogramas. Posteriormente, aplicou-se a função logo em cada série.
#setwd("C:/Geracao")
df <- read.csv2("C:/geracao2/vazao_afluente.csv")
#Boxplot sem normalização
boxplot(df$SOBRADINHO,
main = "Box Plot de Vazão afluente [m³/s]", # Título do gráfico
ylab = "[m³/s]",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2) # linha da média
setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
boxplot(normal,
main = "Box Plot de Vazão afluente ", # Título do gráfico
ylab = "p.u.",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(normal), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
log <- log(normal)
log2 <- log[!is.na(log)]
boxplot(log2,
main = "Box Plot da Vazão afluente log normalizada", # Título do gráfico
ylab = "log",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)
Como esperado por conta da análise dos histogramas, a linha vermelha (média) está posicionada acima da mediana. Idicando a forte influência dos outliers no calculo da média e que valores extremos são majoritariamente positivo. Após a transformação logarítmica, a média está mais próxima da mediana, indicando uma redução significativa da assimetria nos dados. Os outliers negativos no gráfico do log indicam a grande influência dos extremos no cálculo da média, fazendo com que não haja outliers positivos e sim negativos nesse gráfico.
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
boxplot(df$SOBRADINHO,
main = "Box Plot de Vazão natural afluente [m³/s]", # Título do gráfico
ylab = "[m³/s]",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
boxplot(normal,
main = "Box Plot de Vazão natural afluente ", # Título do gráfico
ylab = "p.u.",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(normal), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
log <- log(normal)
log2 <- log[!is.na(log)]
boxplot(log2,
main = "Box Plot da Vazão natural afluente log normalizada", # Título do gráfico
ylab = "log",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)
A mediana (linha preta dentro do box) está abaixo da média (linha vermelha), há uma grande quantidade de outliers positivos representando eventos extremos de alta vazão, esses outliers estendem a cauda dos histogramas, além de deslocar a média para cima. Por se considerar a analise da vazão natural afluente conter dados de 1931 até 2020, pode-se concluir que Os valores entre 1º e 3º quartil refletem a vazão natural regular do sistema. A aplicação do logaritmo reduz a assimetria da distribuição, tornando-a mais equilibrada. A média (linha vermelha) está muito próxima da mediana, indicando que os valores extremos têm menor influência, talvez por conta da grande quantidade de dados.
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
boxplot(df$SOBRADINHO,
main = "Box Plot de Vazão vertida", # Título do gráfico
ylab = "[m³/s]",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2) # linha da média
A vazão vertida por ter muitos zeros, foi feita duas vezes desconsiderando os zeros:
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
boxplot(dados_filtrados,
main = "Box Plot de Vazão Vertida (sem zeros)",
ylab = "Valores (m³/s)",
col = "lightblue",
border = "black")
abline(h = mean(dados_filtrados), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
mlt<-mean(df$SOBRADINHO)
vazao_vertida_numerico_mlt<-df$SOBRADINHO/mlt
boxplot(vazao_vertida_numerico_mlt,
main = "Box Plot de Vazão Vertida ", # Título do gráfico
ylab = "p.u.",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(vazao_vertida_numerico_mlt), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
dados_filtrados <- df$SOBRADINHO[df$SOBRADINHO > 0]
mlt<-mean(dados_filtrados)
df_normal<-dados_filtrados/mlt
log <- log(df_normal)
log2 <- log[!is.na(log)]
boxplot(log2,
main = "Box Plot de Vazão vertida com log",
ylab = "log",
col = "lightblue",
border = "black")
abline(h = mean(log2), col = "red", lwd = 2, lty = 2)
A mediana está próxima de 1.000 m³/s, enquanto a média (linha vermelha) está um pouco acima. O intervalo interquartil (IQR) varia de aproximadamente 500 m³/s a 1.500 m³/s, concentrando a maioria dos valores de vazão vertida nesse intervalo. Os pontos acima do limite superior representam eventos de vazões extremas (outliers), com valores superiores a 2.500 m³/s estes valores indicam eventos pontuais de alta vazão vertida, como durante cheias ou descargas excepcionais para controle do reservatório. No boxplot normalizado e com logaritimo mostra uma distribuição mais simétrica, com a mediana e a média alinhadas em torno de 0 na escala logarítmica. Reduzindo a influência de outliers, proporcionando uma análise mais equilibrada.
setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
boxplot(df$SOBRADINHO,
main = "Box Plot de Vazão defluente",
ylab = "[m³/s]",
col = "lightblue",
border = "black")
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
boxplot(normal,
main = "Box Plot de Vazão defluente normalizada ", # Título do gráfico
ylab = "p.u.",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)
media<-mean(df$SOBRADINHO)
normal<-df$SOBRADINHO/media
log <- log(normal)
log2 <- log[!is.na(log)]
boxplot(log2,
main = "Box Plot de Vazão defluente normalizada com log aplicado", # Título do gráfico
ylab = "log",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)
Os três boxplots fornecem perspectivas complementares sobre a distribuição da vazão defluente, considerando os valores absolutos (m³/s), normalizados (p.u.), e normalizados com logaritmo aplicado. A mediana (linha preta) está ligeiramente abaixo da média (linha vermelha), indicando uma assimetria positiva na distribuição (valores altos deslocam a média para cima. Há uma quantidade significativa de outliers, representando eventos de alta vazão defluente. Esses valores podem estar associados a períodos de cheias ou maior demanda por geração de energia. Em que mesmo com o log aplicado há um grande número de outliers. Os outliers acima de 2,0 p.u. representam eventos de alta vazão, que são menos frequentes, mas que devem ser levados em consideração.
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
boxplot(df$SOBRADINHO,
main = "Boxplot do nível de montante diário",
ylab = "(m)",
col = "lightblue",
border = "black")
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo<-392.5
df_normal<-df$SOBRADINHO/maximo
boxplot(df_normal,
main = "Box Plot do nível de montante diario normalizado", # Título do gráfico
ylab = "p.u.",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
media_log <- log(mean(df_normal, na.rm = TRUE))
# Adicionar uma linha horizontal na média logarítmica
abline(h = media_log, col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
maximo<-392.5
df_normal<-df$SOBRADINHO/maximo
log <- log(df_normal)
log2 <- log[!is.na(log)]
boxplot(log2,
main = "Box Plot do nível de montante diario com log aplicado", # Título do gráfico
ylab = "log",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
media_log <- log(mean(df_normal, na.rm = TRUE))
# Adicionar uma linha horizontal na média logarítmica
abline(h = media_log, col = "red", lwd = 2, lty = 2)
Na distribuição geral a mediana está próxima de 388 metros, indicando que metade dos valores se concentra abaixo deste nível. O nível de montante diário apresenta uma distribuição estável, com a maior parte dos valores entre 386 e 390 metros, ou 0,97 e 0,99 p.u.. Com isso pode-se concluir que o reservatório opera frequentemente próximo da cota máxima
setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
boxplot(df$X15.de.marco,
main = "Boxplot Geração Horária dia 15/03/24", # Título do gráfico
ylab = "MW",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$X15.de.marco), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo<-1050.3
df_normal<-df/maximo
boxplot(df$X15.de.marco/maximo,
main = "Boxplot normalizado Geração Horária dia 15/03/24", # Título do gráfico
ylab = "p.u.",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$X15.de.marco/maximo), col = "red", lwd = 2, lty = 2) # linha da média
setwd("C:/Geracao")
df<- read.csv2("geracao_horaria.csv")
maximo<-1050.3
df_normal<-df/maximo
log <- log(df_normal)
log2 <- log[!is.na(log)]
boxplot(log2,
main = "Boxplot com log da Geração Horária dia 15/03/24", # Título do gráfico
ylab = "log",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$X15.de.marco/maximo), col = "red", lwd = 2, lty = 2) # linha da média
Os boxplots não tem outliers, indicando que a geração horaria para o dia 15 de março de 2024 teve valores concentrados entre sí.
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
boxplot(df$SOBRADINHO,
main = "Boxplot do volume útil", # Título do gráfico
ylab = "%",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
cem_porcento<-100
df_normal<-df$SOBRADINHO/cem_porcento
boxplot(df_normal,
main = "Boxplot normalizado volume util diario normalizado", # Título do gráfico
ylab = "p.u.",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$SOBRADINHO/cem_porcento), col = "red", lwd = 2, lty = 2) # linha da média
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
x<-df$SOBRADINHO/100
log <- log(x)
log2 <- log[!is.na(log)]
boxplot(log2,
main = "Box Plot do volume util diario log normalizada", # Título do gráfico
ylab = "p.u.",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(log2), col = "red", lwd = 2, lty = 2)
A média está próxima de 50%, indicando que o reservatório opera, em média, em metade de sua capacidade útil. O log destaca os valores baixos, evidenciando outliers abaixo de -2 p.u., correspondendo a momentos críticos de baixa disponibilidade hídrica.Os boxplots revelam um reservatório que opera de forma estável, mas que enfrenta momentos críticos de baixa disponibilidade de água.
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
boxplot(df$SOBRADINHO,
main = "Box Plot da Energia Natural Afluente Bruta do subsistema Nordeste MWm", # Título do gráfico
ylab = "[MWm]",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
maxi<-max(df$SOBRADINHO)
normal<-df$SOBRADINHO/maxi
boxplot(normal,
main = "Box Plot Energia Natural Afluente Bruta do subsistema em p.u", # Título do gráfico
ylab = "p.u.",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(normal), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
maximo<-max(df$SOBRADINHO)
normal<-df$SOBRADINHO/maximo
log <- log(normal)
log2 <- log[!is.na(log)]
boxplot(log2,
main = "Box Plot do log da energia natural afluente bruta do subsistema ", # Título do gráfico
ylab = "log",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
boxplot(df$SOBRADINHO,
main = "BoxPlot da Energia armazenada diária no subsistema Nordeste", # Título do gráfico
ylab = "GWh",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$SOBRADINHO), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
maxi<-max(df$SOBRADINHO)
normal<-df$SOBRADINHO/maxi
boxplot(normal,
main = "Energia armazenada diária no subsistema Nordeste p.u", # Título do gráfico
ylab = "p.u",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(normal), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
maximo<-max(df$SOBRADINHO)
normal<-df$SOBRADINHO/maximo
log <- log(normal)
log2 <- log[!is.na(log)]
boxplot(log2,
main = "log Energia armazenada diária no subsistema", # Título do gráfico
ylab = "log",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = log(mean(normal)), col = "red", lwd = 2, lty = 2)
setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
df$datas <- gsub("jan.", "01", df$datas)
df$datas <- gsub("fev.", "02", df$datas)
df$datas <- gsub("mar.", "03", df$datas)
df$datas <- gsub("abr.", "04", df$datas)
df$datas <- gsub("mai.", "05", df$datas)
df$datas <- gsub("jun.", "06", df$datas)
df$datas <- gsub("jul.", "07", df$datas)
df$datas <- gsub("ago.", "08", df$datas)
df$datas <- gsub("set.", "09", df$datas)
df$datas <- gsub("out.", "10", df$datas)
df$datas <- gsub("nov.", "11", df$datas)
df$datas <- gsub("dez.", "12", df$datas)
# Substituir o ano com dois dígitos para quatro dígitos
df$datas <- gsub(" de (\\d{2})$", " de 20\\1", df$datas)
# Convertendo as datas para o formato 01/01/2000
df$datas <- as.Date(df$datas, format = "%d de %m de %Y")
# Agora formate para 'dd/mm/yyyy'
df$datas_formatada <- format(df$datas, "%d/%m/%Y")
boxplot(df$SOBRADINHO,
main = "Boxplot custo marginal", # Título do gráfico
ylab = "custo marginal (R$)",
col = "lightblue", # Cor do box
border = "black") # Cor da borda do box
abline(h = mean(df$m), col = "red", lwd = 2, lty = 2)
#setwd("C:/geracao2")
#list.files("C:/geracao2")
df <- read.csv2("C:/geracao2/vazao_afluente.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
main = "Série Temporal - Vazão afluente Sobradinho",
xlab = "Data", ylab = "[m³/s] ")
grid()
É possível observar um pico extremo entre 2004 e 2008, nesse caso por ser um pico positivo é provável que seja decorrente de alguma enchente e uma periodo muito chuvoso. Já entre 2016 e 2020, reflete um periodo de seca. Apesar dos extremos, é possível observar que há ciclos aparentemente bem definidos para os picos, mas certas condições podem fazer com que eles sejam acima do esperado como foi entre 2004 e 2008.
Para a série temporal da natural afluente, dividiu-se em 3 periodos iguais como segue a baixo
library(xts)
library(zoo) # Para agregação de dados
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
# Converter a coluna de datas
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Agregar os dados para média mensal
serie_mensal <- apply.monthly(serie_temporal, mean)
# Dividir a série temporal em três períodos
serie1 <- serie_mensal["1931/1960"]
serie2 <- serie_mensal["1961/1990"]
serie3 <- serie_mensal["1991/2020"]
# Gráfico 1: 1931 a 1960
plot(serie1, type = "l", col = "blue",
main = "Vazão natural afluente (1931-1960)",
xlab = "Data", ylab = "[m³/s]")
grid()
library(xts)
library(zoo) # Para agregação de dados
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
# Converter a coluna de datas
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Agregar os dados para média mensal
serie_mensal <- apply.monthly(serie_temporal, mean)
# Dividir a série temporal em três períodos
serie1 <- serie_mensal["1931/1960"]
serie2 <- serie_mensal["1961/1990"]
serie3 <- serie_mensal["1991/2020"]
# Gráfico 2: 1961-1990
plot(serie2, type = "l", col = "blue",
main = "Vazão natural afluente (1961-1990)",
xlab = "Data", ylab = "[m³/s]")
grid()
library(xts)
library(zoo) # Para agregação de dados
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
# Converter a coluna de datas
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Agregar os dados para média mensal
serie_mensal <- apply.monthly(serie_temporal, mean)
# Dividir a série temporal em três períodos
serie1 <- serie_mensal["1931/1960"]
serie2 <- serie_mensal["1961/1990"]
serie3 <- serie_mensal["1991/2020"]
# Gráfico 2: 1961-1990
plot(serie3, type = "l", col = "blue",
main = "Vazão natural afluente (1991-2020)",
xlab = "Data", ylab = "[m³/s]")
grid()
A série temporal foi dividida em três períodos distintos: 1931–1960, 1961–1990 e 1991–2020. Essa segmentação permite observar a evolução da vazão natural ao longo do tempo. O primeiro periodo é caracterizado por vazões com um comportamento de primeiro harmonico senoidal, com picos moderados em relação aos outros períodos. Pode estar relacionado a forma de medição da vazão nestes periodo que com certeza não são tão acuradas como o último periodo analisado ou então que esse comportamento indica uma fase de menor impacto de variabilidade climática. Porém, um dos maiores picos ocorreram nesse periodo chegando a ultrapassar 10.000. Já o segundo periodo com picos de vazão mais intensos e frequentes (2 superando 8.000 m³/s, como nos anos de 1978 e 1983).Há também períodos de vazões mais reduzidas, indicando possivei ciclos de seca, como os anos 1985–1990. Por fim, o terceiro é marcado por uma tendência de redução geral das vazões, com picos menos intensos e frequentes. Eventos extremos de alta vazão são menos comuns, e a maioria dos picos se encontra majoritariamente abaixo de 8.000 m³/s. As baixas vazões se tornam mais frequentes, especialmente após 2010, indicando a intensificação de períodos de seca, possivelmente associada a mudanças climáticas.
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
main = "Série Temporal - vazão vertida Sobradinho",
xlab = "Data", ylab = "[m³/s] ")
grid()
A maior parte dos vertimentos ocorreu entre os anos de 2004 e 2009, com picos notáveis de vazão que ultrapassaram os 3.000 m³/s. Após 2009, houve longos períodos sem qualquer vertimento significativo ou com vertimentos exporadicos como entre 2009 e 2020. Os vertimento voltaram a ocorrer a partir de 2020, com picos expressivos, embora em menor magnitude do que os registrados no período anterior (2004–2009).
setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
main = "Série Temporal - vazão defluente Sobradinho",
xlab = "Data", ylab = "[m³/s] ")
grid()
A série temporal da vazão defluente da usina de Sobradinho, cobrindo o período de 2000 a 2024, apresenta os padrões de liberação de água pelo reservatório. Há uma tendência geral de redução nas vazões médias entre 2010 e 2016 e nos anos recentes (2020–2024), observa-se uma leve retomada de vazões mais altas, embora ainda abaixo dos níveis registrados no início dos anos 2000. Já nos periodo entre 2004 e 2012O período é marcado por picos expressivos de vazão, com o maior valor de toda a série superando 6.000 m³/s.
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
main = "Nível de montante",
xlab = "Data", ylab = "[m] ")
grid()
A série temporal do nível de montante diário reflete as variações na altura da água no reservatório da usina de Sobradinho ao longo dos anos, a série mostra um padrão cíclico, com oscilações regulares que parecem estar associadas às estações hidrológicas e energeticas bem definidas.
# Criar o vetor de horas
# Criar o vetor de horas para um único dia
hora <- seq(from = as.POSIXct("2024-11-22 00:00"),
to = as.POSIXct("2024-11-22 23:00"),
by = "hour")
setwd("C:/Geracao")
df <- read.csv2("geracao_horaria.csv")
# Verifique o nome correto da coluna com os dados (exemplo: "Sobradinho")
serie_temporal <- xts(df$X15.de.marco, order.by = hora)
# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
main = "Geração de energia horária",
xlab = "Horas", ylab = "MW")
grid()
A série temporal da geração horária de energia apresenta as flutuações nos valores de geração ao longo do dia, evidenciando o comportamento do sistema sob condições operacionais específicas no dia analisado. Observa-se que no horário comercial é o periodo de menor geração de energia, com excessão ao meio dia.
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
main = "Série Temporal - volume útil diário ",
xlab = "Data", ylab = "%")
grid()
Supõe-se que os picos estão ligados a periodos de alta preciptação, mas por conta da usina não ser a fio d’água, o homem pode influênciar a partir da liberação de água. Olhando para os periodos, entre 2000 e 2004, o volume útil operou entre 20 e 60, raramente superando esses limites. Já entre 2004 e 2008 houveram altos picos, chegando a encher o reservatório por completo, mas logo em seguida houve uma grande queda no inicio de 2008 que por mais que logo em seguida houverão picos elevados entre 2012 e 2020 o reservatorio esteve majoritariamente a baixo de 40% com um longo periodo abaixo de 20%. Por fim, o reservatório vem em uma crescente em relação ao volume, indicando ciclos por fatores naturais.
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
main = "Energia natural afluente bruta do subsitema",
xlab = "Data", ylab = "MWm")
grid()
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
main = "Energia armazenada diária do subsitema",
xlab = "Data", ylab = "GWh")
grid()
setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
df$datas <- gsub("jan.", "01", df$datas)
df$datas <- gsub("fev.", "02", df$datas)
df$datas <- gsub("mar.", "03", df$datas)
df$datas <- gsub("abr.", "04", df$datas)
df$datas <- gsub("mai.", "05", df$datas)
df$datas <- gsub("jun.", "06", df$datas)
df$datas <- gsub("jul.", "07", df$datas)
df$datas <- gsub("ago.", "08", df$datas)
df$datas <- gsub("set.", "09", df$datas)
df$datas <- gsub("out.", "10", df$datas)
df$datas <- gsub("nov.", "11", df$datas)
df$datas <- gsub("dez.", "12", df$datas)
# Substituir o ano com dois dígitos para quatro dígitos
df$datas <- gsub(" de (\\d{2})$", " de 20\\1", df$datas)
# Convertendo as datas para o formato 01/01/2000
df$datas <- as.Date(df$datas, format = "%d de %m de %Y")
# Agora formate para 'dd/mm/yyyy'
df$datas_formatada <- format(df$datas, "%d/%m/%Y")
library(xts)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Criar a série temporal no formato xts
serie_temporal <- xts(df$SOBRADINHO, order.by = df$datas)
# Plotar a série temporal
plot(serie_temporal, type = "l", col = "blue",
main = "custo marginal de operação",
xlab = "Data", ylab = "R$")
grid()
Os boxplots anuais são valores que permitem analisar tdas as informações de um boxplot, como já discutido, mas co os valores organizados de forma anual. Para meios de comparação, os valores forma analisados em p.u.
setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
library(dplyr)
library(ggplot2)
# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-mean(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
mutate(ano = format(datas, "%y")) # Extrair o ano como texto
# Criar o boxplot dos valores anuais
ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) + # Usar o ano como eixo x
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot dos Valores Anuais vazão afluente Sobradinho", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajusta o texto do eixo x
Observa-se que houve uma redução nos valores das medianas logo após 2010, que voltou a crescer entre 2020 e 2022 mas posteriormente decresceu. Essa tendência pode estar associada a mudanças climáticas ou interferências humanas no uso da hidréletrica já que a mesma não é fio d’água e possui reservatório.
O maior extremo, em módulo, ocorreu no ano de 2007 chegando a quase 5 p.u.
Assim como para o caso de série temporal, foi divido em 3 partes iguais.
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
# Box plot com intervalos de 30 anos separados
library(dplyr)
library(ggplot2)
# Converter a coluna de datas para o formato Date
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media <- mean(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
mutate(ano = as.numeric(format(datas, "%Y"))) # Extrair o ano como número
# Criar subsets para cada intervalo de 30 anos
df_1931_1960 <- df %>% filter(ano >= 1931 & ano <= 1960)
df_1961_1990 <- df %>% filter(ano >= 1961 & ano <= 1990)
df_1991_2020 <- df %>% filter(ano >= 1991 & ano <= 2020)
# Criar os boxplots para cada intervalo
boxplot_1931_1960 <- ggplot(df_1931_1960, aes(x = factor(ano), y = SOBRADINHO / media)) +
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot dos Valores de vazao natural afluente (1931-1960)", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
boxplot_1961_1990 <- ggplot(df_1961_1990, aes(x = factor(ano), y = SOBRADINHO / media)) +
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot dos Valores de vazao natural afluente (1961-1990)", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
boxplot_1991_2020 <- ggplot(df_1991_2020, aes(x = factor(ano), y = SOBRADINHO / media)) +
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot dos Valores de vazao natural afluente (1991-2020)", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Exibir os gráficos
print(boxplot_1931_1960)
print(boxplot_1961_1990)
print(boxplot_1991_2020)
Os boxplots anuais fornecem uma visão detalhada da distribuição das vazões naturais afluentes ao longo das décadas, destacando a mediana, dispersão e valores extremos (outliers). A análise a seguir engloba os três períodos apresentados: 1931–1960, 1961–1990 e 1991–2020. No primeiro periodo as vazões mais altas são menos frequentes, com exceção de alguns anos como 1949, que registra outliers significativos, nesse periodo houveram apenas 10 outliers. No segundo periodo é caracterizado por um aumento significativo na dispersão e é o periodo no qual houve maiores outliers em relação ao primeiro periodo. Por fim, no terceiro periodo, as medianas em vários anos estão em níveis mais baixos em comparação com os períodos anteriores, indicando uma redução gradual das vazões. Esse é o periodo que teve mais outliers, totalizando 16 anos.
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
library(dplyr)
library(ggplot2)
# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-mean(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
mutate(ano = format(datas, "%y")) # Extrair o ano como texto
# Criar o boxplot dos valores anuais
ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) + # Usar o ano como eixo x
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot dos Valores Anuais vazão vertida Sobradinho", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajusta o texto do eixo x
O boxplot revela que os vertimentos ocorreram de forma concentrada em períodos específicos, como entre 2004 e 2009 que só não houve vertimento no ano de 2008. Porém, houve um periodo de 9 anos seguidos sem vertimento que teve inicio em 2013 e voltou a ter vertimento apenas em 2022. Observa-se que o não vertimento coincide com o periodo em que houve as menores vazões afluentes e com o periodo critico da usina.
setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
library(dplyr)
library(ggplot2)
# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-mean(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
mutate(ano = format(datas, "%y")) # Extrair o ano como texto
# Criar o boxplot dos valores anuais
ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) + # Usar o ano como eixo x
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot dos Valores Anuais vazão defluente Sobradinho", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajusta o texto do eixo x
Anos como 2004 e 2007 têm um número significativo de outliers, representando eventos de altas vazões, com valores próximos de 3 a 4 p.u.. Já após 2012, todas as medianas foram abaixo de 1 p.u indicando que os operadores da hidréletrica estão preversando manter o reservatório, por motivos elétricos ou climáticos ou ambos. Em 2022 a usina pareceu iniciar uma crescente na vazão defluente mas caiu em 2024, porém, é necessário uma janela de observação maior para concluir essa analise.
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
library(dplyr)
library(ggplot2)
# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-max(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
mutate(ano = format(datas, "%y")) # Extrair o ano como texto
# Criar o boxplot dos valores anuais
ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) + # Usar o ano como eixo x
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot dos Valores Anuais vazão nivel do montante diario", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajusta o texto do eixo x
Os níveis do reservatórios, no periodo analisado, inicialmente começaram com a mediana proximo 0,98 p.u. e a partir de 2004 até 2014, no periodo de 10 anos, teve valores acima de 0,985 p.u.. E posteriormente os valores sofreram uma queda drastica, com a mediana abaixo de 0,98 p.u. durante 3 anos que posterioemnte voltou a cresces. Outliers não são muito frequentes, ocorrendo apenas nos anos de 2004 e 2009.
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
library(dplyr)
library(ggplot2)
# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-100
# Adicionar a coluna de ano
df <- df %>%
mutate(ano = format(datas, "%y")) # Extrair o ano como texto
# Criar o boxplot dos valores anuais
ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) + # Usar o ano como eixo x
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot dos Valores Anuais volume útil diário", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajusta o texto do eixo x
O gráfico de volume útil mostra uma senoide ao olhar pelas medianas, em que em nenhum ano apresentou outliers. Indicando que há periodos de abundância em água, mas que há periodos em que é necessário atenção por conta de possíveis secas, que apresentam um comportamento ciclico.
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
library(dplyr)
library(ggplot2)
# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-max(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
mutate(ano = format(datas, "%y")) # Extrair o ano como texto
# Criar o boxplot dos valores anuais
ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) + # Usar o ano como eixo x
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Energia natural afluente bruta do subsitema", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajusta o texto do eixo x
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
library(dplyr)
library(ggplot2)
# Converter a coluna de datas para o formato Date, caso ainda não esteja
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
media<-max(df$SOBRADINHO)
# Adicionar a coluna de ano
df <- df %>%
mutate(ano = format(datas, "%y")) # Extrair o ano como texto
# Criar o boxplot dos valores anuais
ggplot(df, aes(x = factor(ano), y = SOBRADINHO/media)) + # Usar o ano como eixo x
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot Anual Energia armazenada diária do subsitema", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajusta o texto do eixo x
setwd("C:/Geracao")
df<- read.csv2("custo_marginal.csv")
df$datas <- gsub("jan.", "01", df$datas)
df$datas <- gsub("fev.", "02", df$datas)
df$datas <- gsub("mar.", "03", df$datas)
df$datas <- gsub("abr.", "04", df$datas)
df$datas <- gsub("mai.", "05", df$datas)
df$datas <- gsub("jun.", "06", df$datas)
df$datas <- gsub("jul.", "07", df$datas)
df$datas <- gsub("ago.", "08", df$datas)
df$datas <- gsub("set.", "09", df$datas)
df$datas <- gsub("out.", "10", df$datas)
df$datas <- gsub("nov.", "11", df$datas)
df$datas <- gsub("dez.", "12", df$datas)
# Substituir o ano com dois dígitos para quatro dígitos
df$datas <- gsub(" de (\\d{2})$", " de 20\\1", df$datas)
# Convertendo as datas para o formato 01/01/2000
df$datas <- as.Date(df$datas, format = "%d de %m de %Y")
# Agora formate para 'dd/mm/yyyy'
df$datas_formatada <- format(df$datas, "%d/%m/%Y")
library(dplyr)
library(ggplot2)
# Converter a coluna de datas para o formato Date, caso ainda não esteja
# Adicionar a coluna de ano
df <- df %>%
mutate(ano = format(datas, "%y")) # Extrair o ano como texto
# Criar o boxplot dos valores anuais
ggplot(df, aes(x = factor(ano), y = SOBRADINHO)) + # Usar o ano como eixo x
geom_boxplot(fill = "lightblue", outlier.colour = "red", outlier.size = 2) +
labs(title = "Boxplot Anual custo marginal de operação", x = "Ano", y = "Vazão p.u.") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajusta o texto do eixo x
Utilizou-se a vazão natural afluente normalizada e posteriormente utilizou-se a função percentil para se obter o gráfico de persistência. Com isso, foi possível percerber em quantas turbinas poderam atuar em conjunto. Isso é dado pelas linhas verticais que representam as vazões correspondentes ao engolimento das turbinas (Q1 a Q6), destacadas nos percentis associados. Percentil no eixo x: Representa a frequência relativa acumulada da vazão ao longo do tempo, do maior (100º percentil) ao menor (0º percentil). Percentis mais altos indicam situações de maior disponibilidade de água.
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
# Vazão das turbinas (cada turbina tem 710 m³/s)
vazao_turbina <- 710 / mean(df$SOBRADINHO)
# Calculo das vazões para diferentes números de turbinas ligadas (Q1, Q2, ..., Q6)
turbinas <- 1:6
vazao_turbinas <- turbinas * vazao_turbina
vazao_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
# Calculo dos percentis
percentis <- quantile(vazao_normalizada, probs = seq(0, 1, 0.01))
# Definir cores para as turbinas
cores_turbinas <- c("red", "green", "blue", "purple", "orange", "brown") # Cores para Q1 a Q6
percentis_turbinas <- sapply(vazao_turbinas, function(vazao) {
which.min(abs(percentis - vazao)) # Encontra o índice do percentil mais próximo da vazão
})
# Gráfico de persistência para média, mediana e percentis
plot(seq(100, 0, -1), percentis, type = "l",
xlab = "Percentil", ylab = "Vazão Normalizada",
main = "Persistência da Vazão Natural Afluente Normalizada - Turbinas",
col = "blue", lwd = 2)
grid()
# Destacando as vazões das turbinas com linhas verticais
for(i in 1:6) {
abline(v = 100 - percentis_turbinas[i], col = cores_turbinas[i], lty = 3,lwd = 2) # Linhas verticais para Q1, Q2, ..., Q6
}
# Adicionando a legenda ao gráfico
legend("topright",
legend = c(paste("Q", 1:6, sep = "")),
col = cores_turbinas,
lty = rep(3, 6), # Linhas com estilo 3 para as turbinas
cex = 0.8,
box.lwd = 1, # Ajustar a espessura da borda da caixa da legenda
bg = "white", # Fundo branco para a legenda
inset = 0.05)
A interpretação do gráfico pode ser dada que em mais de 90% do tempo é possível operar com ao menos 1 turbina com sua vazão nominal. Quanto mais turbinas operam em conjunto, mais as linhas verticais se aproximam.
Por fim, Colocou as linhas verticais indicando a média, mediana e o percentil, assim como a energia assegurada. Onde a energia assegurada foi dada pelas seguintes formulas: \[ Energia_{assegurada} = \frac{457.5}{k \cdot Q_{max} \cdot \Delta H} \tag{5} \] Onde na Equação 5: - 457.5 é a Garantia física (MWm) da usina de sobradinho; -k é o fator de produtibilidade específico [MW.s/m4]; - Delta H representa uma variação entre a altura e o canal de fuga que não representa energia.
É possível obter uma energia assegurada máxima (considerando a variação de H mínima) e uma energia assegurada mínima (considerando a variação de H máxima). Sempre diminuido pelo do canal de fuga (362,5 metros) na altura.
# Definir a codificação para UTF-8
#Sys.setlocale("LC_CTYPE", "pt_BR.UTF-8")
# Carregar o arquivo CSV
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
# Grafico de persistência para média, mediana e percentis
vazao_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
# Calcular os percentis e a média da série normalizada
percentis <- quantile(vazao_normalizada, probs = seq(0, 1, 0.01))
media <- 1 # Como a série foi normalizada pela média, a média será 1
mediana <- median(vazao_normalizada)
percentil_5 <- quantile(vazao_normalizada, 0.05)
percentil_95 <- quantile(vazao_normalizada, 0.95)
# Definir parâmetros adicionais
k = 0.009023
Qmax = 7791
canal_fuga = 362.5 # Dado do Hidri
Hmax = 392.5 - canal_fuga # Delta H máximo
Hmin = 380.5 - canal_fuga # Delta H mínimo
Energia_assegurada_minima = 457.5 / (k * Qmax * Hmax) # Garantia física (MWm)/(k*Hmax*Qmax), como é o inverso da altura, para altura máxima tem-se a assegurada mínima
Energia_assegurada_maxima = 457.5 / (k * Qmax * Hmin)
# Definir cores para a média, mediana, percentis
cores_referencia <- c("red", "green", "purple", "orange", "blue", "brown") # Cores para Média, Mediana, P5, P95
dados<-c(media,mediana,percentil_5,percentil_95,Energia_assegurada_minima,Energia_assegurada_maxima)
percentis_dados <- sapply(dados, function(vazao) {
which.min(abs(percentis - vazao)) # Encontra o índice do percentil mais próximo da vazão
})
# Plotando o gráfico de persistência (vazão normalizada)
plot(seq(100, 0, -1), percentis, type = "l",
xlab = "Percentil", ylab = "Vazão Normalizada",
main = enc2utf8("Persistência da Vazão Natural Afluente Normalizada"), # Usando enc2utf8 para garantir a codificação correta
col = "blue", lwd = 2)
grid()
# Destacando os valores de média, mediana, percentis
abline(v = 100-percentis_dados[1], col = cores_referencia[1], lty = 2,lwd = 2) # Linha da média
abline(v = 100-percentis_dados[2], col = cores_referencia[2], lty = 2,lwd = 2) # Linha da mediana
abline(v = 100-percentis_dados[3], col = cores_referencia[3], lty = 2,lwd = 2) # Linha do percentil 5%
abline(v = 100-percentis_dados[4], col = cores_referencia[4], lty = 2,lwd = 2) # Linha do percentil 95%
abline(v = 100-percentis_dados[5], col = cores_referencia[5], lty = 2,lwd = 2) # Linha da energia assegurada máxima
abline(v = 100-percentis_dados[6], col = cores_referencia[6], lty = 2,lwd = 2) # Linha da energia assegurada mínima
# Adicionando a legenda ao gráfico
legend("topright",
legend = c("Média", "Mediana", "Percentil 5%", "Percentil 95%", "Energia assegurada máxima", "Energia assegurada mínima"),
col = cores_referencia,
lty = c(2, 2, 2, 2), # Linha com estilo 2 para as referências
cex = 0.8,
box.lwd = 1, # Ajustar a espessura da borda da caixa da legenda
bg = "white", # Fundo branco para a legenda
inset = 0.05)
Para comparar a energia realmente gerada, foram feitos as seguintes considerações: Como tem-se a vazão natural afluente na usina em p.u., para transformar em energia, basta multiplicar pelo fator de produtibilidade específico [MW.s/m4] e pela variação de altura. Já que a energia em p.u. não depende mais do tempo por conta da normalização. A outra consideração foi considerar os valores de 01/01/2000, para se ter uma amostragem de dados igual para comparação. Com isso, a energia gerada a partir de um valor de vazão em p.u é dada pela Equação 6.
\[ Energia_{gerada} = {k \cdot Q \cdot \Delta H} \tag{5} \]
setwd("C:/Geracao")
energia<- read.csv2("energia_gerada.csv")
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
#Item 6 energia a partir da persistência da vazão natural afluente normalizada
k=0.009023
Qmax=7791
canal_fuga=362.5 #Dado do Hidri
Hmax=392.5- canal_fuga #Delta H máximo
Hmin=380.5- canal_fuga #Delta H mínimo
# Filtrar os dados entre 01/01/2020 e 31/12/2020
df_2020 <- subset(df, datas >= as.Date("01/01/2000") & datas <= as.Date("31/12/2020"))
energia_2020 <- subset(energia, datas >= as.Date("01/01/2000") & datas <= as.Date("31/12/2020"))
# Normalizar a vazão apenas para o período selecionado
vazao_2020 <- df_2020$SOBRADINHO
vazao_normalizada_2020<-vazao_2020/mean(vazao_2020)
summary(vazao_normalizada_2020)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.06199 0.43471 0.69060 1.00000 1.35696 7.36098
# Calcular os percentis e a média da série normalizada
percentis_max <- quantile((vazao_2020*k*Hmax), probs = seq(0, 1, 0.01))
percentis_min<- quantile((vazao_2020*k*Hmin), probs = seq(0, 1, 0.01))
energia_2020 <- energia_2020$SOBRADINHO
summary(energia_2020)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 102.0 231.0 327.0 352.7 462.0 1035.0
percentis_energia <- quantile(energia_2020, probs = seq(0, 1, 0.01))
summary(percentis_energia)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 102.0 231.0 327.0 354.9 462.0 1035.0
summary(percentis_max)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 42.23 296.13 470.46 705.76 924.41 5014.53
summary(percentis_energia)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 102.0 231.0 327.0 354.9 462.0 1035.0
# Plotar as duas curvas no gráfico
plot(seq(100, 0, -1), percentis_max, type = "l",
xlab = "Percentil", ylab = "Energia (MWm)",
main = "energia realmente gerada x energia da persistência",
col = "blue", lwd = 2, las = 1)
lines(seq(100, 0, -1), percentis_min, col = "red", lwd = 2) # Adicionar a segunda curva
lines(seq(100, 0, -1), percentis_energia, col = "green", lwd = 2)
grid()
legend("topright", legend = c("Percentis Máximos", "Percentis Mínimos", 'Energia realmente gerada'),
col = c("blue", "red","green"), lwd = 2)
Os percentis mínimos e máximos representam a energia gerada para uma determinada variação de altura.
A grande diferença é nítida pois está considerando que toda a vazão natural afluente está produzindo energia. Por isso que a energia realmente gerada não se encontra integralmente dentro dos limites de máximos e mínimos.
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
#Grafico de persistÊncia para as turbinas
# Vazão das turbinas (cada turbina tem 710 m³/s)
vazao_turbina <- 710 / mean(df$SOBRADINHO)
# Calcular as vazões para diferentes números de turbinas ligadas (Q1, Q2, ..., Q6)
turbinas <- 1:7
vazao_turbinas <- turbinas * vazao_turbina
#Grafico de persistÊncia para media, mediana e percentis
vazao_normalizada <- df$SOBRADINHO / mean(df$SOBRADINHO)
# Calcular os percentis e a média da série normalizada
percentis <- quantile(vazao_normalizada, probs = seq(0, 1, 0.01))
# Definir cores para as turbinas
cores_turbinas <- c("red", "green", "blue", "purple", "orange", "brown","black") # Cores para Q1 a Q7
percentis_turbinas <- sapply(vazao_turbinas, function(vazao) {
which.min(abs(percentis - vazao)) # Encontra o índice do percentil mais próximo da vazão
})
# Gráfico de persistência para média, mediana e percentis
plot(seq(100, 0, -1), percentis, type = "l",
xlab = "Percentil", ylab = "Vazão Normalizada",
main = "Adição de uma turbina",
col = "blue", lwd = 2)
grid()
# Destacando as vazões das turbinas com linhas verticais
for(i in 1:7) {
abline(v = 100 - percentis_turbinas[i], col = cores_turbinas[i], lty = 3, lwd = 2) # Linhas verticais para Q1, Q2, ..., Q6
}
# Adicionando a legenda ao gráfico
legend("topright",
legend = c(paste("Q", 1:7, sep = "")),
col = cores_turbinas,
lty = rep(3, 6), # Linhas com estilo 3 para as turbinas
cex = 0.8,
box.lwd = 1, # Ajustar a espessura da borda da caixa da legenda
bg = "white", # Fundo branco para a legenda
inset = 0.05)
Observa-se que o percentual para turbina 7 é muito, representando assim um ganho muito baixo de energia. Isso é possivel a partir da função decompose no R.
setwd("C:/Geracao")
df<- read.csv2("vazao_afluente.csv")
# Componentes de tendência, sazonal e randômica
vazao_ts <- ts(df$SOBRADINHO/mean(df$SOBRADINHO), start = c(2000, 1), frequency = 365)
# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)
grid()
Pela componente de tendência tem-se de 2002 a 2007 foi um período de crescimento elevado, indicando melhores condições climáticas de cheias no rio São Francisco. Já entre 2009 a 2017: Declínio acentuado, indicando periodos críticos de longa duração. Posteriormente, houve um pequeno periodo de recuperação, mas que em 2021 começou a cair novamente. A sazonalidade apresenta ciclos regulares e previsíveis, podendo indicar periodos de chuva ou seca. Os ruídos aparecem em periodos mais extremos que ocorreram entre 2017 e 2019.
setwd("C:/Geracao")
df <- read.csv2("vazao_natural_afluente.csv")
vazao_ts <- ts(df$SOBRADINHO/mean(df$SOBRADINHO), start = c(1931, 1), frequency = 365)
# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)
grid()
A tendência geral apresenta flutuações, com períodos de estabilidade seguidos por declínios nas últimas décadas sendo o último o mais intenso. Esses declínios podem estar relacionados a mudanças climáticas e impactos humanos. A sazonalidade é consistente ao longo dos anos, com padrões regulares de aumento e redução de vazão, indicando os periodos chuvosos e secos. a componente randômica destacou eventos climáticos extremos, como enchentes e secas, que fogem ao padrão sazonal e faz com que apareçam valores extremos.
setwd("C:/Geracao")
df<- read.csv2("Vazao_vertida.csv")
vazao_ts <- ts(df$SOBRADINHO/mean(df$SOBRADINHO), start = c(2000, 1), frequency = 365)
# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)
grid()
A tendência é marcada por períodos pontuais de atividade, intercalados por longos períodos de inatividade, representando os momentos em que há necessidade de escoamento do reservatório. Esse comportamento sugere que a vazão vertida não é regular, sendo acionada somente em condições específicas, que é o que realmente acontece. Observa-se que a sazonalidade é praticamente 0 em grande parte do tempo, indicando pouca influência na série. O ruído apresenta picos isolados que coincidem com os períodos de vertimento
setwd("C:/Geracao")
df<- read.csv2("Vazao_defluente.csv")
vazao_ts <- ts(df$SOBRADINHO/mean(df$SOBRADINHO), start = c(2000, 1), frequency = 365)
# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)
grid()
A tendência é relativamente estável, com um padrão de flutuação gradual ao longo dos anos, no periodo de 2000 a 2013, aproximadamente. Mas que após esse periodo houve uma queda exponencial que só voltou a crescer em 2017 mas que ainda está instável. A sazonalidade é bem definida, refletindo o impacto dos ciclos anuais de precipitação, influência climática e etc. O ruído apresenta picos significativos em períodos específicos, podendo indicar uma operação anormal devido a condições energeticas inesperadas ou mesmo secas intensas que faz com que seja necessário reter mais água para o reservatório.
setwd("C:/Geracao")
df<- read.csv2("nivel_de_montante_m.csv")
vazao_ts <- ts(df$SOBRADINHO/max(df$SOBRADINHO), start = c(2000, 1), frequency = 365)
# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)
grid()
Incialmente entre 2004 e 2010, o reservatório manteve níveis praticamnete constante, indicando que houve uma grande estabilidade no controle da cota. Porém, logo em seguida houve uma queda repentina que se manteve em valores baixos entre 2015 e 2017. Posteriormente, houve uma boa crescente no nível de água da hidréletrica, indicando uma possível recuperação do seu reservartório. A sazonalidade é bastante regular e reflete a variação cíclica anual do nível do montante. O ruído apresenta variações pequenas, com a maior parte dos valores muito próximos ao nível médio. Isso evidencia que o nível do montante é fortemente controlado, com pouca influência de eventos aleatórios ou extremos.
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
vazao_ts <- ts(df$SOBRADINHO/100, start = c(2000, 1), frequency = 365)
# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)
grid()
2001 a 2005: A tendência é predominantemente crescente, indicando que houve condições favoráveis (Chuvas provavelmente) de armazenamento. 2006 a 2017: Observa-se uma queda acentuada na tendência, que coincide com os períodos críticos de baixa disponibilidade hídrica. Por fim, há recuperação gradual, com aumento na tendência até cerca de 2022, estabilizando-se em níveis intermediários. A forte presença da sazonalidade reforça a influência dos ciclos climáticos naturais no comportamento do reservatório, seja ligado a epocas do ano, a influência do homem e outros fatores. Os ruídos mais intensos ocorrem em 2014-2016, indicando eventos não explicados por tendências ou sazonalidade ( mudanças extremas nas condições climáticas ou intervenções operacionais).
setwd("C:/Geracao")
df<- read.csv2("energia_natural_afluente_bruta_do_subsistema_da_sua_usina_em_mwm.csv")
vazao_ts <- ts(df$SOBRADINHO/max(df$SOBRADINHO), start = c(2000, 1), frequency = 365)
# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)
grid()
setwd("C:/Geracao")
df<- read.csv2("energia_armazenada_diaria_no_subsistema_de_sua_usina_em_gwh.csv")
vazao_ts <- ts(df$SOBRADINHO/max(df$SOBRADINHO), start = c(2000, 1), frequency = 365)
# Decompor a série
decomp <- decompose(vazao_ts, type = "multiplicative")
# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomp$trend
sazonal <- decomp$seasonal
randomico <- decomp$random
# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)
grid()
Para a vazão natural afluente, foi realizado a média móvel de 12 meses, a fim de realizar as seguintes analises:
O sumário estatístico;
A autocorrelação;
O Histograma;
As componentes de tendência, sazonal e randômica.
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
library(zoo)
# Certifique-se de que a coluna de datas esteja no formato correto
df$datas <- as.Date(df$datas, format = "%d/%m/%Y") # Ajuste o formato
df$SOBRADINHO <- as.numeric(df$SOBRADINHO)
# Calcular a média móvel de 12 meses
df$media_movel_12 <- rollmean(df$SOBRADINHO, k = 12, fill = NA, align = "right")
df <- df[!is.na(df$media_movel_12), ]
#Sumario média móvel
summary(df$media_movel_12)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 162.2 1101.8 1759.0 2520.2 3429.2 18228.1
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
library(zoo)
# Calcular a média móvel para a coluna desejada (por exemplo, "SOBRADINHO")
df$media_movel_12m <- rollmean(df$SOBRADINHO, k = 12, fill = NA)
# Remover valores NA para a média móvel
media_movel <- na.omit(df$media_movel_12m)
# Ajustar o tamanho da janela de plotagem e o tamanho do título
par(mar = c(5, 4, 4, 2) + 0.1) # Ajusta as margens do gráfico
acf(media_movel, main = "Autocorrelação - Média Móvel de 12 Meses", las = 1, cex.main = 0.8) # Ajusta o tamanho do título
Pode-se observar que houve uma grande correlação entre a vazão e os anos seguintes, durante mais de 20 anos, onde a correlação passou a ser menor que 0,8 mas em todos os casos, as linhas ficarão acima da azul, indicando que essas indicações não são fruto
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
df$SOBRADINHO <- as.numeric(df$SOBRADINHO)
df$media_movel_12m <- rollmean(df$SOBRADINHO, k = 12, fill = NA)
# Remover valores NA para a média móvel
media_movel <- na.omit(df$media_movel_12m)
# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(media_movel,
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 120)
n <- length(media_movel)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma da média móvel",
xlab = "[m³/s]", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
Normalizado pela média tem-se:
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
df$SOBRADINHO <- as.numeric(df$SOBRADINHO)
df$media_movel_12m <- rollmean(df$SOBRADINHO, k = 12, fill = NA)
# Remover valores NA para a média móvel
media_movel <- na.omit(df$media_movel_12m)
# Calcula o histograma sem exibi-lo automaticamente
hist_data <- hist(media_movel/mean(media_movel),
plot = FALSE, # Não exibe o gráfico automaticamente
breaks = 120)
n <- length(media_movel)
frequencia_normalizada <- hist_data$counts / n
# Define o eixo y com proporção apropriada (frequências normalizadas)
plot(hist_data$mids, frequencia_normalizada, type = "h",
lwd = 2, main = "Histograma da média móvel normalizado",
xlab = "p.u", ylab = "Proporção", las = 1)
axis(2,
at = seq(0, max(frequencia_normalizada)),
labels = round(seq(0, max(frequencia_normalizada)), 4),
las = 1)
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
df$SOBRADINHO <- as.numeric(df$SOBRADINHO)
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Calcular a média móvel mensal
# Vamos usar rollapply para calcular a média móvel de 30 dias (aproximadamente um mês)
df$media_movel_mensal <- rollapply(df$SOBRADINHO, width = 30, FUN = mean, fill = NA, align = "right")
# Agregar os dados para obter a média mensal (somando as médias móveis em cada mês)
df$mes <- format(df$datas, "%Y-%m") # Criar uma coluna com o mês no formato "yyyy-mm"
df_media_movel_mensal <- aggregate(df$media_movel_mensal, by = list(df$mes), FUN = mean, na.rm = TRUE)
# Renomear as colunas para melhor entendimento
colnames(df_media_movel_mensal) <- c("mes", "media_movel_mensal")
# Criar a série temporal para a média móvel mensal
ts_media_movel_mensal <- ts(df_media_movel_mensal$media_movel_mensal,
start = c(as.numeric(substr(df_media_movel_mensal$mes[1], 1, 4)),
as.numeric(substr(df_media_movel_mensal$mes[1], 6, 7))),
frequency = 12) # Frequência mensal
# Decompor a série temporal
decomposicao <- decompose(ts_media_movel_mensal, type = "multiplicative") # Você pode usar "additive" se achar mais adequado
# Extrair as componentes de tendência, sazonal e ruído
tendencia <- decomposicao$trend
sazonal <- decomposicao$seasonal
randomico <- decomposicao$random
# Ajustar as margens e configurar o layout para 3 gráficos
par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) # Definir margens menores
plot(tendencia, main = "Componente de Tendência", xlab = "Tempo", ylab = "Tendência",las=1)
plot(sazonal, main = "Componente Sazonal", xlab = "Tempo", ylab = "Sazonalidade",las=1)
plot(randomico, main = "Componente Randômica", xlab = "Tempo", ylab = "Ruído",las=1)
grid()
Foi realizado o gráfico da variação das seguintes séries:
Vazão natural afluente normalizada;
Armazenamento da usina em %.
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
#Variação
# Converter a coluna de datas para o formato Date
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Calcular a variação percentual entre os valores consecutivos d
variacao <- diff(df$SOBRADINHO) / head(df$SOBRADINHO, -1) * 100
# Criar o vetor de tempo correspondente à variação (removendo o primeiro valor)
tempo <- df$datas[-1]
# Criar um gráfico de variação com o tempo como eixo X
plot(tempo, variacao, type = "l", col = "blue", xlab = "Tempo", ylab = "Variação (%)", main = "Variação da Série Natural afluente")
## Armazenamento da usina
setwd("C:/Geracao")
df<- read.csv2("volume_util_diario.csv")
#Variação
# Converter a coluna de datas para o formato Date
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Calcular a variação percentual entre os valores consecutivos
variacao <- diff(df$SOBRADINHO) / head(df$SOBRADINHO, -1) * 100
# Criar o vetor de tempo correspondente à variação (removendo o primeiro valor)
tempo <- df$datas[-1]
# Criar um gráfico de variação com o tempo como eixo X
plot(tempo, variacao, type = "l", col = "blue", xlab = "Tempo", ylab = "Variação (%)", main = "Variação da Série de volume útil")
grid()
# Periodo crítico de Sobradinho
setwd("C:/Geracao")
df<- read.csv2("vazao_natural_afluente.csv")
# Converter a coluna de datas para formato Date
df$datas <- as.Date(df$datas, format = "%d/%m/%Y")
# Ordenar os dados por data, caso necessário
df <- df[order(df$datas), ]
# Calcular a média móvel de 5 anos (60 meses)
library(zoo)
df$media_movel <- rollapply(df$SOBRADINHO, width = 60, FUN = mean, align = "right", fill = NA)
# Encontrar o menor valor da média móvel
periodo_critico <- df[which.min(df$media_movel), ]
print(periodo_critico)
## datas SOBRADINHO media_movel
## 31727 2017-11-11 346 389.8667