この記事について
Pythonと言えばデータの可視化。
可視化と言えばPython。
ということで今回はデータを以下の図のようにグラフにして表示してみます。
前回までの記事でデータを収集してDBに保存するまでを行っていたので、今度はそれを人に見せられるようなグラフにして表示する。
今回使用するライブラリはmatplotlibなので、以前の記事を参考にしてそれをインストールしてください。
また、前回取得してきた気象庁のデータを使用しますので、そちらの記事についてもご覧ください。
関連記事
ANACONDA NAVIGATORを使って仮想環境を作ってpsycopg2を入れる
CSVデータをDBに入れてみる
ソースコード
それでは早速ソースコードです。
とりあえずDBから過去一年間の気温データを取得してきます
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])
ここまでは前回までの記事の知識でできますね。
とりあえず描画してみる
続いて今回のメインテーマである描画です。
これは時系列データですので線グラフで表示してみましょう。
import matplotlib.pyplot as plt
plt.plot(hiduke,kion)
plt.show()
これだけで単純な描画だったら出来てきまいます。
まずは描画用のライブラリであるmatplotlibをimportします。
その後データのリストを渡すのですが、【plt.plot(横軸,縦軸)】の順番ですので覚えておいてください。
実行してみると一番最初に見せた画像が表示されると思います。
ラベル・タイトルを付けてみる
しかしこれではちょっと見づらいですね。
各軸のタイトルとグラフ自体のタイトルが欲しいところです。
というわけでつけてみましょう。
plt.title('KIONDATA')
plt.xlabel('HIDUKE')
plt.ylabel('KION')
titleがグラフのタイトルで、デフォルトではグラフの上に表示されます。
xlabelが横軸のラベル。今回は時間軸となりますので日付ですね。
ylabelが縦軸のラベル。今回は気温を表します。
二つのデータを同時に表示してみる
そうだ、せっかくだから過去10日間の平均気温も併せて表示してみましょう。
とりあえず平均値を求めるプログラムを書きます。
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を追加しました。
plt.plot(hiduke,kion)
plt.plot(hiduke,ave)
kionと同じようにplt.plot()関数を用いてデータを追加します。
データの凡例を追加
データが複数になったことによってグラフそれぞれがどんな内容のデータなのかが分からなくなりました。
なので凡例を追加していきます。
plt.plot(hiduke,kion,label = 'kion')
plt.plot(hiduke,ave,label = 'average')
plt.legend()
新しく追加したのはplotする際に【label=凡例ラベル名】を新たな引数として追加しました。
plt.legend()はその凡例の表示を行う関数です。
ここまででいったん終了です。
今回はとりあえず簡単に使い物になるグラフを実装してみました。
最後にソースコード全体を載せて終わります。ありがとうございました。
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()