Trouver les forums les plus populaires jour après jour : II
Excellent travail sur l’exercice précédent : vous avez écrit du code qui crée la liste de graphes en série temporelle. Vous allez maintenant terminer cet exercice : vous allez déterminer combien de forums ont obtenu le score de forum le plus populaire chaque jour !
L’une des choses que vous ferez ici est une « compréhension de dictionnaire » pour filtrer un dictionnaire. C’est très similaire à une compréhension de liste pour filtrer une liste, sauf que la syntaxe ressemble à : {key: val for key, val in dict.items() if ...}. Gardez cela en tête !
Cet exercice fait partie du cours
Analyse de réseaux intermédiaire en Python
Instructions
- Obtenez la centralité en degré avec
nx.bipartite.degree_centrality(), en utilisantG_subetforum_nodescomme arguments. - Filtrez le dictionnaire de sorte qu’il ne contienne que les centralités en degré des forums. La paire
key: valdans l’expression de sortie doit êtren, dc. Itérez surdc.items()et vérifiez sinest dansforum_nodes. - Identifiez le ou les forums les plus populaires : ils doivent avoir la centralité en degré la plus élevée (
max(forum_dcs.values())) et leur valeur de DC ne doit pas être nulle. - Ajoutez les valeurs
dcles plus élevées àhighest_dcs. - Créez les graphiques !
- Utilisez une compréhension de liste pour le premier graphique, en itérant sur
most_popular_forums(une liste de listes) avecforumscomme variable d’itération. L’expression de sortie doit être le nombre de forums les plus populaires, calculé aveclen(). - Pour le second graphique, utilisez
highest_dcsetplt.plot()pour visualiser le meilleur score de centralité en degré.
- Utilisez une compréhension de liste pour le premier graphique, en itérant sur
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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()