Rの静的および動的ネットワークの視覚化、パート7、最後

最初の部分で



第二部 :R.チャートの色とフォント



3番目の部分:グラフ、頂点、およびエッジのパラメーター。



4番目の部分:ネットワークの場所。



5番目の部分では、ネットワーク、頂点、エッジ、パスのプロパティに重点を置きます。



第6部:ネットワークのインタラクティブな視覚化、ネットワークを表す他の方法。



この部分では、アニメーション化されたネットワークの視覚化、時間の経過に伴うネットワークの進化。



インタラクティブでアニメーション化されたネットワークの視覚化



Rのインタラクティブな3Dネットワーク



Rグラフィックスをhtml / javascriptにエクスポートするのが簡単になりました。 Rから直接Webグラフィックを作成する場合に役立つrcharts



htmlwidgets



などのライブラリが多数あります。名前が示すように、D3 javascriptライブラリを使用してインタラクティブなネットワーク視覚化を作成するnetworkD3ライブラリを見ていきます。



networkD3



を使用して作成された視覚化は、今後の作業の開始点として最も有用であることを理解する必要があります。 少しのJavaScriptを知っている場合、それらを最初のステップとして使用し、目的の結果を得るためにそれらを変更できます。



networkD3



ライブラリがない場合は、インストールします。

 install.packages("networkD3")
      
      





このライブラリが使用するデータは、いくつかの小さな変更を加えたエッジの標準リストです。 すべてが機能するためには、頂点の識別子が数値であり、ゼロから開始する必要があります。 これを実現する簡単な方法は、文字識別子を因子変数に変換し、得られた結果を数値に変換し、1を引いて最初から番号を付けることです。

 library(networkD3) el <- data.frame(from=as.numeric(factor(links$from))-1, to=as.numeric(factor(links$to))-1 )
      
      





頂点は、リンクのソース列と同じ順序である必要があります。

 nl <- cbind(idn=factor(nodes$media, levels=nodes$media), nodes)
      
      





これで、インタラクティブビューを作成できます。 Group



パラメーターは、頂点の色付けに使用されます。 Nodesize



られるように、 Nodesize



は頂点のサイズではなく、サイズを設定するために使用する必要がある頂点データの列番号です。 charge



パラメーターは、反発(ゼロ未満)または引力(ゼロ以上)を制御charge



ます。

 forceNetwork(Links = el, Nodes = nl, Source="from", Target="to", NodeID = "idn", Group = "type.label",linkWidth = 1, linkColour = "#afafaf", fontSize=12, zoom=T, legend=T, Nodesize=6, opacity = 0.8, charge=-300, width = 600, height = 400)
      
      









Rのグラフの単純なアニメーション



すでにndtvをインストールしている場合は、アニメーションパッケージもインストールする必要があります。 そうでない場合は、今すぐインストールしますinstall.packages('animation')



。 このパッケージを使用すると、Rでさまざまな(必ずしもネットワーク関連ではない)アニメーションを簡単に作成できることに注意してください。これは、次のように機能します。



キャッチは次のとおりです。この作業を行うには、Rパッケージだけでなく、特別なImageMagickプログラムも必要です。

 library(animation) library(igraph) ani.options("convert") # ,   ,   ImageMagick #   ,      . ani.options(convert="C:/Program Files/ImageMagick-6.8.8-Q16/convert.exe")
      
      





次に、4つのネットワークグラフィックス(前と同じ)を作成します。今回はsaveGIF



内のみです。 アニメーション間隔はinterval



パラメーターによって設定され、 movie.name



パラメーターはgifファイルの名前を設定します。

 l <- layout.fruchterman.reingold(net) saveGIF( { col <- rep("grey40", vcount(net)) plot(net, vertex.color=col, layout=l) step.1 <- V(net)[media=="Wall Street Journal"] col[step.1] <- "#ff5100" plot(net, vertex.color=col, layout=l) step.2 <- unlist(neighborhood(net, 1, step.1, mode="out")) col[setdiff(step.2, step.1)] <- "#ff9d00" plot(net, vertex.color=col, layout=l) step.3 <- unlist(neighborhood(net, 2, step.1, mode="out")) col[setdiff(step.3, step.2)] <- "#FFDD1F" plot(net, vertex.color=col, layout=l) }, interval = .8, movie.name="network_animation.gif" ) detach(package:igraph) detach(package:animation
      
      







ndtv-d3を使用したインタラクティブネットワーク



インタラクティブな静的ネットワークグラフィックス


このセクションでは、 ndtv



パッケージを使用して、より複雑な視覚化を作成します。 アニメーションを作成するには、追加のソフトウェアは必要ありません。 アニメーションをビデオファイルとして保存する場合( ?saveVideo



参照)、 FFmpegビデオコンバーターが必要になります。 OSに適したインストーラーを見つけるには、 ?install.ffmpeg



実行し?install.ffmpeg



。 使用可能なすべての場所を使用するには、Javaも必要です。

 install.packages("ndtv", dependencies=T)
      
      





このパッケージはStatnetの一部であるため、先ほど作成したようなnetwork



パッケージのオブジェクトを受け入れます。

 library(ndtv) net3
      
      





ほとんどのパラメーターには直感的な名前が付いています( bg



はグラフの背景色です)。 以前に使用されていなかった2つの新しいパラメーターは、 vertex.tooltip



edge.tooltip



です。 これらには、ネットワーク要素上でマウスカーソルを動かすことで表示できる情報が含まれています。 ツールチップのオプションはhtmlタグを受け入れることに注意してください-たとえば、改行タグを使用します- <br>



launchBrowser



パラメーターは、結果の視覚化ファイル( filename



)をブラウザーで開くようRに指示します。

 render.d3movie(net3, usearrows = F, displaylabels = F, bg="#111111", vertex.border="#ffffff", vertex.col = net3 %v% "col", vertex.cex = (net3 %v% "audience.size")/8, edge.lwd = (net3 %e% "weight")/3, edge.col = '#55555599', vertex.tooltip = paste("<b>Name:</b>", (net3 %v% 'media') , "<br>", "<b>Type:</b>", (net3 %v% 'type.label')), edge.tooltip = paste("<b>Edge type:</b>", (net3 %e% 'type'), "<br>", "<b>Edge weight:</b>", (net3 %e% "weight" ) ), launchBrowser=F, filename="Media-Network.html", output.mode='inline')
      
      









ネットワーク進化アニメーション


アニメーション化された視覚化は、小規模または中規模のネットワークの時間発展を示す良い方法です。 現時点では、特に3Dレンダリング機能が最近追加された後、 ndtv



はこの目的のために設計された最高のRパッケージです。



ndtv



でネットワークアニメーションをndtv



するには、 networkDynamic



パッケージに実装されているStatnetネットワークの動的形式を理解する必要があります。 例としてパッケージに含まれるデータセットの1つを見てみましょう。

 data(short.stergm.sim) short.stergm.sim head(as.data.frame(short.stergm.sim))
      
      





 ## onset terminus tail head onset.censored ## 1 0 1 3 5 FALSE ## 2 10 20 3 5 FALSE ## 3 0 25 3 6 FALSE ## 4 0 1 3 9 FALSE ## 5 2 25 3 9 FALSE ## 6 0 4 3 11 FALSE
      
      





 ## terminus.censored duration edge.id ## 1 FALSE 1 1 ## 2 FALSE 10 1 ## 3 FALSE 25 2 ## 4 FALSE 1 3 ## 5 FALSE 23 3 ## 6 FALSE 4 4
      
      





ここにエッジのリストがあります。 各エッジは、識別子がtail



列にある頂点から取得され、 head



列に識別子を持つ頂点に入ります。 onset



タイムスタンプから終了タイムスタンプまでのエッジが存在します。 censoredのラベルが付いた開始と終了は、接続の実際の形成と消失ではなく、ネットワークモニタリングの開始と終了を意味します。



一時的なコンポーネント(これまでに提示されたすべての頂点とエッジを組み合わせる)を考慮せずに、ネットワークを簡単に構築できます。

 plot(short.stergm.sim)
      
      









時間1にネットワークを構築します。

 plot( network.extract(short.stergm.sim, at=1) )
      
      









1番目から5番目までの時点でアクティブな頂点とエッジを作成します。

 plot( network.extract(short.stergm.sim, onset=1, terminus=5, rule="all") )
      
      









1番目から10番目までの時点でアクティブな頂点とエッジを作成します。

 plot( network.extract(short.stergm.sim, onset=1, terminus=10, rule="any") )
      
      









例から短い3次元ネットワークアニメーションを作成しましょう。

 render.d3movie(short.stergm.sim,displaylabels=TRUE)
      
      





これで、独自の動的ネットワークを作成してアニメーション化する準備ができました。 動的なネットワークオブジェクトは、いくつかの方法で取得できます:さまざまな時点を表すネットワーク/マトリックスのセットから、頂点とエッジのリストを持つマトリックス/データセットから、アクティブまたは状態が変化したときに表示されます。 詳細については、 ?networkDynamic







メディアの例に一時的なコンポーネントを追加します。 以下のコードは、0〜50の時間間隔を取り、ネットワークノードを常にアクティブにします。 リブは次々と現れ、それぞれが出現の瞬間から50番目の瞬間まで活動します。 networkDynamic



を使用してこのようなネットワークを作成してみましょう。頂点の時間はnode.spelss



で、エッジの時間はedge.spells



です。

 vs <- data.frame(onset=0, terminus=50, vertex.id=1:17) es <- data.frame(onset=1:49, terminus=50, head=as.matrix(net3, matrix.type="edgelist")[,1], tail=as.matrix(net3, matrix.type="edgelist")[,2]) net3.dyn <- networkDynamic(base.net=net3, edge.spells=es, vertex.spells=vs)
      
      





networkDynamicネットワークを構築しようとすると、観測期間全体で結合されたネットワークが得られます。 メディアでの最初の例。

 plot(net3.dyn, vertex.cex=(net3 %v% "audience.size")/7, vertex.col="col")
      
      





時間の経過に伴うネットワークの進化を示す1つの方法は、さまざまな時点の静止画像を使用することです。 上記で行ったように、 ndtv



1つずつ生成できますが、 ndtv



の方が簡単です。 このチームはfilmstrip



です。 Rのグラフパラメーターを制御するpar()



関数のように、ここでmfrow



はテーブル内の行と列の数をいくつかのグラフに設定します。

 filmstrip(net3.dyn, displaylabels=F, mfrow=c(1, 5), slice.par=list(start=0, end=49, interval=10, aggregate.dur=10, rule='any'))
      
      







アニメーションの座標を事前に計算できます(そうでない場合、アニメーションの作成時にカウントされます)。 ここで、 animation.mode



ロケーションアルゴリズム-は、「kamadakawai」、「MDSJ」、「Graphviz」、および「useAttribute」(ユーザーが指定した座標)のいずれかです。

 compute.animation(net3.dyn, animation.mode = "kamadakawai", slice.par=list(start=0, end=50, interval=1, aggregate.dur=1, rule='any')) render.d3movie(net3.dyn, usearrows = F, displaylabels = F, label=net3 %v% "media", bg="#ffffff", vertex.border="#333333", vertex.cex = degree(net3)/2, vertex.col = net3.dyn %v% "col", edge.lwd = (net3.dyn %e% "weight")/3, edge.col = '#55555599', vertex.tooltip = paste("<b>Name:</b>", (net3.dyn %v% "media") , "<br>", "<b>Type:</b>", (net3.dyn %v% "type.label")), edge.tooltip = paste("<b>Edge type:</b>", (net3.dyn %e% "type"), "<br>", "<b>Edge weight:</b>", (net3.dyn %e% "weight" ) ), launchBrowser=T, filename="Media-Network-Dynamic.html", render.par=list(tween.frames = 30, show.time = F), plot.par=list(mar=c(0,0,0,0)), output.mode='inline' )
      
      









ndtvは、動的な頂点とエッジに加えて、動的なパラメーターを受け入れます。 上記のesおよびvsデータセットに追加できます。 さらに、ビルド関数は特別なパラメーターを適用し、プロセス内で直接動的引数を作成できます。 たとえば、関数(スライス){スライスを使用した一部の計算}は、現在のタイムスライスでアクションを実行するため、パラメーターを動的に変更できます。 以下の頂点のサイズに注意してください。

 compute.animation(net3.dyn, animation.mode = "kamadakawai", slice.par=list(start=0, end=50, interval=4, aggregate.dur=1, rule='any')) render.d3movie(net3.dyn, usearrows = F, displaylabels = F, label=net3 %v% "media", bg="#000000", vertex.border="#dddddd", vertex.cex = function(slice){ degree(slice)/2.5 }, vertex.col = net3.dyn %v% "col", edge.lwd = (net3.dyn %e% "weight")/3, edge.col = '#55555599', vertex.tooltip = paste("<b>Name:</b>", (net3.dyn %v% "media") , "<br>", "<b>Type:</b>", (net3.dyn %v% "type.label")), edge.tooltip = paste("<b>Edge type:</b>", (net3.dyn %e% "type"), "<br>", "<b>Edge weight:</b>", (net3.dyn %e% "weight" ) ), launchBrowser=T, filename="Media-Network-even-more-Dynamic.html", render.par=list(tween.frames = 15, show.time = F), output.mode='inline')
      
      












All Articles