【kaggle】データの視覚化 - 折れ線グラフ【備忘翻訳】

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

まとめ:[【kaggle】翻訳記事まとめ【備忘翻訳】](https://qiita.com/leafeon00000/items/71e57af5b2d9b0b7c846)
前:[【kaggle】データの視覚化 - Hello, Seaborn【備忘翻訳】](https://qiita.com/leafeon00000/private/6ba7222a787332d6130c)
次:[【kaggle】データの視覚化 - 棒グラフとヒートマップ【備忘翻訳】](https://qiita.com/leafeon00000/private/3a2a9c28a305553f8a67)

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

----

# 折れ線グラフ
時系列でトレンドを可視化

コーディング環境に慣れたら、次は独自のチャートを作成する方法を学びましょう。

このチュートリアルでは本格的な**折れ線グラフ**をPythonで作成する方法を学びましょう。今回の演習では実際のデータセットを用いて新しいスキルを活用してみましょう。

## notebookのセットアップ
まず、コーディング環境のセットアップから始めます。

<details><summary>details</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>

## データの選択
このチュートリアルのデータセットは、音楽ストリーミングサービス[Spotify](https://en.wikipedia.org/wiki/Spotify)における世界中のデイリーの再生数を追跡します。2017年から2018年における5つの人気の楽曲に注目します。
1. Ed Sheeranの「Shape of You」[link](https://bit.ly/2tmbfXp)
1. Luis Fonziの「Despacito」[link](https://bit.ly/2vh7Uy6)
1. The Chainsmokers and Coldplayの「Something Just Like This」[link](https://bit.ly/2OfSsKk)
1. Kendrick Lamarの「HUMBLE.」[link](https://bit.ly/2YlhPw4)
1. French Montanaの「Unforgettable」[link](https://bit.ly/2oL7w8b)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547651/b383aca1-fc84-b3c3-e3aa-7176b9f203a6.png)

最初に表示される日付は2017年1月6日であり、これはEd Sheeranの「Shape of You」のリリース日と一致していることに注目してください。表を見ると、「Shape of You」はリリース当日に世界中で12,287,078回再生されたことがわかります。他の曲は後になってからリリースされたため、最初の行に欠損値があることに注目してください。

## データの取り込み
前のチュートリアルで学習したように、`pd.read_csv`コマンドを使用してデータセットを読み取ります。

```python
# Path of the file to read
spotify_filepath = "../input/spotify.csv"

# Read the file into a variable spotify_data
spotify_data = pd.read_csv(spotify_filepath, index_col="Date", parse_dates=True)
```

上記のコードを実行した結果、`spotify_data`を使用してデータセットにアクセスできるようになります。

## データの調査
前のチュートリアルで学習した`head`コマンドを使用して、データセットの最初の5行を表示します。

```python
# Print the first 5 rows of the data
spotify_data.head()
```

| |Shape of You|Despacito|Something Just Like This|HUMBLE.|Unforgettable|
|-----|-----|-----|-----|-----|-----|
|Date| | | | | |
|2017-01-06|12287078|NaN|NaN|NaN|NaN|
|2017-01-07|13190270|NaN|NaN|NaN|NaN|
|2017-01-08|13099919|NaN|NaN|NaN|NaN|
|2017-01-09|14506351|NaN|NaN|NaN|NaN|
|2017-01-10|14275628|NaN|NaN|NaN|NaN|

表示された最初の5行が、上記のデータセットのイメージ(Excelで表示されていたイメージ)と一致していることを確認します。

> 空のエントリは、「Not a Number」の略である`NaN`として表示されます。

少し変更するだけで(`.head()`を`.tail()`に変更)、データの最後の5行を確認することもできます。

```python
# Print the last five rows of the data
spotify_data.tail()
```

| |Shape of You|Despacito|Something Just Like This|HUMBLE.|Unforgettable|
|-----|-----|-----|-----|-----|-----|
|Date| | | | | |
|2018-01-05|4492978|3450315.0|2408365.0|2685857.0|2869783.0|
|2018-01-06|4416476|3394284.0|2188035.0|2559044.0|2743748.0|
|2018-01-07|4009104|3020789.0|1908129.0|2350985.0|2441045.0|
|2018-01-08|4135505|2755266.0|2023251.0|2523265.0|2622693.0|
|2018-01-09|4168506|2791601.0|2058016.0|2727678.0|2627334.0|

ありがたいことに、それぞれの曲の毎日のグローバルストリームが何百万回も記録されており、全てがほぼ正しいように見えます。データのプロットに進みましょう。

## データのプロット
データセットがnotebookに読み込まれました。折れ線グラフを作成するために必要なコードは1行だけです。

```python
# Line chart showing daily global streams of each song 
sns.lineplot(data=spotify_data)
```

```console:console
<AxesSubplot:xlabel='Date'>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547651/255df072-9130-3d77-3cd4-952c728f3e70.png)

上記のように、コードは比較的短く、2つの要素で構成されています。
* `sns.lineplot`は、折れ線グラフを作成するコードです
* `data=spotify_data`は、グラフの作成に使用するデータを選択します

折れ線グラフを作成するときは常にこの同じ形式を使用し、新しいデータセットで変更されるのは、データセットの名前のみであることに注意してください。したがって、たとえば`financial_data`という名前の別のデータセットを操作している場合、コードは次の様になります。

```python
sns.lineplot(data=financial_data)
```

図のサイズやグラフのタイトルなど、変更したい追加の詳細がある場合もあります。それらの各オプションは1行のコードで簡単に設定できます。

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

# Add title
plt.title("Daily Global Streams of Popular Songs in 2017-2018")

# Line chart showing daily global streams of each song 
sns.lineplot(data=spotify_data)
```

```console:console
<AxesSubplot:title={'center':'Daily Global Streams of Popular Songs in 2017-2018'}, xlabel='Date'>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547651/b7b7474e-1a9e-728d-c4cf-67153715ddc8.png)

最初のコードは、図のサイズを14インチ(幅) x 6インチ(高さ)に設定しています。図のサイズをカスタマイズしたい場合は、14と6の値を目的の値に変更してください。

コードの2行目は図のタイトルを設定します。タイトルは引用符(`"..."`)で囲む必要があります。

## データのサブセットをプロットする
これまで、データセットないの全ての列を折れ線グラフにプロットする方法を学習しました。このセクションでは、列のサブセットをプロットする方法を学習します。

まず、全ての列の名前を表示します。これは1行のコードだけで実行でき、データセットの名前(spotify_data)を書き換えるだけで、任意のデータセットの列名を表示させることができます。

```python
list(spotify_data.columns)
```

```console:console
['Shape of You',
 'Despacito',
 'Something Just Like This',
 'HUMBLE.',
 'Unforgettable']
```

次のコードでは、データセットの最初の2つの列のみの折れ線グラフをプロットします。

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

# Add title
plt.title("Daily Global Streams of Popular Songs in 2017-2018")

# Line chart showing daily global streams of 'Shape of You'
sns.lineplot(data=spotify_data['Shape of You'], label="Shape of You")

# Line chart showing daily global streams of 'Despacito'
sns.lineplot(data=spotify_data['Despacito'], label="Despacito")

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

```console:console
Text(0.5, 0, 'Date')
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547651/896cbed9-c2c4-7dd6-b4b8-aad5c814e833.png)

コードの最初の2行は、図のタイトルとサイズを設定しています。

次の2行はそれぞれ折れ線グラフに線を追加します。「Shape of You」の線を追加する最初の行を見てみましょう。

```python
# Line chart showing daily global streams of 'Shape of You'
sns.lineplot(data=spotify_data['Shape of You'], label="Shape of You")
```

このコードは全ての列をプロットした際のコードと非常によく似ていますが、いくつか大きな違いがあります:

* `data=spotify_data`を設定する代わりに`data=spotify_data['Shape of You']`を設定しています。一般的に、1つの列のみをプロットするには、列名をシングルクオテーションで囲み、角括弧で囲むこの形式を使用します。
* また、凡例に線が表示されるように`label="Shape of You"`を追加し、対応するラベルを設定します。
* 最後の行のコードは、水平軸(x軸)のラベルを変更します。必要なラベルは引用符(`"..."`)で囲まれます。