データ分析用パーツ集

#データ分析用パーツ集
- 履歴
  - 2021/01/21 ver1

```version.cmd
python --version
:: Python 3.7.6
jupyter --version
:: jupyter core     : 4.6.1
:: jupyter-notebook : 6.0.3
:: qtconsole        : 4.6.0
:: ipython          : 7.12.0
:: ipykernel        : 5.1.4
:: jupyter client   : 5.3.4
:: jupyter lab      : 1.2.6
:: nbconvert        : 5.6.1
:: ipywidgets       : 7.5.1
:: nbformat         : 5.0.4
:: traitlets        : 4.3.3
```

## パッケージ

```import.py
import pandas as pd #データ解析を支援する機能を提供するライブラリ
import numpy as np #数値計算の拡張モジュール 
import matplotlib #データビジュアライズに関するパッケージ
import matplotlib.pyplot as plt # 自動的にプロットするためのインターフェース、らしい
from datetime import datetime as dt #日付や時刻を操作するためのモジュール
from sklearn.preprocessing import StandardScaler #データ標準化用モジュール

```

### matplotlib内で日本語を扱う
参照元： [matplotlibで日本語](https://qiita.com/yniji/items/3fac25c2ffa316990d0c)

```matplot_japanese.py
from matplotlib import rcParams
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Hiragino Maru Gothic Pro', 'Yu Gothic', 'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'VL PGothic', 'Noto Sans CJK JP']
```
### 表示するグラフや画像のサイズ
```figsize.py
plt.figure(figsize=(20,2))
```
## データの入出力
### SQLから読み込み

```
#SQL
import pymysql
import sqlalchemy
from sqlalchemy import create_engine

#接続情報
url = 'mysql+pymysql://root:XXXX@127.0.0.1:3306/databasename?charset=utf8'
engine = sqlalchemy.create_engine(url, echo=False)
#実行
query = "SELECT * FROM Table"
dataset = pd.read_sql(query,con = engine)
```

### CSVの入出力

```csv.py
dataset = pd.read_csv("pass of csv", encoding = "utf-8")
dataset.to_csv("pass of csv", encoding="shift-jis")
```

### クリップボードに出力

```clipboard.py
!pip install pyperclip
import pyperclip
pyperclip.copy(STR_XXX)

```
## 前処理的な
### 内容の確認

```info.py
dataset.info()
dataset.describe() #max,min,mean,std,四分位数等 
```

### 整形

```index.py
#データフレームにインデックスの設定
dataset2 = dataset.set_index('StoreCD')
#型変更
dataset['colum']=dataset['colum'].astype(int)
```

###データフレームの分解と結合
- クロス集計されたデータを単純なROWデータに分解する

```melt_concat.py
#データフレームの分解
meltDF1 = pd.melt(dataset,id_vars='index_column',var_name='horizon_axis_column_name',value_name='value_column_name')
```
```
#データフレームの結合
concatDF = pd.concat([meltDF1,meltDF2]) 
```

### NULL値の処理

```null.py
dataset.fillna(0,inplace=True) #0埋め
dataset.isnull() #データフレーム全体で確認
dataset.isnull().any() #列ごとに確認
```
### ダミー変数

```dummy.py
target_col = 'a'
str_colmns = ['b','c','d'] #数値でない列
dummie_cols = ['b'] #数値でない列の中でダミー化したい列
exclude_cols = [col for col in str_colmns if col not in dummie_cols] #
#ダミー変数化
df = pd.get_dummies(data=df, columns=dummie_cols)
#ダミー化した後の列から特徴量として利用する列を指定する
feature_cols = [col for col in df.columns if col not in exclude_cols]
　
```
##可視化と探索
### 項目間の相関係数をとる

```corr.py
corrDF = df[feature_cols].corr()
```

### ヒートマップ

```heatmap.py
import seaborn as sns
sns.heatmap(corrDF,annot=False) #annot=Trueで数値を表示する
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605891/8efa35fc-8505-710e-bb36-99c679cd4ae6.png)

### 重なる棒グラフ

```distplot.py
import seaborn as sns
g=sns.FacetGrid(df,hue="target_column",height=3)
g.map(sns.distplot,"feature_column",kde=False)
g.add_legend()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605891/31b7c6e8-f837-c155-5498-8c9c26f8c69d.png)

### seabornの色設定
- 連動した色設定にすることができる

```color.py
flatui = ['#969696', '#DA5019']
sns.set_palette(flatui)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605891/69ae8d46-e0b4-8313-47a5-2a9d5bd169ad.png)


## comment
- 過去のコードから探し出してコピペするのが面倒なので