diff --git a/Reposicionamiento /funciones_reposicionamiento.py b/Reposicionamiento /funciones_reposicionamiento.py deleted file mode 100644 index 1f8007d72af81834fd4ca02f9a4f1b7315910902..0000000000000000000000000000000000000000 --- a/Reposicionamiento /funciones_reposicionamiento.py +++ /dev/null @@ -1,225 +0,0 @@ -#! /usr/bin/env python - -""" -# --------------------------------------------------------------------------- -# -# funciones_reposicionamiento.py -# -# Archivo con todas las funciones que he utilizado para identificar fármacos -candidatos de reposicionamiento a un subconjunto de enfermedades neurológicas: -demencia, bipolaridad, epilepsia y esquizofrenia. - -# TFG: Ciencia de redes y reposicionamiento de fármacos: potencial a través -# de la medicina de redes -# -# María Marín Tercero -# ---------------------------------------------------------------------------- -""" - -import pandas as pd -import numpy as np -import seaborn as sns -import matplotlib.pyplot as plt -import networkx as nx -from networkx.algorithms import bipartite -import nxpd -import funciones_reposicionamiento -import re - -# ================================================================================= - - -def farmacos_candidatos(df_combinado, nombre_enf, arch): - """ - Esta función permite obtener un DataFrame con las siguientes columnas: - 1. Enfermedades de estudio: enfermedades para las que buscamos fármacos de - reposicionamiento. - 2. Fármacos candidatos: medicamentos candidatos de reposicionamiento para la - patología situada en su misma fila, pero en la columna 1. - 3. Enfermedades candidatas: patologías asociadas a los fármacos situados en - su misma fila, pero en la columna 2. - - Datos de entrada: - 1. df_combinado: DataFrame con las siguientes columnas: enfermedades, fármacos, - tratamiento, dc, dc_mean, dc_std, dc_zscore, targets en módulo (el DataFrame - que se obtiene como resultado en la función targets_modulo. - 2. nombre_enf: nombre de la enfermedad. - 3. arch: archivo que contiene las relaciones entre fármacos y las patologías que - tratan - """ - #Filtro los datos para generar dos nuevos dataframes, uno con los datos de los fármacos que se empleen como tratamiento de la enfermedad (identificada por su nombre según nombre_enf), y otro con los datos para el resto de fármacos. - farmacos_tratamiento = df_combinado[(df_combinado['Enfermedades'] == nombre_enf) & (df_combinado['Tratamiento'] == 'yes')] - farmacos_no_tratamiento = df_combinado[(df_combinado['Enfermedades'] == nombre_enf) & (df_combinado['Tratamiento'] == 'unknown')] - - #Calculo los valores correspondiente al primer cuartil y al mínimo de la separación de los fármacos empleados como tratamiento al módulo de la enfermedad - primer_cuartil_tratamiento = farmacos_tratamiento['dc'].quantile(0.25) - minimo_tratamiento = farmacos_tratamiento['dc'].min() - - if nombre_enf == "Demencia": #si la enfermedad es Demencia - - #filtro los fármacos tratamiento con una cercanía mayor o igual a la separación mínima de los fármacos tratamiento, que además no presenten ninguna de sus proteínas diana en el módulo de la enfermedad, y con un z-score de la separación al módulo de la enfermedad menor o igual a -0.15 (lo que indica qye son fármacos significativamente próximos al módulo). - farmacos_seleccionados = farmacos_no_tratamiento[(farmacos_no_tratamiento["dc"] >= minimo_tratamiento) & - (farmacos_no_tratamiento["Target en módulo"] == "No") & - (farmacos_no_tratamiento["dc_zscore"] <= -0.15)] - else: #si la enfermedad no es Demencia - #filtro los fármacos tratamiento con una cercanía mayor o igual al primer cuartil de la separación de los fármacos tratamiento, que además no presenten ninguna de sus proteínas diana en el módulo de la enfermedad, y con un z-score de la separación al módulo de la enfermedad menor o igual a -0.15 (lo que indica qye son fármacos significativamente próximos al módulo). - farmacos_seleccionados = farmacos_no_tratamiento[(farmacos_no_tratamiento["dc"] >= primer_cuartil_tratamiento) & - (farmacos_no_tratamiento["Target en módulo"] == "No") & - (farmacos_no_tratamiento["dc_zscore"] <= -0.15)] - - #Ordeno los fármacos de forma ascendente según su z-score y selecciono los 5 primeros - farmacos_seleccionados = farmacos_seleccionados.sort_values(by="dc_zscore").head(5) - - # Filtro el DataFrame arch para obtener solo las filas correspondientes a los fármacos seleccionados - arch_filtrado = arch[arch['dru'].isin(farmacos_seleccionados['Fármacos'])] - - # Creo el DataFrame con los resultados obtenidos - df_candidatos = pd.DataFrame({ - "Enfermedades de estudio": [nombre_enf] * len(arch_filtrado), - "Fármacos candidatos": arch_filtrado['dru'].tolist(), - "Enfermedades candidatas": arch_filtrado['dis'].tolist() - }) - - return df_candidatos - -# ================================================================================= - - -def spl_candidatos(spl_files, id_enfermedades, arch_candidatos): - """ - Esta función genera un DataFrame compuesto por seis columnas: - 1. Enfermedades de estudio: enfermedades para las que buscamos fármacos de - reposicionamiento. - 2. Fármacos candidatos: medicamentos candidatos de reposicionamiento para la - patología situada en su misma fila, pero en la columna 1. - 3. Enfermedades candidatas: patologías asociadas a los fármacos situados en - su misma fila, pero en la columna 2. - 4. SPL proyectada enf-gen: Shortest Path Length en la red proyectada de - enfermedades relacionadas en función de genes patológicos entre las enfermedades - de la columna 1 y 3 situadas en la misma fila. - 5. SPL proyectada enf-dru: Shortest Path Length en la red proyectada de - enfermedades relacionadas en función de fármacos entre las enfermedades - de la columna 1 y 3 situadas en la misma fila. - 6. SPL proyectada enf-sym: Shortest Path Length en la red proyectada de - enfermedades relacionadas en función de síntomas entre las enfermedades - de la columna 1 y 3 situadas en la misma fila. - - Datos de entrada: - 1. spl_files: lista con el nombre de los archivos que contienen el SPL entre - todos los nodos de cada red (values). - 2. id_enfermedades: código identificador de las enfermedades. - 3. arch_candidatos: archivo que relaciona en cada fila la enfermedad neurológica de - estudio, un fármaco candidato de reposicionamiento y una de las enfermedades que tratan - dicho fármaco. - """ - spls_gen = [] #lista en la que añadiré el SPL en la red proyectada de enfermedades - genes - spls_dru = [] #lista en la que añadiré el SPL en la red proyectada de enfermedades - fármacos - spls_sym =[] #lista en la que añadiré el SPL en la red proyectada de enfermedades - síntomas - - spl_enfermedad_gen, spl_enfermedad_dru, spl_enfermedad_sym = spl_files #asocio cada elemento de la lista spl_files a una variable - - df_resultados = arch_candidatos.copy() #copio el DataFrame con la información sobre los fármacos candidatos de reposicionamiento (arch_candidatos) - - for i, enfermedad in enumerate(arch_candidatos["Enfermedades de estudio"]): #para cada enfermedad neurológica de estudio - id_enfermedad = id_enfermedades[enfermedad] #obtengo su id en el diccionario de identificadores de enfermedades - - fila_gen = spl_enfermedad_gen.columns.get_loc(id_enfermedad) #localizo el id en el archivo de fármacos candidatos - columna_gen = arch_candidatos["Enfermedades candidatas"][i] #obtengo la enfermedad tratada por dicho fármaco en su misma fila - - if columna_gen in spl_enfermedad_gen.columns.tolist(): #si dicha enfermedad forma parte d ela red proyectada de enfermedades y genes - spls_gen.append(spl_enfermedad_gen.loc[fila_gen, columna_gen]) #aádo a la lista spl_gen el SPL entre la enfermedad neurológica estudiada y la enfermedad tratada por el fármaco candidato de reposicionamiento. Para ello, localizo el SPL en la fila de la enfermedad estudiada y la columna de la enfermedad tratada por el fármaco. - else: - spls_gen.append("Unknown") #si la enfermedad tratada no está en la red pruyectada, añado "unknown" a la lista spl_gen - - #repito el proceso anterior para la red proyectada de enfermedades - fármacos - fila_dru = spl_enfermedad_dru.columns.get_loc(id_enfermedad) - columna_dru = arch_candidatos["Enfermedades candidatas"][i] - - if columna_dru in spl_enfermedad_dru.columns.tolist(): - spls_dru.append(spl_enfermedad_dru.loc[fila_dru, columna_dru]) - else: - spls_dru.append("Unknown") - - #repito el proceso anterior para la red proyectada de enfermedades - síntomas - fila_sym = spl_enfermedad_sym.columns.get_loc(id_enfermedad) - columna_sym = arch_candidatos["Enfermedades candidatas"][i] - - if columna_sym in spl_enfermedad_sym.columns.tolist(): - spls_sym.append(spl_enfermedad_sym.loc[fila_sym, columna_sym]) - else: - spls_sym.append("Unknown") - - #añado los spls entre las enfermedades en cada red al DataFrame de resultados - df_resultados["SPL proyectada enf - gen"] = spls_gen - df_resultados["SPL proyectada enf - dru"] = spls_dru - df_resultados["SPL proyectada enf - sym"] = spls_sym - - return df_resultados - -# ================================================================================= - -def distribucion_enf_candidatas(arch_candidatos, nombre_enf): - """ - Esta función crea un DataFrame que contiene los fármacos candidatos de - reposcionamiento para una enfermedad neurológica, el total de enfermedades tratadas - por dicho fármaco, y el número de estas enfermedades conectadas a la enfermedad - neurológica en las redes proyectadas de enfermedades - genes, enfermedades - fármacos - y enfermedades síntomas. - - Datos de entrada: - 1. arch_candidatos: DataFrame con las enfermedades neurológicas estudiadas, - sus fármacos candidatos de reposcionamiento, las enfermedades tratadas por cada uno de - los fármacos candidatos, y el SPL entre las enfermedades neurológicas y cada una de las - enfermedades tratadas por los fármacos candidatos en las tres redes proyectadas. - 2. nombre_enf: nombre de la enfermedad neurológica cuyos candidatos de reposicionamiento - se encuentran en la lista anterior. - """ - - # Filtrar las filas que incluyen enfermedades tratadas por fármacos candidatos de reposicionamiento para la enfermedad neurológica nombre_enf - filt_enf = arch_candidatos[arch_candidatos["Enfermedades de estudio"] == nombre_enf] - - #Obtengo la lista de fármacos candidatos para reposicionamiento de nombre_enf - lista_candidatos = set(filt_enf["Fármacos candidatos"]) - - # Filtrar las filas que incluyen enfermedades tratadas por fármacos candidatos de reposicionamiento para la enfermedad neurológica nombre_enf que se conecten a nombre_enf en la red proyectada enf-genes. - filt_gen = filt_enf[filt_enf["SPL proyectada enf - gen"] != "Unknown"] - - # Filtrar las filas que incluyen enfermedades tratadas por fármacos candidatos de reposicionamiento para la enfermedad neurológica nombre_enf que se conecten a nombre_enf en la red proyectada enf-fármacos. - filt_dru = filt_enf[filt_enf["SPL proyectada enf - dru"] != "Unknown"] - - # Filtrar las filas que incluyen enfermedades tratadas por fármacos candidatos de reposicionamiento para la enfermedad neurológica nombre_enf que se conecten a nombre_enf en la red proyectada enf-síntomas. - filt_sym = filt_enf[filt_enf["SPL proyectada enf - sym"] != "Unknown"] - - #listas en la que añadiré el número de enfermedades tratadas por cada fármaco candidato que pueden conectarse a nombre_enf en cada red proyectada. - enf_gen_lista = [] #conexión con nombre_enf en red proyectada enfermedades-genes. - enf_dru_lista = [] #conexión con nombre_enf en red proyectada enfermedades-fármacos. - enf_sym_lista = [] #conexión con nombre_enf en red proyectada enfermedades-síntomas. - - #listas en la que añadiré el número total de enfermedades tratadas por cada fármaco candidato que pueden conectarse a nombre_enf al menos en una de las redes proyectadas - total_enf = [] - - for farmaco in list(lista_candidatos): # para cada fármaco de la lista de candidatos de reposicionamiento para nombre_enf - #cuento el número de enfermedades tratadas por uno de los fármacos candidatos que pueden conectarse a nombre_enf en cada red proyectada - #el número de enfermedades para cada fármaco en cada caso se corresponde con el número de líneas en el que aparece dicho fármaco en los DataFrames filtrados - enf_gen = len(filt_gen[filt_gen["Fármacos candidatos"] == farmaco]) #conexión con nombre_enf en red proyectada enfermedades-genes. - enf_dru = len(filt_dru[filt_dru["Fármacos candidatos"] == farmaco]) #conexión con nombre_enf en red proyectada enfermedades-fármacos. - enf_sym = len(filt_sym[filt_sym["Fármacos candidatos"] == farmaco]) #conexión con nombre_enf en red proyectada enfermedades-síntomas. - enf_total = len(filt_enf[filt_enf["Fármacos candidatos"] == farmaco]) #total de enfermedades asociadas al fármaco - # añado los resultados a las listas correspondientes para cada fármaco - total_enf.append(enf_total) - enf_gen_lista.append(enf_gen) - enf_dru_lista.append(enf_dru) - enf_sym_lista.append(enf_sym) - - # creo el DataFrame de resultados - df_candidatos = pd.DataFrame({ - "Fármacos candidatos " + str(nombre_enf): list(lista_candidatos), - "Total enfermedades tratadas": total_enf, - "Enfermedades en red proyectada enf-genes": enf_gen_lista, - "Enfermedades en red proyectada enf-dru": enf_dru_lista, - "Enfermedades en red proyectada enf-sym": enf_sym_lista, - }) - - return df_candidatos - -# ================================================================================= \ No newline at end of file