【データサイエンス】探索的データ分析

# ０．はじめに																					
大学でデータサイエンスの講義を受講している者です。
あまりにも広範囲な分野であるため"広く浅く"情報整理したいため投稿。
内容のレベルは超入門編、個人的な感情も少し入り混じった備忘録。
（齟齬がある場合はご指摘いただけると助かります。）

#### データサイエンス学習全体像
[【データサイエンス】概要](https://qiita.com/AkihideKato/items/9dbce22bd87a9c8a3989)
[【データサイエンス】人工知能](https://qiita.com/AkihideKato/items/6381dd320ead9f893577)
[【データサイエンス】機械学習](https://qiita.com/AkihideKato/items/1db3312e8038bd75e89b)
[【データサイエンス】ディープラーニング](https://qiita.com/AkihideKato/items/92b0fb83b35ec08c4e02)
[【データサイエンス】分析の分類・確率分布](https://qiita.com/AkihideKato/items/6fdca6e22f03f0b9f17c)
[【データサイエンス】探索的データ分析](https://qiita.com/AkihideKato/items/9485e3f9803b1e8fe785)
[【データサイエンス】統計的検定](https://qiita.com/AkihideKato/items/8ff1b9bada50491b017c)
[【データサイエンス】予測モデリング](https://qiita.com/AkihideKato/items/ce8e697546d0424bea46)
[【データサイエンス】自然言語処理](https://qiita.com/AkihideKato/items/e545f36e268605fce9a6)
[【アルゴリズム】パーセプトロン](https://qiita.com/AkihideKato/items/fc9a8205154fe9b3090f)
[【データサイエンス】機械学習における関数](https://qiita.com/AkihideKato/items/6ec3b59ff581e7e3c4ad)
[【データサイエンス】確率](https://qiita.com/AkihideKato/items/c099772dfca7546a6802)
# １．探索的データ分析
パターンや傾向を分析する手法
以下の5種を記述する
- ``散布図``
- ``クラスター分析``
- ``主成分分析``
- ``因子分析``
- ``アソシエーション分析``
- ``探索木``

# ２．散布図
2つの変数の関係を見るときに用いる、あくまで相関関係を比べるときのグラフ
回帰線と同時に視覚化することにより推移・傾向が分かりやすいグラフ

### 2-1.散布図にもうひとつ変数を加えたい場合
バブルプロット図を用いる

### 2-2.散布図をバブルプロット図にする理由
バブルが密集してわかりずらい場合。対数メモリ（ログスケール）にする
バブルの大きさが一色淡になり分かりずらいため
グラフ例として、``「人間の聴覚 × 距離で"人間の聴覚はどのくらいの距離を把握できるのか"」``など変数が複数ある場合に用いると良い


# ３．クラスター分析
グループを見つける手法
同類を見つけるようなものなのでマーケティングや犯罪地域の特徴などから異常検知/不正防止予測に役立つ
クラスタリングはデータポイント間の距離に基づいて計算される
**``目的とするカテゴリーがない（正解の理論値が無い）為、教師なし学習となる``**

### 3-1.なぜ距離が重要なのか
データポイント間の距離が近いほど類似性を判断できるため
もちろん近いほど特徴や性質が似ている
距離を測定する方法は様々ある
- ``ユークリッド距離``
- ``マンハッタン距離...etc``

### 3-2.分類
クラスタ―分析におい多くあるが、主にここでは以下を扱う
階層内のさらに階層がある
- ``ｋ平均法クラスタリング``
- ``階層的クラスタリング``
    - ``凝集型階層クラスタリング``
        - ``ward法``
        - ``complete法``
    - ``分割型階層的クラスタリン``

#### 3-2-1.ｋ平均法クラスタリング
k-means法とも言う
何個のクラスターにするか事前に決める分析
補足：実際に分けたクラスターを視覚化し見てみると特徴ごとにグループ分けされていれば「良いクラスター分けがされているということ」

#### 手順
|順番|手順内容|
|---|---|
|**1**|データポイントを定める|
|**2**|1で事前に決めたデータポイントをクラスターの中心とする|
|**3**|2で決めた中心の周りにあるポイントをユークリッド距離を用いて<br>一番近いクラスターに配属させる、合併吸収させてるイメージ|
|**4**|配属がなくなるまで繰り返す|

#### 3-2-2.階層型クラスタリング
近い物から階層化したり積み上げたりしクラスタリングを作る手法
結果を樹形図として表す
２種類の手法がある
- ``凝集型階層クラスタリング``
- ``分割型階層的クラスタリング``

#### 3-2-3.凝集型階層クラスタリング
下から積み上げていく手法
まず1個からなるクラスターを設ける、その後はk平均と同様無くなるまで再配属させる
小さなクラスターを見つけるのに適してる
方法として``ward法``、``complete法``と複数の方法がある。特徴としては
- ``ward法``
ANOVAの発想と類似している方法
complete法よりかは荒い出力がされる
データのばらつきを最小化し、類似性を最大化することを重視する手法

- ``complete法``
最大距離を最小化することで、クラスタ内のデータ間の類似性を強調する手法

#### 3-2-4.分割型階層的クラスタリング
逆に上から始めて分割していく手法
大きなクラスターを見つけるのに役立つ
R言語関数としてはdiana()関数を用いる



# ４．主成分分析
### 4-1.概要
多くの変数を扱うデータを分かりやすいデータにするために圧縮する分析
２次元の軸に新しい軸を設定し１次元として表す（圧縮）することが目的
R言語ではprcomp()関数を利用する

### 4-2.特徴
分析において主成分を分けることはできるが、何の成分なのか解釈することは難しい
尚、主成分の抽出には特異値分解を用いている

### 4-3.特異値分解とは
行列を3つに分解する手法
分解すると特異値と特異ベクトルができる

### 4-4.分析結果
視覚化すると主成分ごとにデータグループが軸方向に寄るため、何の成分に影響されているかが明確になる

### 4-5.写像
x軸y軸それぞれに分類したクラスを射影しクラスタ分析する	
次元削減した後にクラスタ分析が可能となる	
高次元データを低次元に写像することでパラメータを発見する

# ５．因子分析
k-means法と同様にいくつの因子を取り出すのか事前に指定しなければいけない
指定する因子の数を推定するのに主成分分析を用いる場合がある
因子数を指定するためにスクリープロットというグラフを利用する場合がある

### 5-1.変数間の相関行列を計算すると関係が分かりやすい
相関行列とは相互に変数間の相関を計算しまとめたもの
ヒートマップを利用することで相関が高いものほど数値が上位である関係を見ることができる

### 5-2.主成分分析との違い
- #### 因子分析
互いに関連のある分散を元にし「要因」を発見するため
データの背後にある要因を追求する
**``データ間の相関を見比べる``**
	
- #### 主成分分析	
データの「構造・パターン」を把握するため
互いに相関のない新しい変数を用いてデータを縮約する
**``因子間の差を利用``**

# ６．アソシエーション分析
頻出するアイテムの組み合わせや関連性を抽出するために使用
大量のログ（ここではトランザクション）を利用し関連性を見つけ出す
有名なものとしてはマーケティングにも用いられており、ビールを買ったら何のおつまみを買う傾向があるか、など

方針を決めなければならない

### 6-1.アプリオリとは
相関ルールを抽出するアルゴリズム

### 6-2.アソシエーション分析の応用
#### 書籍推奨システム
#### データ
書籍の売上・読者の評価・読者名簿などがある
書籍データには本のタイトルや表紙の画像などを用いる
ユーザのデータにはIDや年齢などを用いる
読者の評価データには借りたユーザID、本のタイトルなどを用いる
**★それぞれデータごとに一対多の関連性がある**

#### 目的
読者が好みそうな本のタイトルを予測し次に読みたい本を推薦するシステムを構築する

#### 方針
協調フィルタリングの方法を使用する

### 6-3.協調フィルタリングとは
ユーザ同士の類似度を利用し推薦させる方法
似たユーザ同士の借りた書籍を抽出し提案させる
類似度を計算するため``コサイン類似度``を利用する

### 6-4.コサイン類似度とは
例として、3人のユーザがおりそれぞれ示すベクトルを用いる
このベクトルの角度に対して近しいもの同士を類似と解釈する

# ７．探索木
ロボットが迷路をゴールまで向かう場合に用いられる							
深さ優先探索、幅優先探索、最適探索と方法がある							
### 7-1.深さ優先探索						
縦型探索とも言われ突き進むような探索					
深さ優先探索アルゴリズム				
オープンリスト・クローズドリストを利用する			
そこからwhile文を使う			
- **``ステップ１``**　オープンリストに最初のフィールドを入れ、クローズドリストは初期化する		
- **``ステップ２``**　初動の探索したフィールドは探索したためクローズドリストへ			
初動の探索したフィールドに隣接しているフィールドをオープンリストへ			
- **``最終ステップ``**　２を繰り返し完了（ゴール）するまで行う			

### 7-2.幅優先探索						
横型探索、一方向ではなく分岐を探し出すような探索					
幅優先探索アルゴリズム				
深さ優先探索アルゴリズムと初期は同様			
オープンリスト・クローズドリストを利用する			
- **``ステップ１``**　オープンリストに最初のフィールドを入れ、クローズドリストは初期化する	
- **``ステップ２``**　初動の探索したフィールドは探索したためクローズドリストへ	
初動の探索したフィールドに隣接しているフィールドをオープンリスト「末尾」へ	
- **``最終ステップ``**　２を繰り返し完了（ゴール）するまで行う			

### 7-3.最適探索						
最適探索のアルゴリズム					
これまでのアルゴリズムと初期は同様				
ネットワークのOSPF経路コストのような概念と一緒				
経路ごとにコスト値がありリストに追加ごとに計算をしていく				
小さいコストから探索していきオープンリストからクローズドリストへ移動させる				
幅優先探索アルゴはオープンリスト末尾へ（キューにエンキュー）する					
深さ優先探索はオープンリスト先頭へ（スタックにプッシュ）する					
最適探索はコストを優先してオープンリストへ追加する