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