Unix系エンジニア兼DBAとしては、CLI(コマンドラインインターフェース)が生産性が高くて好きだけど、一方で可視化もお手軽にやりたい、というケースが多々あります。
Jupyter Notebookでデータベースに接続して可視化できる、という話は以前から聞いたことがあったのですが、実際に試してみたことがありませんでした。
今回、軽くPostgreSQLで試してみたのでその手順を簡単にご紹介します。
■セットアップ
以下の3つのモジュールをpipでインストールします。
- jupyter
- psycopg2
- ipython-sql
[snaga@localhost]$ ipython notebook --ip=\* --port=8080 [W 16:01:11.273 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended. [W 16:01:11.273 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using authentication. This is highly insecure and not recommended. [I 16:01:11.276 NotebookApp] Serving notebooks from local directory: /disk/disk1/snaga [I 16:01:11.276 NotebookApp] 0 active kernels [I 16:01:11.276 NotebookApp] The IPython Notebook is running at: http://[all ip addresses on your system]:8080/ [I 16:01:11.276 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
と起動してブラウザから接続できるようにします。
■PostgreSQLデータベースへの接続
まず、sql拡張をロードして、PostgreSQLへ接続します。
%load_ext sql %sql postgresql://snaga@localhost/testdb
「Connected」と表示されたら成功です。
■クエリの実行
クエリを実行するには、「%sql」に続けてクエリを入力します。
%sql select table_catalog,table_schema,table_name,table_type from information_schema.tables where table_schema = 'public' %sql select count(*) from orders
SQLの実行だけを行うと、その結果が表形式で表示されます。
■問い合わせ結果の利用
問い合わせ結果は「_」という変数に格納されていますので、これを取り出します。
ここでは、顧客ごとの売り上げを集計するクエリを実行し、その後で変数 res に結果を取り出します。
# https://pypi.python.org/pypi/ipython-sql %config SqlMagic.displaylimit=5 %sql select c_name,sum(o_totalprice) from customer left outer join orders on c_custkey = o_custkey group by c_name order by 2 desc res = _
■問い合わせ結果の可視化
最後にmatplotlibを使って可視化します。
取り出した問い合わせ結果は普通にfor文で1レコードずつ取り出すことができますし、そのレコードはカラムのリストになっていますので、通常のSQLアクセスと同じようにデータを取り出します。
そして matplotlib に渡してグラフを描画します。
import matplotlib.pyplot as plt %matplotlib inline x = [rr[0] for rr in res] y = [rr[1] for rr in res] plt.bar(range(len(x)), y)
matplotlibの詳細については、長くなるのでここでは割愛します。(というか、私もまだ詳しくないので・・・)
■まとめ
今回は、Jupyter Notebookから直接SQLを発行して取得したデータを可視化する方法を試してみました。
Jupyter Notebookは探索的にデータを分析したり、作業の過程を記録に残したりするのに非常に便利です。また、matplotlibはさまざまなチャートを描くことができます。
ぜひ、このようなツールを活用しつつ、データでいろいろ遊んでみていただければと思います。
私ももう少しmatplotlibを活用できるように勉強をしてみようと思います。
では。
■参考文献
- 現代のエンジニアのための強力なメモ帳 Jupyter notebookのすゝめ - クックパッド開発者ブログ
http://techlife.cookpad.com/entry/write-once-share-anywhare - Jupyter notebookでMySQLに接続する - Qiita
http://qiita.com/shrkw/items/c38def7d60b0099b0c55 - Jupyter から PostgreSQL に接続 - Qiita
http://qiita.com/kshigeru/items/d5554c6d41cedf471a91 - ipython-sql 0.3.8 : Python Package Index
https://pypi.python.org/pypi/ipython-sql
0 件のコメント:
コメントを投稿