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
Oefeninstructies
- Haal de graadcentraliteit op met
nx.bipartite.degree_centrality(), metG_subenforum_nodesals argumenten. - Filter de dictionary zodat er alleen graadcentraliteiten van forums overblijven. Het
key: val-paar in de outputexpressie moetn, dczijn. Itereer overdc.items()en controleer ofninforum_nodeszit. - 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 aanhighest_dcs. - Maak de plots!
- Gebruik een list comprehension voor de eerste plot, waarin je over
most_popular_forums(een lijst van lijsten) itereert metforumsals je iteratorvariabele. De outputexpressie moet het aantal populairste forums zijn, berekend metlen(). - Gebruik voor de tweede plot
highest_dcsenplt.plot()om de hoogste graadcentraliteit te visualiseren.
- Gebruik een list comprehension voor de eerste plot, waarin je over
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()