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
Instrucciones del ejercicio
- Averigua los nombres de las personas que fueron miembros del mayor número de clubes.
- Para ello, primero calcula
diagusando el método.diagonal()sobreuser_matrix. - Luego, usando
np.where(), selecciona aquellos índices dondediages igual adiag.max(). Esto devuelve una tupla: asegúrate de acceder a los índices relevantes indexando la tupla con[0]. - Itera sobre
indicese imprime cada índiceidepeople_nodesusando la funciónprint()proporcionada.
- Para ello, primero calcula
- 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 dondeusers_coo.dataes igual ausers_coo.data.max(). - Itera sobre
indices2e imprime, para cada índiceidx, los elementos correspondientes deusers_coo.rowyusers_coo.coldepeople_node.
- Usando
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[____.____[____]]))