ptt的初步網路分析(network analysis)

近期天下的專題輿論戰爭,點出在八卦或政黑有些操作的跡象,其中有些網路分析的技術,這裡嘗試重現相關分析。

Jun 1 · 5 min read

1. import 網路分析常用的package networkx

資料取樣自ptt八卦版2018–07–15,可直接用jwliny在github的ptt-web-crawler,不用自己寫爬蟲,安裝完後直接下指令(超佛!

2. 整理資料:

推文作為source,發文作為target,主要是覺得推文作為主動方,觀察是否有大量互相推文的現象。

rs_df = pd.DataFrame()

for x in ptt_df.itertuples():

##資料有點大,先取70篇文章
if x.Index > 70:
continue

##先把文章資料轉為DataFrame
art = pd.DataFrame([x.articles])

##如果發文沒有人推,直接濾除
if art.messages[0] == []:
continue

#作者 id 有中文,但推文 id只有英文,統一用 英文id 作為Key
author_id = art.author.replace(r'\([^)]*\)', '', regex=True).values[0].replace(' ', '')

reply = pd.DataFrame(art.messages.values[0])

temp_df = reply[['push_userid']].copy()
temp_df['target'] = author_id

##以發文日期作為推文的估計值,因為push_ipdatetime的ip 跟 datetime放在一起,有些只有datetime 沒有ip,好像跟RE 有關....
temp_df['date'] = art.date[0]
##欄位重新命名,push_userid 改為 source
temp_df.rename_axis({'push_userid':'source'}, axis=1, inplace=True)

if rs_df.empty:
rs_df = temp_df
else:
rs_df = rs_df.append(temp_df)

3. 文章資料

4. 把DataFrame轉為有向圖

G = nx.from_pandas_edgelist(rs_df, source='source', target='target', create_using=nx.DiGraph())

5–1. 看一下degree(in_degree + out_degree)前10名吧!

out-degree 外度數: 某個id留言的數量

in-degree 輸入度: 某個id「被」留言的數量

翻譯名稱參考:http://terms.naer.edu.tw/detail/2378473/

#設定top幾
rnk = 20

deg_g = dict(G.degree)
top_deg_node = [ x[0] for x in sorted(deg_g.items(), key=operator.itemgetter(1), reverse=True)[:rnk]]
sorted(deg_g.items(), key=operator.itemgetter(1), reverse=True)[:rnk]

5–2. 看一下pagerank前10名吧!

pg_rnk_g = nx.pagerank(G)
top_pg_rnk_node = [ x[0] for x in sorted(pg_rnk_g.items(), key=operator.itemgetter(1), reverse=True)[:rnk]]
sorted(pg_rnk_g.items(), key=operator.itemgetter(1), reverse=True)[:rnk]

5–3. 畫個有向圖~

plt.figure(figsize=(12, 12))#nodelist
nx.draw_networkx(G, with_labels=True, nodelist=top_pg_rnk_node, labels={x:x for x in top_pg_rnk_node})
plt.show(
非常亂XD 所以還是需要GUI的軟體協助探索資料

6. 因為資料很大,所以輸出csv,給開源軟體Gephi試試,或是有好的方式進行圖的EDA( Exploratory Data Analysis)

完整的程式碼在github(ipynb):

TODO:

由於資料量滿大的,會先擴充資料,以及其他的分析手段~

Kevin Tseng

Written by

熱衷Data Science,希望透過紀錄加強自己的學理,也記錄生活的夢囈

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade