import pandas as pd import numpy as np import re import matplotlib.pyplot as plt print("Procesando el archivo de log para extraer 32 puntos de rendimiento extremo...") try: # --- 1. Cargar los datos del archivo log(3).txt --- log_pattern = re.compile(r'\[(.*?)\] X:(\d+),Y:(\d+),C:(\d+),V:(\d+),P:(\d+),') data = [] # CORRECCIÓN: Usando el nombre de archivo correcto filename = '21092025_2PM.txt' with open(filename, 'r') as f: for line in f: match = log_pattern.search(line) if match: data.append([ match.group(1), match.group(2), match.group(3), match.group(4), match.group(6) ]) df = pd.DataFrame(data, columns=['t', 'X', 'Y', 'C', 'P']) # MODIFICACIÓN: Convertir la columna 't' a datetime para poder ordenarla df['t'] = pd.to_datetime(df['t']) df['X'] = df['X'].astype(int) df['Y'] = df['Y'].astype(int) df['C'] = df['C'].astype(int) df['P'] = df['P'].astype(int) # --- 2. Calcular el "Índice de Rendimiento Óptimo" --- p_range = df['P'].max() - df['P'].min() c_range = df['C'].max() - df['C'].min() if p_range > 0: df['P_norm'] = (df['P'] - df['P'].min()) / p_range else: df['P_norm'] = 0.5 if c_range > 0: df['C_norm'] = (df['C'] - df['C'].min()) / c_range else: df['C_norm'] = 0.5 df['perf_index'] = (df['P_norm'] + df['C_norm']) * (1 - abs(df['P_norm'] - df['C_norm'])) # --- 3. Filtrar para "Rendimiento Extremo" --- threshold = df['perf_index'].quantile(0.35) df_extreme = df[df['perf_index'] > threshold].copy() # MODIFICACIÓN: Ordenar los puntos por tiempo antes de muestrear df_extreme = df_extreme.sort_values(by='t').reset_index(drop=True) # --- 4. Seleccionar 32 puntos repartidos uniformemente en el tiempo --- num_points = 19 if len(df_extreme) >= num_points: indices = np.linspace(0, len(df_extreme) - 1, num_points, dtype=int) df_sampled = df_extreme.iloc[indices] else: # Si hay menos de 32 puntos, se toman todos df_sampled = df_extreme # --- 5. Imprimir la tabla de resultados --- print("\n\n--- Tabla con 32 Puntos de Rendimiento Extremo Repartidos en el Tiempo ---\n") print(df_sampled[['t', 'X', 'Y']].to_markdown(index=False)) except FileNotFoundError: print(f"ERROR: No se encontró el archivo '{filename}'. Asegúrate de que esté en la misma carpeta que este script.") except Exception as e: print(f"Ocurrió un error inesperado: {e}")