First approach, lectura de texto y gráfica

This commit is contained in:
2024-11-29 03:19:34 +01:00
commit 226086bebe

103
maker.py Normal file
View File

@@ -0,0 +1,103 @@
import pandas as pd
from pathlib import Path
import matplotlib.pyplot as plt
def procesar_archivo_txt(ruta_archivo):
try:
ruta = Path(ruta_archivo)
if not ruta.is_file():
raise FileNotFoundError(f"La ruta '{ruta_archivo}' no apunta a un archivo válido.")
# Leer todas las líneas del archivo
with open(ruta, 'r') as archivo:
lineas = archivo.readlines()
# Buscar la cabecera (línea que comienza con 'Sample Index')
for i, linea in enumerate(lineas):
if linea.startswith("Sample Index"):
inicio_datos = i
break
else:
raise ValueError("No se encontró la cabecera en el archivo.")
# Leer los datos desde la cabecera utilizando pandas
datos = pd.read_csv(ruta, skiprows=inicio_datos)
# Convertir columnas a numéricas donde sea posible
for columna in datos.columns:
try:
datos[columna] = pd.to_numeric(datos[columna], errors='coerce')
except Exception as e:
print(f"Error al convertir la columna '{columna}': {e}")
return datos
except FileNotFoundError as e:
print(f"Archivo no encontrado: {e}")
except PermissionError as e:
print(f"Permiso denegado: {e}")
except ValueError as e:
print(f"Error de formato en el archivo: {e}")
except Exception as e:
print(f"Error procesando el archivo: {e}")
# Ruta al archivo
ruta = r"C:\Users\lumon\Desktop\OpenBCI-RAW-2024-10-10_17-56-37.txt"
df = procesar_archivo_txt(ruta)
if df is not None:
print(df.columns)
def graficar_datos(df):
# Eliminar espacios extra en los nombres de las columnas
df.columns = df.columns.str.strip()
# Verificar si la columna 'Timestamp' está presente
if 'Timestamp' not in df.columns:
print("La columna 'Timestamp' no se encuentra en el archivo.")
return
# Si el archivo tiene un Timestamp y lo queremos graficar, convertir a formato datetime
df['Timestamp'] = pd.to_datetime(df['Timestamp'], errors='coerce') # Convertir a datetime
# Graficar algunos canales de EXG en función del tiempo
plt.figure(figsize=(12, 6))
# Graficar EXG Channel 0, 1, 2
plt.plot(df['Timestamp'], df['EXG Channel 0'], label='EXG Channel 0')
plt.plot(df['Timestamp'], df['EXG Channel 1'], label='EXG Channel 1')
plt.plot(df['Timestamp'], df['EXG Channel 2'], label='EXG Channel 2')
plt.plot(df['Timestamp'], df['EXG Channel 3'], label='EXG Channel 3')
plt.plot(df['Timestamp'], df['EXG Channel 4'], label='EXG Channel 4')
plt.plot(df['Timestamp'], df['EXG Channel 5'], label='EXG Channel 5')
plt.plot(df['Timestamp'], df['EXG Channel 6'], label='EXG Channel 6')
plt.plot(df['Timestamp'], df['EXG Channel 7'], label='EXG Channel 7')
plt.plot(df['Timestamp'], df['EXG Channel 8'], label='EXG Channel 8')
plt.plot(df['Timestamp'], df['EXG Channel 9'], label='EXG Channel 9')
plt.plot(df['Timestamp'], df['EXG Channel 10'], label='EXG Channel 10')
plt.plot(df['Timestamp'], df['EXG Channel 11'], label='EXG Channel 11')
plt.plot(df['Timestamp'], df['EXG Channel 12'], label='EXG Channel 12')
plt.plot(df['Timestamp'], df['EXG Channel 13'], label='EXG Channel 13')
plt.plot(df['Timestamp'], df['EXG Channel 14'], label='EXG Channel 14')
plt.plot(df['Timestamp'], df['EXG Channel 15'], label='EXG Channel 15')
# Títulos y etiquetas
plt.title("Señales de Canales EXG a lo largo del Tiempo")
plt.xlabel("Tiempo (Timestamp)")
plt.ylabel("Valor de la señal (µV)")
# Agregar leyenda
plt.legend()
# Mejorar el formato de las fechas en el eje X
plt.xticks(rotation=45)
# Mostrar la gráfica
plt.tight_layout()
plt.show()
# Supongamos que df es el DataFrame procesado anteriormente
if df is not None:
graficar_datos(df)