Aan de slagBegin gratis

Vind de populairste forums per dag: II

Goed gedaan met de vorige oefening: je hebt code geschreven die de tijdreeks van graaflijsten opbouwde. Nu ga je die oefening afmaken: je gaat uitzoeken hoeveel forums per dag de hoogste populariteitsscore hadden!

Een van de dingen die je hier doet, is een "dictionary comprehension" om een dictionary te filteren. Dat lijkt erg op een list comprehension om een lijst te filteren, behalve dat de syntaxis er zo uitziet: {key: val for key, val in dict.items() if ...}. Houd dat in gedachten!

Deze oefening maakt deel uit van de cursus

Gemiddelde netwerkanalyse in Python

Bekijk cursus

Oefeninstructies

  • Haal de graadcentraliteit op met nx.bipartite.degree_centrality(), met G_sub en forum_nodes als argumenten.
  • Filter de dictionary zodat er alleen graadcentraliteiten van forums overblijven. Het key: val-paar in de outputexpressie moet n, dc zijn. Itereer over dc.items() en controleer of n in forum_nodes zit.
  • Bepaal de populairste forum(s): die met de hoogste graadcentraliteit (max(forum_dcs.values())) en waarvan de DC-waarde niet nul is.
  • Voeg de hoogste dc-waarden toe aan highest_dcs.
  • Maak de plots!
    • Gebruik een list comprehension voor de eerste plot, waarin je over most_popular_forums (een lijst van lijsten) itereert met forums als je iteratorvariabele. De outputexpressie moet het aantal populairste forums zijn, berekend met len().
    • Gebruik voor de tweede plot highest_dcs en plt.plot() om de hoogste graadcentraliteit te visualiseren.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

# 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 bewerken en uitvoeren