N ノード間のエッジの重みを詳述するデータ フレームがあります。この種のデータを操作するためのパッケージはありますか?
たとえば、次の情報をネットワークとしてプロットしたいと思います。
p1 p2 counts
1 a b 100
2 a c 200
3 a d 100
4 b c 80
5 b d 90
6 b e 100
7 c d 100
8 c e 40
9 d e 60
N ノード間のエッジの重みを詳述するデータ フレームがあります。この種のデータを操作するためのパッケージはありますか?
たとえば、次の情報をネットワークとしてプロットしたいと思います。
p1 p2 counts
1 a b 100
2 a c 200
3 a d 100
4 b c 80
5 b d 90
6 b e 100
7 c d 100
8 c e 40
9 d e 60
1 つのオプションは、統計的ソーシャル ネットワーク分析用の R パッケージのstatnetファミリの一部であるネットワークパッケージです。ネットワーク データをまばらな方法で処理するため、大規模なデータ セットに適しています。
以下、私は次のことを行います。
A = read.table(file="so.txt",header=T) あ p1 p2 カウント 1 ab 100 2ac 200 3 広告 100 紀元前4年 80年 5 BD 90 6 ビー 100 7CD 100 8セ40 9 デ 60 図書館(ネットワーク) ネット = ネットワーク (A[,1:2]) # ネットワークに関する概要情報を取得する ネット ネットワーク属性: 頂点 = 5 指示された = TRUE ハイパー=偽 ループ = FALSE 複数 = FALSE 二部 = FALSE 合計エッジ = 9 エッジの欠落 = 0 欠けていないエッジ= 9 頂点属性名: vertex.names 隣接行列: abcde 0 1 1 1 0 b 0 0 1 1 1 c 0 0 0 1 1 日 0 0 0 0 1 e 0 0 0 0 0 set.edge.attribute(net,"weight",A[,3]) gplot(ネット) ## もう一つのクールな機能 s = as.sociomatrix (ネット、attrname="重量") plot.sociomatrix(s)
igraphのデータのネットワークプロットを作成する方法は次のとおりです。
d <- data.frame(p1=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'),
p2=c('b', 'c', 'd', 'c', 'd', 'e', 'd', 'e', 'e'),
counts=c(100, 200, 100,80, 90,100, 100,40,60))
library(igraph)
g <- graph.data.frame(d, directed=TRUE)
print(g, e=TRUE, v=TRUE)
tkplot(g, vertex.label=V(g)$name)
私の経験では、igraphは、大規模なグラフ理論的作業のための私のお気に入りのパッケージです。これはメモリ効率が高く、いくつかの非常に優れたアルゴリズムを備えています。igraphは、内部エッジリストのようなデータ構造を使用します。
より単純な/より小さなもののために、私は「sna」パッケージ(「ソーシャルネットワーク分析」)を使用する傾向があります。インタラクティブな作業や小規模なネットワークのプロットに最適です。snaは、より多くの隣接行列データ構造を使用します。
私はigraphでも働いています。グラフを作成する 1 つの方法は、すべての「from」「to」ノードのリストをテキスト ファイルに書き出し、それをグラフ オブジェクトとして読み込むことです。グラフ オブジェクトは、多くのグラフ理論プロセスの対象となり、非常に大規模なネットワークを処理できます。