アメグラ2号のブログ

1980年代後半の古き良きビデオゲームのほか、オッサンの個人的備忘録

python(pandas, matplot) DBからグラフに書き出す

f:id:game-allergy:20210331143049p:plain

DBへの格納ができたので、今度はそのデータをグラフ化する。数字の羅列は表形式にすれば分かりやすくなるけど、一般的にはグラフのほうがイメージが伝わりやすいし、一目で状態を把握できる。じゃ、やってみよう。

#===============================
# DB内テーブル中身の確認(pandas)
# matplotでグラフ書き出し
#===============================
import sqlite3
import pandas as pd
import matplotlib.pyplot as plt

dbname = 'TEST.db'
connection = sqlite3.connect(dbname)
cur = connection.cursor()

sql1 = 'SELECT temp, hour FROM WeatherTable LIMIT 24'
cur.execute(sql1)

"""
備考;
データが3日分連続であり、それをグラフ表示すると見づらいので、
SQLで抽出時に、LIMITを使用。
(例)LIMIT 24・・・上限24
(例)LIMIT 2,10・・・3から上限10まで
"""
# データがあるところまで全て読み込む(リスト構造)
result = cur.fetchall()

#データフレーム(表に書き出すイメージ)
df = pd.DataFrame(result,columns=["temp", "hour"])
"""
備考;
書式:DataFrame(data,index,columns)
今回はindex省略のため、(Data, Columns)を引数とる。
X軸=時間、Y軸=気温のグラフを作成するので、
temp, hourのデータを変数dfに書き出す。
"""

# グラフのX軸、Y軸の指定
x = df.hour
y = df.temp

# データの指定
plt.plot(x, y)

# グラフ内のラベル設定
plt.xlabel("Time")
plt.ylabel("Temperature(℃)")
plt.grid(True)
plt.tick_params(axis='both',which='major',labelsize=14)

# グラフの表示
plt.show()


#==================
# ディスプレイにデータ表示
#==================
# ディスプレイ表示省略しない
pd.set_option("display.max_colwidth", None)
pd.set_option("display.max_rows", None)

# ディスプレイに表示
print(df)


#==================
#DB終了処理
#==================
cur.close()
connection.close()

print('--------------------')
print('end of line')
input()

◆実行結果(グラフ)

matplotlib
matplotlib

グラフにしてみると分かりやすい。明け方はずいぶん冷え込んだねぇ。4月なのに11℃って…。一方日中の昼過ぎになると18℃くらいまであがっている。

◆実行結果(DataFrameをディスプレイに表示)

◆データ取り出した時のリスト構造はこんな感じ(見づらいな~)

↑ このデータはresult = cur.fetchall()の後に、print(result)やってみると出る。なんかどっかで見たような形式だなぁ…あ、PlanetOSで取得した気象情報のjsonだ。まったく同じではないけど。。。なるほどねぇ、どの言語も似たような表現なんだなぁ。。。