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」ノードのリストをテキスト ファイルに書き出し、それをグラフ オブジェクトとして読み込むことです。グラフ オブジェクトは、多くのグラフ理論プロセスの対象となり、非常に大規模なネットワークを処理できます。