Pythonを使ってデータを可視化してみた（時系列データ matplotlib）

# この記事について
Pythonと言えばデータの可視化。
可視化と言えばPython。
ということで今回はデータを以下の図のようにグラフにして表示してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/296240/d932f424-7fda-e662-3b97-18db3f238053.png)

前回までの記事でデータを収集してDBに保存するまでを行っていたので、今度はそれを人に見せられるようなグラフにして表示する。
今回使用するライブラリはmatplotlibなので、[以前の記事](https://qiita.com/yokotate/items/e91aadbdf9e18b40b832)を参考にしてそれをインストールしてください。
また、前回取得してきた気象庁のデータを使用しますので、[そちらの記事](https://qiita.com/yokotate/items/d2c67668585efac2861b)についてもご覧ください。

# 関連記事
[ANACONDA NAVIGATORを使って仮想環境を作ってpsycopg2を入れる](https://qiita.com/yokotate/items/e91aadbdf9e18b40b832)
[CSVデータをDBに入れてみる](https://qiita.com/yokotate/items/d2c67668585efac2861b)

# ソースコード
それでは早速ソースコードです。
とりあえずDBから過去一年間の気温データを取得してきます

```python:KionData.py
import psycopg2

path = "localhost"
port = "5432"
dbname = "test"
user = "postgres"
password = "password"

conText = "host={} port={} dbname={} user={} password={}"
conText = conText.format(path,port,dbname,user,password)
connection = psycopg2.connect(conText)
connection.get_backend_pid()
cur = connection.cursor()

sql = "SELECT * FROM kiondata "
cur.execute(sql)

hiduke = []
kion = []

for row in cur:
    hiduke.append(row[0])
    kion.append(row[1])
```
ここまでは前回までの記事の知識でできますね。

### とりあえず描画してみる
続いて今回のメインテーマである描画です。
これは時系列データですので線グラフで表示してみましょう。


```python:KionData.py
import matplotlib.pyplot as plt
plt.plot(hiduke,kion)
plt.show()
```
これだけで単純な描画だったら出来てきまいます。
まずは描画用のライブラリであるmatplotlibをimportします。
その後データのリストを渡すのですが、【**plt.plot(横軸,縦軸)**】の順番ですので覚えておいてください。
実行してみると一番最初に見せた画像が表示されると思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/296240/a5b21d5f-fa0d-7d0b-8a80-4d33aac20306.png)

### ラベル・タイトルを付けてみる
しかしこれではちょっと見づらいですね。
各軸のタイトルとグラフ自体のタイトルが欲しいところです。
というわけでつけてみましょう。

```python:KionData.py
plt.title('KIONDATA')
plt.xlabel('HIDUKE')
plt.ylabel('KION')
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/296240/1b0a1e99-460c-fc5f-e811-23f5fd34429f.png)
titleがグラフのタイトルで、デフォルトではグラフの上に表示されます。
xlabelが横軸のラベル。今回は時間軸となりますので日付ですね。
ylabelが縦軸のラベル。今回は気温を表します。

### 二つのデータを同時に表示してみる
そうだ、せっかくだから過去10日間の平均気温も併せて表示してみましょう。
とりあえず平均値を求めるプログラムを書きます。

```python:KionData.py
hiduke = []
kion = []
ave = []
i = 0
for row in cur:
    hiduke.append(row[0])
    kion.append(row[1])
    i += 1
    if i >= 10:
        ave.append(sum(kion[i-10:i])/10)
    else:
        ave.append(None)
```
平均値の配列aveを追加しました。

```python:KionData.py
plt.plot(hiduke,kion)
plt.plot(hiduke,ave)
```
kionと同じようにplt.plot()関数を用いてデータを追加します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/296240/04a794ae-b7dd-3b00-7a34-0d4a2be5b215.png)

### データの凡例を追加
データが複数になったことによってグラフそれぞれがどんな内容のデータなのかが分からなくなりました。
なので凡例を追加していきます。

```python:KionData.py
plt.plot(hiduke,kion,label = 'kion')
plt.plot(hiduke,ave,label = 'average')
plt.legend()
```
新しく追加したのはplotする際に【label=凡例ラベル名】を新たな引数として追加しました。
plt.legend()はその凡例の表示を行う関数です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/296240/10596d90-06b4-09a6-60f6-9f3b14855250.png)

ここまででいったん終了です。
今回はとりあえず簡単に使い物になるグラフを実装してみました。
最後にソースコード全体を載せて終わります。ありがとうございました。

```python:KionData.py
import psycopg2
import numpy as np
import matplotlib.pyplot as plt

path = "localhost"
port = "5432"
dbname = "test"
user = "postgres"
password = "password"

conText = "host={} port={} dbname={} user={} password={}"
conText = conText.format(path,port,dbname,user,password)
connection = psycopg2.connect(conText)
connection.get_backend_pid()
cur = connection.cursor()

sql = "SELECT * FROM kiondata "
cur.execute(sql)

hiduke = []
kion = []
ave = []
i = 0
for row in cur:
    hiduke.append(row[0])
    kion.append(row[1])
    i += 1
    if i >= 10:
        ave.append(sum(kion[i-10:i])/10)
    else:
        ave.append(None)

plt.plot(hiduke,kion,label = 'kion')
plt.plot(hiduke,ave,label = 'average')

plt.title('KIONDATA')
plt.xlabel('HIDUKE')
plt.ylabel('KION')

plt.legend()

plt.show()
```