LoginSignup
19
21

More than 5 years have passed since last update.

{igraph} カレーなるネットワーク解析

Posted at

0. イントロ

男女19人でカレーを食べに行きました。
「Bセット」は、7種類の中から2種類のカレーを選びます。
重複してはいけません。

肉カレー 野菜カレー その他
キーマ ほうれん草(サグ) 日替わり
チキン ベジタブル
マトン ミックス豆

集計結果がこちら。

> head(dat)
   カレー1  カレー2 性別
1   チキン   キーマ    m
2     サグ   キーマ    f
3     ベジ 日替わり    m
4   チキン     サグ    f
5   チキン     ベジ    f
6 日替わり     ベジ    m

もう、血湧き肉躍りますよね。
あれ、やっちゃいましょうよ、兄貴
AさんとBさんに矢印を引っ張って、秘密のカンケーを一目瞭然にするやつ。

library(igraph)

1. データ整形

みんな大好き$for$文を使ったりしながら泥臭く揃えると、こうなる。
注意した点は、curry1, curry2の順番は(心理学的な解析を行わない限り)意味がないので、逆順の行を追加して矢印を引っ張る(両側矢印になる, 矢印数の比は保存されている)。

> dat1
       curry1     curry2 weight   男女比
1      キーマ       サグ      2    1.000
2      キーマ     チキン      2    0.000
3      キーマ     マトン      1    0.000
4      キーマ ミックス豆      1    0.000
5      キーマ   日替わり      1    0.000
6        サグ     キーマ      2    1.000
7        サグ     チキン      2    0.500

ここまでで取り敢えずplotしてみる。

g <- graph.data.frame(dat1[,1:2])
plot(g)

スクリーンショット 2015-10-27 15.05.12.png

いいですねぇ。

2. オプションの指定

nodeの大きさを、「そのカレーがチョイスされた数」に従って変えたい。

size <- dat1 %>% group_by(curry1) %>%
  summarise(v.size = sum(weight))

パスの色は、男女比によって変えたい。
男100%:blue, 女性100%:red, 50%50%:灰色で、グラデーション。

Col <- colorRamp(c("Blue", "grey", "Red"))

その他、
・太さをweightで与える
・肉カレーのnodeはオレンジ、野菜カレーは緑、日替わりは白
などのオプションを指定する。

g <- graph.data.frame(dat1[,1:2])
  E(g)$weight <- dat1$weight
  E(g)$color <- rgb(Col(dat1$男女比)/255)
  V(g)$size <- size$v.size*5
  V(g)$color <- c(rep(c("orange", "green"),3), "white")

で、plot。

plot(g, edge.width=E(g)$weight^3)

3. 結果

スクリーンショット 2015-10-27 11.11.27.png

・「肉-肉」ペアを結ぶ矢印は全て真っ青(100%男)。
・中身の知らない日替わりカレーにトライするのも100%男。
・女性陣は、少なくとも1つの野菜カレーを頼む。
・「マトン-サグ(ほうれん草)」の組み合わせ最強。
・チキン万能。
・ミックス豆(ぇ

19
21
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
21