【kaggle】データの視覚化 - 棒グラフとヒートマップ【備忘翻訳】

# はじめに
当記事はkaggleのLearnの[Intro to Machine Learning](https://www.kaggle.com/learn/intro-to-machine-learning)の[Bar Charts and Heatmaps](https://www.kaggle.com/code/alexisbcook/bar-charts-and-heatmaps)を翻訳して備忘としたものです。
拙い英語力なので間違い等あればご指摘いただけたらと思います。

まとめ:[【kaggle】翻訳記事まとめ【備忘翻訳】](https://qiita.com/leafeon00000/items/71e57af5b2d9b0b7c846)
前:[【kaggle】データの視覚化 - 折れ線グラフ【備忘翻訳】](https://qiita.com/leafeon00000/private/6ff5e946e56cc42803e0)
次:[【kaggle】データの視覚化 - 散布図【備忘翻訳】](https://qiita.com/leafeon00000/private/29919ba816acb560e574)

:::note warn
当記事に含まれるコードはkaggle内のnotebook内で正常に動作します。動作を試したい場合はkaggleのnotebookで試してください。
:::

----

# 棒グラフとヒートマップ
いろや長さを使用してデータセット内のカテゴリを比較する

独自の折れ線グラフを作成できるようになったので、次はさらに多くの種類のグラフについて学習しましょう。

## notebookのセットアップ
いつものようにコーディング環境の設定から始めます。

<details><summary>セットアップ</summary>

```python
import pandas as pd
pd.plotting.register_matplotlib_converters()
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
print("Setup Complete")
```

```console:console
Setup Complete
```

</details>

## データセットの選択
このチュートリアルではフライトの遅延を追跡する米国運輸省のデータセットを使用します。

このCSVファイルをExcelで開くと、各月の行(1=1月、2=2月など)と各航空会社コードの列が表示されます。

![5nYs9se.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547651/87574864-0542-32b6-71bd-bca4ffedb101.jpeg)

各エントリには、異なる航空会社と月(すべて2015年)の平均到着遅延(分単位)が表示されています。マイナスのエントリは、(平均して)早く到着する傾向のあるフライトを示します。例えばアメリカン航空のフライト(航空会社コード:AA)は1月の平均到着時間が約7分遅れ、アラスカ航空のフライト(航空会社コード:AS)は4月の平均到着時間が約3分早くなりました。

## データを読み取る
以前と同様に、`pd.read_csv`コマンドを使用してデータを読み込みます。

```python
# Path of the file to read
flight_filepath = "../input/flight_delays.csv"

# Read the file into a variable flight_data
flight_data = pd.read_csv(flight_filepath, index_col="Month")
```

前回のチュートリアルで使用したコードよりもコードが少し短いことに気付くかもしれません。この場合、行ラベル(「`Month`」列)は日付に対応していないため、カッコ内に`parse_data=True`を追加しません。ただし、最初の２行のコードは変わりません。

## データを調査する
今回のデータセットは小さいので、その内容を全て簡単に表示できます。これはデータセットの名前だけを記述するだけでできます。

```python
# Print the data
flight_data
```

| | |AA|AS|B6|DL|EV|F9|HA|MQ|NK|OO|UA|US|VX|WN|
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
||Month|||||||||||||||
|1|6.955843|-0.320888|7.347281|-2.043847|8.537497|18.357238|3.512640|18.164974|11.398054|10.889894|6.352729|3.107457|1.420702|3.389466|
|2|7.530204|-0.782923|18.657673|5.614745|10.417236|27.424179|6.029967|21.301627|16.474466|9.588895|7.260662|7.114455|7.784410|3.501363|
|3|6.693587|-0.544731|10.741317|2.077965|6.730101|20.074855|3.468383|11.018418|10.039118|3.181693|4.892212|3.330787|5.348207|3.263341|
|4|4.931778|-3.009003|2.780105|0.083343|4.821253|12.640440|0.011022|5.131228|8.766224|3.223796|4.376092|2.660290|0.995507|2.996399|
|5|5.173878|-1.716398|-0.709019|0.149333|7.724290|13.007554|0.826426|5.466790|22.397347|4.141162|6.827695|0.681605|7.102021|5.680777|
|6|8.191017|-0.220621|5.047155|4.419594|13.952793|19.712951|0.882786|9.639323|35.561501|8.338477|16.932663|5.766296|5.779415|10.743462|
|7|3.870440|0.377408|5.841454|1.204862|6.926421|14.464543|2.001586|3.980289|14.352382|6.790333|10.262551|NaN|7.135773|10.504942|
|8|3.193907|2.503899|9.280950|0.653114|5.154422|9.175737|7.448029|1.896565|20.519018|5.606689|5.014041|NaN|5.106221|5.532108|
|9|-1.432732|-1.813800|3.539154|-3.703377|0.851062|0.978460|3.696915|-2.167268|8.000101|1.530896|-1.794265|NaN|0.070998|-1.336260|
|10|-0.580930|-2.993617|3.676787|-5.011516|2.303760|0.082127|0.467074|-3.735054|6.810736|1.750897|-2.456542|NaN|2.254278|-0.688851|
|11|0.772630|-1.916516|1.418299|-3.175414|4.415930|11.164527|-2.719894|0.220061|7.543881|4.925548|0.281064|NaN|0.116370|0.995684|
|12|4.149684|-1.846681|13.839290|2.504595|6.685176|9.346221|-1.706475|0.662486|12.733123|10.947612|7.012079|NaN|13.498720|6.720893|

## 棒グラフ
例えば、スピリット航空(航空会社コード:NK)のフライトの平均到着遅延を月別に示す棒グラフを作成するとします。

```python
# Set the width and height of the figure
plt.figure(figsize=(10,6))

# Add title
plt.title("Average Arrival Delay for Spirit Airlines Flights, by Month")

# Bar chart showing average arrival delay for Spirit Airlines flights by month
sns.barplot(x=flight_data.index, y=flight_data['NK'])

# Add label for vertical axis
plt.ylabel("Arrival delay (in minutes)")
```

```console:console
Text(0, 0.5, 'Arrival delay (in minutes)')
```

![__results___7_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547651/1fbd0e24-2bad-8da9-b52a-6e6da3164ff6.png)

テキスト(タイトルとラベル)と図のサイズをカスタマイズするためのコードは前のチュートリアルのコードと同じです。棒グラフを作成するコードは新しいものです:

```python 
# Bar chart showing average arrival delay for Spirit Airlines flights by month
sns.barplot(x=flight_data.index, y=flight_data['NK'])
```

主に3つの要素から成り立っています。

* `sns.barplot` - notebookで棒グラフを作成します。
* `x=flight_data.index` - 水平軸で使用するものを決定します。この場合、行にインデックスを付ける列(この場合は、month)を選択します。
* `y=flight_data['NK']` - これにより、垂直軸に表示される列を設定します。この場合は「NK」列を選択しています。

## ヒートマップ
次は**ヒートマップ**を学びます。

以下のコードセルでは、`flight_data`のパターンを素早く視覚化するためのヒートマップを作成します。各セルは、対応する値に応じて色分けされています。

```python
# Set the width and height of the figure
plt.figure(figsize=(14,7))

# Add title
plt.title("Average Arrival Delay for Each Airline, by Month")

# Heatmap showing average arrival delay for each airline by month
sns.heatmap(data=flight_data, annot=True)

# Add label for horizontal axis
plt.xlabel("Airline")
```

```console:console
Text(0.5, 47.7222222222222, 'Airline')
```

![__results___9_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547651/e9c74e32-4c5a-c2b6-ab1d-528300f45b4f.png)

ヒートマップを作成するための関連コードは次の通りです:

```python
# Heatmap showing average arrival delay for each airline by month
sns.heatmap(data=flight_data, annot=True)
```

このコードは主に3つの要素から成り立っています。
* `sns.heatmap` - notebookでヒートマップを作成します。
* `data=flight_data` - これはnotebookに、`flight_data`内の全てのエントリを使用してヒートマップを作成します
* `annot=True` - これにより、各セルの値がグラフ上に表示されます(これを省略すると、各セルから数字が消えます!)

表にはどのようなパターンが見られますか？例えば、よく見ると、年末の月(特に9~11月)は全ての航空会社にとって比較的暗く見えます。これは、航空会社がこれらの月の間にスケジュールを(平均して)よりよく守っていることを示唆しています。