Power BIおよびRを使用したソーシャルネットワーク分析:カスタムビジュアルガイド

公開: 2022-07-22

ソーシャルネットワーク分析は、さまざまな専門家のニーズに応えるための重要なツールに急速になりつつあります。 ターゲットを絞ったマーケティングなどの企業目標を通知し、セキュリティまたは評判のリスクを特定できます。 ソーシャルネットワーク分析は、企業が内部目標を達成するのにも役立ちます。これは、従業員の行動や企業のさまざまな部分間の関係についての洞察を提供します。

組織は、ソーシャルネットワーク分析のために多くのソフトウェアソリューションを採用できます。 それぞれに長所と短所があり、さまざまな目的に適しています。 この記事では、今日最も一般的に使用されているデータ視覚化ツールの1つであるMicrosoftのPowerBIに焦点を当てています。 Power BIは多くのソーシャルネットワークアドオンを提供しますが、Rのカスタムビジュアルを調べて、より説得力のある柔軟な結果を作成します。

このチュートリアルは、基本的なグラフ理論、特に有向グラフを理解していることを前提としています。 また、後の手順は、Windowsでのみ使用できるPowerBIDesktopに最適です。 読者はMacOSまたはLinuxでPowerBIブラウザーを使用できますが、Power BIブラウザーは、Excelワークブックのインポートなどの特定の機能をサポートしていません。

視覚化のためのデータの構造化

ソーシャルネットワークの作成は、接続(エッジ)データの収集から始まります。 接続データには、ソースノードターゲットノード(エッジの両端にあるノード)の2つの主要なフィールドが含まれています。 これらのノード以外にも、データを収集して、より包括的な視覚的洞察を生成できます。これは通常、ノードまたはエッジのプロパティとして表されます。

1)ノードのプロパティ

  • 形状または:ユーザーの場所(場所/国など)を示します
  • サイズ:ユーザーのフォロワー数など、ネットワークでの重要性を示します
  • 画像:ユーザーのアバターなど、個人の識別子として機能します

2)エッジプロパティ

  • ストローク、または矢印の接続:接続のタイプを示します。たとえば、2人のユーザーを接続する投稿またはツイートの感情を示します。
  • :接続の強さを示します。たとえば、特定の期間に2人のユーザー間で観察されたメンションまたはリツイートの数などです。

ソーシャルネットワークのビジュアルの例を調べて、これらのプロパティがどのように機能するかを確認しましょう。

さまざまな幅の線で接続された円のグラフが、3つの異なるセクションで表示されます。グラフの左側には、六角形で1、2、3、4、5、および6のラベルが付いたさまざまなサイズの6つの緑色の形状があります。 1〜5の数字は円で、6はひし形です。それらはさまざまな幅と方向の緑色の矢印で相互接続されており、一部の矢印は緑色で塗りつぶされていますが、他の矢印は塗りつぶされていません。緑の図形の右側には次のセクションがあります。三角形に配置された3つの濃い青色の図形で、7、8、9のラベルが付いており、さまざまな幅と方向の青い矢印で相互接続されています(一部の矢印は青で塗りつぶされています)。ノード7と9は、さまざまな幅と方向の灰色の矢印でノード3と4に接続されています(一部の矢印は灰色で塗りつぶされています)。グラフの中央、最初の2つの形状グループの下には、10というラベルの付いた単一の水色のひし形があります。ノード5、4、および9には、さまざまな幅と方向の灰色の点線の矢印で接続されています(一部の矢印は灰色で塗りつぶされています)。 。
緑、水色、濃い青のノードとさまざまな円またはひし形の形状は、さまざまなノードタイプを示しています。 背景が透明な番号はノードイメージ識別子として機能し、ネットワークではより大きなノード(ノード4など)がより重要になります。 さまざまなエッジタイプは、色(緑、青、または灰色)、ストローク(実線または点線)、および矢印(空または塗りつぶし)で示されます。 エッジ幅は強度を示します(たとえば、ノード8からノード9への接続は強力です)。

また、ホバーテキストを使用して、上記のパラメーターを補足または置換することもできます。これは、ノードまたはエッジのプロパティでは簡単に表現できない他の情報をサポートできるためです。

PowerBIのソーシャルネットワーク拡張機能の比較

ソーシャルネットワークのさまざまなデータ機能を定義したら、PowerBIでネットワークを視覚化するために使用される4つの一般的なツールの長所と短所を調べてみましょう。

拡大アーサーグラウスによるソーシャルネットワークグラフネットワークナビゲーターZoomChartsによる高度なネットワーク(Light Edition) Rを使用したカスタムビジュアライゼーション
動的ノードサイズはいはいはいはい
動的エッジサイズいいえはいいいえはい
ノードの色のカスタマイズはいはいいいえはい
複雑なソーシャルネットワーク処理いいえはいはいはい
ノードのプロファイル画像はいいいえいいえはい
調整可能なズームいいえはいはいはい
トップN接続フィルタリングいいえいいえいいえはい
ホバーに関するカスタム情報いいえいいえいいえはい
エッジカラーのカスタマイズいいえいいえいいえはい
その他の高度な機能いいえいいえいいえはい


ArthurGrausによるSocialNetworkGraph、Network Navigator、ZoomChartsによるAdvanced Networks(Light Edition)はすべて、単純なソーシャルネットワークを開発し、最初のソーシャルネットワーク分析を開始するのに適した拡張機能です。

多くの濃い青、水色、オレンジ色の円(50以上の円)は、白い背景に細い灰色の線で結ばれています。円は無地の境界線を持ち、白い背景を持つさまざまなポケモンの小さな画像で満たされ、円はほとんどの灰色の線の表示をブロックします。それらは全体的に円形を形成します。
ArthurGraus拡張機能によるソーシャルネットワークグラフを使用して作成された視覚化の例。

多くの青、紫、灰色の円(50以上の円)は、白い背景に細い灰色の線で結ばれています。円は実線で塗りつぶされており、いくつかの灰色の線の表示をブロックしています。それらは全体的に円形の配置を形成します。
NetworkNavigator拡張機能を使用して作成された視覚化の例。

多くの大きな青緑色と小さなオレンジ色の円(50以上の円)は、白い背景に細い灰色の線で結ばれています。円は実線で塗りつぶされており、灰色の線のほとんどが表示されています。それらは全体的に水平のくさび形を形成し、より密集した円が右側に表示されます。グラフの左下には、いくつかのウィジェットアイコンと、「ユーザーから」というラベルの付いた青緑色の円と「ユーザーへ」というラベルの付いたオレンジ色の円の2つのラベル付きの円があります。チャートの右下には、「zoomcharts」と書かれたロゴがあります。
Advanced Networks by ZoomCharts(Light Edition)拡張機能を使用して作成された視覚化の例。

ただし、データを生き生きとさせ、注目を集めるビジュアルで画期的な洞察を明らかにしたい場合、またはソーシャルネットワークが特に複雑な場合は、Rでカスタムビジュアルを開発することをお勧めします。

多くの緑、青、紫の円(50以上の円)は、白い背景にさまざまな色(緑、灰色、赤)の細い線で結ばれています。円は実線で、中心にポケモンの画像が表示され、細い線のほとんどが表示されます。それらは全体的に広がった円形を形成し、緑色の円はしばしば小さな青色または紫色の円に向かって分岐します。グラフの右上隅には「SocialNetwork」というテキストがあり、グラフの下には関連するテキストを含む線と円の凡例があります。緑色の線は「Positive」というテキスト、灰色の線は「Neutral」というテキストです。 「ネガティブ」というテキストの付いた赤い線、「メンション」というテキストのある青い円、「リツイート」というテキストのある紫色の円。
Rのカスタムビジュアルを使用して作成された視覚化の例。

このカスタム視覚化は、Rでのチュートリアルのソーシャルネットワーク拡張の最終結果であり、Rによって提供される多種多様な機能とノード/エッジプロパティを示しています。

Rを使用してPowerBIのソーシャルネットワーク拡張機能を構築する

Rを使用してPowerBIでソーシャルネットワークを視覚化する拡張機能を作成するには、5つの異なる手順が必要です。 ただし、ソーシャルネットワーク拡張機能を構築する前に、データをPowerBIに読み込む必要があります。

前提条件:PowerBIのデータを収集して準備する

TwitterとFacebookのデータに基づくテストデータセットを使用してこのチュートリアルに従うか、独自のソーシャルネットワークに進むことができます。 私たちのデータはランダム化されています。 必要に応じて、実際のTwitterデータをダウンロードできます。 必要なデータを収集したら、Power BIに追加します(たとえば、Excelブックをインポートするか、データを手動で追加します)。 結果は次の表のようになります。

灰色と白の行が交互に13行あるテーブルが表示されます。タイトルがあります---「ソーシャルネットワーク」---その下にヘッダーがあります。最初の列には「FromUser」というラベルが付いており、8つの「1」テキストとそれに続く5つの「2」テキストがあります。 2番目の列には「ToUser」というラベルが付いており、(上から下に)次のように表示されます:2、3、5、6、7、8、9、10、7、8、11、13、14。3番目の列には「」というラベルが付いています。 「接続数」と読み取り(上から下へ):12、46、29、79、49、11、90、100、66、29、62、13、45。4番目の列には「タイプ」というラベルが付いており、(上から下へ):リツイート、メンション、メンション、リツイート、リツイート、リツイート、メンション、メンション、リツイート、リツイート、リツイート、リツイート、メンション。 5番目の列には「感情」というラベルが付いており、(上から下に)次のように表示されます:ポジティブ、ポジティブ、ネガティブ、ニュートラル、ポジティブ、ネガティブ、ポジティブ、ニュートラル、ニュートラル、ネガティブ、ネガティブ、ネガティブ、ネガティブ。 6番目の列には「FromUserName」というラベルが付いており、8つの「Aaliyah」テキストとそれに続く5つの「Aaron」テキストがあります。 7番目の列には「ToUserName」と表示され、(上から下に)次のように表示されます:Aaron、Abel、Abraham、Ace、Adalyn、Adalynnと2つのN、Adam、Addison、Adalyn、Adalynnと2つのN、Adeline、Adriel、Aidan。 8番目の列には「アバターから」と書かれており、8つの「https://raychemmedica.com/SampleImages/Pokemon/1.png」テキストとそれに続く5つの「https://raychemmedica.com/SampleImages/Pokemon/2.png」テキストがあります。 。 9番目の列には「ToAvatar」と表示され、各エントリには「https://raychemmedica.com/SampleImages/Pok」というテキストがあり、途切れているように見えます。

データを設定したら、カスタムビジュアライゼーションを作成する準備が整います。

ステップ1:視覚化テンプレートを設定する

Power BIビジュアライゼーションの開発は簡単ではありません。基本的なビジュアルでさえ、何千ものファイルが必要です。 幸い、Microsoftはpbivizというライブラリを提供しています。このライブラリは、必要なインフラストラクチャをサポートするファイルを数行のコードで提供します。 また、 pbivizライブラリは、すべての最終ファイルを.pbivizファイルに再パッケージ化し、視覚化としてPowerBIに直接ロードできるようにします。

pbivizをインストールする最も簡単な方法は、Node.jsを使用することです。 pbivizをインストールしたら、マシンのコマンドラインインターフェイスを介してカスタムRビジュアルを初期化する必要があります。

 pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package

toptalSocialNetworkByBharatGargを視覚化に必要な名前に置き換えることを忘れないでください。 -t rhtmlは、RベースのHTMLビジュアライゼーションを開発するためのテンプレートを作成する必要があることをpbivizパッケージに通知します。 パッケージに作成者の名前や電子メールなどのフィールドがまだ指定されていないため、エラーが表示されますが、チュートリアルの後半でこれらを解決します。 pbivizスクリプトがPowerShellでまったく実行されない場合は、最初にSet-ExecutionPolicy RemoteSignedを使用してスクリプトを許可する必要があります。

コードが正常に実行されると、次の構造のフォルダーが表示されます。

8つのサブフォルダー(.tmp、.vscode、assets、dist、node_modules、r_files、src、およびstyle)と8つのファイル(capabilities.json、dependencies.json、package.json、package-lock.json、pbiviz)を含むファイルエクスプローラーのリスト.json、script.r、tsconfig.json、およびtslint.json)。 capabilities.json(2 KB)とpackage-lock.json(23 KB)を除いて、すべてのファイルは1KBです。

フォルダ構造の準備ができたら、カスタム視覚化用のRコードを記述できます。

ステップ2:Rで視覚化をコーディングする

最初のステップで作成されたディレクトリには、デフォルトのコードで構成されるscript.rという名前のファイルが含まれています。 (デフォルトのコードは、Rで利用可能なirisサンプルデータベースを使用してPetal.SpeciesごとにPetal.Lengthのヒストグラムをプロットする単純なPower BI拡張機能を作成します。)コードを更新しますが、コメント付きセクションを含むデフォルトの構造を保持します。

私たちのプロジェクトは3つのRライブラリを使用しています。

  • DiagrammeR:テキストからグラフを作成します
  • visNetwork:インタラクティブなネットワークの視覚化を提供します
  • data.table:data.frameと同様に、データ編成を支援します

script.r Library Declarationsのコードを置き換えて、ライブラリの使用法を反映させましょう。

 libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")

次に、[ Actual codeセクションのコードをRコードに置き換えます。 ビジュアライゼーションを作成する前に、まずデータを読み取って処理する必要があります。 PowerBIから2つの入力を取得します。

  • num_records :数値入力N。ネットワークから上位Nの接続のみを選択します(表示される接続の数を制限するため)。
  • dataset :ソーシャルネットワークノードとエッジ

プロットするN個の接続を計算するには、 num_records値を集計する必要があります。これは、PowerBIがデフォルトで単一の数値ではなくベクトルを提供するためです。 maxのような集計関数は、次の目標を達成します。

 limit_connection <- max(num_records)

ここで、 datasetをカスタム列を持つdata.tableオブジェクトとして読み取ります。 データセットを値の降順で並べ替えて、最も頻繁な接続をテーブルの一番上に配置します。 これにより、 num_recordsとの接続を制限するときに、プロットする最も重要なレコードを確実に選択できます。

 dataset <- data.table(from = dataset[[1]] ,to = dataset[[2]] ,value = dataset[[3]] ,col_sentiment = dataset[[4]] ,col_type = dataset[[5]] ,from_name = dataset[[6]] ,to_name = dataset[[7]] ,from_avatar = dataset[[8]] ,to_avatar = dataset[[9]])[ order(-value)][ seq(1, min(nrow(dataset), limit_connection))]

次に、一意のユーザーID( uid )を作成して各ユーザーに割り当て、新しいテーブルに保存して、ユーザー情報を準備する必要があります。 また、ユーザーの総数を計算し、その情報をnum_nodesという別の変数に格納します。

 user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)

次のような追加のプロパティでユーザー情報を更新しましょう。

  • フォロワーの数(ノードのサイズ)。
  • レコードの数。
  • ユーザーのタイプ(カラーコード)。
  • アバターリンク。

Rのmerge関数を使用してテーブルを更新します。

 user_ids <- merge(user_ids, dataset[, .(num_follower = uniqueN(to)), from], by.x = 'id', by.y = 'from', all.x = T)[is.na(num_follower), num_follower := 0][, size := num_follower][num_follower > 0, size := size + 50][, size := size + 10] user_ids <- merge(user_ids, dataset[, .(sum_val = sum(value)), .(to, col_type)][order(-sum_val)][, id := 1:.N, to][id == 1, .(to, col_type)], by.x = 'id', by.y = 'to', all.x = T) user_ids[id %in% dataset$from, col_type := '#42f548'] user_ids <- merge(user_ids, unique(rbind(dataset[, .('id' = from, 'Name' = from_name, 'avatar' = from_avatar)], dataset[, .('id' = to, 'Name' = to_name, 'avatar' = to_avatar)])), by = 'id')

また、作成したuidを元のデータセットに追加して、コードの後半でユーザーIDとの間toユーザーID from取得できるようにします。

 dataset <- merge(dataset, user_ids[, .(id, uid)], by.x = "from", by.y = "id") dataset <- merge(dataset, user_ids[, .(id, uid_retweet = uid)], by.x = "to", by.y = "id") user_ids <- user_ids[order(uid)]

次に、視覚化のためのノードとエッジのデータフレームを作成します。 ノードのstyleshape (黒丸)を選択し、 user_idsテーブルの正しい列を選択して、ノードのcolordatavalue 、およびimageの属性を入力します。

 nodes <- create_node_df(n = num_nodes, type = "lower",, color = user_ids$col_type, shape = 'circularImage', data = user_ids$uid, value = user_ids$size, image = user_ids$avatar, title = paste0("<p>Name: <b>", user_ids$Name,"</b><br>", "Super UID <b>", user_ids$id, "</b><br>", "# followers <b>", user_ids$num_follower, "</b><br>", "</p>") )

同様に、エッジのfrom 、、、およびcolor属性to対応するdatasetテーブルの列を選択します。

 edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)

最後に、ノードとエッジのデータフレームの準備ができたら、 visNetworkライブラリを使用して視覚化を作成し、デフォルトのコードが後で使用する変数pに格納します。

 p <- visNetwork(nodes, edges) %>% visOptions(highlightNearest = list(enabled = TRUE, degree = 1, hover = T)) %>% visPhysics(stabilization = list(enabled = FALSE, iterations = 10), adaptiveTimestep = TRUE, barnesHut = list(avoidOverlap = 0.2, damping = 0.15, gravitationalConstant = -5000))

ここでは、visOptionsとvisPhysicsでいくつかのネットワーク視覚化構成をカスタマイズします。 ドキュメントページを確認し、必要に応じてこれらのオプションを更新してください。 これでActual codeセクションが完成しましたp = ggplotly(g);という行を削除して、[ Create and save widget ]セクションを更新する必要があります。 独自の視覚化変数pをコーディングしたので。

手順3:PowerBIのビジュアライゼーションを準備する

Rでのコーディングが終了したので、Power BIで使用するための視覚化を準備するために、サポートするJSONファイルに特定の変更を加える必要があります。

まず、 capabilities.jsonファイルから始めましょう。 拡張機能のデータソースやその他の設定など、ビジュアルの[視覚化]タブに表示されるほとんどの情報が含まれています。 まず、 dataRolesを更新し、既存の値をdatasetnum_records入力の新しいデータロールに置き換える必要があります。

 # ... "dataRoles": [ { "displayName": "dataset", "description": "Connection Details - From, To, # of Connections, Sentiment Color, To Node Type Color", "kind": "GroupingOrMeasure", "name": "dataset" }, { "displayName": "num_records", "description": "number of records to keep", "kind": "Measure", "name": "num_records" } ], # ...

私たちのcapabilities.jsonファイルで、 dataViewMappingsセクションも更新しましょう。 入力が順守する必要のあるconditionsを追加し、 scriptResultを更新して新しいデータロールとその条件に一致させます。 変更については、 scriptResultの下のselectセクションとともにconditionsセクションを参照してください。

 # ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...

dependencies.jsonファイルに移りましょう。 ここでは、Power BIが必要なライブラリを識別してインストールできるように、 cranPackagesの下に3つのパッケージを追加します。

 { "name": "data.table", "displayName": "data.table", "url": "https://cran.r-project.org/web/packages/data.table/index.html" }, { "name": "DiagrammeR", "displayName": "DiagrammeR", "url": "https://cran.r-project.org/web/packages/DiagrammeR/index.html" }, { "name": "visNetwork", "displayName": "visNetwork", "url": "https://cran.r-project.org/web/packages/visNetwork/index.html" },

注:Power BIはこれらのライブラリを自動的にインストールする必要がありますが、ライブラリエラーが発生した場合は、次のコマンドを実行してみてください。

 install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))

最後に、ビジュアルに関連する情報をpbiviz.jsonファイルに追加しましょう。 次のフィールドを更新することをお勧めします。

  • ビジュアルの説明フィールド
  • ビジュアルのサポートURL
  • ビジュアルのGitHubURL
  • 作者の名前
  • 著者のメール

これでファイルが更新されたので、コマンドラインからビジュアライゼーションを再パッケージ化する必要があります。

 pbiviz package

コードが正常に実行されたら、 distディレクトリに.pbivizファイルを作成する必要があります。 このチュートリアルでカバーされているコード全体は、GitHubで表示できます。

手順4:ビジュアライゼーションをPowerBIにインポートする

新しいビジュアライゼーションをPowerBIにインポートするには、Power BIレポート(既存のデータ用のレポート、またはテストデータを使用して前提条件の手順で作成したレポート)を開き、[ビジュアライゼーション]タブに移動します。 [その他のオプション]ボタンをクリックし、[ファイルからビジュアルをインポート]を選択します。 注:[視覚化]タブを表示するには、最初にブラウザーで[編集]を選択する必要がある場合があります。

「ビジュアライゼーション」というタイトルのペインと、その右側に2つの「>」矢印が表示されます。下に、「Buildvisual」というテキストとその下に2つの画像があります。左側に2つの黄色い長方形と線、右側に紙と絵筆です。 2つの黄色い長方形の画像が選択され、その下に30を超えるさまざまなグラフアイコンのパネルがあります。最後のアイコンは省略記号で、「Getmorevisuals」というホバーテキストがあります。アイコンパネルの下に、「ここにデータフィールドを追加してください」というテキスト行が下にある「値」というテキストが表示されます。その下に、「ドリルスルー」というテキストの後に「クロスレポート」が続き、その横に「オフ」ラジオボタンが選択されています。

ビジュアライゼーションフォルダーのdistディレクトリに移動し、 .pbivizファイルを選択して、ビジュアルをPowerBIにシームレスにロードします。

手順5:PowerBIでビジュアライゼーションを作成する

インポートしたビジュアライゼーションがビジュアライゼーションペインで利用できるようになりました。 視覚化アイコンをクリックしてレポートに追加し、関連する列をdatasetnum_records入力に追加します。

ペインが表示され、ホバーテキスト「toptalSocialNetworkByBharatGarg」が含まれる選択されたツールアイコンが表示されます。アイコンの下に、テキスト「データセット」が表示され、その下にさまざまなドロップダウン長方形が表示されます(上から下へ):ユーザーから、ユーザーへ、接続数、色、色、ユーザー名、ユーザー名、アバター、アバター。

プロジェクトの要件に応じて、視覚化にテキスト、フィルター、および機能を追加できます。 また、サンプルプロジェクトでは利用可能な関数のすべてのユースケースを網羅できるわけではないため、視覚化をさらに強化するために使用した3つのRライブラリの詳細なドキュメントを確認することをお勧めします。

次のソーシャルネットワーク分析のアップグレード

最終的な結果は、カスタムPowerBIビジュアライゼーションの作成に関するRのパワーと効率の証です。 次のデータセットでRのカスタムビジュアルを使用してソーシャルネットワーク分析を試して、包括的なデータ洞察でより賢明な意思決定を行ってください。

Toptal Engineering Blogは、この記事で紹介されているコードサンプルをレビューしてくれたLeandroRoserに感謝の意を表します。

上から順に、「Gold」(ゴールドカラー)、「Microsoft」、「Partner」(どちらも黒)という単語が表示され、その後にMicrosoftロゴが続きます。
マイクロソフトゴールドパートナーとして、Toptalはマイクロソフトエキスパートのエリートネットワークです。 必要なときに必要な場所で正確に、必要な専門家と一緒に高性能チームを構築してください。