Python
matplotlib
Python3

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

この記事について

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

image.png

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

関連記事

ANACONDA NAVIGATORを使って仮想環境を作ってpsycopg2を入れる
CSVデータをDBに入れてみる

ソースコード

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

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])

ここまでは前回までの記事の知識でできますね。

とりあえず描画してみる

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

KionData.py
import matplotlib.pyplot as plt
plt.plot(hiduke,kion)
plt.show()

これだけで単純な描画だったら出来てきまいます。
まずは描画用のライブラリであるmatplotlibをimportします。
その後データのリストを渡すのですが、【plt.plot(横軸,縦軸)】の順番ですので覚えておいてください。
実行してみると一番最初に見せた画像が表示されると思います。
image.png

ラベル・タイトルを付けてみる

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

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

image.png
titleがグラフのタイトルで、デフォルトではグラフの上に表示されます。
xlabelが横軸のラベル。今回は時間軸となりますので日付ですね。
ylabelが縦軸のラベル。今回は気温を表します。

二つのデータを同時に表示してみる

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

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を追加しました。

KionData.py
plt.plot(hiduke,kion)
plt.plot(hiduke,ave)

kionと同じようにplt.plot()関数を用いてデータを追加します。

image.png

データの凡例を追加

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

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

新しく追加したのはplotする際に【label=凡例ラベル名】を新たな引数として追加しました。
plt.legend()はその凡例の表示を行う関数です。
image.png

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

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()