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人のユーザー間で観察されたメンションまたはリツイートの数などです。
ソーシャルネットワークのビジュアルの例を調べて、これらのプロパティがどのように機能するかを確認しましょう。
また、ホバーテキストを使用して、上記のパラメーターを補足または置換することもできます。これは、ノードまたはエッジのプロパティでは簡単に表現できない他の情報をサポートできるためです。
PowerBIのソーシャルネットワーク拡張機能の比較
ソーシャルネットワークのさまざまなデータ機能を定義したら、PowerBIでネットワークを視覚化するために使用される4つの一般的なツールの長所と短所を調べてみましょう。
| 拡大 | アーサーグラウスによるソーシャルネットワークグラフ | ネットワークナビゲーター | ZoomChartsによる高度なネットワーク(Light Edition) | Rを使用したカスタムビジュアライゼーション |
|---|---|---|---|---|
| 動的ノードサイズ | はい | はい | はい | はい |
| 動的エッジサイズ | いいえ | はい | いいえ | はい |
| ノードの色のカスタマイズ | はい | はい | いいえ | はい |
| 複雑なソーシャルネットワーク処理 | いいえ | はい | はい | はい |
| ノードのプロファイル画像 | はい | いいえ | いいえ | はい |
| 調整可能なズーム | いいえ | はい | はい | はい |
| トップN接続フィルタリング | いいえ | いいえ | いいえ | はい |
| ホバーに関するカスタム情報 | いいえ | いいえ | いいえ | はい |
| エッジカラーのカスタマイズ | いいえ | いいえ | いいえ | はい |
| その他の高度な機能 | いいえ | いいえ | いいえ | はい |
ArthurGrausによるSocialNetworkGraph、Network Navigator、ZoomChartsによるAdvanced Networks(Light Edition)はすべて、単純なソーシャルネットワークを開発し、最初のソーシャルネットワーク分析を開始するのに適した拡張機能です。
ただし、データを生き生きとさせ、注目を集めるビジュアルで画期的な洞察を明らかにしたい場合、またはソーシャルネットワークが特に複雑な場合は、Rでカスタムビジュアルを開発することをお勧めします。
このカスタム視覚化は、Rでのチュートリアルのソーシャルネットワーク拡張の最終結果であり、Rによって提供される多種多様な機能とノード/エッジプロパティを示しています。
Rを使用してPowerBIのソーシャルネットワーク拡張機能を構築する
Rを使用してPowerBIでソーシャルネットワークを視覚化する拡張機能を作成するには、5つの異なる手順が必要です。 ただし、ソーシャルネットワーク拡張機能を構築する前に、データをPowerBIに読み込む必要があります。
前提条件:PowerBIのデータを収集して準備する
TwitterとFacebookのデータに基づくテストデータセットを使用してこのチュートリアルに従うか、独自のソーシャルネットワークに進むことができます。 私たちのデータはランダム化されています。 必要に応じて、実際のTwitterデータをダウンロードできます。 必要なデータを収集したら、Power BIに追加します(たとえば、Excelブックをインポートするか、データを手動で追加します)。 結果は次の表のようになります。
データを設定したら、カスタムビジュアライゼーションを作成する準備が整います。
ステップ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を使用してスクリプトを許可する必要があります。
コードが正常に実行されると、次の構造のフォルダーが表示されます。
フォルダ構造の準備ができたら、カスタム視覚化用の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)] 次に、視覚化のためのノードとエッジのデータフレームを作成します。 ノードのstyleとshape (黒丸)を選択し、 user_idsテーブルの正しい列を選択して、ノードのcolor 、 data 、 value 、および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を更新し、既存の値をdatasetとnum_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レポート(既存のデータ用のレポート、またはテストデータを使用して前提条件の手順で作成したレポート)を開き、[ビジュアライゼーション]タブに移動します。 … [その他のオプション]ボタンをクリックし、[ファイルからビジュアルをインポート]を選択します。 注:[視覚化]タブを表示するには、最初にブラウザーで[編集]を選択する必要がある場合があります。
ビジュアライゼーションフォルダーのdistディレクトリに移動し、 .pbivizファイルを選択して、ビジュアルをPowerBIにシームレスにロードします。
手順5:PowerBIでビジュアライゼーションを作成する
インポートしたビジュアライゼーションがビジュアライゼーションペインで利用できるようになりました。 視覚化アイコンをクリックしてレポートに追加し、関連する列をdatasetとnum_records入力に追加します。
プロジェクトの要件に応じて、視覚化にテキスト、フィルター、および機能を追加できます。 また、サンプルプロジェクトでは利用可能な関数のすべてのユースケースを網羅できるわけではないため、視覚化をさらに強化するために使用した3つのRライブラリの詳細なドキュメントを確認することをお勧めします。
次のソーシャルネットワーク分析のアップグレード
最終的な結果は、カスタムPowerBIビジュアライゼーションの作成に関するRのパワーと効率の証です。 次のデータセットでRのカスタムビジュアルを使用してソーシャルネットワーク分析を試して、包括的なデータ洞察でより賢明な意思決定を行ってください。
Toptal Engineering Blogは、この記事で紹介されているコードサンプルをレビューしてくれたLeandroRoserに感謝の意を表します。
