commit 226086bebe467a43c016a2c47249e2d8845aad87 Author: lumon Date: Fri Nov 29 03:19:34 2024 +0100 First approach, lectura de texto y gráfica diff --git a/maker.py b/maker.py new file mode 100644 index 0000000..98d689c --- /dev/null +++ b/maker.py @@ -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) \ No newline at end of file