Repérer les forums les plus populaires jour après jour : II
Excellent travail à l'exercice précédent : vous avez écrit du code qui créait la liste de graphiques en série chronologique. Maintenant, vous allez terminer cet exercice — c'est‑à‑dire déterminer combien de forums ont obtenu le meilleur score de popularité pour chaque jour!
L'une des choses que vous ferez ici est une « compréhension de dictionnaire » pour filtrer un dictionnaire. C'est très semblable à 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!
Cette activité fait partie du cours
Analyse de réseaux intermédiaire en Python
Instructions de l’exercice
- Obtenez la centralité de degré à l'aide de
nx.bipartite.degree_centrality(), avecG_subetforum_nodescomme arguments. - Filtrez le dictionnaire pour ne conserver que les centralités de degré des forums. La paire
key: valdans l'expression de sortie doit êtren, dc. Itérez surdc.items()et vérifiez sinest dansforum_nodes. - Repérez le ou les forums les plus populaires — ceux ayant la plus haute centralité de degré (
max(forum_dcs.values())) et dont la valeur de DC n'est pas zéro. - Ajoutez les valeurs maximales de
dcàhighest_dcs. - Créez les graphiques!
- Utilisez une compréhension de liste pour le premier graphique, dans laquelle vous itérez sur
most_popular_forums(qui est une liste de listes) en utilisantforumscomme variable d'itération. L'expression de sortie doit être le nombre de forums les plus populaires, calculé aveclen(). - Pour le deuxième graphique, utilisez
highest_dcsetplt.plot()pour visualiser le meilleur score de centralité de degré.
- Utilisez une compréhension de liste pour le premier graphique, dans laquelle vous itérez sur
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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()