サイエンティストとマーケターのはざま

Pythonとか広告とかデータ分析とかとか


PostgreSQLからクエリでデータを呼び出してグラフにプロットする

前回PostgreSQLにInsertしたデータをクエリで呼び出してグラフにプロットしてみたいと思います。

まず、IPythonからPostgreSQLへのコネクションを作成します。

In [1]: import psycopg2 as pg

In [2]: conn = pg.connect(dbname="forRDS",
host="forrds.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com",
port=5432,
user="root",
password="xxxxxxxx")

pandasのSQL用ライブラリを利用します。

In [3]: import pandas.io.sql as psql

実行するSQLは以下。至ってシンプルなセレクト文です。

In [4]: sql = 'select * from usdjpy'

pandasのread_sqlでは、sqlクエリ, コネクション, インデックス等を指定し、DataFrameとしてデータを取得してくれます。ちなみにインデックスを指定するかfalseにしておかないと自動で番号が発番されてしまい、グラフのx軸に期間を表示できなくなります。

In [13]: usdjpy = psql.read_sql(sql, conn, index_col = 'datetime')

In [14]: usdjpy

Out[14]:
 openhighlowclose
datetime    
2001-01-03 10:00:00 114.60 114.60 114.37 114.44
2001-01-03 11:00:00 114.45 114.64 114.38 114.64
2001-01-03 12:00:00 114.62 114.62 114.36 114.37
2001-01-03 13:00:00 114.36 114.49 114.33 114.42

IPython起動時(こちらを参照してください)にpylabをinlineで立ち上げているのでライブラリのimportの必要なくグラフをプロットできます。

In [16]:usdjpy.plot()

Out[16]:
<matplotlib.axes.AxesSubplot at 0x7f54c17c2b10>

f:id:ukichang:20141228000416p:plain

余談ですが、IPython起動時にpylabをinlineで立ち上げていましたが、matplotlibのほうがベターという記事なのだろうか・・・

 


iPython Notebookの--pylab inlineは使うのをやめようという話 - Wolfeyes Bioinformatics beta

 

参考URL

pandasでRDBの読み書きをする | mwSoft

pandas.read_sql — pandas 0.15.2 documentation