Esta función toma un archivo que representa asociaciones entre dos grupos disjuntos de nodos. Finalmente, representa en un histograma la distribución del número de asociaciones de un grupo de nodos con nodos de la otra clase.
Datos de entrada:
1. archivo: Archivo con asociaciones entre nodos organizado en dos columnas, una para cada grupo de nodos
2. var1: Nombre de una columna
3. var2: Nombre de la otra columna
4. nombre_var1: Nombre de los nodos representados en la columna 1
5 nombre_var2: Nombre de los nodos representados en la columna 2
6. ax: Variable empleada para la representación organizada en un subplot
"""
conteo=archivo.groupby(var1)[var2].count().reset_index()#cuento el número de asociaciones del grupo var1 con el grupo var2
Esta función genera una matriz bidimensional que contiene los Shortest Path
Lenghts para el grupo de nodos distinto a enfermedades en una red bipartita
que contiene dos grupos diferenets de nodos, siendo uno enfermedades. El otro
grupo varía en función de la red.
Datos de entrada:
1. archivo: Archivo con los datos sobre los enlaces entre los nodos de la red
2. graf: Red bipartita
3. nombre_var: Identificador del grupo de nodos distinto a enfermedades en el archivo
"""
var=list(set(archivo[str(nombre_var)]))#lista de nodos del grupo disjunto a enfermedades (columna con el identificador añadido en los datos de entrada)
matriz_spl=np.zeros((len(var),len(var)))#Inicializo una matriz de ceros para almacenar los SPL
#Calculo los SPL entre todas las parejas de los nodos seleccionados
foriinrange(len(var)):#nodos_i
forjinrange(i+1,len(var)):#nodo_i+1
var_i=var[i]#guardo el nodo_i en la fila i de la matriz
var_j=var[j]#guardo el nodo_i+1 en la columna j de la matriz
try:#me aseguro de que exista un camino entre ambos nodos
spl=nx.shortest_path_length(graf,source=var_i,target=var_j)#calculo su spl
matriz_spl[i,j]=spl#añado el valor a la matriz en su posición correspondiente
matriz_spl[j,i]=spl#añado el valor a la matriz en su posición correspondiente
exceptnx.NetworkXNoPath:#si no hay camino, continúo
matriz_spl[i,j]=all_shortest_paths[enfermedad_i].get(enfermedad_j,0)#añado a la matriz el spl entre la enfermedad_i y la enfermedad_j según el diccionario con el total de spls
ax.set_title('Distribución de grados de '+r'$\mathbf{'+"enfermedades"+'}$'+' en\n'+r'$\mathbf{'+"red"+'}$'+" "+r'$\mathbf{'+"bipartita"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=12)
# Represento la distribución de grados del grupo disjunto de nodos distinto a enfermedades
ax1.set_title('Distribución de grados de '+r'$\mathbf{'+nombre_var+'}$'+' en\n'+r'$\mathbf{'+" red"+'}$'+" "+r'$\mathbf{'+"bipartita"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=12)
ax.set_title('Distribución de grados de '+r'$\mathbf{'+"enfermedades"+'}$'+' en\n'+r'$\mathbf{'+" red "+'}$'+" "+r'$\mathbf{'+"proyectada"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=12)
ax.set_title('Distribución de Average SPLs de '+r'$\mathbf{'+nombre_var+'}$'+' en\n'+r'$\mathbf{'+" red "+'}$'+" "+r'$\mathbf{'+"bipartita"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=12)
else:
ax.set_title('Distribución de Average SPLs de '+r'$\mathbf{'+"enfermedades"+'}$'+' en\n'+r'$\mathbf{'+" red "+'}$'+" "+r'$\mathbf{'+"proyectada"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=12)
#Creo DataFrames para la centralidad de intermediación de ambos grupos de nodos
df_bc_enf=pd.DataFrame({'Nodo':list(bc_enf.keys()),'Centralidad de intermediación':list(bc_enf.values())})
df_bc_var=pd.DataFrame({'Nodo':list(bc_var.keys()),'Centralidad de intermediación':list(bc_var.values())})
#Represento la centralidad de intermediación de las enfermedades
ax.hist(df_bc_enf['Centralidad de intermediación'],bins=20,color='#79C4FF',edgecolor='black')
ax.set_xlabel('Centralidad de intermediación',style='italic',fontsize=10)
ax.set_ylabel('Nº nodos',fontsize=10)
ax.set_title('Distribución de centralidad de intermediación de '+r'$\mathbf{'+"enfermedades"+'}$'+' en\n'+r'$\mathbf{'+"red"+'}$'+" "+r'$\mathbf{'+"bipartita"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=10)
#Represento la centralidad de intermediación del grupo disjunto de nodos distinto a enfermedades
ax1.hist(df_bc_var['Centralidad de intermediación'],bins=20,color='#79C4FF',edgecolor='black')
ax1.set_xlabel('Centralidad de intermediación',style='italic',fontsize=10)
ax1.set_ylabel('Nº nodos',fontsize=10)
ax1.set_title('Distribución de centralidad de intermediación de '+r'$\mathbf{'+nombre_var+'}$'+' en\n'+r'$\mathbf{'+" red"+'}$'+" "+r'$\mathbf{'+"bipartita"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=10)
#Creo un DataFrame para la centralidad de intermediación de las enfermedades
df_bc=pd.DataFrame({'Nodo':list(bc.keys()),'Centralidad de intermediación':list(bc.values())})
#Represento la centralidad de intermediación de las enfermedades
ax.hist(df_bc['Centralidad de intermediación'],bins=20,color='#79C4FF',edgecolor='black')
ax.set_xlabel('Centralidad de intermediación',style='italic',fontsize=10)
ax.set_ylabel('Nº nodos',fontsize=10)
ax.set_title('Distribución de centralidad de intermediación de '+r'$\mathbf{'+"enfermedades"+'}$'+' en\n'+r'$\mathbf{'+" red "+'}$'+" "+r'$\mathbf{'+"proyectada"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=10)
#Creo DataFrames para la centralidad de cercanía de ambos grupos de nodos
df_cc_enf=pd.DataFrame({'Nodo':list(cc_enf.keys()),'Centralidad de cercanía':list(cc_enf.values())})
df_cc_var=pd.DataFrame({'Nodo':list(cc_var.keys()),'Centralidad de cercanía':list(cc_var.values())})
#Represento la centralidad de intermediación de las enfermedades
ax.hist(df_cc_enf['Centralidad de cercanía'],bins=20,color='#79C4FF',edgecolor='black')
ax.set_xlabel('Centralidad de cercanía',style='italic',fontsize=10)
ax.set_ylabel('Nº nodos',fontsize=10)
ax.set_title('Distribución de centralidad de cercanía de '+r'$\mathbf{'+"enfermedades"+'}$'+' en\n'+r'$\mathbf{'+"red"+'}$'+" "+r'$\mathbf{'+"bipartita"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=10)
#Represento la centralidad de cercanía del grupo disjunto de nodos distinto a enfermedades
ax1.hist(df_cc_var['Centralidad de cercanía'],bins=20,color='#79C4FF',edgecolor='black')
ax1.set_xlabel('Centralidad de cercanía',style='italic',fontsize=10)
ax1.set_ylabel('Nº nodos',fontsize=10)
ax1.set_title('Distribución de centralidad de cercanía de '+r'$\mathbf{'+nombre_var+'}$'+' en\n'+r'$\mathbf{'+" red"+'}$'+" "+r'$\mathbf{'+"bipartita"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=10)
#Creo un DataFrame para la centralidad de cercanía de las enfermedades
df_cc=pd.DataFrame({'Nodo':list(cc.keys()),'Centralidad de cercanía':list(cc.values())})
#Represento la centralidad de cercanía de alas enfermedades
ax.hist(df_cc['Centralidad de cercanía'],bins=20,color='#79C4FF',edgecolor='black')
ax.set_xlabel('Centralidad de cercanía',style='italic',fontsize=10)
ax.set_ylabel('Nº nodos',fontsize=10)
ax.set_title('Distribución de centralidad de cercanía de '+r'$\mathbf{'+"enfermedades"+'}$'+' en\n'+r'$\mathbf{'+" red "+'}$'+" "+r'$\mathbf{'+"proyectada"+'}$'+" "+r'$\mathbf{'+nombre_graf+'}$',fontsize=10)