Harvest のデータをPythonのpandasで可視化する方法|CData Connect AI

Jerod Johnson
Jerod Johnson
Director, Technology Evangelism
CData Connect AI Python SDKとpandas、Matplotlibを組み合わせ、リアルタイムのHarvest のデータを分析・可視化する方法を解説。pandas.read_sqlでSDK接続をそのまま渡せます。

CData Connect AI Python SDKをpandasとMatplotlibに接続すると、パーソナルアクセストークンで認証するだけでリアルタイムのHarvest のデータをDataFrameに読み込み、そのままグラフとして可視化できます。SQLAlchemyエンジンの設定やソースごとのドライバーインストールは不要です。

Python は豊富なモジュールのエコシステムを備えているため、素早く作業に取りかかり、システムをより効果的に連携できます。CData Connect AI Python SDK と pandas、Matplotlib のモジュールを使えば、Harvest のデータを可視化する Harvest 連携の Python アプリケーションやスクリプトを構築できます。この記事では、Connect AI に接続し、pandas と Matplotlib の組み込み関数を使ってHarvest のデータをクエリし、その結果を可視化する方法をご紹介します。

Connect AI Python SDK(cdata-connect-ai)は DB-API 2.0(PEP 249)に準拠したクライアントなので、pandas は SDK の接続オブジェクトから直接クエリ結果を読み取れます。ソースごとにドライバーをインストールする必要も、SQLAlchemy のエンジンを設定する必要もありません。パーソナルアクセストークンで接続して、その接続をそのまま pandas.read_sql に渡すだけです。

Connect AI で Harvest に接続する方法は?

CData Connect AI では、直感的なクリック操作ベースのインターフェースでデータソースに接続できます。

  1. Connect AI にログインし、Sources をクリックして、 Add Connection をクリックします
  2. 接続の追加
  3. 「Add Connection」パネルから「Harvest」を選択します
  4. データソースの選択
  5. Harvest に接続するために必要な認証プロパティを入力します。

    まず、Profile 接続プロパティをディスク上のHarvest プロファイルの場所に設定します(例:C:\profiles\Harvest.apip)。次に、ProfileSettings 接続プロパティをHarvest の接続文字列に設定します(以下を参照)。

    Harvest API プロファイル設定

    Harvest に認証するには、トークン認証またはOAuth 標準のいずれかを使用できます。自分のデータに接続するにはBasic 認証を使用します。他のユーザーが自分のデータに接続できるようにするにはOAuth を使用します。

    トークン認証の使用

    トークン認証を使用するには、ProfileSettings 接続プロパティでAPIKey にHarvest パーソナルアクセストークンを設定します。APIKey に加えて、ProfileSettings でAccountId を設定して接続します。

    OAuth 認証の使用

    まず、Harvest でOAuth2 アプリケーションを登録します。アプリケーションはHarvest ID の「Developers」セクションから作成できます。

    以下の接続プロパティを設定すると、接続できるようになります。

    • ProfileSettings:ProfileSettings でAccountId を設定します。
    • AuthScheme:OAuth に設定します。
    • OAuthClientId:アプリ設定で指定したclient ID に設定します。
    • OAuthClientSecret:アプリ設定で指定したclient secret に設定します。
    • CallbackURL:アプリ設定で指定したRedirect URI に設定します。
    • InitiateOAuth:GETANDREFRESH に設定します。InitiateOAuth を使用して、ドライバーがOAuthAccessToken を取得および更新する方法を管理できます。
    接続の設定(Salesforce の例)
  6. 「Save & Test」をクリックします
  7. 「Permissions」タブに移動し、ユーザーベースの権限を更新します。 権限の更新

パーソナルアクセストークン(PAT)を生成する

Python SDK は、アカウントのメールアドレスとパーソナルアクセストークン(PAT)を使って Connect AI に認証します。アクセスの粒度を保つために、アプリケーションごとに個別の PAT を作成することをおすすめします。

  1. Connect AI アプリの右上にある歯車アイコン()をクリックして、設定ページを開きます。
  2. 設定ページの Access Tokens セクションに移動し、 Create PAT をクリックします。
  3. PAT に名前を付けて Create をクリックします。 新しい PAT の作成
  4. パーソナルアクセストークンは作成時にのみ表示されます。必ずコピーして安全な場所に保管してください。

必要なモジュールをインストールする

pip ユーティリティを使って、SDK(pandas エクストラ付き)と Matplotlib をインストールします。

pip install "cdata-connect-ai[full]"
pip install matplotlib

Python で Harvest のデータを可視化する

モジュールをインポートし、アカウントのメールアドレスと PAT で Connect AI に接続します。識別子は <Connection>.<Schema>.<Table> という3つの部分で構成されており、接続名はデフォルトでソース名(例:API1)になります。

import pandas
import matplotlib.pyplot as plt
import cdata_connect_ai

conn = cdata_connect_ai.connect(
    username="[email protected]",
    password="<your_pat>",
)

pandas で Harvest をクエリする

pandas の read_sql 関数を使って SQL ステートメントを実行し、結果セットを DataFrame に格納します。エンジンは不要で、SDK の接続をそのまま渡すだけです。

df = pandas.read_sql(
    "SELECT Id, ClientName "
    "FROM [API1].[API].[Invoices] "
    "WHERE State = 'open'",
    conn,
)

注意:pandas が、公式にサポートしているのは SQLAlchemy の接続のみであるという UserWarning を出力する場合があります。これは DB-API 接続を直接渡したときに想定される動作です。クエリは正しく実行されるため、この警告は無視して問題ありません。

Harvest のデータを可視化する

クエリ結果を DataFrame に格納したら、plot 関数を使ってチャートを作成します。show メソッドを使うと、チャートが新しいウィンドウに表示されます。

df.plot(kind="bar", x="Id", y="ClientName")
plt.show()

conn.close()
クエリ結果を表示した Matplotlib のチャート(Salesforce の例)

関連情報と無料トライアル

これで、CData Connect AI Python SDK を通じて、リアルタイムのHarvest のデータを pandas に読み込めるようになりました。Harvest(および数百種類のその他のデータソース)への接続について詳しくは、Connect AI のページをご覧ください。

CData Connect AI の詳細、または無料トライアルにお申し込みください:

無料トライアル お問い合わせ



完全なソースコード

import pandas
import matplotlib.pyplot as plt
import cdata_connect_ai

conn = cdata_connect_ai.connect(
    username="[email protected]",
    password="<your_pat>",
)

df = pandas.read_sql(
    "SELECT Id, ClientName "
    "FROM [API1].[API].[Invoices] "
    "WHERE State = 'open'",
    conn,
)

df.plot(kind="bar", x="Id", y="ClientName")
plt.show()

conn.close()

はじめる準備はできましたか?

CData Connect AI の詳細、または無料トライアルにお申し込みください:

無料トライアル