# Treasure Data 用 Pandas と Jupyter の設定 Treasure Data は、SQL 経由でアクセス可能なクラウドベースの分析インフラストラクチャを提供しています。[Presto](https://api-docs.treasuredata.com/en/tools/presto/quickstart/) のようなインタラクティブエンジンを使用すると、数十億のレコードを簡単に処理できます。ただし、データサイエンティストにとって SQL クエリを書くのは時に苦痛であり、結果を視覚化するには Excel や Tableau などの外部ツールを使用する必要があります。Treasure Data を Python ベースのデータ分析ツールである [Pandas](http://pandas.pydata.org/) と組み合わせて使用し、[Jupyter Notebook](https://jupyter.org/) を介してデータをインタラクティブに視覚化できます。 ![](/assets/image-20190925-190645.bf0be2045c23219c01095f0673eacf916240b2b202f3bee7f426bd2d7a0d99c9.60bcc915.png) * [前提条件](#prerequisites) * [Treasure Data API キーの設定](#set-treasure-data-api-key) * [Treasure Data API エンドポイントの設定](#set-treasure-data-api-endpoint) * [必要なパッケージのインストールと環境の設定](#install-the-necessary-packages-and-configure-your-environment) * [Jupyter の実行と最初のノートブックの作成](#run-jupyter-and-create-your-first-notebook) * [データの探索](#explore-data) * [Jupyter でのクエリの実行](#running-a-query-in-jupyter) * [サンプルデータ](#sample-data) ## 前提条件 * Python の基礎知識。 * Treasure Data の基礎知識。 ## Treasure Data API キーの設定 Jupyter を起動する前に、マスター API キーを環境変数として設定します。マスター API KEY は、TD Console プロファイルから取得できます。 ```bash $ export TD_API_KEY="1234/abcde..." ``` Jupyter Notebook セルで次のようなコマンドを使用して環境変数を設定することもできます。 ```cmd %env TD_API_KEY = "123c/abcdefghjk..." ``` ## Treasure Data API エンドポイントの設定 アカウントが US リージョンに属していない場合は、Treasure Data API エンドポイントを環境変数として設定します。エンドポイント情報は[こちら](https://api-docs.treasuredata.com/en/overview/aboutendpoints/)で確認できます。 ```bash $ export TD_API_SERVER="https://api.treasuredata.co.jp" ``` Jupyter Notebook セルで次のようなコマンドを使用して環境変数を設定することもできます。 ```cmd %env TD_API_SERVER = "https://api.treasuredata.co.jp" ``` ## 必要なパッケージのインストールと環境の設定 詳細情報と手順については、Conda、Pandas、matplotlib、Jupyter Notebook、pytd の[インストール](/ja/tools/cli-and-sdks/installing-python-pandas-matplotlib-jupyter-notebook-pytd)を参照してください。 ## Jupyter の実行と最初のノートブックの作成 分析プロジェクトのフロントエンドとして Jupyter を使用します。 1. 次の構文を使用して Notebook を実行します: ```bash (analysis)$ ipython notebook ``` 1. Web ブラウザが開きます: 2. **New** > **Python 3** を選択します。 3. 次のテキストをノートブックにコピーして貼り付けます: ```python %matplotlib inline import os import pandas as pd import pytd.pandas_td as td # Initialize the connection to Treasure Data con = td.connect(apikey=os.environ['TD_API_KEY'], endpoint='https://api.treasuredata.com') ``` ![](/assets/image-20190925-190918.5bf9b8848977614d4845d71e9ff6ccf5b502fde7ab1270be7a6ef7c962f9a063.60bcc915.png) 1. ノートブックは次のようになります ![](/assets/jupyter_pytd.c691f29202d2b11bce5d2b9dd9f8a9dd71b237a44272834e5a30d7c7707ac0b2.60bcc915.png) 6. Shift-Enter を押します。 "KeyError: 'TD_API_KEY'" エラーが発生した場合は、"apikey=os.environ['TD_API_KEY']" の代わりに **"apikey='your master apikey'"** を試してください。 動作する場合、Jupyter は OS からの TD_API_KEY 変数を認識していません。 TD_API_KEY を再度確認し、Jupyter を再起動してください。 1. オプションで、ノートブックを保存します。 ## データの探索 `sample_datasets` には2つのテーブルがあります。magic コマンド `td_tables` を使用して、データベース内のすべてのテーブルを表示できます。 ![](/assets/image-20200421-215102.77c3d435e3eabf4495b11e93741de1a1e7986434701583e6e6ad1640c6185e11.60bcc915.png) `nasdaq` テーブルを探索しましょう。 Jupyter で、次の構文を入力します: ```python engine = td.create_engine("presto:sample_datasets") client =td.Client(database='sample_datasets') client.query('select symbol, count(1) as cnt from nasdaq group by 1 order by 1') ``` 例: ![](/assets/image-20200418-223403.5f2a746f8f0485079a18bc0eb7633bbc08f8e4faf276f2eb35d5e94fb17824e8.60bcc915.png) ## Jupyter でのクエリの実行 この例の目的上、Presto がこのセッションのクエリエンジンとして使用されます。 Jupyter で、次の構文を入力します: ```python import pytd.pandas_td as td con = td.connect(apikey=apikey, endpoint="https://api.treasuredata.com") engine = td.create_engine("presto:sample_datasets") td.read_td_query(query, engine, index_col=None, parse_dates=None, distributed_join=False, params=None) ``` `time_range` パラメータを使用して、特定の時間範囲内のデータを取得することもできます: ![](/assets/image-20190925-191519.1d48dd56769110424b6dd90d31037b2a5ac0bb5e1a85fa4ebed0e7fc2fdf4fe8.60bcc915.png) データは DataFrame としてローカル変数 `df` に格納されます。データはコンピュータのローカルメモリにあるため、Pandas と Jupyter の力を使ってインタラクティブに分析できます。時系列データの詳細については、[Time Series / Date functionality](http://pandas.pydata.org/pandas-docs/stable/timeseries.md) を参照してください。 ## サンプルデータ データセットが非常に大きくなると、前のステップの方法はあまり拡張性がありません。メモリの制限や遅いネットワーク転送のため、一度に数百万行以上を取得することはお勧めしません。大量のデータを分析する場合は、転送されるデータ量を制限する必要があります。 これを行うには2つの方法があります: * データをサンプリングできます。たとえば、「Nasdaq」テーブルには 8,807,278 行があります。100000 の制限を設定すると 100,000 行になり、これは取得するのに妥当なサイズです: ![](/assets/image-20190925-191603.2c0d4d1eb14b4e64f49a6c2d7405f83d6f7fd3f86e0694478061590cb60f167b.60bcc915.png) * SQL を記述してサーバー側からデータを制限します。たとえば、「AAPL」に関連するデータのみに興味がある場合、`read_td_query` を使用してレコード数をカウントしましょう: ![](/assets/image-20190925-191649.7c74860a4312c5f17c87b0b4eb22890b8c92e0a96723b5b48d7786c8f409775a.60bcc915.png) 十分に小さいので、すべての行を取得してデータの分析を開始できます: ![](/assets/image-20190925-191754.2d7f06efaab93a3ebf0d9f947587125e7857504afc88bcde007e8303c9a9105d.60bcc915.png) 詳細については、以下の内容を参照してください。 * [Python for Data Analysis (O'Reilly Media の書籍)](http://shop.oreilly.com/product/0636920023784.do) Jupyter Notebook は GitHub でサポートされており、分析セッションの結果をチームと共有できます: * [GitHub + Jupyter Notebooks = <3](https://github.com/blog/1995-github-jupyter-notebooks-3)