129 lines
4.6 KiB
Python
129 lines
4.6 KiB
Python
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
|
|
anos = list(range(1980, 2023)) # De 1980 a 2022
|
|
|
|
# Ler os dados do CSV
|
|
dados_df = pd.read_csv(dados, sep=';', decimal=',', parse_dates=['DATA'], dayfirst=True)
|
|
|
|
# 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.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=',')
|
|
|
|
# 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(estacao)
|
|
|
|
|
|
for xrow in estacao: #percorre a lista das estacoes
|
|
|
|
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():
|
|
leitura_chuva= row['VALOR']
|
|
|
|
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)
|
|
|
|
for pasta in pastas:
|
|
print(f"Encontrada pasta: {pasta}")
|
|
|
|
dados = f"./{pasta}_dados.csv"
|
|
estacao =f"./{pasta}"
|
|
output_csv=f"./{pasta}_filtro_setembro_abril.csv"
|
|
estacao_chuvosa=f"./{pasta}_estacao_chuvosa.csv"
|
|
|
|
filtro_setembro_abril_estacao(dados, output_csv)
|
|
sleep(3)
|
|
estacaochuvosa(output_csv, estacao_chuvosa)
|
|
|
|
|
|
|