71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
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}") |