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)