Files
Microtracking/points_generator_extremeheatmap.py

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}")