Edited at

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