Files
jean_app/iniciochuvosa.py
2024-07-28 19:24:41 -03:00

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)