LoginSignup
6
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-11

この記事について

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()
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3