Gemeinsame Mitgliedschaft finden: Transposition
Wie du vielleicht beobachtet hast, gehen die Metadaten eines Graphen verloren, wenn du ihn als Sparse-Matrix darstellst. Jetzt lernst du, wie du die Metadaten wieder hinzufügst, um mehr über gemeinsame Mitgliedschaften herauszufinden.
Die user_matrix, die du in der vorherigen Übung berechnet hast, wurde bereits in deinen Arbeitsbereich geladen.
Hier ist die Funktion np.where() hilfreich. Das macht sie: Gegeben ein Array, z. B. a = [1, 5, 9, 5], kannst du die Indizes ermitteln, an denen der Wert 5 ist, mit idxs = np.where(a == 5). Das ergibt ein Array in einem Tupel, (array([1, 3]),). Um auf diese Indizes zuzugreifen, indexierst du in das Tupel mit idxs[0].
Diese Übung ist Teil des Kurses
Fortgeschrittene Netzwerkanalyse in Python
Anleitung zur Übung
- Finde die Namen der Personen, die in den meisten Clubs Mitglied waren.
- Berechne dazu zuerst
diagmit der Methode.diagonal()aufuser_matrix. - Verwende dann
np.where(), um die Indizes auszuwählen, wodiaggleichdiag.max()ist. Das ergibt ein Tupel: Achte darauf, die relevanten Indizes zu erhalten, indem du mit[0]in das Tupel indexierst. - Iteriere über
indicesund gib mit der bereitgestelltenprint()-Funktion für jeden Indexiden entsprechenden Eintrag auspeople_nodesaus.
- Berechne dazu zuerst
- Setze die Diagonale auf Null und wandle in ein „Coordinate-Matrix-Format“ um. Dieser Code ist in der Lösung für dich vorgegeben.
- Finde Paare von Nutzer:innen, die die meisten gemeinsamen Clubmitgliedschaften hatten.
- Verwende
np.where(), um die Indizes zu ermitteln, bei denenusers_coo.datagleichusers_coo.data.max()ist. - Iteriere über
indices2und gib für jeden Indexidxdie entsprechenden Einträge auspeople_nodesanhand vonusers_coo.rowundusers_coo.colaus.
- Verwende
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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[____.____[____]]))