Source code for src.Welsch_intraday
import pandas as pd
import numpy as np
[docs]
def intraday_welsch(storage_path, blocksperday, timeslices, representative_days, output_path):
# Carregar os arquivos
storagelevel_df = pd.read_csv(storage_path)
# Criar os vetores de controle
dailytimebracket_vector = np.tile(np.arange(1, blocksperday + 1), (timeslices // blocksperday + 1))[:timeslices]
daytype_vector = np.repeat(np.arange(1, representative_days + 1), (timeslices // representative_days))[:timeslices]
# Criar o DataFrame a partir dos vetores esperados
expected_df = pd.DataFrame({
'DAYTYPE': daytype_vector,
'DAILYTIMEBRACKET': dailytimebracket_vector
})
# Inserir chave única para evitar problemas de repetição nos joins
expected_df['Key'] = expected_df['DAYTYPE'].astype(str) + '-' + expected_df['DAILYTIMEBRACKET'].astype(str)
storagelevel_df['Key'] = storagelevel_df['DAYTYPE'].astype(str) + '-' + storagelevel_df['DAILYTIMEBRACKET'].astype(str)
# Juntar o DataFrame esperado com o DataFrame original baseado na chave
result_df = pd.merge(expected_df, storagelevel_df.drop(columns=['DAYTYPE', 'DAILYTIMEBRACKET']), on='Key', how='left')
result_df['VALUE'] = result_df['VALUE'].fillna(0) # Preencher valores faltantes com 0
# Remover a chave temporária
result_df.drop(columns='Key', inplace=True)
# Calcular VALUEACCUMULATED somente a partir do segundo dia
result_df['VALUEACCUMULATED'] = result_df['VALUE']
last_value_day1 = result_df.loc[result_df['DAYTYPE'] == 1, 'VALUE'].iloc[-1]
first_dailytimebracket_day2_index = result_df[(result_df['DAYTYPE'] == 2) & (result_df['DAILYTIMEBRACKET'] == 1)].index[0]
result_df.loc[first_dailytimebracket_day2_index, 'VALUEACCUMULATED'] += last_value_day1
result_df.loc[first_dailytimebracket_day2_index + 1:, 'VALUEACCUMULATED'] = result_df.loc[first_dailytimebracket_day2_index + 1:, 'VALUE'].cumsum() + result_df.loc[first_dailytimebracket_day2_index, 'VALUEACCUMULATED']
# Salvar o DataFrame corrigido em um arquivo CSV
result_df.to_csv(output_path, index=False)
return output_path