ヒストグラムをPython matplotlibで作成するなら、Jupyter Notebook と VS Code の組み合わせが良さそう 

# 0. 概要

　以前、クルマの燃費を計測して走行ごとのばらつきを調べるのにヒストグラムを作りたく、[Node.js、Express、MySQLとChart.jsを駆使して作る記事](https://qiita.com/naoto_deuxchats/items/7a4d2f274cf24fe8d00a)を書きました。やりたいことは出来ていたのですが、Pythonを使うともっと簡単にできるらしいということで試してみたら、大幅に簡単でした。Pythonにもいろいろやり方がありそうですが、ローカルにある多くのファイルから作成する使い方で、コードとグラフを並べて見栄えを調整するなら、Pycharm、GoogleColaboratory より、Jupyter Notebook を VS Code で操作する使い方が使いやすいと感じました。以下、詳細です。

# 1. Python 動作環境

　Pythonの動作環境にもいろいろあるようで迷いましたが、まずは手軽にできそうなPycharmを使ってみました。

 - PyCharm 2024.1.4 (Community Edition)
 - Python 3.12.4
 - matplotlib 3.9.1

# 2. ヒストグラムを書くコード

なんと、Pythonのグラフ作成パッケージ Matplotlib を使うと、例えば正規分布に従う乱数をヒストグラムにするには、

```python
import numpy as np
import matplotlib.pyplot as plt

# 平均 50, 標準偏差 10 の正規乱数を1,000件生成
x = np.random.normal(50, 10, 1000)

# ヒストグラムを出力
plt.hist(x)
plt.show()
```
を実行するだけ[^1]らしい！ 以前の、MySQLを使って集計し、MySQLはバックグラウンドじゃないと動かないというのでNode.js、Expressを駆使して[^2]、とやっていたのに比べるとはるかに簡単！hist()の中に区切りの数を変更したりカスタマイズが出来るという．．．

さっそく、Pycharm で新プロジェクトを作って実行してみました。確かにこの数行のコマンドでヒストグラムが生成できている！
![matplotlib_hist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335076/992a5f92-6bbe-8f30-d42c-0f79edad40b8.png)


[^1]:[matplotlib でヒストグラムを描く](https://pythondatascience.plavox.info/matplotlib/%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0)

[^2]:https://qiita.com/naoto_deuxchats/items/7a4d2f274cf24fe8d00a

# 3. Pythonコンソールで実行してみる

　今、このコードを実行するのに、メニューバーの実行ボタンを押すか、ファイル名のあたりを右クリックして出てくるメニューから"実行"を選択しました。これでもいいのですが、Pythonは対話形式で実行結果を見ながらコマンドを順番に入力して実行することもできるはずですよね。グラフを作るときのように、毎回ライブラリーをインポートしなくても、hist()内の区切りやオプションの選択を試したりもしたいですね。”Python コンソール”での実行を試しました。すると、上で試したコードだけではエラーが出ます。

![Backend が必要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335076/02761639-f485-6e5a-605a-24790ec02a2f.png)

 > Backend tkagg is interactive backend. Turning interactive mode on.

と表示されたら
```
import matplotlib
matplotlib.use('TkAgg',force=True)
```
などと入力してから`plt.hist()`を実行する必要があるそうです。入力画面とは別に、グラフ化のプログラムの作動する"バックエンド"があって、そのバックエンドが起動できないとエラーになるそうです[^3]

[^3]:[CUI環境](https://www2.yukawa.kyoto-u.ac.jp/~koudai.sugimoto/dokuwiki/doku.php?id=python:matplotlib:cui%E7%92%B0%E5%A2%83)

　結果、Python コンソールにコードを入力しても無事にヒストグラムを作ることができました。ちなみに、バックエンドには`MacOSX, QtAgg, GTK4Agg, Gtk3Agg, TkAgg, WxAgg, Agg`がある[^4]そうです。詳細もこのMatplotlibのドキュメントに記載ありました。

![pythonコンソールの場合.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335076/1afc653e-3b64-b8a7-f269-1d7940185469.png)

[^4]:[Backends](https://matplotlib.org/stable/users/explain/figure/backends.html)

# 4. Jupyter Notebookを使ってみる
## 4.1. Google Colabを使ってみる

　ヒストグラムが別のウィンドウに出てくるよりは、同じ画面上(同じページ？)で見たいなぁ、と思っていたら、"Jupyter Notebook" が目につきました。これなら同じ画面上(同じページ？)で見やすいのでは、と思います。では早速、と思ったら、"Jupyter Notebook" にもいろいろ、やり方があり、Google Colab がお手軽で良さそうに思えました。

　Google Colabでノートブックを新規で作成し、「実行」ボタンを押します。うん、これならコードのすぐ下にヒストグラムが表示されてるので、思っていたイメージに近いと思います。

<img width= 400 alt="Google Colab.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335076/c65d1ef5-3dd5-1dba-76b9-e5f0bd17544e.png">

ただ、ここで一つ問題が発生しました。もともと、多くのクルマの走行データ(時系列データ)から走行ごとの燃費を出して、それを月間や年間の燃費のヒストグラム出したかったのですが、その時系列のデータから集計する部分も同時に処理しようとすると、多くの時系列データをGoogle Colab にアップロードするか、Google ドライブを使ったりする必要がありそうです。データ自体はローカルにあるからな．．．

## 4.2. VS Codeで使う

ローカルで使う方法を探そうと、.ipynbファイルをダウンロードし、何気にダブルクリックしたところ、VS Codeが立ち上がりました。あれ、VS Code 使える？ということで調べてみると、使えるらしい。

<img width= 400 alt="VS codeの場合.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335076/533c6556-8187-ef4f-e9c1-480d09a8a8b3.png">

これだったら、ローカルのファイルも気軽に読み込めるし、当面これが一番気楽と感じました。

- Visual Studio Code
  - バージョン: 1.92.0 (user setup)

ちなみに、では、Pycharmではできないの？と思って調べてみると、PyCharm Professional が必要らしい．．．残念。

<img width= 400 alt="PycharmでJuypiterNotebook.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335076/9334a117-0efc-80f9-4df2-2b9fd3427260.png">

# 5. まとめ

　ローカルにある多くのファイルから作成する使い方で、コードとグラフを並べて見栄えを調整するなら、Jupyter Notebook を VS Code で操作する使い方が使いやすいと感じました。