YouTubeでよく見る動くグラフをローカル環境で作成した

こんにちは。:slight_smile:
[CYBIRD Advent Calendar 2023](https://qiita.com/advent-calendar/2023/cybird)の3日目担当の@suzu_ayaです。
2日目は@koronekoさんの「ChatGPTの活用例　〜アドベントカレンダーのネタを相談してみた〜」でした。

## 1. 初めに
動くグラフ自体は、オンラインで作成してくれるサービスが色々ありますが、社内のデータで作成することもあり外部サービスで使用せずに、ローカル環境で作成することにしました。

ローカル環境では、Pythonで作成できるとのことで、Pythonを初めて触ることに。
すでに色々な方が作成方法を公開されておりますが、ところどころ詰まってしまったので備忘録として。

## 2. 必要環境のインストール

#### 2-1. Pythonのインストール
以下を参考に、インストール作業を行いました。
私の環境は、Windows10でPythonの実行にはPowerShellを使用しました。

https://www.python.jp/install/install.html

#### 2-2. Pythonライブラリのインストール
動くグラフ作成のため、Pythonのライブラリをインストールします。

- <strong>bar_chart_race</strong>
動くグラフ(bar_chart_race)のライブラリです。
```powershell
python -m pip install bar_chart_race
```

- <strong>pandas</strong>
データの読み取りや集計処理、時系列データの処理に必要です。
基本的には、上のbar_chart_raceのインストール時に一緒にインストールされるかと思います。
```powershell
python -m pip install pandas
```

- <strong>japanize-matplotlib</strong>
グラフに日本語表記を使用する際に必要です。
日本語表記がない場合は、インストールする必要はありません。
```powershell
python -m pip install japanize-matplotlib
```

#### 2-3. ffmpegのインストール
動くグラフの動画ファイルを作成するのに必要になります。
インストール方法は以下を参照してください。

https://jp.videoproc.com/edit-convert/how-to-download-and-install-ffmpeg.htm

## 3. 動くグラフの作成
実際に動くグラフの作成をしていきます。


#### 3-1. ファイルの準備
作成のためのサンプルデータは、以下のbar_chart_raceのgithubからDLして使用しました。

[チュートリアル用データ](https://github.com/dexplo/bar_chart_race/blob/master/data/covid19_tutorial.csv)

DLしてきたファイルと同じ階層に実行用のPythonファイルを作成します。
ファイル名は何でも大丈夫ですが、使用するライブラリ(bar_chart_raceやpandas)と同一の名前は避けてください。実行できなくなります。

私は、graph.py というファイル名で作成しました。

#### 3-2. 実装

まずは、必要なライブラリをimportします。
```python:graph.py
import bar_chart_race as bcr
import pandas as pd
```

使用するのは、事前にインストールしておいた``bar_chart_race``と``pandas``。

続いて、グラフにするデータファイルを読み込みます。
```python:graph.py
df = pd.read_csv('covid19_tutorial.csv', index_col = 0)
```
使用するファイルの1行目がラベル行なので、``index_col = 0``でその指定を行います。
参考：https://note.nkmk.me/python-pandas-read-csv-tsv/#indexcsv-index_col

ファイルを読み込んだら、そのデータをもとに動くグラフを作成します。
```python:graph.py
bcr.bar_chart_race(df = df, filename = 'output.mp4')
```
作成した動くグラフを、``output.mp4``というファイルで出力しています。

ファイル全体としては、こんな感じです。
```python:graph.py
import bar_chart_race as bcr
import pandas as pd

df = pd.read_csv('covid19_tutorial.csv', index_col = 0)

bcr.bar_chart_race(df = df, filename = 'output.mp4')
```
このファイルを、
```powershell
py graph.py
```
で実行すると、同じ階層にoutput.mp4という動くグラフが作成されます。

結構簡単にできました。

#### 3-3. 応用
今回は、1行目がラベル行となるファイルを使用しましたが、以下のようなcsvの形式でも可能です。
先ほどと同じ、covid19_tutorial.csvを少しいじって、``covid19_tutorial_other.csv``として保存しました。

```csvs:covid19_tutorial_other.csv
date,count,country
2020/4/3,1143,Belgium
2020/4/3,3326,China
2020/4/3,6520,France
2020/4/3,1275,Germany
2020/4/3,3294,Iran
2020/4/3,14681,Italy
2020/4/3,1490,Netherlands
2020/4/3,11198,Spain
2020/4/3,7418,USA
2020/4/3,3611,UnitedKingdom
2020/4/4,1283,Belgium
2020/4/4,3330,China
2020/4/4,7574,France
2020/4/4,1444,Germany
2020/4/4,3452,Iran
2020/4/4,15362,Italy
2020/4/4,1656,Netherlands
2020/4/4,11947,Spain
2020/4/4,8387,USA
2020/4/4,4320,UnitedKingdom
```

以下略。
このような形式のファイルの場合、動くグラフを作る前にひと手間かかります。

```python:graph.py
df = pd.read_csv('covid19_tutorial_other.csv')
df = df.pivot_table(index='date', columns='country', values='count')
```
今回は読み込みの際にラベル行の指定は行いません。
読み込み後、``df.pivot_table``でデータの変換を行います。
index：結果表の行見出しカラム
columns：結果表の列見出しカラム
values：結果表のそれぞれに表示する値
この結果、内部的には最初に使用した``covid19_tutorial.csv``と同じデータ形式になっています。

参考：https://qiita.com/decr/items/afb5c9ab7dca419c5403

後は、動くグラフ作成用の記述を行えばOKです。

#### 補足
グラフのラベルやタイトルなどに日本語の表記を使用したい場合import部分に、
```python:graph.py
import japanize_matplotlib
```
と記述すれば日本語を使用できます。

今回はシンプルなグラフを作成しまいたが、オプションをつけることで色々と見栄えのするグラフが作成できるようになります。

https://www.dexplo.org/bar_chart_race/tutorial/

## 4.最後に

実際に作成して、とある内容をチーム内で発表する時の資料として使用したのですが、単純に数字だけを表で見てもらうよりも、動的に時系列の変化がわかるため、インパクトがあり、かつ、パッとわかりやすいものになったのかなと思いました。
皆様のプレゼン資料等のクオリティアップにつながれば幸いです。

[CYBIRD Advent Calendar 2023](https://qiita.com/advent-calendar/2023/cybird) 4日目は@ayany0_zzZさんの「快適なデスクワークのために！ハッピーライフハック5選！」です。
お楽しみに！！:blush: