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條節點和邊的數據繪製成網路圖譜的流程,也對微博轉發和擴散的方式有了不同角度的認知,對一則微博的生命周期,其熱度及衰減過程有所了解。
補充一篇與本文相關的文章:《傷心橋下春波綠,曾是驚鴻照影來》
推薦閱讀: