184 lines
6.6 KiB
Python
Executable File
184 lines
6.6 KiB
Python
Executable File
import os
|
|
import pandas as pd
|
|
import numpy as np
|
|
from time import sleep
|
|
import csv
|
|
from datetime import datetime
|
|
|
|
|
|
def listar_pastas(diretorio):
|
|
pastas = [nome for nome in os.listdir(diretorio) if os.path.isdir(os.path.join(diretorio, nome))]
|
|
return pastas
|
|
|
|
|
|
def filtro_setembro_abril_estacao(dados, output_csv):
|
|
# Lista dos anos para os quais queremos selecionar os dados
|
|
|
|
print("**********************************************************\n")
|
|
print('PERIDODO DE ANALISE 1980 -2024')
|
|
anos = list(range(1980, 2024)) # De 1980 a 2024
|
|
|
|
|
|
# Ler os dados do CSV
|
|
dados_df = pd.read_csv(dados, sep=';', decimal=',', parse_dates=['DATA'], dayfirst=True)
|
|
|
|
#dados_df['CODIGO'] = dados_df['CODIGO'].astype(int)
|
|
|
|
|
|
|
|
|
|
# DataFrame para armazenar os dados selecionados
|
|
dados_selecionados = pd.DataFrame()
|
|
|
|
for ano in anos:
|
|
# Selecionar os dados de 1 de setembro de 'ano' a 30 de abril do próximo ano ('ano' + 1)
|
|
inicio = f'{ano}-09-01'
|
|
fim = f'{ano+1}-04-30'
|
|
|
|
selecao = (dados_df['DATA'] >= inicio) & (dados_df['DATA'] <= fim)
|
|
dados_selecionados = pd.concat([dados_selecionados, dados_df[selecao]])
|
|
|
|
# Salvar os dados selecionados em um novo arquivo CSV
|
|
|
|
dados_selecionados['CODIGO'] = dados_selecionados['CODIGO'].astype(int)
|
|
dados_selecionados.to_csv(output_csv, sep=';', encoding='utf-8', index=False, decimal=',')
|
|
|
|
|
|
|
|
|
|
def estacaochuvosa(dados, output_csv):
|
|
print(dados)
|
|
|
|
with open(output_csv, 'w') as file:
|
|
cabecalho = ['CODIGO', 'INICIO','FINAL']
|
|
writer = csv.DictWriter(file, fieldnames=cabecalho,delimiter=';')
|
|
writer.writeheader() # Escreve o cabeçalho
|
|
|
|
# Ler os dados do CSV
|
|
dados_df = pd.read_csv(dados, sep=';', decimal=',')
|
|
|
|
# dados['VALOR'] = dados['VALOR'].astype(str) # Garantir que todos os valores são strings
|
|
|
|
|
|
try:
|
|
# Garantir que os valores numéricos estão corretos antes de processar
|
|
dados_df['VALOR'] = dados_df['VALOR'].astype(str).str.replace(',', '.')
|
|
|
|
# Verificar se alguma linha ainda tem valores inválidos antes da conversão
|
|
for index, valor in dados_df['VALOR'].items():
|
|
try:
|
|
dados_df.at[index, 'VALOR'] = float(valor)
|
|
except ValueError:
|
|
print(f"Erro ao converter 'VALOR' na linha {index + 2}: '{valor}'") # +2 pois index começa em 0 e CSV tem cabeçalho
|
|
|
|
# Converter a coluna inteira para float após a verificação
|
|
dados_df['VALOR'] = dados_df['VALOR'].astype(float)
|
|
|
|
# Tratar valores NaN substituindo por 0
|
|
dados_df['VALOR'] = dados_df['VALOR'].fillna(0)
|
|
dados_df['CODIGO'] = dados_df['CODIGO'].astype(int)
|
|
|
|
except Exception as e:
|
|
print(f"Erro geral ao converter a coluna 'VALOR': {e}")
|
|
|
|
|
|
|
|
#invalid_values = dados_df[~dados_df['DATA'].str.replace(',', '.').str.replace('.', '', 1).str.isnumeric()]
|
|
#print(invalid_values)
|
|
|
|
|
|
|
|
|
|
# Garantir que a coluna 'DATA' é do tipo datetime com o formato correto
|
|
try:
|
|
dados_df['DATA'] = pd.to_datetime(dados_df['DATA'], format='%Y-%m-%d', errors='raise')
|
|
except Exception as e:
|
|
raise ValueError(f"Erro ao converter a coluna 'DATA': {e}")
|
|
|
|
estacao = dados_df['CODIGO'].unique()
|
|
|
|
#anos = list(range(1980, 2023)) # De 1980 a 2022
|
|
print("**********************************************************\n")
|
|
print('PERIDODO DE ANALISE 1980 -2024')
|
|
|
|
anos = list(range(1980, 2024)) # De 1980 a 2022
|
|
print(estacao)
|
|
|
|
total = len(estacao)
|
|
#for xrow in estacao: #percorre a lista das estacoes
|
|
for index, xrow in enumerate(estacao):
|
|
print(f"\restacao chuvosa linha {index+1}/{total}", end='')
|
|
nome_estacao=xrow
|
|
|
|
for ano in anos:
|
|
|
|
data_inicio = datetime.strptime(f'{ano}-09-01', '%Y-%m-%d')
|
|
data_fim = datetime.strptime(f'{ano+1}-04-30', '%Y-%m-%d')
|
|
df_inciochuva = dados_df[(dados_df['CODIGO'] == nome_estacao) &(dados_df['DATA'] >= data_inicio) & (dados_df['DATA'] <= data_fim)]
|
|
marcador_inicio=False
|
|
marcador_final=False
|
|
|
|
somador_ml=0
|
|
somador_ml_final_chuva=0
|
|
for index, row in df_inciochuva.iterrows():
|
|
# print(index, ' ', row)
|
|
|
|
leitura_chuva = float(row['VALOR'])#float(row['VALOR'].replace(',', '.'))
|
|
|
|
if leitura_chuva>=0:
|
|
somador_ml= somador_ml+leitura_chuva
|
|
|
|
if somador_ml>=10 and not marcador_inicio:
|
|
marcador_inicio=True
|
|
data_incio_chuva= row['DATA']
|
|
ano_atual= row['DATA'].year
|
|
#print ('estacao:', nome_estacao,'INCIO:', data_incio_chuva, 'MM', somador_ml)
|
|
somador_ml=0
|
|
marcador_final=False
|
|
#print ('estacao:',ano_do_incio_chuva)
|
|
|
|
df_final_chuva = df_inciochuva[::-1]
|
|
|
|
for index, row in df_final_chuva.iterrows():
|
|
leitura_chuva= row['VALOR']
|
|
|
|
if leitura_chuva>=0:
|
|
somador_ml_final_chuva= somador_ml_final_chuva+leitura_chuva;
|
|
|
|
if somador_ml_final_chuva>=5 and not marcador_final:
|
|
marcador_final=True
|
|
data_final_chuva=row['DATA']
|
|
somador_ml_final_chuva=0
|
|
marcador_inicio=False
|
|
#print ('ano final chuva:', ano_do_incio_chuva+1)
|
|
# print ('estacao:', nome_estacao,'INCIO:', data_incio_chuva,'FINAL:', data_final_chuva )
|
|
with open(output_csv, 'a') as file:
|
|
writer = csv.DictWriter(file, fieldnames=cabecalho, delimiter=';')
|
|
writer.writerow({'CODIGO':nome_estacao, 'INICIO':data_incio_chuva.strftime('%Y-%m-%d'),'FINAL':data_final_chuva.strftime('%Y-%m-%d')})
|
|
|
|
|
|
def processar_inicio_fim_estacao_chuvosa():
|
|
print("Estacao chuvosa...")
|
|
diretorio = 'data' # nome da pasta principal
|
|
pastas = listar_pastas(diretorio)
|
|
|
|
destino= "30estacaochuvosa"
|
|
if not os.path.exists(destino):
|
|
os.makedirs(destino)
|
|
print(f"Pasta '{destino}' criada.")
|
|
|
|
for pasta in pastas:
|
|
print(f"Encontrada pasta: {pasta}")
|
|
|
|
dados = f"./20dadosmenosum/{pasta}_processada.csv"
|
|
estacao =f"./{pasta}"
|
|
output_csv=f"./{destino}/{pasta}_filtro_setembro_abril.csv"
|
|
estacao_chuvosa=f"./{destino}/{pasta}_estacao_chuvosa.csv"
|
|
|
|
filtro_setembro_abril_estacao(dados, output_csv)
|
|
sleep(3)
|
|
estacaochuvosa(output_csv, estacao_chuvosa)
|
|
|
|
|
|
|