LoslegenKostenlos loslegen

Finde die beliebtesten Foren Tag für Tag: II

Starke Leistung in der vorherigen Übung – du hast Code geschrieben, der die Zeitreihen-Grafliste erzeugt hat. Jetzt beendest du diese Aufgabe: Du findest heraus, wie viele Foren pro Tag den höchsten Popularitätswert hatten!

Eines der Dinge, die du hier machst, ist ein „Dictionary Comprehension“, um ein Dictionary zu filtern. Das ist sehr ähnlich zu einem List Comprehension für Listen, nur sieht die Syntax so aus: {key: val for key, val in dict.items() if ...}. Behalte das im Hinterkopf!

Diese Übung ist Teil des Kurses

Fortgeschrittene Netzwerkanalyse in Python

Kurs anzeigen

Anleitung zur Übung

  • Ermittle die Degree Centrality mit nx.bipartite.degree_centrality(), und verwende G_sub und forum_nodes als Argumente.
  • Filtere das Dictionary so, dass nur Degree-Centrality-Werte für Foren enthalten sind. Das key: val-Paar im Output-Ausdruck sollte n, dc sein. Iteriere über dc.items() und prüfe, ob n in forum_nodes ist.
  • Bestimme die beliebtesten Foren – sie sollten die höchste Degree Centrality haben (max(forum_dcs.values())) und ihr DC-Wert darf nicht null sein.
  • Hänge die höchsten dc-Werte an highest_dcs an.
  • Erstelle die Plots!
    • Verwende für den ersten Plot ein List Comprehension, in dem du über most_popular_forums (eine Liste von Listen) mit forums als Iteratorvariable iterierst. Der Ausgabewert sollte die Anzahl der beliebtesten Foren sein, berechnet mit len().
    • Für den zweiten Plot verwende highest_dcs und plt.plot(), um den höchsten Degree-Centrality-Wert zu visualisieren.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# Import necessary modules
from datetime import timedelta
import networkx as nx
import matplotlib.pyplot as plt

most_popular_forums = []
highest_dcs = []
curr_day = dayone 
td = timedelta(days=1)  

while curr_day < lastday:  
    if curr_day.day == 1:  
        print(curr_day)  
    G_sub = nx.Graph()
    G_sub.add_nodes_from(G.nodes(data=True))   
    G_sub.add_edges_from([(u, v, d) for u, v, d in G.edges(data=True) if d['date'] >= curr_day and d['date'] < curr_day + td])
    
    # Get the degree centrality 
    dc = ____
    # Filter the dictionary such that there's only forum degree centralities
    forum_dcs = {____:____ for ____, ____ in ____ if n in ____}
    # Identify the most popular forum(s) 
    most_popular_forum = [n for n, dc in ____ if dc == ____(____) and dc != 0] 
    most_popular_forums.append(most_popular_forum) 
    # Store the highest dc values in highest_dcs
    highest_dcs.append(max(____))
    
    curr_day += td  
    
plt.figure(1) 
plt.plot([len(____) for ____ in ____], color='blue', label='Forums')
plt.ylabel('Number of Most Popular Forums')
plt.show()

plt.figure(2)
plt.plot(____, color='orange', label='DC Score')
plt.ylabel('Top Degree Centrality Score')
plt.show()
Code bearbeiten und ausführen