R 和 Gephi 中的社交網絡分析:深入研究 Twitter

已發表: 2022-03-11

社交網絡分析誕生於 1934 年,當時 Jacob Levy Moreno 創建了社會圖,即社會互動的抽象。 具體來說,社會圖是一個圖,其中每個節點代表一個人,邊代表他們之間的交互。 莫雷諾使用社會圖來研究一小群人的行為。

為什麼小? 因為在他工作的那個時代,很難獲得大量個人互動的精細信息。 隨著 Twitter 等在線社交網絡的出現,這種情況發生了變化。 如今,任何人都可以免費下載海量的 Twitter 數據,這為有趣的分析打開了大門,促使我們對自己的行為方式以及各種行為對社會的影響有了新的認識。

在我們社交網絡分析系列的第一部分中,我們演示瞭如何使用 R 語言執行其中一些分析以獲取和預處理數據,以及如何使用 Gephi 生成令人驚嘆的可視化。 Gephi 是一個開源應用程序,專門設計用於可視化任何類型的網絡。 它使用戶能夠通過多個標準和屬性輕鬆配置可視化。

下載 Twitter 數據以在 R 中進行社交網絡分析

如果您沒有 Twitter開發者帳戶,請創建一個併申請基本訪問權限。 然後,要下載 Twitter 數據,請在 Twitter Developer Portal 中創建一個應用程序。 接下來,在 Projects & Apps 部分中選擇您的應用程序,然後轉到 Keys & Tokens 選項卡。 在那裡,您將不得不生成您的憑據。 這些將用於訪問 Twitter API 和下載數據。

生成憑據後,您可以開始分析。 我們將使用三個 R 庫:

  1. igraph ,創建交互圖。
  2. tidyverse ,準備數據。
  3. rtweet ,用於與 Twitter 開發 API 通信。

您可以使用install.packages()函數安裝這些庫。 出於我們的目的,我們假設您已經安裝了 R 和 RStudio,並且您對它們有基本的了解。

在我們的演示中,我們將分析著名的阿根廷足球運動員萊昂內爾·梅西在巴黎圣日耳曼 (PSG) 足球俱樂部的第一周內的激烈在線討論。 請務必注意,使用免費的 Twitter API,您只能下載當前日期前 7 天的推文。 您將無法下載我們引用的相同數據,但您將能夠下載當前討論。

讓我們從下載開始。 首先,我們將加載庫,然後使用憑據創建授權令牌,最後設置下載條件。

此代碼塊詳細說明瞭如何實現所有三個步驟:

 ## Load libraries library(rtweet) library(igraph) library(tidyverse) ## Create Twitter token token <- create_token( app = <YOUR_APP_NAME>, consumer_key = <YOUR_CONSUMER_KEY>, consumer_secret = <YOUR_CONSUMER_SECRET>, access_token =<YOUR_ACCESS_TOKEN>, access_secret = <YOUR_ACCESS_SECRET>) ## Download Tweets tweets.df <- search_tweets("messi", n=250000,token=token,retryonratelimit = TRUE,until="2021-08-13") ## Save R context image save.image("filename.RData")

注意:將 <> 之間的所有標籤替換為您在上一個憑證步驟中創建的信息。

使用此代碼,我們在 Twitter API 中查詢包含單詞“messi”並在 2021 年 8 月 8 日至 2021 年 8 月 13 日之間發布的所有推文(最多 250,000 條)。我們設置了 250,000 條推文的限制,因為 Twitter 需要數量值,因為這個數字足夠大,可以進行有趣的分析。

Twitter 的下載率為每 15 分鐘 45,000 條推文,因此下載 250,000 條推文需要一個多小時。

最後,我們將所有上下文變量保存在 RData 文件中,以便在關閉 RStudio 或關閉機器時能夠恢復它。

創建交互圖

下載完成後,我們將在tweets.df數據框中包含推文。 該數據框矩陣包含每條推文一行和每個推文字段一列。 首先,我們將使用它來創建交互圖,其中每個節點代表一個用戶,邊代表它們之間的交互(轉發或提及)。 使用 tidyverse 和 igraph,我們可以快速創建這個圖,並且只需要一個語句:

 ## Create graph filter(tweets.df, retweet_count > 0) %>% select(screen_name, mentions_screen_name) %>% unnest(mentions_screen_name) %>% filter(!is.na(mentions_screen_name)) %>% graph_from_data_frame() -> net

執行此行後,我們在net變量中有一個可供分析的圖表。 例如,要查看存在多少節點和邊:

 summary(net) # IGRAPH fd955b4 DN-- 138963 217362 --

我們的樣本數據產生 138,000 個節點和 217,000 條邊。 那是一張大圖。 如果我們願意,我們可以通過 R 生成可視化,但根據我的經驗,它們計算時間太長,並且不像 Gephi 可視化那樣具有視覺吸引力。 因此,讓我們繼續 Gephi。

使用 Gephi 可視化圖形

首先,我們需要創建一個 Gephi 可以讀取的文件。 這很簡單,因為我們可以使用write_graph函數生成一個.gml文件:

 write_graph(simplify(net), "messi_network.gml", format = "gml")

現在,打開 Gephi,轉到“打開圖形文件”,搜索messi_network.gml文件,然後打開它。 它將拋出一個總結圖形信息的窗口。 選擇接受。 這將出現:

顯示 Gephi 用戶界面的屏幕截圖,用戶可以從中打開新的圖形文件。
在 Gephi 中打開一個新的圖形文件

不用說,這不是很豐富。 那是因為我們還沒有應用佈局。

網絡佈局

在具有數千個節點和邊的圖形中,在圖形中定位節點至關重要。 這就是佈局的目的。 他們將節點放置在由定義的標准設置的位置。

對於我們的社交網絡分析教程,我們將使用 ForceAtlas2 佈局,這是此類分析的標準選項。 它通過模擬它們之間的物理吸引力和排斥力來定位節點。 如果兩個節點相連,它們將更靠近彼此; 如果它們沒有連接,它們將相距更遠。 這種佈局產生了一個關於社區的信息圖,因為屬於同一社區的用戶將被分組在一起,而來自不同社區的用戶將位於不同的區域。

要將這個佈局應用到我們的案例中,我們導航到 Layout 窗口(在左下角),選擇 ForceAltas 2,然後單擊 Run。 當你這樣做時,你會看到節點開始移動並形成許多“雲”。 幾秒鐘後,您將擁有一個非常穩定的模式,您將能夠單擊停止。 請注意,自動停止可能需要很長時間。

由於這是一種隨機算法,因此每次運行的輸出都會略有不同。 您的輸出應與此類似:

以黑白顯示 ForceAtlas2 佈局的輸出的圖像,生成的圖形沒有顏色或灰色陰影。
使用 ForceAtlas2 佈局的單色 Gephi 輸出

圖表開始看起來很吸引人。 現在讓我們為其添加一些顏色。

社區檢測

我們可以使用幾個標準為節點著色; 最標準的方法是社區。 如果我們的圖表中有四個社區,我們將有四種顏色。 通過顏色,根據您的數據,可以更輕鬆地了解組的交互方式。

要為節點著色,首先我們必須識別社區。 在 Gephi 中,單擊統計選項卡下窗口中的模塊化按鈕 - 此按鈕應用流行的 Louvain 圖聚類算法,這是最快的可用算法之一,因其高性能而被認為是最先進的。 在出現的窗口中,單擊接受。 將出現另一個窗口,其中包含按大小分佈的社區的散點圖。 現在我們在每個節點中都有一個名為 Modularity Class 的新屬性,其中包含用戶擁有的社區。

完成前面的步驟後,我們現在可以按集群為圖著色。 為此,在外觀選項卡中,單擊應用。

在 Gephi 工作區中顯示“外觀”選項卡的屏幕截圖。該圖像顯示了圖表中使用的一系列顏色。
使用 Gephi 的 Appearance 添加顏色

在這裡,我們可以看到每個社區的規模(以用戶百分比計)。 在我們的案例中,主要社區(紫色和綠色)分別佔總人口的 11.34% 和 9.29%。

使用當前佈局和調色板,圖表將如下所示:

彩色圖表的圖像。形狀與之前的單色圖相同,但顏色有助於識別特定社區,最大的社區(紫色)位於左下角,第二大的社區(綠色)位於右上角。在它們之間,較小的社區由其他顏色表示,包括青色、橙色、紅色和黑色。
彩色圖表使我們能夠輕鬆識別不同的社區。

Twitter 影響者檢測

最後,我們想確定討論中的主要參與者,以了解例如誰屬於哪個社區。 我們可以通過不同的屬性來衡量每個用戶的影響力; 其中之一是他們的學位。 這表明有多少用戶轉發或提及了他們。

為了突出具有大量交互的用戶,我們將使用 Degree 屬性更改節點的大小:

在前面圖中提到的相同外觀選項卡下,顯示如何更改 Gephi 中的 Degree 屬性的屏幕截圖。最小尺寸設置為 0.1,最大尺寸設置為 10。
更改 Gephi 中的 Degree 屬性

該圖現在將影響者顯示為由較大圓圈表示的節點:

與上一張類似的彩色圖表圖像,但添加了代表影響者節點的圓圈。每個顏色組都有幾個這樣的節點。
將影響者顯示為較大節點的彩色輸出

現在我們已經確定了具有大量交互的用戶,我們可以透露他們的姓名。 為此,請單擊屏幕底部欄中的黑色箭頭:

Gephi 工作區的屏幕截圖,顯示 UI 右下角的黑色箭頭。
在 Gephi 中訪問標籤配置

然後,單擊標籤和配置。 在出現的窗口中,選擇名稱複選框並單擊接受。 接下來,單擊節點複選框。 圖中將出現小黑線。 這些是所有用戶的名稱。 但我們不想看到所有這些,只想看到最重要的。

要定義它們,請使用我們用於節點大小的同一窗口按節點度數更改它們的大小。 我們將最小尺寸從 0.1 增加到 10,並將最大尺寸從 10 增加到 300。

隨著名稱的添加,圖表變得更加豐富,因為它顯示了不同的社區如何與影響者互動:

彩色圖表的圖像,圓圈代表重要用戶,最重要用戶的名稱覆蓋在頂部。文本的大小對應於每個用戶的大小(影響),其中一些最大的是紫色的 ESPNFC、灰色的 TrollFootball 和粉紅色的 PSG_inside。
添加名稱可以讓我們看到不同的社區如何與影響者互動。

我們現在對這個特定的 Twitter 討論有了更多的了解。 例如,綠色社區將 mundodabola 和 neymarjrdepre 等賬戶納入其中,揭示了其在巴西的軌跡。 橙色和灰色社區包含講西班牙語的用戶,例如 sc_espn 和 InvictosSomos。 特別是,灰色和黑人社區似乎講西班牙語,因為他們擁有 IbaiOut、LaScaloneta 和流行的流媒體 IbaiLlanos 等用戶。 最後,紫羅蘭色和紅色社區似乎是說英語的,因為它們具有 ESPNFC 和 brfootball 等帳戶。

現在我們可以更好地理解為什麼這些用戶在社會學方麵包括不同的社區,而不僅僅是圖計算:他們說不同的語言! 他們都在發關於梅西和他的新團隊的推文,但說西班牙語的人與其他說西班牙語的人比與葡萄牙語或英語的人互動更多是有道理的。 此外,我們也可以理解,儘管灰色和橙色社區說西班牙語,但他們是從不同的角度這樣做的。 灰色社區使用一種更幽默的方法來解釋為什麼他們彼此之間的互動比與官方足球或記者賬戶的互動更多。

釋放 R 和 Gephi 的潛力

如果我們不使用 Gephi 繪製圖形,我們可以使用 R 的 Ggplot 庫。 但是,從我的角度來看,該庫在網絡圖形方面的限制要大得多。 它不像 Gephi 那樣是動態的,配置起來比較困難,產生的顯示也不太清晰。

在本系列的其餘部分中,我們將進一步分析這一點。 我們將執行一些主題建模文本分析,以查看用戶正在談論多少以及他們感興趣的主題; 我們將進行情緒分析,看看它們是積極的還是消極的; 我們將進行更深入的圖表分析,以分析 Twitter 的最大影響者。

您可以使用這些步驟來分析新的 Twitter 討論,並查看您可以從圖表中獲得哪些見解。