From d2c5c689ae8a9e90597e2532d9c5eafad38c59ec Mon Sep 17 00:00:00 2001 From: tuberculo Date: Tue, 21 Apr 2020 16:43:52 -0300 Subject: [PATCH 01/16] =?UTF-8?q?Altera=C3=A7=C3=B5es=20para=20n=C3=BAmero?= =?UTF-8?q?s=20de=20Moxot=C3=B3=20e=20Ilha=20Solteira.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Principal.R | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Principal.R b/Principal.R index 2e96d13..8d349b4 100644 --- a/Principal.R +++ b/Principal.R @@ -4,6 +4,16 @@ source("importa vazões.R") # Preparação de dados ----------------------------------------------------- # Lê arquivo com cascata cascata_PDE_2029 <- read_delim("cascata - PDE 2029.csv", ";", escape_double = FALSE, locale = locale(date_names = "pt", decimal_mark = ",", grouping_mark = "."), trim_ws = TRUE) +# Substitui Ilha Solteira equivalente por Ilha Solteira e Três Irmãos. +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 43, nome = "Tres Irmaos", + posto = 243, `Quantos a montante?` = 1, `Posto jusante` = 245, + `Posto montante 1` = 242, `Posto montante 2` = 999, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 34, nome = "Ilha Solteira", + posto = 34, `Quantos a montante?` = 5, `Posto jusante` = 245, + `Posto montante 1` = 18, `Posto montante 2` = 33, `Posto montante 3` = 241, + `Posto montante 4` = 99, `Posto montante 5` = 261, `Posto montante 6` = 999,) + # Muda os postos de artificiais para naturais de acordo com a listagem. Aplica em todas as colunas com posto no nome. Nat_x_Art <- read_csv2("posto natural x artificial.csv") cascata_PDE_2029 <- mutate_at(cascata_PDE_2029, vars(contains("Posto")), ~ ifelse(. %in% Nat_x_Art$Artificial, Nat_x_Art[match(., Nat_x_Art$Artificial),]$Natural, .)) @@ -16,6 +26,7 @@ TempoViagem <- read_xlsx("Tempo-de-Viagem-Plexos.xlsx", 1, col_types = c("numeri TempoViagem <- select(TempoViagem, Montante, Jusante, TempViag) # Lê nome das usinas usado no Plexos NomesPlexos <- read_xlsx("Tempo-de-Viagem-Plexos.xlsx", 2) +NomesPlexos[NomesPlexos$Reservatório == "Reserv. MOXOTO", "Num PDE"] <- 176 # Muda número de Moxotó (173) para o de COMP PAF-MOX (176). # Altera a tabela de cascata para o formato longo casc2029longa <- PreparaTabelaCascata(cascata_PDE_2029) # Inclui nome do reservatório usado no Plexos From 7f4dbf76a6f4c1b5c751bc765c6f129f46ceff2d Mon Sep 17 00:00:00 2001 From: tuberculo Date: Tue, 21 Apr 2020 19:59:22 -0300 Subject: [PATCH 02/16] Passa os dados para o formato de leitura do Plexos. --- Principal.R | 19 ++++++++++++------- calc_incr.R | 7 +++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Principal.R b/Principal.R index 8d349b4..ff6b2f3 100644 --- a/Principal.R +++ b/Principal.R @@ -59,15 +59,20 @@ casc2029longa$TempViag <- replace_na(casc2029longa$TempViag, 0) Vaz2029DiariaIncr <- CalcIncr(VazDiaria, casc2029longa) Vaz2029DiariaIncr <- drop_na(Vaz2029DiariaIncr) -ggplot(filter(Vaz2029DiariaIncr, Posto == 169, Data < as_date("1985/01/01"), Data > as_date("1983/01/01"))) + geom_line(aes(x = Data, y = VazIncrcomTV), colour = "blue") + geom_line(aes(x = Data, y = VazIncr), colour = "red") + geom_line(aes(x = Data, y = Vazao)) + geom_line(aes(x = Data, y = VazMontTotal), colour = "orange") + geom_line(aes(x = Data, y = VazMontTotalcomTV), colour = "green") - -group_by(Vaz2029DiariaIncr, Nome) %>% summarise(n(), min(VazIncrcomTV), max(VazIncrcomTV), qneg = sum(VazIncrcomTV < 0), prop = min(VazIncrcomTV) / max(VazIncrcomTV)) %>% arrange(prop) %>% print(n = 200) - -# Cria arquivos csv -write_csv(Vaz2029MensalIncrTabela, "VazIncr2029porMes.csv") -write_csv(Vaz2029DiariaIncr, "VazIncr2029porDia.csv") +VazIncrMesPlexos <- FormatoPlexos(Vaz2029MensalIncr, casc2029longa, FALSE) # Valores mensais a partir do arquivo vazoes.txt. +VazIncrDiaPlexos <- FormatoPlexos(Vaz2029DiariaIncr, casc2029longa, TRUE) +# Valores mensais a partir da média das vazões diárias. +Vaz2029MensalIncrMedia <- group_by(mutate(Vaz2029DiariaIncr, Ano = year(Data), Mes = month(Data)), Ano, Mes, Nome, Posto) %>% summarize(VazIncrcomTV = mean(VazIncrcomTV)) +Vaz2029MensalIncrMedia <- mutate(ungroup(Vaz2029MensalIncrMedia), Data = make_date(Ano, Mes)) +VazIncrMesPlexosMedia <- FormatoPlexos(Vaz2029MensalIncrMedia, casc2029longa, FALSE) +# Cria arquivos tsv +write.table(VazIncrMesPlexos, "VazIncrMesPlexos_PDE.tsv", sep = "\t", dec = ",", row.names = FALSE) +write.table(VazIncrMesPlexosMedia, "VazIncrMesMediaPlexos.tsv", sep = "\t", dec = ",", row.names = FALSE) +write.table(VazIncrDiaPlexos, "VazIncrDiaPlexos.tsv", sep = "\t", dec = ",", row.names = FALSE) +ggplot(filter(Vaz2029DiariaIncr, Posto == 169, Data < as_date("1985/01/01"), Data > as_date("1983/01/01"))) + geom_line(aes(x = Data, y = VazIncrcomTV), colour = "blue") + geom_line(aes(x = Data, y = VazIncr), colour = "red") + geom_line(aes(x = Data, y = Vazao)) + geom_line(aes(x = Data, y = VazMontTotal), colour = "orange") + geom_line(aes(x = Data, y = VazMontTotalcomTV), colour = "green") +group_by(Vaz2029DiariaIncr, Nome) %>% summarise(n(), min(VazIncrcomTV), max(VazIncrcomTV), qneg = sum(VazIncrcomTV < 0), prop = min(VazIncrcomTV) / max(VazIncrcomTV)) %>% arrange(prop) %>% print(n = 200) left_join(Vaz2029DiariaIncr, select(casc2029longa, posto, NomePlexos), by = c("Posto" = "posto")) %>% filter(is.na(NomePlexos)) %>% filter(VazMontTotal != 0) %>% distinct(Nome) left_join(Vaz2029DiariaIncr, select(casc2029longa, posto, NomePlexos), by = c("Posto" = "posto")) %>% filter(is.na(NomePlexos)) %>% distinct(Nome) %>% print(n = 40) diff --git a/calc_incr.R b/calc_incr.R index 2f5b900..727c8f3 100644 --- a/calc_incr.R +++ b/calc_incr.R @@ -33,4 +33,11 @@ CalcIncr <- function(Vazoes, Cascata) { # Calcula incremental. Vazoes <- mutate(Vazoes, VazIncr = Vazao - VazMontTotal, VazIncrcomTV = Vazao - VazMontTotalcomTV) Vazoes +} + +FormatoPlexos <- function(Vaz, cascata = casc2029longa, diario = FALSE) { + Vaz <- distinct(select(drop_na(left_join(Vaz, cascata, by = c("Posto" = "posto"))), Data, NomePlexos, VazIncrcomTV)) + Vaz <- mutate(Vaz, YEAR = year(Data), MONTH = month(Data)) + if (diario) {Vaz <- mutate(Vaz, DAY = day(Data))} + Vaz <- pivot_wider(select(Vaz, -Data), values_from = VazIncrcomTV, names_from = NomePlexos) } \ No newline at end of file From 7be0243954946d6d1f1f2ea778681023f83d0d8f Mon Sep 17 00:00:00 2001 From: tuberculo Date: Wed, 29 Apr 2020 12:53:54 -0300 Subject: [PATCH 03/16] Coloca flag pra decidir se usa postos naturais ou artificiais. --- Principal.R | 15 ++++++++++----- "importa vaz\303\265es.R" | 4 ++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Principal.R b/Principal.R index ff6b2f3..df32f14 100644 --- a/Principal.R +++ b/Principal.R @@ -16,7 +16,9 @@ cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 34, nome = "Ilha Solteira", # Muda os postos de artificiais para naturais de acordo com a listagem. Aplica em todas as colunas com posto no nome. Nat_x_Art <- read_csv2("posto natural x artificial.csv") -cascata_PDE_2029 <- mutate_at(cascata_PDE_2029, vars(contains("Posto")), ~ ifelse(. %in% Nat_x_Art$Artificial, Nat_x_Art[match(., Nat_x_Art$Artificial),]$Natural, .)) +SubstArtificiais <- FALSE ## Decide se usa vazões naturais ou artificiais +Nat_x_Art <- mutate(Nat_x_Art, NovaNatural = ifelse(Usa_sempre | SubstArtificiais, Natural, Artificial)) +cascata_PDE_2029 <- mutate_at(cascata_PDE_2029, vars(contains("Posto")), ~ ifelse(. %in% Nat_x_Art$Artificial, Nat_x_Art[match(., Nat_x_Art$Artificial),]$NovaNatural, .)) # Tempo de viagem # Do arquivo texto: @@ -67,14 +69,17 @@ Vaz2029MensalIncrMedia <- mutate(ungroup(Vaz2029MensalIncrMedia), Data = make_d VazIncrMesPlexosMedia <- FormatoPlexos(Vaz2029MensalIncrMedia, casc2029longa, FALSE) # Cria arquivos tsv -write.table(VazIncrMesPlexos, "VazIncrMesPlexos_PDE.tsv", sep = "\t", dec = ",", row.names = FALSE) -write.table(VazIncrMesPlexosMedia, "VazIncrMesMediaPlexos.tsv", sep = "\t", dec = ",", row.names = FALSE) -write.table(VazIncrDiaPlexos, "VazIncrDiaPlexos.tsv", sep = "\t", dec = ",", row.names = FALSE) +if (SubstArtificiais) NomeArq <- "Artificiais" else NomeArq <- "Naturais" + +write.table(VazIncrMesPlexos, paste0("VazIncrMesPlexos_PDE", NomeArq, ".tsv"), sep = "\t", dec = ",", row.names = FALSE) +write.table(VazIncrMesPlexosMedia, paste0("VazIncrMesMediaPlexos", NomeArq, ".tsv"), sep = "\t", dec = ",", row.names = FALSE) +write.table(VazIncrDiaPlexos, paste0("VazIncrDiaPlexos", NomeArq, ".tsv"), sep = "\t", dec = ",", row.names = FALSE) ggplot(filter(Vaz2029DiariaIncr, Posto == 169, Data < as_date("1985/01/01"), Data > as_date("1983/01/01"))) + geom_line(aes(x = Data, y = VazIncrcomTV), colour = "blue") + geom_line(aes(x = Data, y = VazIncr), colour = "red") + geom_line(aes(x = Data, y = Vazao)) + geom_line(aes(x = Data, y = VazMontTotal), colour = "orange") + geom_line(aes(x = Data, y = VazMontTotalcomTV), colour = "green") +left_join(Vaz2029DiariaIncr, select(casc2029longa, posto, NomePlexos), by = c("Posto" = "posto")) %>% filter(is.na(NomePlexos)) %>% distinct(Nome) %>% print(n = 40) + group_by(Vaz2029DiariaIncr, Nome) %>% summarise(n(), min(VazIncrcomTV), max(VazIncrcomTV), qneg = sum(VazIncrcomTV < 0), prop = min(VazIncrcomTV) / max(VazIncrcomTV)) %>% arrange(prop) %>% print(n = 200) left_join(Vaz2029DiariaIncr, select(casc2029longa, posto, NomePlexos), by = c("Posto" = "posto")) %>% filter(is.na(NomePlexos)) %>% filter(VazMontTotal != 0) %>% distinct(Nome) -left_join(Vaz2029DiariaIncr, select(casc2029longa, posto, NomePlexos), by = c("Posto" = "posto")) %>% filter(is.na(NomePlexos)) %>% distinct(Nome) %>% print(n = 40) left_join(group_by(mutate(VazDiaria, mes = month(Data), ano = year(Data)), Posto, ano, mes) %>% summarise(mean(Vazao)), filter(Vazoes2029Mensal, Ano >= 1982), by = c("ano" = "Ano", "mes" = "Mes")) # Calcula diferença entre vazões mensal e diária diff --git "a/importa vaz\303\265es.R" "b/importa vaz\303\265es.R" index 3ac53cd..d671cfd 100644 --- "a/importa vaz\303\265es.R" +++ "b/importa vaz\303\265es.R" @@ -4,8 +4,8 @@ library(readxl) CodUsinasExp <- read_csv2("código usinas expansão.csv") -VazDiariaExist <- read_xlsx("../Vazões_Diárias_1982_ONS+Exp_r01.xlsx", 1) -VazDiariaNovas <- read_xlsx("../Vazões_Diárias_1982_ONS+Exp_r01.xlsx", 2) +VazDiariaExist <- read_xlsx("../Vazões_Diárias_1982_nat+art_ONS+Exp_r07.xlsx", 1) +VazDiariaNovas <- read_xlsx("../Vazões_Diárias_1982_nat+art_ONS+Exp_r07.xlsx", 2) VazDiariaExist$Data <- parse_date_time(VazDiariaExist$Data, "dmY") VazDiariaExist <- pivot_longer(VazDiariaExist, cols = -Data, names_to = "Usina", values_to = "Vazao") From b358ef03edac2f6d3e5572034866506c7b78b64f Mon Sep 17 00:00:00 2001 From: tuberculo Date: Wed, 20 May 2020 18:10:58 -0300 Subject: [PATCH 04/16] =?UTF-8?q?Altera=C3=A7=C3=B5es=20na=20cascata=20par?= =?UTF-8?q?a=20representa=C3=A7=C3=A3o=20dos=20reservat=C3=B3rios=20sem=20?= =?UTF-8?q?usinas.=20Bacia=20do=20Tiet=C3=AA=20e=20do=20Para=C3=ADba=20do?= =?UTF-8?q?=20Sul.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InsereReservat.R | 51 ++++++++++++++++++++++++++++++++++ Principal.R | 3 +- posto natural x artificial.csv | 21 ++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 InsereReservat.R create mode 100644 posto natural x artificial.csv diff --git a/InsereReservat.R b/InsereReservat.R new file mode 100644 index 0000000..0076687 --- /dev/null +++ b/InsereReservat.R @@ -0,0 +1,51 @@ + + +# Bacia do Tietê ------------------------------------------------------------------- + +# "Barra Bonita" <- "Edgard de Souza" <- "Alto Tietê" +# "Edgard de Souza" <- "Traição" <- "Billings + Pedreira" +# 'Traição" <- "Guarapiranga" + +## Edgard de Souza a montante de Barra Bonita.("EDGARD DE SOUZA+TRIBUT " – posto 161) +cascata_PDE_2029[cascata_PDE_2029$nome == "BARRA BONITA", c("Quantos a montante?", "Posto montante 1")] <- list(1, 161) # Muda usinas a montante +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 161, nome = "Edgard de Souza", + posto = 161, `Quantos a montante?` = 2, `Posto jusante` = 37, # Jusante: Barra Bonita (37). Montante: Alto Tietê/Ponte Nova (160) e Traição (104) + `Posto montante 1` = 160, `Posto montante 2` = 104, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) + +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 160, nome = "Alto Tietê", + posto = 160, `Quantos a montante?` = 0, `Posto jusante` = 161, # Jusante: Edgard de Souza (161). Montante: nada + `Posto montante 1` = 999, `Posto montante 2` = 999, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) + +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 104, nome = "Traição", + posto = 104, `Quantos a montante?` = 2, `Posto jusante` = 161, # Jusante: Edgard de Souza (161). Montante: Guarapiranga (117) e Billings+Pedras (119) + `Posto montante 1` = 117, `Posto montante 2` = 119, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) + +cascata_PDE_2029[cascata_PDE_2029$num == 117, c("Posto jusante")] <- list(104) # Muda jusante de Guarapiranga para Traição +# Muda posto de Billings para 119 ("BILLINGS+PEDRAS "), jusante para Traição (104) e montante para nada. +cascata_PDE_2029[cascata_PDE_2029$num == 118, c("posto", "Quantos a montante?", "Posto montante 1", "Posto jusante")] <- list(119, 0, 999, 104) + + +# Bacia do Paraíba do Sul ---------------------------------------------------------- +# (Pereira Passos) <- (Fontes) <- Lajes (202) //~~ Ribeirão das Lajes +# (Pereira Passos) <- (Nilo Peçanha) <- (Vigário) +# Ilha dos Pombos (130) <- Simplício/Anta (129) <- Sobragi <- Picada +# Simplício/Anta <- Santa Cecília (125) <- Funil < Santa Branca //~~ Rio Paraíba do Sul +# Santa Cecília (125) <- Santana (203) <- Tócos (201) //~~ Rio Piraí +## Obs.: Não colocar nenhuma vazão para Nilo Peçanha no Plexos + +cascata_PDE_2029[cascata_PDE_2029$num == 129, c("Quantos a montante?", "Posto montante 2")] <- list(2, 125) # Adiciona Santa Cecília a montante de Simplício. +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 125, nome = "Santa Cecília", + posto = 125, `Quantos a montante?` = 2, `Posto jusante` = 129, # Jusante: Simplício (129). Montante: Funil (123) e Santana (203) + `Posto montante 1` = 123, `Posto montante 2` = 203, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 9203, nome = "Santana", + posto = 203, `Quantos a montante?` = 1, `Posto jusante` = 125, # Jusante: Santa Cecília (125). Montante: Tócos (201) + `Posto montante 1` = 201, `Posto montante 2` = 999, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 9201, nome = "Tócos", + posto = 201, `Quantos a montante?` = 0, `Posto jusante` = 203, # Jusante: Santana (203). + `Posto montante 1` = 999, `Posto montante 2` = 999, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) diff --git a/Principal.R b/Principal.R index df32f14..d86313d 100644 --- a/Principal.R +++ b/Principal.R @@ -14,11 +14,12 @@ cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 34, nome = "Ilha Solteira", `Posto montante 1` = 18, `Posto montante 2` = 33, `Posto montante 3` = 241, `Posto montante 4` = 99, `Posto montante 5` = 261, `Posto montante 6` = 999,) +SubstArtificiais <- TRUE ## Decide se usa vazões naturais ou artificiais # Muda os postos de artificiais para naturais de acordo com a listagem. Aplica em todas as colunas com posto no nome. Nat_x_Art <- read_csv2("posto natural x artificial.csv") -SubstArtificiais <- FALSE ## Decide se usa vazões naturais ou artificiais Nat_x_Art <- mutate(Nat_x_Art, NovaNatural = ifelse(Usa_sempre | SubstArtificiais, Natural, Artificial)) cascata_PDE_2029 <- mutate_at(cascata_PDE_2029, vars(contains("Posto")), ~ ifelse(. %in% Nat_x_Art$Artificial, Nat_x_Art[match(., Nat_x_Art$Artificial),]$NovaNatural, .)) +if (SubstArtificiais) source("InsereReservat.R") # Tempo de viagem # Do arquivo texto: diff --git a/posto natural x artificial.csv b/posto natural x artificial.csv new file mode 100644 index 0000000..d3cb8f9 --- /dev/null +++ b/posto natural x artificial.csv @@ -0,0 +1,21 @@ +Usina; Natural; Artificial; Usa_sempre +Itaocara I; 199; 314; FALSE +Lajes; 202; 132; FALSE +Pereira Passos; 202; 306; FALSE +Fontes; 202; 303; FALSE +Santana; 203; 315; FALSE +Barra Bonita; 237; 37; FALSE +Bariri; 238; 38; FALSE +Ibitinga; 239; 39; FALSE +Promissão; 240; 40; FALSE +Nova Avanhandava; 242; 42; FALSE +Três Irmãos; 243; 43; FALSE +Ilha Solteira equivalente; 244; 44; FALSE +Jupiá; 245; 45; FALSE +Porto Primavera; 246; 46; FALSE +Itaipu; 266; 66; TRUE +Segredo; 76; 75; FALSE; Obs.: Não estava na lista do ONS +Jordão; 73; 70; FALSE; Obs.: Não estava na lista do ONS +Ilha dos Pombos; 130; 299; FALSE; Obs.: Não estava na lista do ONS +Anta/Simplício; 129; 126; FALSE; Obs.: Não estava na lista do ONS +Moxotó; 173; 176; TRUE; Obs.: Troca COMP-PAF-MOX por Moxotó \ No newline at end of file From c02ecbf8dbe3b02eba3f8b2c1e798fe5f97dc48a Mon Sep 17 00:00:00 2001 From: tuberculo Date: Wed, 20 May 2020 18:25:26 -0300 Subject: [PATCH 05/16] =?UTF-8?q?Corre=C3=A7=C3=A3o=20no=20nome=20do=20arq?= =?UTF-8?q?uivo=20de=20sa=C3=ADda.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Principal.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Principal.R b/Principal.R index d86313d..9b837e9 100644 --- a/Principal.R +++ b/Principal.R @@ -70,7 +70,7 @@ Vaz2029MensalIncrMedia <- mutate(ungroup(Vaz2029MensalIncrMedia), Data = make_d VazIncrMesPlexosMedia <- FormatoPlexos(Vaz2029MensalIncrMedia, casc2029longa, FALSE) # Cria arquivos tsv -if (SubstArtificiais) NomeArq <- "Artificiais" else NomeArq <- "Naturais" +if (SubstArtificiais) NomeArq <- "Naturais" else NomeArq <- "Artificiais" write.table(VazIncrMesPlexos, paste0("VazIncrMesPlexos_PDE", NomeArq, ".tsv"), sep = "\t", dec = ",", row.names = FALSE) write.table(VazIncrMesPlexosMedia, paste0("VazIncrMesMediaPlexos", NomeArq, ".tsv"), sep = "\t", dec = ",", row.names = FALSE) From cdf47012dae2baabeafe5f8fa93953d95450be39 Mon Sep 17 00:00:00 2001 From: tuberculo Date: Wed, 20 May 2020 18:41:00 -0300 Subject: [PATCH 06/16] =?UTF-8?q?N=C3=A3o=20considerar=20Pereira=20Passos?= =?UTF-8?q?=20e=20Fontes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InsereReservat.R | 2 +- posto natural x artificial.csv | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/InsereReservat.R b/InsereReservat.R index 0076687..0df93ae 100644 --- a/InsereReservat.R +++ b/InsereReservat.R @@ -34,7 +34,7 @@ cascata_PDE_2029[cascata_PDE_2029$num == 118, c("posto", "Quantos a montante?", # Ilha dos Pombos (130) <- Simplício/Anta (129) <- Sobragi <- Picada # Simplício/Anta <- Santa Cecília (125) <- Funil < Santa Branca //~~ Rio Paraíba do Sul # Santa Cecília (125) <- Santana (203) <- Tócos (201) //~~ Rio Piraí -## Obs.: Não colocar nenhuma vazão para Nilo Peçanha no Plexos +## Obs.: Não colocar nenhuma vazão para Nilo Peçanha, Fontes e Pereira Passsos no Plexos cascata_PDE_2029[cascata_PDE_2029$num == 129, c("Quantos a montante?", "Posto montante 2")] <- list(2, 125) # Adiciona Santa Cecília a montante de Simplício. cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 125, nome = "Santa Cecília", diff --git a/posto natural x artificial.csv b/posto natural x artificial.csv index d3cb8f9..b772e91 100644 --- a/posto natural x artificial.csv +++ b/posto natural x artificial.csv @@ -1,8 +1,6 @@ Usina; Natural; Artificial; Usa_sempre Itaocara I; 199; 314; FALSE Lajes; 202; 132; FALSE -Pereira Passos; 202; 306; FALSE -Fontes; 202; 303; FALSE Santana; 203; 315; FALSE Barra Bonita; 237; 37; FALSE Bariri; 238; 38; FALSE From 1596a8079e6896766fdc1bffb7b07988b47fcfa7 Mon Sep 17 00:00:00 2001 From: tuberculo Date: Wed, 20 May 2020 18:41:00 -0300 Subject: [PATCH 07/16] =?UTF-8?q?N=C3=A3o=20considerar=20Pereira=20Passos?= =?UTF-8?q?=20e=20Fontes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InsereReservat.R | 2 +- posto natural x artificial.csv | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/InsereReservat.R b/InsereReservat.R index 0076687..252ee6d 100644 --- a/InsereReservat.R +++ b/InsereReservat.R @@ -34,7 +34,7 @@ cascata_PDE_2029[cascata_PDE_2029$num == 118, c("posto", "Quantos a montante?", # Ilha dos Pombos (130) <- Simplício/Anta (129) <- Sobragi <- Picada # Simplício/Anta <- Santa Cecília (125) <- Funil < Santa Branca //~~ Rio Paraíba do Sul # Santa Cecília (125) <- Santana (203) <- Tócos (201) //~~ Rio Piraí -## Obs.: Não colocar nenhuma vazão para Nilo Peçanha no Plexos +## Obs.: Não colocar nenhuma vazão para Nilo Peçanha, Fontes e Pereira Passos no Plexos cascata_PDE_2029[cascata_PDE_2029$num == 129, c("Quantos a montante?", "Posto montante 2")] <- list(2, 125) # Adiciona Santa Cecília a montante de Simplício. cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 125, nome = "Santa Cecília", diff --git a/posto natural x artificial.csv b/posto natural x artificial.csv index d3cb8f9..b772e91 100644 --- a/posto natural x artificial.csv +++ b/posto natural x artificial.csv @@ -1,8 +1,6 @@ Usina; Natural; Artificial; Usa_sempre Itaocara I; 199; 314; FALSE Lajes; 202; 132; FALSE -Pereira Passos; 202; 306; FALSE -Fontes; 202; 303; FALSE Santana; 203; 315; FALSE Barra Bonita; 237; 37; FALSE Bariri; 238; 38; FALSE From 709168d2b2585c895d70b35c7230fe5ca6403869 Mon Sep 17 00:00:00 2001 From: tuberculo Date: Fri, 22 May 2020 12:56:36 -0300 Subject: [PATCH 08/16] =?UTF-8?q?Corre=C3=A7=C3=A3o=20no=20n=C3=BAmero=20d?= =?UTF-8?q?e=20Moxot=C3=B3=20para=20pegar=20corretamente=20o=20tempo=20de?= =?UTF-8?q?=20viagem=20desde=20Itaparica.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Principal.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Principal.R b/Principal.R index 9b837e9..4527023 100644 --- a/Principal.R +++ b/Principal.R @@ -13,6 +13,8 @@ cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 34, nome = "Ilha Solteira", posto = 34, `Quantos a montante?` = 5, `Posto jusante` = 245, `Posto montante 1` = 18, `Posto montante 2` = 33, `Posto montante 3` = 241, `Posto montante 4` = 99, `Posto montante 5` = 261, `Posto montante 6` = 999,) +# Muda número de COMP-PAX-MOX (176) para número de Moxotó (173) +cascata_PDE_2029[cascata_PDE_2029$num == 176, "num"] <- list(173) SubstArtificiais <- TRUE ## Decide se usa vazões naturais ou artificiais # Muda os postos de artificiais para naturais de acordo com a listagem. Aplica em todas as colunas com posto no nome. @@ -29,7 +31,6 @@ TempoViagem <- read_xlsx("Tempo-de-Viagem-Plexos.xlsx", 1, col_types = c("numeri TempoViagem <- select(TempoViagem, Montante, Jusante, TempViag) # Lê nome das usinas usado no Plexos NomesPlexos <- read_xlsx("Tempo-de-Viagem-Plexos.xlsx", 2) -NomesPlexos[NomesPlexos$Reservatório == "Reserv. MOXOTO", "Num PDE"] <- 176 # Muda número de Moxotó (173) para o de COMP PAF-MOX (176). # Altera a tabela de cascata para o formato longo casc2029longa <- PreparaTabelaCascata(cascata_PDE_2029) # Inclui nome do reservatório usado no Plexos From 8f328c549e6c89427250387262d57e780005f9b3 Mon Sep 17 00:00:00 2001 From: tuberculo Date: Fri, 22 May 2020 13:03:34 -0300 Subject: [PATCH 09/16] =?UTF-8?q?Inclus=C3=A3o=20de=20S=C3=A3o=20Domingos?= =?UTF-8?q?=20na=20cascata.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Principal.R | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Principal.R b/Principal.R index 4527023..fc52683 100644 --- a/Principal.R +++ b/Principal.R @@ -5,7 +5,7 @@ source("importa vazões.R") # Lê arquivo com cascata cascata_PDE_2029 <- read_delim("cascata - PDE 2029.csv", ";", escape_double = FALSE, locale = locale(date_names = "pt", decimal_mark = ",", grouping_mark = "."), trim_ws = TRUE) # Substitui Ilha Solteira equivalente por Ilha Solteira e Três Irmãos. -cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 43, nome = "Tres Irmaos", +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 43, nome = "Tres Irmãos", posto = 243, `Quantos a montante?` = 1, `Posto jusante` = 245, `Posto montante 1` = 242, `Posto montante 2` = 999, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) @@ -13,6 +13,12 @@ cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 34, nome = "Ilha Solteira", posto = 34, `Quantos a montante?` = 5, `Posto jusante` = 245, `Posto montante 1` = 18, `Posto montante 2` = 33, `Posto montante 3` = 241, `Posto montante 4` = 99, `Posto montante 5` = 261, `Posto montante 6` = 999,) +# Insere São Domingos a montante de Porto Primavera +cascata_PDE_2029[cascata_PDE_2029$num == 46, c("Quantos a montante?", "Posto montante 2")] <- list(2, 154) +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 9154, nome = "São Domingos", + posto = 154, `Quantos a montante?` = 0, `Posto jusante` = 246, + `Posto montante 1` = 999, `Posto montante 2` = 999, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) # Muda número de COMP-PAX-MOX (176) para número de Moxotó (173) cascata_PDE_2029[cascata_PDE_2029$num == 176, "num"] <- list(173) From 09303fd35c2ab7c99c9a14da00ff52b759957dc1 Mon Sep 17 00:00:00 2001 From: tuberculo Date: Fri, 22 May 2020 15:19:58 -0300 Subject: [PATCH 10/16] =?UTF-8?q?Numera=C3=A7=C3=A3o=20de=20reservat=C3=B3?= =?UTF-8?q?rios=20de=20acordo=20com=20a=20tabela=20na=20planilha=20"tempo?= =?UTF-8?q?=20de=20viagem".?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InsereReservat.R | 10 +++++----- Principal.R | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/InsereReservat.R b/InsereReservat.R index 08ad591..285c2ee 100644 --- a/InsereReservat.R +++ b/InsereReservat.R @@ -8,17 +8,17 @@ ## Edgard de Souza a montante de Barra Bonita.("EDGARD DE SOUZA+TRIBUT " – posto 161) cascata_PDE_2029[cascata_PDE_2029$nome == "BARRA BONITA", c("Quantos a montante?", "Posto montante 1")] <- list(1, 161) # Muda usinas a montante -cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 161, nome = "Edgard de Souza", +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 107, nome = "Edgard de Souza", posto = 161, `Quantos a montante?` = 2, `Posto jusante` = 37, # Jusante: Barra Bonita (37). Montante: Alto Tietê/Ponte Nova (160) e Traição (104) `Posto montante 1` = 160, `Posto montante 2` = 104, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) -cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 160, nome = "Alto Tietê", +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 105, nome = "Alto Tietê", #Também chamado de Ponte Nova posto = 160, `Quantos a montante?` = 0, `Posto jusante` = 161, # Jusante: Edgard de Souza (161). Montante: nada `Posto montante 1` = 999, `Posto montante 2` = 999, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) -cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 104, nome = "Traição", +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 108, nome = "Traição", posto = 104, `Quantos a montante?` = 2, `Posto jusante` = 161, # Jusante: Edgard de Souza (161). Montante: Guarapiranga (117) e Billings+Pedras (119) `Posto montante 1` = 117, `Posto montante 2` = 119, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) @@ -41,11 +41,11 @@ cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 125, nome = "Santa Cecília" posto = 125, `Quantos a montante?` = 2, `Posto jusante` = 129, # Jusante: Simplício (129). Montante: Funil (123) e Santana (203) `Posto montante 1` = 123, `Posto montante 2` = 203, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) -cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 9203, nome = "Santana", +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 181, nome = "Santana", posto = 203, `Quantos a montante?` = 1, `Posto jusante` = 125, # Jusante: Santa Cecília (125). Montante: Tócos (201) `Posto montante 1` = 201, `Posto montante 2` = 999, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) -cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 9201, nome = "Tócos", +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 180, nome = "Tócos", posto = 201, `Quantos a montante?` = 0, `Posto jusante` = 203, # Jusante: Santana (203). `Posto montante 1` = 999, `Posto montante 2` = 999, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) diff --git a/Principal.R b/Principal.R index fc52683..8049cfc 100644 --- a/Principal.R +++ b/Principal.R @@ -15,7 +15,7 @@ cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 34, nome = "Ilha Solteira", `Posto montante 4` = 99, `Posto montante 5` = 261, `Posto montante 6` = 999,) # Insere São Domingos a montante de Porto Primavera cascata_PDE_2029[cascata_PDE_2029$num == 46, c("Quantos a montante?", "Posto montante 2")] <- list(2, 154) -cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 9154, nome = "São Domingos", +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 153, nome = "São Domingos", posto = 154, `Quantos a montante?` = 0, `Posto jusante` = 246, `Posto montante 1` = 999, `Posto montante 2` = 999, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) From bf06657f90ed8f9f92436b4b60ebc0925f972818 Mon Sep 17 00:00:00 2001 From: tuberculo Date: Mon, 25 May 2020 17:51:02 -0300 Subject: [PATCH 11/16] =?UTF-8?q?Inclus=C3=A3o=20dos=20dados=20de=20Santa?= =?UTF-8?q?=20Branca=20Tibagi.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "c\303\263digo usinas expans\303\243o.csv" | 1 + 1 file changed, 1 insertion(+) diff --git "a/c\303\263digo usinas expans\303\243o.csv" "b/c\303\263digo usinas expans\303\243o.csv" index 0cfbcd8..52130d3 100644 --- "a/c\303\263digo usinas expans\303\243o.csv" +++ "b/c\303\263digo usinas expans\303\243o.csv" @@ -15,3 +15,4 @@ SINOP;SINOP;227;227; SAO MANOEL;SÃO MANOEL;230;230; SALTO APIACAS;SALTO APIACÁS;225;225;hidr.dat TIBAGI MONT;TIBAGI MONT.;55;55; +S BRANCA TIB;Santa Branca;54;54; From 052349a508cffe28a39b6bcd07b7f85dcf7d939b Mon Sep 17 00:00:00 2001 From: tuberculo Date: Wed, 27 May 2020 12:16:49 -0300 Subject: [PATCH 12/16] =?UTF-8?q?Separa=C3=A7=C3=A3o=20de=20Billings=20e?= =?UTF-8?q?=20Pedreira.=20Nova=20corre=C3=A7=C3=A3o=20para=20inclus=C3=A3o?= =?UTF-8?q?=20de=20Santa=20Branca=20Tibagi.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InsereReservat.R | 13 ++++++++----- Tempo-de-Viagem-Plexos.xlsx | Bin 0 -> 32103 bytes "c\303\263digo usinas expans\303\243o.csv" | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 Tempo-de-Viagem-Plexos.xlsx diff --git a/InsereReservat.R b/InsereReservat.R index 285c2ee..43ed050 100644 --- a/InsereReservat.R +++ b/InsereReservat.R @@ -19,13 +19,16 @@ cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 105, nome = "Alto Tietê", # `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 108, nome = "Traição", - posto = 104, `Quantos a montante?` = 2, `Posto jusante` = 161, # Jusante: Edgard de Souza (161). Montante: Guarapiranga (117) e Billings+Pedras (119) - `Posto montante 1` = 117, `Posto montante 2` = 119, `Posto montante 3` = 999, + posto = 104, `Quantos a montante?` = 2, `Posto jusante` = 161, # Jusante: Edgard de Souza (161). Montante: Guarapiranga (117) e Pedreira (109) + `Posto montante 1` = 117, `Posto montante 2` = 109, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) - +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 109, nome = "Pedreira", + posto = 109, `Quantos a montante?` = 1, `Posto jusante` = 104, # Jusante: Traição (104). Montante: Billings (118) + `Posto montante 1` = 118, `Posto montante 2` = 999, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) cascata_PDE_2029[cascata_PDE_2029$num == 117, c("Posto jusante")] <- list(104) # Muda jusante de Guarapiranga para Traição -# Muda posto de Billings para 119 ("BILLINGS+PEDRAS "), jusante para Traição (104) e montante para nada. -cascata_PDE_2029[cascata_PDE_2029$num == 118, c("posto", "Quantos a montante?", "Posto montante 1", "Posto jusante")] <- list(119, 0, 999, 104) +# Muda posto de Billings para 118 ("BILLINGS "), jusante para Pedreira (109) e montante para nada. +cascata_PDE_2029[cascata_PDE_2029$num == 118, c("posto", "Quantos a montante?", "Posto montante 1", "Posto jusante")] <- list(118, 0, 999, 109) # Bacia do Paraíba do Sul ---------------------------------------------------------- diff --git a/Tempo-de-Viagem-Plexos.xlsx b/Tempo-de-Viagem-Plexos.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bf9fcc6e1abc110ae1d05676a034bdde5c5f9551 GIT binary patch literal 32103 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 Date: Tue, 2 Jun 2020 15:24:17 -0300 Subject: [PATCH 13/16] Arredonda valores no arquivo final. --- Principal.R | 7 ++++--- calc_incr.R | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Principal.R b/Principal.R index 8049cfc..2757e5c 100644 --- a/Principal.R +++ b/Principal.R @@ -68,12 +68,13 @@ casc2029longa$TempViag <- replace_na(casc2029longa$TempViag, 0) Vaz2029DiariaIncr <- CalcIncr(VazDiaria, casc2029longa) Vaz2029DiariaIncr <- drop_na(Vaz2029DiariaIncr) - -VazIncrMesPlexos <- FormatoPlexos(Vaz2029MensalIncr, casc2029longa, FALSE) # Valores mensais a partir do arquivo vazoes.txt. -VazIncrDiaPlexos <- FormatoPlexos(Vaz2029DiariaIncr, casc2029longa, TRUE) # Valores mensais a partir da média das vazões diárias. Vaz2029MensalIncrMedia <- group_by(mutate(Vaz2029DiariaIncr, Ano = year(Data), Mes = month(Data)), Ano, Mes, Nome, Posto) %>% summarize(VazIncrcomTV = mean(VazIncrcomTV)) Vaz2029MensalIncrMedia <- mutate(ungroup(Vaz2029MensalIncrMedia), Data = make_date(Ano, Mes)) + +# Muda para um posto por coluna +VazIncrMesPlexos <- FormatoPlexos(Vaz2029MensalIncr, casc2029longa, FALSE) # Valores mensais a partir do arquivo vazoes.txt. +VazIncrDiaPlexos <- FormatoPlexos(Vaz2029DiariaIncr, casc2029longa, TRUE) VazIncrMesPlexosMedia <- FormatoPlexos(Vaz2029MensalIncrMedia, casc2029longa, FALSE) # Cria arquivos tsv diff --git a/calc_incr.R b/calc_incr.R index 727c8f3..cafb23b 100644 --- a/calc_incr.R +++ b/calc_incr.R @@ -36,6 +36,7 @@ CalcIncr <- function(Vazoes, Cascata) { } FormatoPlexos <- function(Vaz, cascata = casc2029longa, diario = FALSE) { + Vaz <- mutate_if(Vaz, is.numeric, round, digits = 3) Vaz <- distinct(select(drop_na(left_join(Vaz, cascata, by = c("Posto" = "posto"))), Data, NomePlexos, VazIncrcomTV)) Vaz <- mutate(Vaz, YEAR = year(Data), MONTH = month(Data)) if (diario) {Vaz <- mutate(Vaz, DAY = day(Data))} From bc10add8364aa4b5c98e6cff4f36162d642fb71d Mon Sep 17 00:00:00 2001 From: tuberculo Date: Wed, 24 Jun 2020 15:53:31 -0300 Subject: [PATCH 14/16] =?UTF-8?q?Corre=C3=A7=C3=A3o=20de=20postos=20a=20mo?= =?UTF-8?q?ntante=20de=20Jupi=C3=A1.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InsereReservat.R | 14 ++++++++++++++ Principal.R | 10 +--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/InsereReservat.R b/InsereReservat.R index 43ed050..1552aaa 100644 --- a/InsereReservat.R +++ b/InsereReservat.R @@ -52,3 +52,17 @@ cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 180, nome = "Tócos", posto = 201, `Quantos a montante?` = 0, `Posto jusante` = 203, # Jusante: Santana (203). `Posto montante 1` = 999, `Posto montante 2` = 999, `Posto montante 3` = 999, `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) + +# Substitui Ilha Solteira equivalente por Ilha Solteira e Três Irmãos. ------- + +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 43, nome = "Tres Irmãos", + posto = 243, `Quantos a montante?` = 1, `Posto jusante` = 245, + `Posto montante 1` = 242, `Posto montante 2` = 999, `Posto montante 3` = 999, + `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) +cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 34, nome = "Ilha Solteira", + posto = 34, `Quantos a montante?` = 5, `Posto jusante` = 245, + `Posto montante 1` = 18, `Posto montante 2` = 33, `Posto montante 3` = 241, + `Posto montante 4` = 99, `Posto montante 5` = 261, `Posto montante 6` = 999,) +# Muda montante de Jupiá. +cascata_PDE_2029[cascata_PDE_2029$num == 45, c("Quantos a montante?", "Posto montante 1", "Posto montante 3")] <- list(3, 243, 34) + diff --git a/Principal.R b/Principal.R index 2757e5c..4a63717 100644 --- a/Principal.R +++ b/Principal.R @@ -4,15 +4,7 @@ source("importa vazões.R") # Preparação de dados ----------------------------------------------------- # Lê arquivo com cascata cascata_PDE_2029 <- read_delim("cascata - PDE 2029.csv", ";", escape_double = FALSE, locale = locale(date_names = "pt", decimal_mark = ",", grouping_mark = "."), trim_ws = TRUE) -# Substitui Ilha Solteira equivalente por Ilha Solteira e Três Irmãos. -cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 43, nome = "Tres Irmãos", - posto = 243, `Quantos a montante?` = 1, `Posto jusante` = 245, - `Posto montante 1` = 242, `Posto montante 2` = 999, `Posto montante 3` = 999, - `Posto montante 4` = 999, `Posto montante 5` = 999, `Posto montante 6` = 999,) -cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 34, nome = "Ilha Solteira", - posto = 34, `Quantos a montante?` = 5, `Posto jusante` = 245, - `Posto montante 1` = 18, `Posto montante 2` = 33, `Posto montante 3` = 241, - `Posto montante 4` = 99, `Posto montante 5` = 261, `Posto montante 6` = 999,) + # Insere São Domingos a montante de Porto Primavera cascata_PDE_2029[cascata_PDE_2029$num == 46, c("Quantos a montante?", "Posto montante 2")] <- list(2, 154) cascata_PDE_2029 <- add_row(cascata_PDE_2029, num = 153, nome = "São Domingos", From 027952fda19a98f399a991a4f6aa82018818fb3e Mon Sep 17 00:00:00 2001 From: tuberculo Date: Wed, 24 Jun 2020 18:06:53 -0300 Subject: [PATCH 15/16] Melhorias. --- Principal.R | 7 +++++++ "importa vaz\303\265es.R" | 10 ++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Principal.R b/Principal.R index 4a63717..a78dd5c 100644 --- a/Principal.R +++ b/Principal.R @@ -1,3 +1,10 @@ +library(lubridate) +library(tidyverse) +library(readxl) + +CodUsinasExp <- read_csv2("código usinas expansão.csv") +ArquivoVazoesDiarias <- "../Vazões_Diárias_1982_nat+art_ONS+Exp_r08.xlsx" + source("calc_incr.R") source("importa vazões.R") diff --git "a/importa vaz\303\265es.R" "b/importa vaz\303\265es.R" index d671cfd..94b64ec 100644 --- "a/importa vaz\303\265es.R" +++ "b/importa vaz\303\265es.R" @@ -1,11 +1,5 @@ -library(lubridate) -library(tidyverse) -library(readxl) - -CodUsinasExp <- read_csv2("código usinas expansão.csv") - -VazDiariaExist <- read_xlsx("../Vazões_Diárias_1982_nat+art_ONS+Exp_r07.xlsx", 1) -VazDiariaNovas <- read_xlsx("../Vazões_Diárias_1982_nat+art_ONS+Exp_r07.xlsx", 2) +VazDiariaExist <- read_xlsx(ArquivoVazoesDiarias, 1) +VazDiariaNovas <- read_xlsx(ArquivoVazoesDiarias, 2) VazDiariaExist$Data <- parse_date_time(VazDiariaExist$Data, "dmY") VazDiariaExist <- pivot_longer(VazDiariaExist, cols = -Data, names_to = "Usina", values_to = "Vazao") From 2d8eed15fea964d5629006ba6a1f538d16336e6a Mon Sep 17 00:00:00 2001 From: tuberculo Date: Thu, 25 Jun 2020 20:20:07 -0300 Subject: [PATCH 16/16] =?UTF-8?q?C=C3=A1lculo=20dos=20fatores=20para=20PCH?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CalcFatorPCH.R | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 CalcFatorPCH.R diff --git a/CalcFatorPCH.R b/CalcFatorPCH.R new file mode 100644 index 0000000..d3a922e --- /dev/null +++ b/CalcFatorPCH.R @@ -0,0 +1,13 @@ +FatorPCH <- VazDiaria[VazDiaria$Posto %in% c(34, 94, 254, 277), ] +FatorPCH <- left_join(FatorPCH, tibble(Usina = unique(FatorPCH$Nome), Subsistema = c("Norte", "Sul", "Sudeste", "Nordeste")), by = c("Nome" = "Usina")) +FatorPCH <- mutate(FatorPCH, YEAR = year(Data), MONTH = month(Data), DAY = day(Data)) +FatorPCH <- mutate(group_by(FatorPCH, Subsistema, MONTH), VazMedMens = mean(Vazao), fator = Vazao / VazMedMens) +FatorPCH <- pivot_wider(FatorPCH, names_from = Subsistema, values_from = fator, id_cols = c(YEAR, MONTH, DAY)) +FatorPCH <- mutate(FatorPCH, across(where(is.double), round, 3)) +write.table(FatorPCH, paste0("FatorPCH.tsv"), sep = "\t", dec = ",", row.names = FALSE) + + + +FatorPCH <- mutate(group_by(FatorPCH, Subsistema), porMed = Vazao / mean(Vazao), FC = Vazao / max(Vazao)) +summarise(group_by(FatorPCH, Subsistema, mes), média = mean(FC)) +colMeans(FatorPCH[-1])