Commit 8433a1a1 authored by Maria Marin's avatar Maria Marin

Delete funciones_reposicionamiento.py

parent 919b0294
#! /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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment