ComenzarEmpieza gratis

Encontrar membresías compartidas: transposición

Como habrás observado, se pierde la metainformación del grafo cuando pasas a una representación de matriz dispersa. Ahora vas a aprender a imputar de nuevo esa metainformación para poder analizar mejor las membresías compartidas.

La user_matrix que calculaste en el ejercicio anterior ya está precargada en tu espacio de trabajo.

Aquí te será útil la función np.where(). Esto es lo que hace: dada una matriz, por ejemplo, a = [1, 5, 9, 5], si quieres obtener los índices donde el valor es igual a 5, puedes usar idxs = np.where(a == 5). Esto te devuelve un array dentro de una tupla, (array([1, 3]),). Para acceder a esos índices, tienes que indexar la tupla como idxs[0].

Este ejercicio forma parte del curso

Análisis de redes intermedio en Python

Ver curso

Instrucciones del ejercicio

  • Averigua los nombres de las personas que fueron miembros del mayor número de clubes.
    • Para ello, primero calcula diag usando el método .diagonal() sobre user_matrix.
    • Luego, usando np.where(), selecciona aquellos índices donde diag es igual a diag.max(). Esto devuelve una tupla: asegúrate de acceder a los índices relevantes indexando la tupla con [0].
    • Itera sobre indices e imprime cada índice i de people_nodes usando la función print() proporcionada.
  • Pon la diagonal a cero y conviértela a "coordinate matrix format". Este código ya está incluido en la respuesta.
  • Encuentra pares de usuarios que compartieron membresía en el mayor número de clubes.
    • Usando np.where(), accede a los índices donde users_coo.data es igual a users_coo.data.max().
    • Itera sobre indices2 e imprime, para cada índice idx, los elementos correspondientes de users_coo.row y users_coo.col de people_node.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

import numpy as np

# Find out the names of people who were members of the most number of clubs
diag = ____ 
indices = np.where(____ == ____)[0]  
print('Number of clubs: {0}'.format(diag.max()))
print('People with the most number of memberships:')
for i in indices:
    print('- {0}'.format(____))

# Set the diagonal to zero and convert it to a coordinate matrix format
user_matrix.setdiag(0)
users_coo = user_matrix.tocoo()

# Find pairs of users who shared membership in the most number of clubs
indices2 = np.where(____ == ____)[0]
print('People with most number of shared memberships:')
for idx in indices2:
    print('- {0}, {1}'.format(people_nodes[____.____[____]], people_nodes[____.____[____]]))  
Editar y ejecutar código