【統計学・データ分析】集合の基礎

##はじめに
皆さん、こんにちは。[@Raphael_de_murl](https://twitter.com/Raphael_de_murl)です。今年も残りわずかですよね。今回の記事が2018年の最後の投稿になると思います。今回のテーマはタイトルの通り少し数学的な話になります。もちろん！説明は理解やすくしますのでご安心してください！いざ！出発です。

##概要
数学の何の話かと言うとまずは<b>集合</b>からです。中学生ぐらいからずっと学んでいて未だにもプログラミングでよく使われる数式ですよね。特に<b>AI</b>や<b>機械学習</b>の分野ではアルゴリズムが大事なので数学の知識は必須だと思います。（微積分までは知らなきゃいけないですよね…）

##集合とは
[高等学校数学A/集合と論理](https://ja.wikibooks.org/wiki/%E9%AB%98%E7%AD%89%E5%AD%A6%E6%A0%A1%E6%95%B0%E5%AD%A6A/%E9%9B%86%E5%90%88%E3%81%A8%E8%AB%96%E7%90%86)今回はこちらのサイトを参考にしました。
>ある事柄の集まりのうち、定義が具体的に示されている物を集合（しゅうごう、英：set）という。例えば、「自然数」は「n > 0となる整数n の全体」という定義があるので、集合といえるが、「大きな数」は、どこからが大きな数といえるのかがはっきりしないため、集合とはいえない。ただし、「大きな数」を例えば「1億以上の整数」と定義すれば集合になりえる。

集合は、一般的にはA、B、X、Yなどのアルファベットの大文字で表し、集合を構成しているものを<b>要素</b>または<b>元</b>と呼びます。そして、aが集合Aの要素であるとき、a∈Aと表し、bが集合Aの要素ではないときは、b∉Aと表します。

簡単な例をみてみましょう。

```python:sample.py
"集合A：５で割り切れる３０以下の自然数"
A = {n|n=5k (k=1,2,3,4,5,6)}
A = {5,10,15,20,25,30}
A = {}
```
上記のように2通りの表し方があります。要素の個数が有限の集合を<b>有限集合</b>と呼び、A={n|n=5k}のように、要素の個数が無限の集合を<b>無限集合</b>と呼びます。そして一番下のように1つの要素も持っていない集合を特に<b>空集合</b>と呼び、<b>Φ</b>で表します。

##集合の種類
####1）部分集合
![image.png](https://qiita-image-store.s3.amazonaws.com/0/309361/4dbc0322-9e90-3071-3d59-d596290ce0b0.png)
例として、有限集合A、Bを用意します。集合Aの要素が全て集合Bに属するとき、「AはBに含まれる」といい、A⊆BまたはA⊂Bと表し、<b>A</b>を<b>B</b>の<b>部分集合</b>と言います。特に<b>A⊂B</b>のとき、<b>A</b>は<b>B</b>の<b>真部分集合</b>と言います。<b>部分集合</b>と<b>真部分集合</b>の違いはAがBの部分集合ではあるが、<b>等しくはない</b>であります。

```python:subset.py
A = {"峯岸", "高橋"}
B = {"山本", "峯岸", "高橋", "大島", "岡田"}
A ⊂ B = {"山本", "峯岸", "高橋", "大島", "岡田"}
```

####2）積集合（共通集合）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/309361/b14d4b25-4a90-a823-8190-c1821268de49.png)
2つの集合A、Bについて共通部分A∩B（<b>A</b>と<b>B</b>に<b>共通な要素全体</b>の集合）と言います。

```python:intersection.py
A = {"渡辺", "山本", "峯岸", "高橋", "横山"}
B = {"山本", "峯岸", "高橋", "大島", "岡田"}
A ∩ B = {"山本", "峯岸", "高橋"}
```

####3）和集合
![image.png](https://qiita-image-store.s3.amazonaws.com/0/309361/2cd3d757-fe48-43f1-5727-1f487c1c2f25.png)
2つの集合A、Bについて和集合A∪B（<b>A</b>または<b>B</b>の<b>いずれかに属する要素全体</b>の集合）と言います。

```python:union.py
A = {"渡辺", "山本", "峯岸", "高橋", "横山"}
B = {"山本", "峯岸", "高橋", "大島", "岡田"}
A ∩ B = {"渡辺", "山本", "峯岸", "高橋", "横山" "大島", "岡田"}
```

####※）A∩BとA∪Bの要素の個数について
共通部分、和集合の要素の個数が<b>Φ</b>の場合は次の公式が成り立ちます。

```python:fai.py
A∩B = Φのとき、n(A∪B) = n(A) + n(B)
A∪B = Φのとき、n（A∪B） = n(A) + n(B) - n(A∩B)
※n()は集合の要素の個数を表す。
```

####4）全体集合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309361/4569533f-30a6-cd58-2c71-2d4e7d88771b.png)
ある集合Aの全てを要素とする集合<b>U</b>と言います。上に示すように部分集合Aが与えられたとき、<b>補集合</b>は次のように定義します。<b>全体集合Uに属するが、Aには属さない要素から成る集合</b>

####※）UとAと補集合の要素の個数について
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309361/f0fce713-e0ce-bb84-2d02-4b83ed8309e2.png)

##事象
集合は<b>場合の数</b>でよく使われたりします。「コインを投げたり」、「サイコロを振ったり」、同様のことを繰り返すことが可能な行為を<b>試行</b>といい、その結果、「表がでたり」、「偶数の目がでたり」するこれを<b>事象</b>と言います。実際このコインとサイコロを集合で表すと次のようになります。

```python:sample.py
i)コイン：U={表、裏}
ii)サイコロ:U={1,2,3,4,5,6}
```

このように、試行によって起きる<b>事象</b>は、全て<b>集合</b>によって表すことができるので、集合Aの<b>要素の個数n(A)</b>も、事象Aの<b>場合の数n(A)</b>と呼ぶことにします。
ここで注意することがありまして<b>場合の数</b>と<b>集合</b>では呼び方が異なるので、それを覚えておくとより良いと思います。

| 集合     | 場合の数 |   集合  |
|:-------:|:-------:|:------:|
| A∩B     |  積事象  | 共通部分 |
| A∪B     |  和事象  | 和集合  |
| 補集合A  |  余事象  | 補集合  |
| φ       |  空事象  | 空集合  |

##まとめに
今回の記事は集合につて学んでみました。これだけたと機械学習やデータ分析系には使われないかと思われるんですが、これを元で関数を作って微積分をやりながらデータを解析することになります。もう強い頭痛が来る感じです。次回は確率に入ります。

##修正
2019年9月29日 - 集合の説明の追加