LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Finde die Namen der Personen, die in den meisten Clubs Mitglied waren.
    • Berechne dazu zuerst diag mit der Methode .diagonal() auf user_matrix.
    • Verwende dann np.where(), um die Indizes auszuwählen, wo diag gleich diag.max() ist. Das ergibt ein Tupel: Achte darauf, die relevanten Indizes zu erhalten, indem du mit [0] in das Tupel indexierst.
    • Iteriere über indices und gib mit der bereitgestellten print()-Funktion für jeden Index i den entsprechenden Eintrag aus people_nodes aus.
  • 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 denen users_coo.data gleich users_coo.data.max() ist.
    • Iteriere über indices2 und gib für jeden Index idx die entsprechenden Einträge aus people_nodes anhand von users_coo.row und users_coo.col aus.

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[____.____[____]]))  
Code bearbeiten und ausführen