目次(まとめ)
◾️ Rでベン図を描いて集合の関係を可視化する
◾️ 3つ以上の集合についても同じようにベン図を描くことが可能
◾️ 関連記事
こんにちは、みっちゃんです。
今回の記事では、小学校や中学校で習った「ベン図」の書き方を紹介します。
ベン図はどのような場面で使っていたでしょうか?
例えば、30人の生徒のうち、"電車を使って通学している生徒" と "バスを使って通学している生徒" を調べたときに、"電車とバスを使って通学している生徒" を図示するときに使っていました。
しかし、"電車" か "バス" といった2択で単純の場合には、上のように簡単にベン図をかけますが、3択、4択と増えていくと、手書きでベン図を書くのは大変です。
そこで、今回の記事では、Rという言語をつかって、ベン図を描く方法を解説します。
Rでベン図を描いて集合の関係を可視化する
説明のため、電車を使って通学している生徒、バスを使って通学している生徒を以下のように表現します。
# 電車を使って通学している生徒(train):20人
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, AA, BB, CC, DD, EE
# バスを使って通学している生徒(bus):15人
P, Q, R, S, T, U, V, W, X, Y, AA, BB, CC, DD, EE
つまり、Aさん、Bさん・・・・EEさんは、電車を使って通学している生徒、Pさん、Qさん・・・・EEさんは、バスを使って通学している生徒です(みて分かる通り、AAさん・・・・EEさんは、電車とバスを使って通学している生徒です)。
このデータを使って、Rでベン図を描きます。
まず、RをMacOSのターミナル上で開きます(以前の記事をご参照ください)。
$ R -q
以前の記事でヒートマップをRで描く方法を紹介しましたが、そのときと同様に「gplots」というパッケージを使って描いてみます。
> install.packages("gplots")
> library(gplots)
ベン図を描きたいデータを以下のように設定します。
> train <- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "AA", "BB", "CC", "DD", "EE")
> bus <- c("P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "AA", "BB", "CC", "DD", "EE")
ベン図を描くためには、以下のように実行します。
> data = list(TRAIN=train, BUS=bus)
> venn(data)
listの中身に、"TRAIN" と "BUS" と書くことで、それぞれの丸の名前を指定することができます。
また、このベン図の数値の情報は、以下のようにすれば出力することができます(ここで、"1" と "0" は、"通学に使っている"、"通学に使っていない" と考えてください)。
> (venn(data))
num train bus
00 0 0 0 #電車もバスも使っていない生徒
01 10 0 1 #バスを使っている生徒
10 15 1 0 #電車を使っている生徒
11 5 1 1 #電車とバスを使っている生徒
attr(,"intersections")
attr(,"intersections")$bus
[1] "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y"
attr(,"intersections")$train
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O"
attr(,"intersections")$`train:bus`
[1] "AA" "BB" "CC" "DD" "EE"
attr(,"class")
[1] "venn"
3つ以上の集合についても同じようにベン図を描くことが可能
ベン図は、3つ以上の集合に対しても、同じように描くことができます。
ここでは、"電車" と "バス" に加えて、"自転車" で通学している生徒を考えてみたいと思います。
# 自転車を使って通学している生徒(bike):8人
A, D, E, P, Z, CC, DD, EE
Rでは、以下のように設定します。
> bike <- c("A", "D", "E", "P", "Z", "CC", "DD", "EE")
ベン図を描くためには、以下のように実行します。
> data = list(TRAIN=train, BUS=bus, BIKE=bike)
> venn(data)
こうして可視化してみると、"電車" と "バス" と "自転車" をつかって通学している生徒が3人いることが簡単にわかります。