【Python】データ分析の序盤でよく使う手法メモ


Kaggleなどでデータ分析を行う際の探索的データ解析（EDA）の段階で、
データの構造を把握する目的で自分自身がよく使う便利な関数やライブラリをまとめました。

データはKaggleのTitanicのTrainデータを使用します
https://www.kaggle.com/c/titanic/data

###**■ライブラリの読み込み**

```py
import numpy as np
import pandas as pd
```

###**■データの読み込み**

```py
df = pd.read_csv('titanic/train.csv')
```
###**■データの基本情報、基本統計量の出力**

- **まずは最初の5行までを出力し、データを実際に見てみる**

```py
df.head()
#()に行数を入力し出力行数を変更可能
```
<img width="1023" alt="Screen Shot 2019-02-09 at 19.37.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/cbf92919-3fd1-8eb4-e3ca-e785b83f2ae9.png">

- **要約統計量を出力**

```py
df.describe()
```
<img width="640" alt="Screen Shot 2019-02-09 at 19.39.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/e0dd7b83-3c5b-6241-f392-81e18be6aec7.png">

- **オブジェクト型の要素数、ユニーク数、最頻値、最頻 値の出現回数を表示**

```py
df.describe(include = 'O')
```
<img width="630" alt="Screen Shot 2019-02-09 at 19.54.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/9931b764-9d93-264c-b177-6592dcb5b5f4.png">



- **全列の（データ数、nullの有無、データ型）を表示**

```py
df.info()
```
<img width="320" alt="Screen Shot 2019-02-09 at 19.43.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/ea6839b4-319c-1116-45c6-a9cef9992db5.png">



- **その他便利なコマンド**

```py
df.tail() #最後から5行表示
df.shape #(行数, 列数)を表示
df.size #データ数を表示
df.dtypes #データ型を表示
df.columns #列一覧を表示
df.corr() #全列の相関係数表示
```

###**■pandas-profilingでプロファイリング**

2行のコードで、読み込むデータの様々な情報をグラフを含めて出力できます

```py
import pandas_profiling #インポート
pandas_profiling.ProfileReport(df) #実行
```

**別記事で詳しく解説しています**
https://qiita.com/ryo111/items/705347799a984acd5d08


###**■各列のユニーク値の種類数を表示**
```py
df.apply(lambda x: x.nunique())
```
<img width="173" alt="Screen Shot 2019-02-09 at 22.19.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/5b4ec96e-5c59-27e5-bade-399284d3304f.png">

###**■各列の欠損値の確認**

```py
df.isnull().sum()
```
<img width="158" alt="Screen Shot 2019-02-09 at 22.24.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/73ce5d3d-1422-cb26-98e9-a144c5281c4c.png">


###**■指定の列の他の列との相関係数を表示**

目的変数を入力すれば、他の変数との相関関係をシンプルに出力できるので便利

```py
df.corr()["Survived"].sort_values()
```
<img width="255" alt="Screen Shot 2019-02-10 at 18.33.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/a7ba58eb-b3d8-5dd6-d915-f5829bc78a8e.png">


###**■数値データ（もしくはオブジェクトデータ）の列のみのインデックスを出力**

```py
#数値データのみ
df.select_dtypes(include=[np.number]).columns
```
<img width="754" alt="Screen Shot 2019-02-09 at 21.08.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/1c6d1b1a-78cb-d18e-c242-7314a0e70c94.png">

```py
#オブジェクトデータのみ
df.select_dtypes(include=[np.object]).columns
```
<img width="568" alt="Screen Shot 2019-02-09 at 21.08.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/060aa648-ca37-480a-582e-f13f78b529eb.png">


###**■指定したオブジェクトデータ列の項目を表示**

```py
df["Embarked"].unique()
```

<img width="337" alt="Screen Shot 2019-02-09 at 22.09.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/2043e340-1c1c-05e7-6c00-8e5e13cb5e7e.png">

###**■指定したオブジェクトデータ列の項目別の数量を表示**

```py
df['Embarked'].value_counts()
```
<img width="236" alt="Screen Shot 2019-02-09 at 22.05.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/ecb5ffad-0924-1d53-bd0c-f397065ae63f.png">


###**■グループバイによる集計**

- 性別('Sex')ごとに各変数の平均値(mean)を出力

```py
df.groupby('Sex').mean()
```
<img width="567" alt="Screen Shot 2019-02-09 at 22.00.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/2d21cccd-2a82-6e7c-a2c9-db060d771bf5.png">


###**■ピボットによる集計**

- 性別('Sex')をインデックス、乗船場所('Embarked')をカラムとした、生存者('Survived')の合計(sum)の表を出力

```python:
df.pivot_table(values='Survived', index='Sex', columns='Embarked', aggfunc='sum')
```
<img width="164" alt="Screen Shot 2019-02-09 at 23.49.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/278569/e412096d-7a30-452c-88dd-904cf8dd428a.png">


**通常の分析では、ここからさらにグラフを活用しデータの構造をビジュアルで把握していきます。**
**その際の手法は下記リンク先の別記事でまとめておりますのでご覧ください。**
https://qiita.com/ryo111/items/bf24c8cf508ad90cfe2e

**その他、欠損値処理のまとめ記事もよろしければご覧ください。**
https://qiita.com/ryo111/items/4177c732cc9801bccb17