You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

322 lines
16 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Creacion de un archivo de base de datos para referenciar los los paths de los archivos con las caracteristicas\n",
"-----------------------------\n",
"La idea de este programa es crear una tabla y crear un archivo con esta tabla para poder un mejor acceso a los datos y no tener que estar buscando manualmente los paths a los archivos uno por uno."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"\n",
"### Defino el path de mi programa a la carpeta general de base de datos para luego poder generar todo lo otro\n",
"Path_A_Carpeta_Con_Todo = \"ColeccionDatos/datasets_scidata_vsmdb/\" ### Tener en cuenta que este path debe terminar con \"/\" para que el generador de path funcione\n",
"NombreDeLaTabla = \"overview_and_rating.xlsx\"\n",
"Path_A_La_Tabla_De_Exel = Path_A_Carpeta_Con_Todo + NombreDeLaTabla\n",
"\n",
"### Defino la lista con las distitas hojas de exel\n",
"Cantidad_De_Personas_Estudio = 11\n",
"Lista_De_Hojas_Expel = list()\n",
"\n",
"for i in range(Cantidad_De_Personas_Estudio):\n",
" NombreDeHoja = 'Person ' + str(i+1)\n",
" Lista_De_Hojas_Expel.append(pd.read_excel(Path_A_La_Tabla_De_Exel, sheet_name= NombreDeHoja))\n",
"\n",
"\n",
"\n",
"for i in range(len(Lista_De_Hojas_Expel)):\n",
" df = Lista_De_Hojas_Expel[i]\n",
" columnas_actuales = df.shape[1]\n",
"\n",
" # Agregamos columnas vacías hasta llegar a 16\n",
" if columnas_actuales < 16:\n",
" for _ in range(16 - columnas_actuales):\n",
" df[df.shape[1]] = np.nan # agrega una nueva columna al final, sin nombre específico\n",
"\n",
" Lista_De_Hojas_Expel[i] = df\n",
"\n",
"Explloracion = Lista_De_Hojas_Expel[4]\n",
"\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"#### Me genero la tabla con pandas y la funcion para llenar la tabla\n",
"Columnas = ['Paciente', 'Tiempo','Posicion_medida_primaria','Posicion_medida_secundaria','Pos_sec_no_traducida','Escenario_principal','Escenario_secundario','Escenario_terciario','Path_datos','Path_picos']\n",
"TablaDirecciones = pd.DataFrame(columns=Columnas)\n",
"\n",
"def IngresarDatoALaTabla(NombreDeLaTabla, Paciente_numero, Tiempo_str, Lista_posiciones, Lista_escenarios, Lista_path):\n",
"\n",
" '''\n",
" -- La lista de posiciones es una lista con dos componentes y cada uno de estos componentes es un string que indica la posicion en la que esta el paciente.\n",
" Para mayor presicion, cada una de las dos componentes es el nombre de la carpeta que se tiene que utilizar para generar el path al archivo. \n",
" Una cosa con la que hay que tener cuidado es que, si bien las palabras de estas dos entradas deben ser iguales a las entradas de la tabla, no escriben\n",
" exactamente igual. Hay que tener cuidado con esto.\n",
" -- La lista de escenarios es una lista con cada uno de las celdas que estan en la tabla de excel para cada uno de los pacientes\n",
" '''\n",
"\n",
" ### Genero el path a los archivos\n",
" String_auxiliar = \"\"\n",
" for i in range(len(Lista_path)):\n",
" String_auxiliar = String_auxiliar + Lista_path[i]\n",
" \n",
" ### Genero el nombre del primer archivo\n",
" Nombre_1 = \"DATASET_\" + Tiempo_str + \"_Person \" + str(Paciente_numero) + \".mat\"\n",
" Path_archivo_1 = String_auxiliar + Nombre_1\n",
"\n",
" ### Genero el nombre del segundo archivo\n",
" Nombre_2 = \"Peak_\" + Tiempo_str + \".csv\"\n",
" Path_archivo_2 = String_auxiliar + Nombre_2\n",
"\n",
" ### Genero la entrada a la tabla dependiendo de la cantidad de escenarios que hay en la tabla\n",
" Largo_lista_escemarios = len(Lista_escenarios)\n",
" if Largo_lista_escemarios == 0:\n",
" NombreDeLaTabla.loc[len(NombreDeLaTabla)] = {'Paciente': Paciente_numero,\n",
" 'Tiempo':Tiempo_str,\n",
" 'Posicion_medida_primaria':Lista_posiciones[0],\n",
" 'Posicion_medida_secundaria':Lista_posiciones[1],\n",
" 'Pos_sec_no_traducida':Lista_posiciones[2],\n",
" 'Path_datos':Path_archivo_1,\n",
" 'Path_picos':Path_archivo_2}\n",
" if Largo_lista_escemarios == 1:\n",
" NombreDeLaTabla.loc[len(NombreDeLaTabla)] = {'Paciente': Paciente_numero,\n",
" 'Tiempo':Tiempo_str,\n",
" 'Posicion_medida_primaria':Lista_posiciones[0],\n",
" 'Posicion_medida_secundaria':Lista_posiciones[1],\n",
" 'Pos_sec_no_traducida':Lista_posiciones[2],\n",
" 'Escenario_principal':Lista_escenarios[0],\n",
" 'Path_datos':Path_archivo_1,\n",
" 'Path_picos':Path_archivo_2}\n",
" if Largo_lista_escemarios == 2:\n",
" NombreDeLaTabla.loc[len(NombreDeLaTabla)] = {'Paciente': Paciente_numero,\n",
" 'Tiempo':Tiempo_str,\n",
" 'Posicion_medida_primaria':Lista_posiciones[0],\n",
" 'Posicion_medida_secundaria':Lista_posiciones[1],\n",
" 'Pos_sec_no_traducida':Lista_posiciones[2],\n",
" 'Escenario_principal':Lista_escenarios[0],\n",
" 'Escenario_secundario':Lista_escenarios[1],\n",
" 'Path_datos':Path_archivo_1,\n",
" 'Path_picos':Path_archivo_2}\n",
" if Largo_lista_escemarios == 3:\n",
" NombreDeLaTabla.loc[len(NombreDeLaTabla)] = {'Paciente': Paciente_numero,\n",
" 'Tiempo':Tiempo_str,\n",
" 'Posicion_medida_primaria':Lista_posiciones[0],\n",
" 'Posicion_medida_secundaria':Lista_posiciones[1],\n",
" 'Pos_sec_no_traducida':Lista_posiciones[2],\n",
" 'Escenario_principal':Lista_escenarios[0],\n",
" 'Escenario_secundario':Lista_escenarios[1],\n",
" 'Escenario_terciario':Lista_escenarios[2],\n",
" 'Path_datos':Path_archivo_1,\n",
" 'Path_picos':Path_archivo_2}\n",
"\n",
" return NombreDeLaTabla \n",
"\n",
"### Me genero un diccionario para traducir la segunda fila de posicion de medicion a carpeta del path\n",
"Traductor_de_nombres = {\"Radar 2L PCG 4L\": \"radar_2L_PCG_4L\",\n",
" \"Radar 4L PCG 2L\": \"radar_4L_PCG_2L\",\n",
" \"PCG carotid L radar carotid R\": \"PCG_carotid_L_radar_carotid_R\",\n",
" \"PCG carotid L radar 2L\": \"PCG_carotid_L_radar_2L\",\n",
" \"PCG 4L radar back\": \"PCG_4L_radar_back\",\n",
" \"Radar Xiphoid PCG 4L\": \"radar_xiphoid_PCG_4L\",\n",
" \"Radar 2L PCG Xiphoid\": \"radar_2L_PCG_xiphoid\",\n",
" \"Radar 2R PCG 2L\": \"radar_2R_PCG_2L\",\n",
" \"Radar Xiphoid PCG 2L\": \"radar_xiphoid_PCG_2L\",\n",
" \"Radar carotid L PCG carotid R\": \"radar_carotid_L_PCG_carotid_R\",\n",
" \"Radar 4L PCG 4R\": \"radar_4L_PCG_4R\",\n",
" \"PCG 4L Radar Xiphoid\": \"PCG_4L_radar_xiphoid\",\n",
" \"PCG 5L Radar 4L\": \"PCG_5L_radar_4L\",\n",
" \"PCG 4L Radar 4LL\": \"PCG_4L_radar_4LL\",\n",
" \"PCG 2L Radar 4L\": \"PCG_2L_radar_4L\",\n",
" \"PCG carotid R Radar carotid L\": \"PCG_carotid_R_radar_carotid_L\",\n",
" \"PCG 5L Radar Xiphoid\": \"PCG_5L_radar_xiphoid\",\n",
" \"PCG 5L Radar back\":\"PCG_5L_radar_back\",\n",
" \"PCG carotid L Radar carotid R\": \"PCG_carotid_L_radar_carotid_R\",\n",
" \"PCG 5L Radar carotid R\": \"PCG_5L_radar_carotid_R\",\n",
" \"PCG 2L Radar 5L\": \"PCG_2L_radar_5L\",\n",
" \"PCG 5L Radar 2L\": \"PCG_5L_radar_2L\",\n",
" \"PCG 5L Radar 5L\": \"PCG_5L_radar_5L\",\n",
" \"PCG 2L Radar back\": \"PCG_2L_radar_back\",\n",
" \"PCG 4L Radar back\": \"PCG_4L_radar_back\",\n",
" \"PCG 2R Radar 2L\": \"PCG_2R_radar_2L\",\n",
" \"PCG 2L Radar 2R\": \"PCG_2L_radar_2R\",\n",
" \"PCG 2L Radar 2L\": \"PCG_2L_radar_2L\",\n",
" \"PCG 4L Radar 2L\": \"PCG_4L_radar_2L\",\n",
" \"PCG 2LL Radar 2L\": \"PCG_2LL_radar_2L\",\n",
" \"PCG 2LL Radar back\": \"PCG_2LL_radar_back\",\n",
" \"PCG 2L Radar Xiphoid\": \"PCG_2L_radar_xiphoid\",\n",
" \"Radar 2L PCG 2R\": \"radar_2L_PCG_2R\",\n",
" \"PCG 2R Radar 4L\": \"PCG_2R_radar_4L\"}\n",
"\n",
"def Generador_lista_path(Numero_paciente,Lista_posiciones,Lista_Escenarios,Path_a_raiz):\n",
"\n",
" ## Genero la lista de carpetas para llegar al archivo\n",
" Lista_de_carpetas = list()\n",
" Lista_de_carpetas.append(Path_a_raiz)\n",
" Lista_de_carpetas.append(\"datasets/\")\n",
" palabra = \"measurement_data_person\" + str(Numero_paciente) + \"/\"\n",
" Lista_de_carpetas.append(palabra)\n",
" palabra = Lista_posiciones[0] + \"/\"\n",
" Lista_de_carpetas.append(palabra)\n",
"\n",
" # Atajo los dos casos especiales, para el paciente 1 y para el paciente 7\n",
" Flag_no_agrego_path = False\n",
" if Numero_paciente == 1 and Lista_posiciones[0] == \"PCG_front_radar_back\":\n",
" Flag_no_agrego_path = True\n",
" if Numero_paciente == 7 and Lista_posiciones[0] == \"PCG_back_radar_back\":\n",
" Flag_no_agrego_path = True\n",
" if Flag_no_agrego_path == False:\n",
" palabra = Lista_posiciones[1] + \"/\"\n",
" Lista_de_carpetas.append(palabra)\n",
"\n",
" # Continuo pero ahora con los escenarios\n",
" for i in range(len(Lista_Escenarios)):\n",
" if Lista_Escenarios[i] == \"angle_variation \":\n",
" palabra = \"angle_variation\" + \"/\"\n",
" else:\n",
" palabra = Lista_Escenarios[i] + \"/\"\n",
" Lista_de_carpetas.append(palabra)\n",
"\n",
" return Lista_de_carpetas\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"### Empiezo a generarme la tabla por el paciente 1 para probar\n",
"TablaDirecciones = pd.DataFrame(columns=Columnas)\n",
"\n",
"for j in range(len(Lista_De_Hojas_Expel)):\n",
"# tabla_auxiliar = Lista_De_Hojas_Expel[j]\n",
" for i in range(len(Lista_De_Hojas_Expel[j])):\n",
"\n",
" fila = Lista_De_Hojas_Expel[j].iloc[i,:]\n",
"\n",
" \n",
" ## Genero el numero de paciente y el tiempo de muestra\n",
" Numero_paciente = j+1\n",
" Tiempo_de_muestra = fila[\"Time\"]\n",
"\n",
" ## Genero la lista de posiciones de medicion\n",
" Lista_posiciones = list()\n",
" Lista_posiciones.append(fila[\"Measurement Position\"])\n",
" Lista_posiciones.append(Traductor_de_nombres.get(fila[\"Unnamed: 12\"]))\n",
" Lista_posiciones.append(fila[\"Unnamed: 12\"])\n",
"\n",
" ## Genero la lista de escenarios posibles \n",
" Lista_Escenarios = list()\n",
" Indice_de_scenareo = 13\n",
" for k in range(3):\n",
" if pd.isna(fila.iloc[Indice_de_scenareo+k]):\n",
" break\n",
" Lista_Escenarios.append(fila.iloc[Indice_de_scenareo+k])\n",
"\n",
"\n",
" Lista_de_carpetas = Generador_lista_path(Numero_paciente,Lista_posiciones,Lista_Escenarios,Path_A_Carpeta_Con_Todo)\n",
"\n",
" IngresarDatoALaTabla(TablaDirecciones, Numero_paciente, Tiempo_de_muestra, Lista_posiciones, Lista_Escenarios, Lista_de_carpetas)\n",
" \n",
"\n",
"TablaDirecciones.to_csv('Tabla_Direccionamiento_Base_Datos.csv', index=False)\n",
" \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Seccion de pruebas\n",
"-------------------------------"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar Xiphoid', 'PCG 5L Radar back', 'PCG 5L Radar back', 'PCG carotid L Radar carotid R', 'PCG carotid L Radar carotid R', 'PCG 5L Radar carotid R', 'PCG 5L Radar carotid R']\n",
"La cantidad de no encontrados es 0\n"
]
},
{
"data": {
"text/plain": [
"nan"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tabla_auxiliar = Lista_De_Hojas_Expel[0]\n",
"fila = tabla_auxiliar.iloc[3,:]\n",
"fila\n",
"\n",
"\n",
"Explloracion = Lista_De_Hojas_Expel[4]\n",
"\n",
"frases = Explloracion.iloc[:,12].dropna().tolist()\n",
"print(frases)\n",
"\n",
"lista_traducida = [Traductor_de_nombres.get(palabra, 'no encontrada') for palabra in frases]\n",
"\n",
"acumulador = 0\n",
"for i in range(len(lista_traducida)):\n",
" if lista_traducida[i] == 'no encontrada':\n",
" acumulador = acumulador + 1\n",
" print(i)\n",
"\n",
"print(\"La cantidad de no encontrados es \", acumulador)\n",
"\n",
"fila.iloc[13] == np.nan"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "PrimerKernel",
"language": "python",
"name": "primerkernel"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}