BellCurve 統計WEB

  • Step3. 実践編
  • 1. データの整理と可視化

1-6. ベン図

Step1. 基礎編 9-6. 加法定理の例題3を一部改変し、Step1. 基礎編 8-2. ベン図で学んだベン図の作成を行ってみましょう。

例題:

1から100までの自然数の中で、2で割り切れるもの、3で割り切れるもの、5で割り切れるものの個数を使ってベン図を作成しましょう。

■Excelによる解析例

Excelにはベン図を直接作る機能はないため、自作する必要があります。

  1. ベン図のすべてのカテゴリーの数を数える
    • 2で割り切れるもの:100/2=50個
    • 3で割り切れるもの:100/3=33個
    • 5で割り切れるもの:100/5=20個
    • 2と3で割り切れるもの:100/6=16個
    • 2と5で割り切れるもの:100/10=10個
    • 3と5で割り切れるもの:100/15=6個
    • 2と3と5で割り切れるもの:100/30=3個
  2. 更に細かいカテゴリーの数を数える
    • 2で割り切れるが、3と5で割り切れないもの:50-16-10+3=27個
    • 3で割り切れるが、2と5で割り切れないもの:33-16-6+3=14個
    • 5で割り切れるが、2と3で割り切れないもの:20-10-6+3=7個
    • 2と3で割り切れるが、5で割り切れないもの:16-3=13個
    • 2と5で割り切れるが、3で割り切れないもの:10-3=7個
    • 3と5で割り切れるが、2で割り切れないもの:6-3=3個
  3. 挿入 > SmartArtを選択
  4. SmartArt グラフィックの選択 > 集合関係 > 基本ベン図を選択
  5. デフォルトのグラフが出力される
  6. デフォルトのグラフを加工(PowerPointを使って加工します)
  7. 27+14+7+13+7+3+3=74なので、1から100までの自然数の中で74個は2か3か5で割り切れます。すなわち、100-74=26個の自然数は、2でも3でも5でも割り切れないことが分かります。

■Rによる解析例

a <- seq(2, 100, 2)  #2で割り切れる数の数列を作成
b <- seq(3, 100, 3)  #3で割り切れる数の数列を作成
c <- seq(5, 100, 5)  #5で割り切れる数の数列を作成

data <- list(divisible_by_2 = a, divisible_by_3 = b, divisible_by_5 = c)  #a, b, cの数列からリストを作成

#ベン図を描く方法
library(VennDiagram)

venn.diagram(
  data,  #データの読み込み
  fill = c(2, 3, 4),  #ベン図の色の設定
  scaled=T,  #データのサイズをベン図の円の大きさに反映する 
  filename = "venn_diagram.tiff"  #出力ファイル名の設定(venn.diagramでベン図を作る場合には図をoutputファイルに書き出す必要がある)
)

#アップセットプロットを描く方法
library(UpSetR)

upset(fromList(data),  #データをupset用に変換して読み込み 
      order.by = "freq",  #棒グラフをfreq(数の大きい順)でソートする 
      sets.bar.color = c("red","green", "blue"),  #各カテゴリーの棒グラフの色の設定
      text.scale = c(1.5, 1.5, 1.5, 1.5, 1.5, 1.5))  #文字サイズの設定


アップセットプロットは、複雑なベン図を見やすく表すことができる図です。Set Sizeは各グループ(2で割り切れるもの、3で割り切れるもの等)に属するものの数を、Intersection Sizeは各カテゴリー(2だけで割り切れる、2と3だけで割り切れる等)に属するものの数を表します。Intersection Sizeの下のドットと線は各カテゴリーを模式的に表したもので、ドットがついているところはそのグループの条件を満たしていることを表します。例えば、一番右端のドットと線は2、3、5で割り切れるもののカテゴリーであることを示します。

■Pythonによる解析例

#ベン図を描く方法
import numpy as np
from matplotlib_venn import venn3
import matplotlib.pyplot as plt

a = np.arange(2, 101, 2)  #2で割り切れる数のアレイを作成
b = np.arange(3, 101, 3)  #3で割り切れる数のアレイを作成
c = np.arange(5, 101, 5)  #5で割り切れる数のアレイを作成

venn3(subsets=[set(a), set(b), set(c)], set_labels=("divisible_by_2", "divisible_by_3", "divisible_by_5"))  #a, b, cを使ってベン図を描く、それぞれにラベルを付ける

plt.show() 


#アップセットプロットを描く方法
import pandas as pd
from upsetplot import plot
import matplotlib.pyplot as plt

a = np.arange(2, 101, 2).tolist()  #2で割り切れる数のリストを作成
b = np.arange(3, 101, 3).tolist()  #3で割り切れる数のリストを作成
c = np.arange(5, 101, 5).tolist()  #5で割り切れる数のリストを作成
all_dat = set(a + b + c)  #a, b, cのユニークなデータリストを作成

df = pd.DataFrame([[V in a, V in b, V in c] for V in all_dat], columns = ["divisible_by_2", "divisible_by_3", "divisible_by_5"])  #a, b, cのリストの中に、ユニークなデータリストの数字が含まれているかどうかを調べる、それぞれにラベルを付ける
df2 = df.groupby(["divisible_by_2", "divisible_by_3", "divisible_by_5"]).size()  #アップセットプロット用にデータを変換
plot(df2, sort_by="cardinality")  #変換したデータを使ってアップセットプロットを描く

plt.show()


1. データの整理と可視化


統計学やデータ分析を学ぶなら、大人のための統計教室 和(なごみ) [業務提携]


【BellCurve監修】統計検定®2級対策に最適な模擬問題集1~3を各500円(税込)にて販売中!

Kindleストアで配信中

統計検定®2級 模擬問題集1

500円(税込)

統計検定®2級 模擬問題集2

500円(税込)

統計検定®2級 模擬問題集3

500円(税込)