Kom igångKom igång gratis

Hitta de mest populära forumen dag för dag: II

Bra jobbat med föregående övning – du skrev kod som skapade listan med tidsseriegraferna. Nu ska du slutföra den övningen, det vill säga ta reda på hur många forum som hade den högsta popularitetspoängen per dag!

En av de saker du kommer att göra här är en "ordlistetolkning" (dictionary comprehension) för att filtrera en ordlista. Det liknar en listtolkning för att filtrera en lista, men syntaxen ser ut så här: {key: val for key, val in dict.items() if ...}. Ha det i åtanke!

Den här övningen är en del av kursen

Nätverksanalys i Python – fortsättningskurs

Visa kurs

Övningsinstruktioner

  • Hämta gradsentraliteten med hjälp av nx.bipartite.degree_centrality(), med G_sub och forum_nodes som argument.
  • Filtrera ordlistan så att den bara innehåller gradsentraliteter för forum. Paret key: val i utdatauttrycket ska vara n, dc. Iterera över dc.items() och kontrollera om n finns i forum_nodes.
  • Identifiera det eller de mest populära forumen – de ska ha den högsta gradsentraliteten (max(forum_dcs.values())) och DC-värdet ska inte vara noll.
  • Lägg till de högsta dc-värdena i highest_dcs.
  • Skapa diagrammen!
    • Använd en listtolkning för det första diagrammet, där du itererar över most_popular_forums (som är en lista av listor) med forums som iteratorvariabel. Utdatauttrycket ska vara antalet mest populära forum, beräknat med len().
    • För det andra diagrammet, använd highest_dcs och plt.plot() för att visualisera den högsta gradsentralitetspoängen.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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()
Redigera och kör kod