CommencerCommencer gratuitement

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

Afficher le cours

Instructions

  • Obtenez la centralité en degré avec nx.bipartite.degree_centrality(), en utilisant G_sub et forum_nodes comme arguments.
  • Filtrez le dictionnaire de sorte qu’il ne contienne que les centralités en degré des forums. La paire key: val dans l’expression de sortie doit être n, dc. Itérez sur dc.items() et vérifiez si n est dans forum_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 dc les 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) avec forums comme variable d’itération. L’expression de sortie doit être le nombre de forums les plus populaires, calculé avec len().
    • Pour le second graphique, utilisez highest_dcs et plt.plot() pour visualiser le meilleur score de centralité en degré.

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()
Modifier et exécuter le code