これなら使える!ビッグデータ分析基盤のエコシステム

第5回 ビッグデータ分析基盤のためのアドホック分析環境 ~Pandas実践編

この記事を読むのに必要な時間:およそ 2 分

MySQLからのデータの入力

それではまずはMySQLからデータを取得してみましょう。

SQLと連携させるインターフェースを,%load_ext sqlを実行します。これにより%%sqlと先頭につけることで,SQLのインターフェースを通したコマンドを実行することが可能になります。

%load_ext sql

備考:上記コマンドを実行した場合に,下記が表示された場合,コンフィグの名前が変わったことを警告するWarningです。現状無視して問題ありません。

/usr/local/pyenv/versions/3.4.3/lib/python3.4/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.
  "You should import from traitlets.config instead.", ShimWarning)
/usr/local/pyenv/versions/3.4.3/lib/python3.4/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.
  warn("IPython.utils.traitlets has moved to a top-level traitlets package.")

MySQLへの接続情報を付与して,クエリを含めて実行します。

%%sql mysql://username:password@hostname/database
show tables;

また,2回目以降は接続情報は必要ありません。

%%sql
desc tables

図6 MySQLからデータを取り込み実行

図6 MySQLからデータを取り込み実行

SQLの結果を取得するには,以下の2種類の実行方法があります。

下記のようにワンライナーで実行するか

results=%%sql SELECT host, path, status, response_time FROM accesslog

クエリを実行した後に_を利用することで直前に実行されたコマンドの結果を代入したり,履歴から結果を取得をすることが可能です。

%%sql
SELECT host, path, status, response_time FROM accesslog
results = _
results = Out[14]

上記の場合は,ResultSets型で返却されるため,このデータをPandasで扱いやすいDataFrameに変換しておきましょう。

results = results.DataFrame()

図7 SQL実行結果の取得

図7 SQL実行結果の取得

ちなみにDataFrameとは,Rなどデータ解析ではポピュラーなデータ構造となっています。特徴としては,2次元配列の各行/列にラベルを持っており,ラベルによる操作が可能である点です。Pandasでもこのデータフレームを使って前述の処理を行います。

最後にこのMySQLのデータで,ホストごとのレスポンスタイムを箱ヒゲ図で表現してみます。箱ヒゲ図には,.boxplot()を利用します。

results[['host','response_time']].groupby('host').boxplot(return_type='axes',layout=(1,3))

図8 箱ヒゲ図の表示

図8 箱ヒゲ図の表示

まとめ

アドホック分析環境として,JupyterとPandasを利用し,ブラウザ上で手軽にさまざまな集計を行うことができるようになりました。しかし,Pandasではすべての処理をメモリ上で行うため,数百万レコードまでであれば扱えますが,それ以上のデータ量を扱おうと思うとなかなか大変です。そこで分析エンジン上で数億件以上のデータを集約した後で,アドホック分析環境上で可視化していくというステップが非常に重要になってきます。

次回は,分析エンジン上に貯められたアクセスログもとに基本KPIを見つけていきましょう。

著者プロフィール

高橋達(たかはしとおる)

Treasure Data Inc.でテクニカルサポートエンジニアとして,毎日,日米問わず顧客のサポートを担当。サポートエンジニアのエンジニアとしての地位向上を目指して色々模索中。そのために,秋葉原幻橙館で今日も元気にOSS活動を行っている。

URL:http://toru-takahashi.gitbooks.io/secret-ninja/content/