Temukan forum terpopuler per hari: II
Kerja bagus pada latihan sebelumnya — Anda telah menulis kode yang membuat daftar graf deret waktu. Sekarang, Anda akan menuntaskan latihan tersebut — yaitu, Anda akan mencari tahu berapa banyak forum yang memiliki skor forum terpopuler pada basis harian!
Salah satu hal yang akan Anda lakukan di sini adalah "dictionary comprehension" untuk memfilter sebuah kamus. Ini sangat mirip dengan list comprehension untuk memfilter daftar, hanya saja sintaksnya seperti: {key: val for key, val in dict.items() if ...}. Ingat hal itu!
Latihan ini merupakan bagian dari kursus
Analisis Jaringan Menengah di Python
Instruksi latihan
- Dapatkan degree centrality menggunakan
nx.bipartite.degree_centrality(), denganG_subdanforum_nodessebagai argumen. - Filter kamus sehingga hanya berisi degree centrality forum. Pasangan
key: valpada ekspresi keluaran harusn, dc. Lakukan iterasi atasdc.items()dan periksa apakahnada diforum_nodes. - Identifikasi forum terpopuler — yaitu yang memiliki degree centrality tertinggi (
max(forum_dcs.values())) dan nilai DC-nya tidak nol. - Tambahkan nilai
dctertinggi kehighest_dcs. - Buat plot!
- Gunakan list comprehension untuk plot pertama, di mana Anda melakukan iterasi atas
most_popular_forums(yang merupakan daftar dari daftar) dengan menggunakanforumssebagai variabel iterator. Ekspresi keluarannya harus berupa jumlah forum terpopuler, dihitung menggunakanlen(). - Untuk plot kedua, gunakan
highest_dcsdanplt.plot()untuk memvisualisasikan skor degree centrality teratas.
- Gunakan list comprehension untuk plot pertama, di mana Anda melakukan iterasi atas
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
# 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()