atualizando
This commit is contained in:
4
app.py
4
app.py
@@ -12,6 +12,7 @@ def mostrar_menu():
|
|||||||
print("30 - Inicio e fim estacao chuvosa")
|
print("30 - Inicio e fim estacao chuvosa")
|
||||||
print("40 - Processar veranicos com estacao chuvosa")
|
print("40 - Processar veranicos com estacao chuvosa")
|
||||||
print("60 - Processar Classicação veranicos")
|
print("60 - Processar Classicação veranicos")
|
||||||
|
print("70 - Transformar veranicos")
|
||||||
print("0 - Sair")
|
print("0 - Sair")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@@ -40,6 +41,9 @@ def main():
|
|||||||
elif opcao == "60":
|
elif opcao == "60":
|
||||||
classificacao_veranicos.processar_Classificao_Veranicos()
|
classificacao_veranicos.processar_Classificao_Veranicos()
|
||||||
|
|
||||||
|
elif opcao == "70":
|
||||||
|
classificacao_veranicos.transformar_decendio()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
elif opcao == "0":
|
elif opcao == "0":
|
||||||
|
|||||||
@@ -26,17 +26,38 @@ def processar_Classificao_Veranicos():
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
def diferenca_dias(data1, data2):
|
||||||
|
formato = "%Y-%m-%d"
|
||||||
|
|
||||||
|
# Converter para string se for Timestamp
|
||||||
|
if not isinstance(data1, str):
|
||||||
|
data1 = data1.strftime(formato)
|
||||||
|
if not isinstance(data2, str):
|
||||||
|
data2 = data2.strftime(formato)
|
||||||
|
|
||||||
|
# Verificar se as datas são válidas
|
||||||
|
if not data1 or not data2:
|
||||||
|
print(f"Erro: Data inválida -> data1: {data1}, data2: {data2}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
try:
|
||||||
|
d1 = datetime.strptime(data1, formato)
|
||||||
|
d2 = datetime.strptime(data2, formato)
|
||||||
|
return (d2 - d1).days
|
||||||
|
except ValueError as e:
|
||||||
|
print(f"Erro ao converter datas: {data1}, {data2} - {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def rodar_decendio(decendios,qtd_veranicos, estacoes):
|
def rodar_decendio(decendios,qtd_veranicos, estacoes):
|
||||||
print("Decendio...")
|
print("Decendio...")
|
||||||
resultados = []
|
|
||||||
amplitude=0
|
|
||||||
|
|
||||||
estacoes= [2244035]
|
estacoes= [2244035]
|
||||||
#decendios = decendios.head(24)
|
#decendios = decendios.head(24)
|
||||||
|
resultados = []
|
||||||
|
|
||||||
for estacao in estacoes: # percorre todas as estações array de estacoes
|
for estacao in estacoes: # percorre todas as estações array de estacoes
|
||||||
|
|
||||||
@@ -44,9 +65,8 @@ def rodar_decendio(decendios,qtd_veranicos, estacoes):
|
|||||||
#estacao_fitrada = qtd_veranicos['CODIGO'] == estacao
|
#estacao_fitrada = qtd_veranicos['CODIGO'] == estacao
|
||||||
estacao_fitrada = qtd_veranicos[qtd_veranicos['CODIGO'] == estacao]
|
estacao_fitrada = qtd_veranicos[qtd_veranicos['CODIGO'] == estacao]
|
||||||
estacao_fitrada = estacao_fitrada.head(10)
|
estacao_fitrada = estacao_fitrada.head(10)
|
||||||
|
|
||||||
for index, selecao_estacao in estacao_fitrada.iterrows(): # Itera pelas linhas do DataFrame
|
for index, selecao_estacao in estacao_fitrada.iterrows(): # Itera pelas linhas do DataFrame
|
||||||
print(index," ------------------------------------------")
|
|
||||||
|
|
||||||
data_inicio = pd.to_datetime(selecao_estacao['INICIO'])
|
data_inicio = pd.to_datetime(selecao_estacao['INICIO'])
|
||||||
data_fim = pd.to_datetime(selecao_estacao['FINAL'])
|
data_fim = pd.to_datetime(selecao_estacao['FINAL'])
|
||||||
@@ -58,32 +78,86 @@ def rodar_decendio(decendios,qtd_veranicos, estacoes):
|
|||||||
dia =selecao_estacao['QTDDIAS']
|
dia =selecao_estacao['QTDDIAS']
|
||||||
# Adicionar colunas FINICIO e FFINAL
|
# Adicionar colunas FINICIO e FFINAL
|
||||||
filtro = filtro.copy() # Para evitar avisos do Pandas
|
filtro = filtro.copy() # Para evitar avisos do Pandas
|
||||||
filtro['FINICIO'] = data_inicio
|
#filtro['FINICIO'] = data_inicio
|
||||||
filtro['FFINAL'] = data_fim
|
#filtro['FFINAL'] = data_fim
|
||||||
|
# filtro['dias'] = filtro.apply(lambda row: diferenca_dias(row['INICIO'], row['FINAL']), axis=1)
|
||||||
for index, selecao_filtro in filtro.iterrows():
|
filtro['dias_chuva'] = 0
|
||||||
des = selecao_filtro['DECENDIO']
|
#filtro.apply(lambda row: diferenca_dias(row['FINICIO'], row['FINAL']), axis=1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
diferenca=diferenca_dias(data_inicio, data_fim)
|
||||||
|
|
||||||
|
|
||||||
|
quantidade_veranicos = len(filtro) # Conta o número de linhas
|
||||||
|
print(index,"- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -")
|
||||||
|
print ('estacao: ',selecao_estacao , 'data_inicio' , '--- ', data_fim ,' Qtd Dias: ', diferenca)
|
||||||
|
if quantidade_veranicos <=0:
|
||||||
|
print(f"Tem algum problema registros ({quantidade_veranicos} linhas).")
|
||||||
|
elif quantidade_veranicos <= 1:
|
||||||
|
print(f"Tem mais de 1 registros ({quantidade_veranicos} linhas).")
|
||||||
|
filtro.loc[filtro.index[0], 'dias_chuva'] = diferenca_dias(data_inicio, data_fim)+1
|
||||||
|
|
||||||
|
|
||||||
|
print(filtro)
|
||||||
|
elif quantidade_veranicos <= 2:
|
||||||
|
print(f"Tem mais de 2 registros ({quantidade_veranicos} linhas).")
|
||||||
|
filtro.loc[filtro.index[0], 'dias_chuva'] = diferenca_dias(data_inicio, filtro.iloc[0]['FINAL'])+1
|
||||||
|
filtro.loc[filtro.index[1], 'dias_chuva'] = diferenca_dias(filtro.iloc[1]['INICIO'], data_fim)+1
|
||||||
|
|
||||||
|
print(filtro)
|
||||||
|
|
||||||
|
elif quantidade_veranicos <= 3:
|
||||||
|
print(f"Tem mais de 3 registros ({quantidade_veranicos} linhas).")
|
||||||
|
filtro.loc[filtro.index[0], 'dias_chuva'] = diferenca_dias(data_inicio, filtro.iloc[0]['FINAL'])+1
|
||||||
|
filtro.loc[filtro.index[1], 'dias_chuva'] = diferenca_dias(filtro.iloc[1]['INICIO'], filtro.iloc[1]['FINAL']) +1
|
||||||
|
filtro.loc[filtro.index[2], 'dias_chuva'] = diferenca_dias(filtro.iloc[2]['INICIO'], data_fim)+1
|
||||||
print(filtro)
|
print(filtro)
|
||||||
print(des)
|
|
||||||
|
elif quantidade_veranicos <= 4:
|
||||||
|
print(f"Tem mais de 4 registros ({quantidade_veranicos} linhas).")
|
||||||
|
filtro.loc[filtro.index[0], 'dias_chuva'] = diferenca_dias(data_inicio, filtro.iloc[0]['FINAL'])
|
||||||
|
filtro.loc[filtro.index[1], 'dias_chuva'] = diferenca_dias(filtro.iloc[1]['INICIO'], filtro.iloc[1]['FINAL'])
|
||||||
|
filtro.loc[filtro.index[2], 'dias_chuva'] = diferenca_dias(filtro.iloc[2]['INICIO'], filtro.iloc[2]['FINAL'])
|
||||||
|
filtro.loc[filtro.index[3], 'dias_chuva'] = diferenca_dias(filtro.iloc[3]['INICIO'], data_fim)+1
|
||||||
|
print(filtro)
|
||||||
|
dados = []
|
||||||
|
print('->', selecao_estacao)
|
||||||
|
for index, row in filtro.iterrows():
|
||||||
|
dados.append({
|
||||||
|
'CODIGO': selecao_estacao['CODIGO'],
|
||||||
|
'DECENDIO': row['DECENDIO'],
|
||||||
|
'AMPLITUDE': row['dias_chuva']
|
||||||
|
})
|
||||||
|
print('************************************************************')
|
||||||
|
|
||||||
resultado = {
|
resultados.append(pd.DataFrame(dados))
|
||||||
'estacao': estacao,
|
|
||||||
'descendio':selecao_filtro['DECENDIO'],
|
|
||||||
|
|
||||||
'amplitude': 0
|
|
||||||
|
|
||||||
}
|
|
||||||
resultados.append(resultado)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
save = pd.DataFrame(resultados)
|
|
||||||
os.remove('saida.csv')
|
|
||||||
save.to_csv('saida.csv', sep=';', encoding='utf-8', index=False)
|
|
||||||
|
|
||||||
|
|
||||||
|
if os.path.exists('saida.csv'): os.remove('saida.csv')
|
||||||
|
pd.concat(resultados, ignore_index=True).to_csv('saida.csv', sep=';', encoding='utf-8', index=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def transformar_decendio():
|
||||||
|
df = pd.read_csv("saida.csv", sep=";")
|
||||||
|
# Transformar a tabela para o formato desejado
|
||||||
|
df_pivot = df.pivot(index="CODIGO", columns="DECENDIO", values="AMPLITUDE")
|
||||||
|
|
||||||
|
# Resetar o índice para salvar corretamente
|
||||||
|
df_pivot.reset_index(inplace=True)
|
||||||
|
|
||||||
|
# Salvar o resultado no CSV
|
||||||
|
df_pivot.to_csv("saida_transformado.csv", sep=";", encoding="utf-8", index=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def carregar_decendios(file):
|
def carregar_decendios(file):
|
||||||
|
|||||||
105
log_registros.txt
Normal file
105
log_registros.txt
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1980-09-24 00:00:00
|
||||||
|
FINAL 1980-10-06 00:00:00
|
||||||
|
QTDDIAS 13
|
||||||
|
Name: 0, dtype: object | Data Início: 1980-09-24 00:00:00 | Data Fim: 1980-10-06 00:00:00 | Qtd Dias: 12
|
||||||
|
Tem mais de 2 registros (2 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
2 3DSEP 1980-09-21 1980-09-30 6.0
|
||||||
|
3 1DOCT 1980-10-01 1980-10-10 6.0
|
||||||
|
|
||||||
|
1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1980-10-16 00:00:00
|
||||||
|
FINAL 1980-10-30 00:00:00
|
||||||
|
QTDDIAS 15
|
||||||
|
Name: 1, dtype: object | Data Início: 1980-10-16 00:00:00 | Data Fim: 1980-10-30 00:00:00 | Qtd Dias: 14
|
||||||
|
Tem mais de 2 registros (2 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
4 2DOCT 1980-10-11 1980-10-20 4.0
|
||||||
|
5 3DOCT 1980-10-21 1980-10-31 10.0
|
||||||
|
|
||||||
|
2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1980-11-01 00:00:00
|
||||||
|
FINAL 1980-11-07 00:00:00
|
||||||
|
QTDDIAS 7
|
||||||
|
Name: 2, dtype: object | Data Início: 1980-11-01 00:00:00 | Data Fim: 1980-11-07 00:00:00 | Qtd Dias: 6
|
||||||
|
Tem mais de 1 registro (1 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
6 1DNOV 1980-11-01 1980-11-10 7.0
|
||||||
|
|
||||||
|
3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1980-11-14 00:00:00
|
||||||
|
FINAL 1980-11-19 00:00:00
|
||||||
|
QTDDIAS 6
|
||||||
|
Name: 3, dtype: object | Data Início: 1980-11-14 00:00:00 | Data Fim: 1980-11-19 00:00:00 | Qtd Dias: 5
|
||||||
|
Tem mais de 1 registro (1 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
7 2DNOV 1980-11-11 1980-11-20 6.0
|
||||||
|
|
||||||
|
4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1980-11-26 00:00:00
|
||||||
|
FINAL 1980-11-30 00:00:00
|
||||||
|
QTDDIAS 5
|
||||||
|
Name: 4, dtype: object | Data Início: 1980-11-26 00:00:00 | Data Fim: 1980-11-30 00:00:00 | Qtd Dias: 4
|
||||||
|
Tem mais de 1 registro (1 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
8 3DNOV 1980-11-21 1980-11-30 5.0
|
||||||
|
|
||||||
|
5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1980-12-04 00:00:00
|
||||||
|
FINAL 1980-12-13 00:00:00
|
||||||
|
QTDDIAS 10
|
||||||
|
Name: 5, dtype: object | Data Início: 1980-12-04 00:00:00 | Data Fim: 1980-12-13 00:00:00 | Qtd Dias: 9
|
||||||
|
Tem mais de 2 registros (2 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
9 1DDEC 1980-12-01 1980-12-10 6.0
|
||||||
|
10 2DDEC 1980-12-11 1980-12-20 3.0
|
||||||
|
|
||||||
|
6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1980-12-16 00:00:00
|
||||||
|
FINAL 1980-12-20 00:00:00
|
||||||
|
QTDDIAS 5
|
||||||
|
Name: 6, dtype: object | Data Início: 1980-12-16 00:00:00 | Data Fim: 1980-12-20 00:00:00 | Qtd Dias: 4
|
||||||
|
Tem mais de 1 registro (1 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
10 2DDEC 1980-12-11 1980-12-20 5.0
|
||||||
|
|
||||||
|
7 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1981-01-04 00:00:00
|
||||||
|
FINAL 1981-01-08 00:00:00
|
||||||
|
QTDDIAS 5
|
||||||
|
Name: 7, dtype: object | Data Início: 1981-01-04 00:00:00 | Data Fim: 1981-01-08 00:00:00 | Qtd Dias: 4
|
||||||
|
Tem mais de 1 registro (1 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
12 1DJAN 1981-01-01 1981-01-10 5.0
|
||||||
|
|
||||||
|
8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1981-01-28 00:00:00
|
||||||
|
FINAL 1981-02-06 00:00:00
|
||||||
|
QTDDIAS 10
|
||||||
|
Name: 8, dtype: object | Data Início: 1981-01-28 00:00:00 | Data Fim: 1981-02-06 00:00:00 | Qtd Dias: 9
|
||||||
|
Tem mais de 2 registros (2 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
14 3DJAN 1981-01-21 1981-01-31 3.0
|
||||||
|
15 1DFEB 1981-02-01 1981-02-10 6.0
|
||||||
|
|
||||||
|
9 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Estação: CODIGO 2244035
|
||||||
|
INICIO 1981-02-12 00:00:00
|
||||||
|
FINAL 1981-03-06 00:00:00
|
||||||
|
QTDDIAS 23
|
||||||
|
Name: 9, dtype: object | Data Início: 1981-02-12 00:00:00 | Data Fim: 1981-03-06 00:00:00 | Qtd Dias: 22
|
||||||
|
Tem mais de 3 registros (3 linhas).
|
||||||
|
DECENDIO INICIO FINAL dias_chuva
|
||||||
|
16 2DFEB 1981-02-11 1981-02-20 8.0
|
||||||
|
17 3DFEB 1981-02-21 1981-02-28 7.0
|
||||||
|
18 1DMAR 1981-03-01 1981-03-10 6.0
|
||||||
BIN
planilhas/Sem título 2.ods
Normal file
BIN
planilhas/Sem título 2.ods
Normal file
Binary file not shown.
BIN
planilhas/decendios_filtered_1980_2025.xlsx
Normal file
BIN
planilhas/decendios_filtered_1980_2025.xlsx
Normal file
Binary file not shown.
BIN
planilhas/logica.ods
Normal file
BIN
planilhas/logica.ods
Normal file
Binary file not shown.
34
saida.csv
34
saida.csv
@@ -1,17 +1,17 @@
|
|||||||
estacao;descendio;amplitude
|
CODIGO;DECENDIO;AMPLITUDE
|
||||||
2244035;3DSEP;0
|
2244035;3DSEP;7
|
||||||
2244035;1DOCT;0
|
2244035;1DOCT;6
|
||||||
2244035;2DOCT;0
|
2244035;2DOCT;5
|
||||||
2244035;3DOCT;0
|
2244035;3DOCT;10
|
||||||
2244035;1DNOV;0
|
2244035;1DNOV;7
|
||||||
2244035;2DNOV;0
|
2244035;2DNOV;6
|
||||||
2244035;3DNOV;0
|
2244035;3DNOV;5
|
||||||
2244035;1DDEC;0
|
2244035;1DDEC;7
|
||||||
2244035;2DDEC;0
|
2244035;2DDEC;3
|
||||||
2244035;2DDEC;0
|
2244035;2DDEC;5
|
||||||
2244035;1DJAN;0
|
2244035;1DJAN;5
|
||||||
2244035;3DJAN;0
|
2244035;3DJAN;4
|
||||||
2244035;1DFEB;0
|
2244035;1DFEB;6
|
||||||
2244035;2DFEB;0
|
2244035;2DFEB;9
|
||||||
2244035;3DFEB;0
|
2244035;3DFEB;8
|
||||||
2244035;1DMAR;0
|
2244035;1DMAR;6
|
||||||
|
|||||||
|
Reference in New Issue
Block a user