2016-08-30 11 views
0

私は381ノードの間に500以上の関係(エッジ)を持っています。ソーシャルネットワークグラフをどのように視覚化できますか?私はi-graphを使ってみました。しかし、エッジが多すぎるために出力が見えません。それらのエッジはすべてのノードをカバーしました。だから、その人物は円を描いていた。rで多くのエッジとリレーションを持つネットワークアナリシス?

私は視覚化するために他のツールを使用する必要がありますか?私は2つのデータフレームを持っています。 1つは以下のようなものです。 CUST_IDとSUB_CUST_IDはノードのキー値です。 fmly_reln_codeはリレーションタイプの値です。もう一方のデータセットにはノードのタイプがあります。

'data.frame': 426 obs. of 3 variables: 
$ CUST_ID  : int 21564 20672 1342 19239 1649 15039 15963 10455 12657 12921 ... 
$ SUB_CUST_ID : int 20967 6462 12929 18556 13961 13961 5767 15377 17146 19488 ... 
$ FMLY_RELN_CODE: int 13 12 17 13 13 13 14 12 99 13 ... 

と私はエッジのタイプを指摘する他のデータフレームを持っています。私は情報に応じてノードを別の色で表現したい。この2つの問題をどのように達成できますか?また、もしできれば、各ノードに関係タイプを表現したいと思います。しかし、これで、その出力を読み、理解するのが本当に遅くて複雑になります。


UPDATE

OK、キース要求として、私はこの多くを更新します。 2つのdata.framesがあります。 1つは、保険会社の顧客との関係に関するデータを持つことです。 CUST_IDとSUB_CUST_IDはリレーションであり、FMLY_RELN_CODEはリレーションのタイプです。

> str(network_df) 
'data.frame': 257 obs. of 3 variables: 
$ CUST_ID  : int 21564 1342 15039 15963 10455 12657 9790 20267 21575 20534 ... 
$ SUB_CUST_ID : int 20967 12929 13961 5767 15377 17146 19390 14629 5934 12708 ... 
$ FMLY_RELN_CODE: int 13 17 13 14 12 99 14 14 17 14 ... 
> summary(network_df) 
    CUST_ID  SUB_CUST_ID FMLY_RELN_CODE 
Min. : 14 Min. : 14 Min. :12.00 
1st Qu.: 5949 1st Qu.: 5841 1st Qu.:13.00 
Median :12469 Median :12277 Median :14.00 
Mean :11648 Mean :11536 Mean :21.24 
3rd Qu.:17057 3rd Qu.:17057 3rd Qu.:17.00 
Max. :22242 Max. :22258 Max. :99.00  

そしてもう1つは、私が顧客が詐欺であるかどうかを知らせることです。だから私はネットワーク分析をして詐欺のネットワークを分析したいと思っています。 326人の顧客があり、その関係に重みや方向性がある必要はありません。

> str(mapping) 
'data.frame': 381 obs. of 2 variables: 
$ CUST_ID : int 110 257 361 472 525 545 560 810 939 985 ... 
$ SIU_CUST_YN: chr "N" "Y" "N" "Y" ... 
> summary(mapping) 
    CUST_ID  SIU_CUST_YN  
Min. : 14 Length:381   
1st Qu.: 5949 Class :character 
Median :12082 Mode :character 
Mean :11651      
3rd Qu.:16964      
Max. :22258 

は最後に、私は詐欺のネットワークとエッジの色は、それが詐欺であるかどうかを指摘して見ることができるソーシャルネットワークを視覚化したいです。そしてもしできれば、私は縁にリレーションタイプを表示したい。

+0

"エッジ間の関係"とはどういう意味ですか? 381のノードを結ぶ500のエッジを意味しますか? –

+0

@KeithHughitt更新しました! – verystrongjoe

+0

グラフは無向/無重みですか? –

答えて

1

ネットワークを直接視覚化するのではなく、ネットワークの基礎となる隣接性マトリックスを視覚化することをお勧めします。例えば

:これは、2つの独立したが、完全に接続されたコンポーネントとの隣接行列になり

library(igraph) 
library(gplots) 

set.seed(1) 

# generate a fake adj matrix with two highly connected modules 
mat <- rbind(matrix(rep(c(1,1,1,0,0,0), 3), nrow=3, byrow=TRUE), 
      matrix(rep(c(0,0,0,1,1,1), 3), nrow=3, byrow=TRUE)) 

明らか
> mat 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 1 1 0 0 0 
[2,] 1 1 1 0 0 0 
[3,] 1 1 1 0 0 0 
[4,] 0 0 0 1 1 1 
[5,] 0 0 0 1 1 1 
[6,] 0 0 0 1 1 1 

、これは理想化されたが、それはあなたに何のアイデアを与える必要があります視覚化は実際のデータのように見えるかもしれません。これはすべき、少なくとも開始のため

enter image description here

:結果は以下のようになります

# assign a color to nodes 
node_colors <- c('red', 'red', 'red', 'blue', 'blue', 'blue') 

# visualize as a heatmap 
heatmap.2(mat, trace='none', col='redgreen', 
      RowSideColors=node_colors, ColSideColors=node_colors) 

を:

次に、私たちはノードの色を割り当て、biclusteringのヒートマップを使用して行列を可視化データの基礎となる関係をより明確に理解することができます。

その後、ネットワークの小さな部分またはネットワークのプルーニングされたバージョンのネットワークビジュアライズを作成して、作成することができます。

あなたのケースでは、カテゴリの「重み」を持つエッジリストがあるようです。あなたはigraphからgraph.edgelist機能を使用して、これを読むことができる:

最後に
network_df <- data.frame(CUST_ID=c(21564, 1342, 15039, 15963,10455), SUB_CUST_ID=c(20967,12929, 13961, 5767, 15377), FMLY_RELN_CODE=c(13, 17, 13, 14, 12)) 

> network_df 
    CUST_ID SUB_CUST_ID FMLY_RELN_CODE 
1 21564  20967    13 
2 1342  12929    17 
3 15039  13961    13 
4 15963  5767    14 
5 10455  15377    12 

# convert ids to character to avoid being treated as indices 
network_df$CUST_ID <- as.character(network_df$CUST_ID) 
network_df$SUB_CUST_ID <- as.character(network_df$SUB_CUST_ID) 
g <- graph.edgelist(as.matrix(network_df[,1:2]), directed=FALSE) 

> g 
IGRAPH UN-- 10 5 -- 
+ attr: name (v/c) 
+ edges (vertex names): 
[1] 21564--20967 1342 --12929 15039--13961 15963--5767 10455--15377 

get_adjacency機能を使用し、隣接行列にこれを変換するには:

> get.adjacency(g, sparse=FALSE) 
     21564 20967 1342 12929 15039 13961 15963 5767 10455 15377 
21564  0  1 0  0  0  0  0 0  0  0 
20967  1  0 0  0  0  0  0 0  0  0 
1342  0  0 0  1  0  0  0 0  0  0 
12929  0  0 1  0  0  0  0 0  0  0 
15039  0  0 0  0  0  1  0 0  0  0 
13961  0  0 0  0  1  0  0 0  0  0 
15963  0  0 0  0  0  0  0 1  0  0 
5767  0  0 0  0  0  0  1 0  0  0 
10455  0  0 0  0  0  0  0 0  0  1 
15377  0  0 0  0  0  0  0 0  1  0 
+0

私は行列を作ろうとしていますが、私は二次元行列が必要です。そして、各次元のサイズは426です。そして、インデックスの価値は巨大な範囲を持っています。これをどうすれば処理できますか? – verystrongjoe

+0

質問を更新して、作業中の入力データまたはデータ構造の例を含めることはできますか? –

+0

更新しました!チェックアウトしてください! – verystrongjoe

0

私はあなたがjsprit

を使用する必要がありますことをお勧め

私はVRPとその派生物を私の研究比較のために使っています。私は、ネットワーク分析と最適化にも同様に適していると思います。

"ruin and recreate"のようなアルゴリズムをチェックする

関連する問題