75 lines
2.6 KiB
Python
75 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 generar el mapa de calor...")
|
|
|
|
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 = []
|
|
filename = '21092025.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'])
|
|
df['t'] = df['t'].astype(str)
|
|
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.5)
|
|
df_extreme = df[df['perf_index'] > threshold].copy()
|
|
|
|
# --- 4. Crear y guardar el mapa de calor ---
|
|
plt.figure(figsize=(12, 10))
|
|
hb = plt.hexbin(
|
|
df_extreme['Y'], df_extreme['X'], C=df_extreme['perf_index'],
|
|
gridsize=60, cmap='plasma', reduce_C_function=np.mean
|
|
)
|
|
|
|
cb = plt.colorbar(hb)
|
|
cb.set_label('Índice de Rendimiento Óptimo (Promedio)', fontsize=12)
|
|
plt.title('Mapa de Calor de Rendimiento Extremo (log(3).txt)', fontsize=16)
|
|
plt.xlabel('Coordenada X', fontsize=12)
|
|
plt.ylabel('Coordenada Y', fontsize=12)
|
|
plt.grid(True, linestyle='--', alpha=0.3)
|
|
plt.axis('equal')
|
|
|
|
output_filename = 'heatmap_log3.png'
|
|
plt.savefig(output_filename)
|
|
|
|
print(f"\n¡Éxito! Se ha guardado el mapa de calor como '{output_filename}'")
|
|
|
|
# Intenta mostrar el gráfico en una ventana emergente
|
|
plt.show()
|
|
|
|
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}") |