pandas-tdにmagic functionが導入されてもっと便利になったよ!という話を書きます。
pandasとかが何かという話はこちらのTreasureDataとPandasとJupyterでインタラクティブにデータを可視化する。を見てね。
けれどもpandasを簡単にいうと、統計分析とかができるライブラリなんだけど、いろんなデータソースへ接続するためのインタフェースにできて、便利なのです。
個人的なユースケースとしては、お客さんの問い合わせがあったら、TD上のログとかRDBとかから必要な情報をとってきてくっつけたりしてます。あとはその調査した結果をjupyterを使っているので、githubで簡単に共有できるようにしてます。
そして、今回pandas-td 0.8から導入されたmagic functionは、事前に関数を作っておくと、%
,%%
だけでその関数を呼び出せるという機能です。
これだけだと、なにが便利なのかわかりにくいので、実際に使ってみましょう。
今まで
は、下記のように一個一個の接続情報を作って、関数を使って、とコピペでは済むけれども必要な記載が結構あり、ただSQLを発行するだけでもPython力が必要でした。
import os
import pandas_td as td
# Initialize connection
con = td.connect(apikey=os.environ['TD_API_KEY'], endpoint='https://api.treasuredata.com/')
engine = con.query_engine(database='sample_datasets', type='presto')
# Read Treasure Data query into a DataFrame.
df = td.read_td('select * from www_access', engine)
Magic Functionを使うと
これですむ。
%td_use sample_datasets
%%td_presto
select count(1) cnt
from nasdaq
しかも、%%td_use
のあとにテーブル名を打つと、スキーマも見れる
nasdaq
しかも、カラム名のタブ保管も有効になる!
%matplotlib inline
を有効にしておいて、%%td_presto_plot
のマジックコメントでクエリを投げると、すぐに可視化してくれる!!
便利。
どうやって使うのか?
- 環境変数にAPIKEYをセットする
$ export TD_API_KEY=1234/abcd...
- マジックコメントを自動でロードさせておく(手動でもいいけど)
~/.ipython/profile_default/ipython_config.py
に下記の内容を保存する。
c = get_config()
c.InteractiveShellApp.extensions = [
'pandas_td.ipython',
]
もっかい言うけど、
これだけで、あとはJupyter(ipython)を起動させると、自動でロードされてつかえるようになるよ!
まだちょっとめんどくさいところ
取得したデータの文字列が長かったり、カラム数が多かったりで省略表示されている場合に、ちょっとカラムのデータを見たいなというときに、
いちいちコマンド実行するのがだるい。
今は、to_csvで、CSV出力をしてエディタで最後はみちゃうことあります。
あとは、x = %td_databases
という代入はできるけれども、x = %%td_presto
という方法で代入ができないので、そこができる方法があると嬉しい。
あまりスクリプト的な内容を必要としな場合にはこれで十分といえば十分ですねー。
ちゃんちゃん。
補足
@k24d さんに、_
を使うと前回の実行結果の値を代入できたり、Out[5]の結果を代入できることを教えていただきました。
つまり、下のあとに
%%td_presto
select
td_date_trunc('hour', time) as time,
COUNT(1) as code200_cnt
from
www_access
WHERE code = 200
group by
1
x = _
だったり、
x = Out[40]
でできました!
便利!!