import os import numpy as np import pandas as pd import matplotlib.pyplot as plt from preprocesamiento.funciones import buscar_csv ''' Calcula los tamaños de muestra de los archivos de una carpeta ''' # PARÁMETROS ruta_carpeta = 'D:/Dropbox/UNI/TFM/datos/3 - Fecha a timestamp' ruta_grafico = 'Tamaño de muestras - diagrama de barras.pdf' clave_principal = 'PATNO' # leer tablas tablas = [pd.read_csv(ruta_arch, sep=',', float_precision='round_trip') for ruta_arch in buscar_csv(ruta_carpeta)] # obtener solo el número de pacientes únicos de cada archivo nums_pacientes = [len(np.unique(tabla[clave_principal].values)) for tabla in tablas] print(nums_pacientes) # generar diagrama de barras etiquetas = [os.path.splitext(os.path.basename(r))[0] for r in buscar_csv(ruta_carpeta)] print(etiquetas) plt.figure(figsize=(6, 7)) plt.bar(etiquetas, nums_pacientes, color='forestgreen') # marcas horizontales axes = plt.gca() axes.yaxis.grid() # etiquetas eje x
import os import numpy as np import pandas as pd import matplotlib.pyplot as plt from preprocesamiento.funciones import buscar_csv ''' Calcula la media del número de registros del mismo paciente en cada archivo ''' # PARÁMETROS ruta_carpeta = 'D:/Dropbox/UNI/TFM/datos/3 - Fecha a timestamp' ruta_grafico = 'Media pacientes repetidos - diagrama de barras.pdf' clave_principal = 'PATNO' # leer tablas tablas = [ pd.read_csv(ruta_arch, sep=',', float_precision='round_trip') for ruta_arch in buscar_csv(ruta_carpeta) ] # obtener los registros de cada archivo registros = [tabla[clave_principal].values for tabla in tablas] # número de registros de cada archivo nums_registros = [len(registros_arch) for registros_arch in registros] # número de pacientes únicos de cada archivo nums_pacientes = [ len(np.unique(registros_arch)) for registros_arch in registros ] # medias de repeticiones medias_repeticiones = [
# pero si tiene otra más en común, pueden quedar columnas duplicadas if len(cols_comun) == 2: la_otra_comun = cols_comun.drop(clave_principal).values[0] cols_duplicadas = [la_otra_comun + suf for suf in sufijos_dup] # nombres en la tabla de las columnas duplicadas # combinar las dos columnas dando preferencia a la última y guardarlo en une nueva fusionada[la_otra_comun] = fusionada[cols_duplicadas[1]].combine_first(fusionada[cols_duplicadas[0]]) # borrar estas dos sobrantes fusionada.drop(cols_duplicadas, 1, inplace=True) return fusionada # leer archivos rutas_arch = buscar_csv(ruta_carpeta) # si hay tabla principal if usar_tabla_principal: # ponerla al comienzo de la lista rutas_arch.insert(0, rutas_arch.pop(rutas_arch.index(os.path.join(ruta_carpeta, tabla_principal)))) # cargar tablas tablas = [pd.read_csv(ruta_arch, sep=',', float_precision='round_trip') for ruta_arch in rutas_arch] # excluir las variables indicadas for var in excluir_variables: [tabla.drop(var, 1, inplace=True) for tabla in tablas if var in tabla.columns] # combinarlas todas aglomerativamente datos = reduce(lambda t1, t2: combinar_tablas(t1, t2), tablas)
from os.path import join import pandas as pd from preprocesamiento.funciones import buscar_csv, guardar_tabla ''' Filtra filas de varios archivos según los pacientes que aparezcan en una tabla de referencia''' # PARÁMETROS ruta_carpeta = 'D:/Dropbox/UNI/TFM/datos/6 - Dividir entre tipos de pacientes/RBD' ruta_archivo_referencia = join( ruta_carpeta, 'Patient_Status_sin_duplicados_filtrado_por_valores.csv') clave_principal = 'PATNO' # leer tabla de referencia tabla_ref = pd.read_csv(ruta_archivo_referencia, sep=',', float_precision='round_trip') # leer cada tabla y filtrar según los pacientes que aparecen en el archivo de referencia for ruta_arch in buscar_csv(ruta_carpeta): tabla = pd.read_csv(ruta_arch, sep=',', float_precision='round_trip') # guardar solo los pacientes que aparecen en el de referencia tabla = tabla[tabla[clave_principal].isin(tabla_ref[clave_principal])] # guardar tabla guardar_tabla(tabla, ruta_arch, '_filtrado_segun_ref')
ruta_resultados = os.path.join(ruta_carpeta_datos, 'Valores perdidos - resultados') nombre_informe = 'Informe valores perdidos.txt' nombre_mapa_de_calor = 'Mapa de calor' clave_principal = 'PATNO' # crear carpeta para resultados os.mkdir(ruta_resultados) if not os.path.exists(ruta_resultados) else None # crear archivo del informe f = open(os.path.join(ruta_resultados, nombre_informe), mode='w', encoding='UTF-8') # rellenarlo por cada tabla for ruta_archivo in buscar_csv(ruta_carpeta_datos): nombre_archivo = os.path.splitext(os.path.basename(ruta_archivo))[0] # leer tabla tabla = pd.read_csv(ruta_archivo, sep=',', float_precision='round_trip') del tabla[ clave_principal] # quitar clave principal porque no tiene valores perdidos # numero de filas num_filas = len(tabla) # número de valores perdidos por cada columna na_columnas = tabla.isna().sum() # número total de valores perdidos total_na = na_columnas.sum()