Gephi繪製微博轉發圖譜:以「@老婆孩子在天堂」為例

一、前言

以前看過一篇提取《釜山行》劇本中人物,並用Gephi繪製關係圖譜的文章,因此想用Gephi繪製下微博轉發情況,藉此來換個角度看看微博內容是怎麼擴散的。其中爬取轉發數據的思路可見於:《老樹微博,三千詩與畫》,大同小異,不再贅述。

而在選擇哪則熱門微博時,正好看到有人轉發了杭州保姆縱火案受害者家屬,林生斌,微博ID:「老婆孩子在天堂」的一則為四川地震災民捐贈物資的微博,截止周五(20170811)晚上10點20,轉發發數為54045(評論:31431,點贊:238204。之後截圖數據不同),數據量較為充足,可以一試。

另外一個選定這則微博,而非其他更具娛樂性、更能蹭熱點的話題的原因,是一直沒能為林先生干點什麼,因此如果能將轉發圖譜繪製出來,並和《爬取張佳瑋138w+知乎關注者:數據可視化》一文一樣登上網站首頁被加入今日看點的話,也姑且能算是幫其在擴散上盡了點小力。

二、Gephi簡介

Gephi是一款開源免費跨平台基於JVM的複雜網路分析軟體, 其主要用於各種網路和複雜系統,動態和分層圖的交互可視化與探測開源工具。

應用場景

探索性數據分析:直觀的網路操作實時分析。

鏈接分析:給出了關聯對象背後(特別是無標度網路下)的結構。

社交網路分析:可以輕鬆創建對應社區組織和小世界(small-world)的社交數據鏈接。

生物網路分析:展示生物數據模式。

海報創作:通過列印高品質地圖推廣科學工作。

三、數據處理

想要用Gephi繪製網路圖譜,最重要的就是知道每條網路的起點和終點,即Source和Target,以及所有這些點所組成的Id。其他還有每條網路的權重(Weight)、類型(有向的、無向的)、Id的名字Name、標籤Label等等。

而爬取微博獲得的原始數據卻是如圖格式的,因此,需要根據每一條的text內容,找出所有轉發的節點和對應的起點、終點指向關係。

以用戶「@Ponyyoung」的轉發為例,text內容如下:

「//@柯藍:危難中心裡還有別人,讓人尊敬。//@西門不暗: 這幾年公共事件中,林先生是我見過情緒最克制,表達最得體的人。命運不該對他這麼殘忍。祝福他。」

這一條網路,包含四個節點,分別為:@老婆孩子在天堂>>>@西門不暗>>>@柯藍>>>@Ponyyoung。

那麼在CSV文件里,用//分列,切分成不同列,text從右到左便分別是第一層轉發、第二層轉發、第三層轉發。知道了節點和所有轉發層級後,將數據處理成Gephi所需的格式(本項目篩選了14層轉發,越到後面數據也越少了,基本涵蓋了全部數據):

在Nodes文件里將所有微博節點以"Id"設置為自然數的形式排列:

並進一步將Edges文件中Source和Target列,轉換成對應「Id」值:

四、Gephi繪圖

經過上述的爬取數據(截止20170813下午4點前)並將數據處理成Gephi所需的格式後,便終於到了最激動人心的繪圖步驟了。由於此前並未使用過Gephi,裡面各種參數和內置演算法都不太熟悉,能得到怎麼樣的成果圖,非常的依賴於繪製過程的操作。

此處推薦一個視頻教程和一篇操作文章:

Gephi中文教程 | Udemy

GEPHI – Introduction to Network Analysis and Visualization

後面的操作基本按照後者進行,因此不再重複講解操作步驟。不過由於電腦配置不行,跑軟體內置演算法時實在吃力,最終在只進行到3.3,給網路圖上色的步驟,模塊化處理之前。

運行Force Atlas 2演算法後,圖譜不斷發生變化:

基本穩定後,give color to see see:

還是蠻漂亮的,不是嘛!其中右上角的圓形區域,其中心便是林先生的ID所在,左右密集的圓環就是由轉發層級較少的ID所形成,結合1-14層,各層級轉發數量圖可知,在所有轉發情況中直接轉發原微博佔比最高,其次是第二層轉發。此處無法得知轉發的用戶中多少是林先生的粉絲,因而直接轉發,或者有哪些大V介入,使其擴散出去,為更多人所見:

繼續看看右上角圓環區域,所有ID所形成的節點,清晰可見:

放大,並加上ID名稱,大致如下,由於軟體內調整縮放大小和看圖,非常不便,非常卡,所有姑且只能這麼看看:

重新將目光移動到非右上角區域,錯綜複雜的轉發關係,可見一斑:

找出其中一小簇節點情況(真的是漂亮,逃):

加上標籤,可知是由用戶「@據扯」引發的一小簇轉發:

對應到CSV表格里,進行驗證下,雖然上圖昵稱重疊嚴重,但還是基本符合的情況:

以上就是用Gephi繪製微博轉發圖譜的內容,還是那句話,由於跑不動軟體的演算法,雖然最後得到的圖也還行,但操作不算完整。也無法得知千萬粉絲、百萬粉絲的大V,或高轉發ID,在整個擴散過程中所起到的具體作用和直觀的節點情形,略感遺憾。

五、微博生命周期

林先生的原微博發布時間為20170811(周五)14:43。從截止0813(周日)16點前獲取的數據來看,本則微博的轉發數在發布後的1-2小時內達到單位小時僅萬條的高峰,之後雖然維持4-5千每小時的轉發量至深夜,但下降趨勢已然明顯可見,次日轉發數已經無法和當天相比。當然這不僅有一則微博本身生命周期的原因;前期可能有不少大V參與的原因;也有林先生髮布其他微博,大家關注點轉移等原因。

六、BDP繪製微博轉發動態熱力圖

這部分是後續一篇文章的內容,因為數據和本文相同,故也放進來下。

從發布微博的時間:20170811下午2點43分,截止20170813下午4點,用BDP個人版繪製的所有轉發的動態熱力圖如下:

七、小結

繼續在《老樹微博,三千詩與畫》之後,有針對性地抓取微博數據,但這回曾遇上API請求被拒,微博app也好幾個小時上不去的情況,看來再大規模爬微博數據時要注意了。

再是,基本完成用Gephi繪圖和前期找到轉發的節點,並將數據處理成相應格式的步驟,在沒使用過Gephi的情況下,熟悉了下將近5w條節點和邊的數據繪製成網路圖譜的流程,也對微博轉發和擴散的方式有了不同角度的認知,對一則微博的生命周期,其熱度及衰減過程有所了解。

補充一篇與本文相關的文章:《傷心橋下春波綠,曾是驚鴻照影來》


推薦閱讀:

介紹用Gephi進行數據可視化

TAG:Python | Gephi | 数据可视化 |