Rでの静的および動的ネットワークの視覚化、パート1

非常に多くのシステムと現象がネットワークの形で表現できます。 一連のオブジェクトとそれらの間の関係。 ネットワークは抽象化だけでなく、データを視覚化するための視覚的ツールでもあります。 オブジェクトの重要度、各リンクの重みを表示し、要素のキーグループを指定し、それらを強調表示して、それらの間の関係を強調できます。 視覚化の主なタスクは、システムまたは現象のプロパティに関する重要な情報を最もわかりやすい方法で提供することです。 理想的な場合、システムの分析とその結果の視覚化は、1つのツールのフレームワーク内で実行できます。 豊富なパッケージのパッケージを備えたRはこれを可能にします。



はじめに:ネットワークの可視化



ネットワークの視覚化を設計する際の主なことは、達成する必要がある目標です。 どの構造特性を強調したいですか?





ネットワークマップは、唯一のグラフ視覚化ツールとはほど遠い-場合によっては、ネットワークを表す他の形式、主要なプロパティの単純なグラフでさえ、より望ましいものです。





ネットワークマップでは、他の視覚化形式と同様に、最終結果に影響するいくつかの重要な設定があります。 主なものは、色、サイズ、形状、相対的な配置です。





最新のグラフ表現は、パフォーマンス要件と審美的な考慮事項に基づいて最適化されます。 特に、グラフ内で同じ長さのエッジを確立するには、エッジのオーバーラップと交差を最小限に抑える必要があります。





データ形式、サイズ、準備



このガイドでは、主に2つの小さなデータセットを使用します。 どちらにもメディアに関する情報が含まれています。 1つには、ニュースリソースにハイパーリンクと言及のネットワークが含まれています。 もう1つは、オブジェクトとメディアの消費者との間のリンクのネットワークです。 例のデータは少ないですが、生成された視覚化の多くのアイデアは中規模および大規模ネットワークに拡張できます。 同じ理由で、たとえば頂点文字の形状など、視覚的な手段を使用することはめったにありません。大きなグラフでは区別することはほとんど不可能です。 さらに、非常に大規模なネットワークを表示する場合、頂点グループの識別と表示に集中する必要があるため、エッジを非表示にすることもできます。 一般的に、Rを使用して視覚化できるネットワークのサイズは、マシンのRAMの量によってのみ制限されます。 しかし、大規模なネットワークを巨大なポンポンの形で視覚化することは、多くの場合、主要なグラフプロパティを持つグラフよりもはるかに有用でないことを強調する必要があります。



このガイドでは、続行する前にインストールする必要のあるいくつかの主要なパッケージを使用しています。 さらにいくつかのライブラリが言及されますが、それらはオプションであり、スキップできます。 igraphGabor TsardiTamas Nepushがサポート )、 snanetworkCarter ButtsStatnetチームがサポート)、 ndtvSky Bender deMollがサポート)のメインライブラリが使用されます。

install.packages("igraph") install.packages("network") install.packages("sna") install.packages("ndtv")
      
      







データセット1:エッジのリスト



動作する最初のデータセットは、「Media-Example-NODES.csv」と「Media-Example-EDGES.csv」の2つのファイルで構成されています( こちらからダウンロードしてください )。

 nodes <- read.csv("Dataset1-Media-Example-NODES.csv", header=T, as.is=T) links <- read.csv("Dataset1-Media-Example-EDGES.csv", header=T, as.is=T)
      
      





データを調べます。

 head(nodes) head(links) nrow(nodes); length(unique(nodes$id)) nrow(links); nrow(unique(links[,c("from", "to")]))
      
      





一意の「from」-「to」の組み合わせよりも多くのエッジがあることに注意してください。 つまり、データでは、2つの頂点間に複数の接続がある場合があります。 2つのノード間で同じタイプのすべてのエッジを折りたたみ、「from」、「to」、および「type」によるaggregate()



関数を使用して重みを合計します。

 links <- aggregate(links[,3], links[,-3], sum) links <- links[order(links$from, links$to),] colnames(links)[4] <- "weight" rownames(links) <- NULL
      
      







データセット2:マトリックス



 nodes2 <- read.csv("Dataset2-Media-User-Example-NODES.csv", header=T, as.is=T) links2 <- read.csv("Dataset2-Media-User-Example-EDGES.csv", header=T, row.names=1)
      
      





データを調べます。

 head(nodes2) head(links2)
      
      





links2が双方向ネットワークのペアリングマトリックスであることを確認できます。

 links2 <- as.matrix(links2) dim(links2) dim(nodes2)
      
      







ネットワークの視覚化: igraphの最初のステップ



ソースデータをigraphネットワークに変換することから始めましょう。 これを行うには、igraph graph.data.frame関数を使用します。この関数は、2つのデータブロックを入力として使用します:dと頂点。



 library(igraph) net <- graph.data.frame(links, nodes, directed=T) net
      
      





 ## IGRAPH DNW- 17 49 -- ## + attr: name (v/c), media (v/c), media.type (v/n), type.label ## (v/c), audience.size (v/n), type (e/c), weight (e/n)
      
      





igraphオブジェクトの説明は4文字で始まります。

  1. DまたはU-それぞれ、有向グラフまたは無向グラフの場合。
  2. N-名前付きグラフの場合(ノードにはname



    属性があります)。
  3. W-重み付きグラフの場合(リンクにはweight



    属性があります)。
  4. B-両面グラフの場合(ノードにはtype



    属性があります)。


次の2つの数値(17 49)は、グラフ内の頂点とエッジの数を示します。 この説明では、頂点とエッジのプロパティも示します。次に例を示します。



また、頂点、エッジ、およびそれらの属性に簡単にアクセスできます。

 E(net) #   "net" V(net) #   "net" E(net)$type #   "type" V(net)$media #   "media" #       : net[1,] net[5,7]
      
      





igraphネットワークができたので、最初にそれを構築することができます。

 plot(net) #  !
      
      









あまり美しくないことがわかりました。 グラフのループを削除して、画像の改善を始めましょう。

 net <- simplify(net, remove.multiple = F, remove.loops = T)
      
      





あなたがsimplify



ようなコマンドでそれらの重みを合計することで複数のエッジを1つに折りたたむことができることに気づくことができますsimplify(net, edge.attr.comb=list(Weight="sum","ignore"))



。 問題は、結合する際にエッジのタイプが考慮されないことです(データでは「ハイパーリンク」-リンクと「言及」-参照)。



また、矢印のサイズを小さくして、ラベルを削除します(ラベルをNA



設定して)。

 plot(net, edge.arrow.size=.4,vertex.label=NA)
      
      









パート2:R.チャートのフォントと色



All Articles