RとGephiのソーシャルネットワーク分析:Twitterを掘り下げる
公開: 2022-03-11ソーシャルネットワーク分析は、1934年にジェイコブレビーモレノが社会的相互作用の抽象化であるソシオグラムを作成したときに生まれました。 具体的には、ソシオグラムは、各ノードが人を表し、エッジがそれらの間の相互作用を表すグラフです。 モレノはソシオグラムを使用して、小グループの人々の行動を研究しました。
なぜ小さいのですか? 彼が働いていた時代には、多くの個人的なやりとりに関する詳細な情報を得るのは困難だったからです。 これは、Twitterなどのオンラインソーシャルネットワークの出現によって変化しました。 今日では、誰でも無料で大量のTwitterデータをダウンロードできます。これにより、興味深い分析への扉が開かれ、私たちの行動やさまざまな行動が社会に与える影響についての新しい理解が得られます。
ソーシャルネットワーク分析シリーズのこの最初のパートでは、R言語を使用してデータを取得して前処理し、Gephiを使用して驚くべき視覚化を生成する方法を示します。 Gephiは、あらゆる種類のネットワークを視覚化するために特別に設計されたオープンソースアプリケーションです。 これにより、ユーザーはいくつかの基準とプロパティを使用して視覚化を簡単に構成できます。
Rでのソーシャルネットワーク分析のためのTwitterデータのダウンロード
Twitter開発者アカウントをお持ちでない場合は、アカウントを作成して、エッセンシャルアクセスを申請してください。 次に、Twitterデータをダウンロードするには、Twitter開発者ポータルでアプリを作成します。 次に、[プロジェクトとアプリ]セクションでアプリを選択し、[キーとトークン]タブに移動します。 そこで、クレデンシャルを生成する必要があります。 これらは、TwitterAPIにアクセスしてデータをダウンロードするために使用されます。
クレデンシャルを生成したら、分析を開始できます。 3つのRライブラリを使用します。
- igraph 、相互作用グラフを作成します。
- tidyverse 、データを準備します。
- rtweet 、TwitterDevAPIと通信します。
これらのライブラリは、 install.packages()関数を使用してインストールできます。 ここでは、RとRStudioをインストールし、それらの基本を理解していることを前提としています。
私たちのデモンストレーションでは、パリ・サンジェルマン(PSG)フットボールクラブでの最初の週に、有名なアルゼンチンのサッカー選手リオネルメッシについての白熱したオンラインディスカッションを分析します。 無料のTwitterAPIを使用すると、現在の日付の7日前までしかツイートをダウンロードできないことに注意してください。 私たちが引用しているのと同じデータをダウンロードすることはできませんが、現在のディスカッションをダウンロードすることはできます。
ダウンロードから始めましょう。 まず、ライブラリをロードし、次に資格情報を使用して認証トークンを作成し、最後にダウンロード基準を設定します。
このコードブロックでは、3つのステップすべてを実装する方法について詳しく説明します。
## 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")注: <>の間のすべてのタグを、前の資格情報の手順で作成した情報に置き換えてください。
このコードを使用して、「messi」という単語を含み、2021年8月8日から2021年8月13日までの間に投稿されたすべてのツイート(最大250,000)についてTwitterAPIにクエリを実行しました。数量の値であり、その数は興味深い分析を可能にするのに十分な大きさであるためです。
Twitterのダウンロード率は15分あたり45,000ツイートなので、250,000ツイートのダウンロードには1時間以上かかりました。
最後に、すべてのコンテキスト変数をRDataファイルに保存して、RStudioを閉じたり、マシンをシャットダウンしたりした場合に復元できるようにしました。
相互作用グラフの作成
ダウンロードが完了すると、 tweets.dfデータフレーム内にツイートが表示されます。 このデータフレームマトリックスには、ツイートごとに1つの行と、ツイートフィールドごとに1つの列が含まれます。 まず、これを使用して、各ノードがユーザーを表し、エッジがそれらの間の相互作用(リツイートまたはメンション)を表す相互作用グラフを作成します。 tidyverseとigraphを使用すると、このグラフをすばやく1つのステートメントで作成できます。
## 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ファイルを検索して開きます。 グラフ情報を要約したウィンドウが表示されます。 [同意する]を選択します。 これが表示されます:
言うまでもなく、これはあまり有益ではありません。 これは、まだレイアウトを適用していないためです。
ネットワークレイアウト
数千のノードとエッジがあるグラフでは、グラフィックにノードを配置することが重要です。 これがレイアウトの目的です。 定義された基準によって設定された位置にノードを配置します。
ソーシャルネットワーク分析のチュートリアルでは、この種の分析の標準オプションであるForceAtlas2レイアウトを使用します。 ノード間の引力と斥力の物理的な力をシミュレートすることにより、ノードを配置します。 2つのノードが接続されている場合、それらは互いに近接します。 それらが接続されていない場合、それらはさらに離れます。 このレイアウトでは、同じコミュニティに属するユーザーがグループ化され、異なるコミュニティのユーザーが異なる地域にいるため、コミュニティの観点から有益なグラフが生成されます。
このレイアウトをこのケースに適用するには、[レイアウト]ウィンドウ(左下隅)に移動し、[ForceAltas 2]を選択して、[実行]をクリックします。 これを行うと、ノードが移動し始め、多くの「クラウド」を形成するのがわかります。 数秒後、非常に安定したパターンになり、[停止]をクリックできるようになります。 自動的に停止するまでに時間がかかる場合がありますのでご注意ください。

これは確率的アルゴリズムであるため、実行ごとに出力がわずかに異なります。 出力は次のようになります。
グラフは魅力的に見え始めています。 それでは、色を追加しましょう。
コミュニティの検出
いくつかの基準を使用してノードに色を付けることができます。 最も標準的なアプローチはコミュニティによるものです。 グラフに4つのコミュニティがある場合、4つの色になります。 データを考えると、色を使用すると、グループがどのように相互作用するかを理解しやすくなります。
ノードに色を付けるには、最初にコミュニティを特定する必要があります。 Gephiで、[統計]タブの下のウィンドウにある[モジュール性]ボタンをクリックします。このボタンは、高性能であるため最先端と見なされている、利用可能な最速のアルゴリズムの1つである人気のあるLouvainグラフクラスターアルゴリズムを適用します。 表示されるウィンドウで、[同意する]をクリックします。 サイズ別に分散されたコミュニティの散布図を含む別のウィンドウが表示されます。 これで、Modularity Classという名前の各ノードに新しい属性があり、ユーザーが所有するコミュニティが含まれています。
前の手順を完了したので、クラスターごとにグラフに色を付けることができます。 これを行うには、[外観]タブで[適用]をクリックします。
ここでは、各コミュニティのサイズ(ユーザーの割合で)を確認できます。 私たちの場合、主要なコミュニティ(紫と緑)には、それぞれ総人口の11.34%と9.29%が含まれています。
現在のレイアウトとパレットを使用すると、グラフは次のようになります。
Twitterインフルエンサーの検出
最後に、ディスカッションの主要な参加者を特定して、たとえば、誰がどのコミュニティに属しているかを理解したいと思います。 さまざまなプロパティによって、各ユーザーの影響を測定できます。 それらの1つは程度によるものです。 これは、リツイートまたは言及したユーザーの数を示します。
多くのインタラクションを持つユーザーを強調するために、Degreeプロパティを使用してノードのサイズを変更します。
グラフには、インフルエンサーが大きな円で表されたノードとして表示されます。
インタラクションの数が多いユーザーを特定したので、ユーザーの名前を明らかにすることができます。 これを行うには、画面下部のバーにある黒い矢印をクリックします。
次に、[ラベルと構成]をクリックします。 表示されるウィンドウで、[名前]チェックボックスを選択し、[同意する]をクリックします。 次に、[ノード]チェックボックスをクリックします。 小さな黒い線がグラフに表示されます。 これらはすべてのユーザーの名前です。 しかし、私たちはそれらすべてを見たくはありません。最も重要なものだけです。
それらを定義するには、ノードサイズに使用したのと同じウィンドウを使用して、ノードの次数でサイズを変更します。 最小サイズを0.1から10に増やし、最大サイズを10から300に増やしました。
名前を追加すると、さまざまなコミュニティがインフルエンサーとどのように相互作用するかが表示されるため、グラフは非常に有益になります。
この特定のTwitterディスカッションについて、より多くのことを理解できるようになりました。 たとえば、グリーンコミュニティにmundodabolaやneymarjrdepreなどのアカウントが含まれていることで、ブラジルの軌跡が明らかになります。 オレンジとグレーのコミュニティには、sc_espnやInvictosSomosなどのスペイン語を話すユーザーが含まれています。 特に、灰色と黒のコミュニティには、IbaiOut、LaScaloneta、人気のストリーマーIbaiLlanosなどのユーザーがいるため、スペイン語を話すように見えます。 最後に、紫と赤のコミュニティは、ESPNFCやbrfootballなどのアカウントを備えているため、英語を話しているように見えます。
これで、これらのユーザーがグラフ計算だけでなく社会学の観点から異なるコミュニティを構成する理由をよりよく理解できます。彼らは異なる言語を話します。 彼らは皆、メッシと彼の新しいチームについてツイートしていますが、スペイン語を話す人は、ポルトガル語や英語を話す人よりも他のスペイン語を話す人とより多く対話するのは理にかなっています。 さらに、灰色とオレンジ色のコミュニティはスペイン語を話しますが、異なる視点からスペイン語を話していることも理解できます。 灰色のコミュニティは、公式のサッカーやジャーナリストのアカウントよりも、なぜ彼らがお互いにもっと交流するのかを説明する、よりユーモラスなアプローチを使用しています。
RとGephiの可能性を解き放つ
グラフ化にGephiを使用していなければ、RのGgplotライブラリを使用できたはずです。 ただし、私の観点からは、そのライブラリはネットワークグラフの観点からはるかに制限されています。 Gephiのように動的ではなく、構成がより難しく、結果の表示が不明瞭になります。
シリーズの残りの部分では、この分析をさらに進めます。 トピックモデリングのテキスト分析を実行して、ユーザーが話している量と、ユーザーが関心を持っているトピックを確認します。 感情分析を実施して、それらがポジティブかネガティブかを確認します。 そして、Twitterの最大の影響力を持つ人々を分析するために、より深いグラフ分析を行います。
これらの手順を使用して、新しいTwitterディスカッションを分析し、プロットグラフからどのような洞察を得ることができるかを確認できます。
