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に感謝の意を表します。