Salesforce データを JupyterLab 上でpandas.DataFrame として利用

by 桑島義行 | 2020年12月04日

はじめに

CData技術ディレクター桑島です。この記事では、Pythonでのデータ分析ツールとして人気があるJupyterLabで、SalesforceのデータをSQLで取得してpandas.DataFrameとして扱う方法をご紹介します。

f:id:kuwazzy:20201203220517p:plain

前提

この記事では、Python、pip、および、JupyterLabのインストール手順を含みません。本手順で使用するCData Salesforce Python Connectorの対応Pythonバージョンは以下の通りです。

  • Windows / Linux : 3.6 / 3.7 / 3.8 (Anacondas含む)
  • Mac : 3.8

以下のPythonライブラリのインストールが必要です。

pipコマンドでインストールしてください。

$ pip install jupyterlab
$ pip install pandas
$ pip install matplotlib
$ pip install sqlalchemy

CData Salesforce Python Connector のインストール

本手順では、Salesforceデータ連携用に、SQLでアクセス可能なDB-APIモジュールであるCData Salesforce Python Connector を利用します。CData Salesforce Python Connector は、以下サイトよりダウンロードすることができます。

www.cdata.com

※本記事執筆時点(2020/12)ではベータ版でのご提供です。

ダウンロードしたファイルを解凍すると「プラットフォーム(mac / unix / win)> Pythonバージョン > 32/64bit」のフォルダ内に.whlファイルが格納されています。

f:id:kuwazzy:20201203104049p:plain

実行環境にあった.whlファイルを選択して、pipコマンドでモジュールをインストールしてください。以下は、mac環境での実行例です。

$ cd ./CData.Python.Salesforce/mac/Python38
$ pip install cdata_salesforce_connector-20.0.XXXX-cp38-cp38-macosx_10_9_x86_64.whl 
Processing ./cdata_salesforce_connector-20.0.XXXX-cp38-cp38-macosx_10_9_x86_64.whl
Installing collected packages: cdata-salesforce-connector
Successfully installed cdata-salesforce-connector-20.0.XXXX

インストールしたらpip listコマンドで登録されているか確認します。

$ pip list
 :
cdata-salesforce-connector 20.0.XXXX
 :

モジュールのインストールについて詳細な情報は以下の製品マニュアルをご覧ください。

cdn.cdata.com

JupyterLabからの利用

以下のコマンドでJupyterLabを起動します。

$ jupyter lab

ブラウザが起動してLauncher画面が開きます。今回は、対話式にコマンドを入力して確認していきますので、NotebookないのPython3を選択します。

f:id:kuwazzy:20201203105752p:plain

Codeラインに以下コマンドを入力して必要ライブラリをインポートします。

import cdata.salesforce as mod
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from sqlalchemy import create_engine

f:id:kuwazzy:20201203214629p:plain

次に、SQLAlchemyのcreate_engineでDB(今回はSalesforce)への接続を定義します。Salesforceへの接続に必要なパラメータは、User, Password, SecurityTokenの3つです。

engine = create_engine(
    "salesforce:///?User=XXXXX;Password=XXXXX;SecurityToken=XXXXX;"
)

f:id:kuwazzy:20201203214557p:plain

SalesforceでのSecurityTokenの取得方法はこちらの記事をご参照ください。

qiita.com

なお、Salesforceへの接続にはOAuthでの接続もサポートしています。詳細はこちらの製品マニュアルをご参照ください。

cdn.cdata.com

まずは、SalesforceのOpportunity(商談)オブジェクトのデータを参照して出力してみます。

df = pd.read_sql("SELECT Id, AccountId, Name, StageName, Amount, Probability , ExpectedRevenue, CloseDate, Type, LeadSource,  IsClosed , IsWon, Fiscal  FROM Opportunity LIMIT 10;", engine)
print(df)

Opportunityのテーブル項目はこちらの製品マニュアルからご覧いただけます。

cdn.cdata.com

f:id:kuwazzy:20201203212523p:plain

10件分の商談情報が取得できたことを確認できました。

それでは次にこの商談情報をもとにFiscal(四半期)毎のAmmount(金額)集計をみていきます。Dataframeをgroupbyする方法もありますが、今回はSQLで集計してみたいと思います。

df = pd.read_sql("SELECT Fiscal,sum(Amount) as Amount FROM Opportunity GROUP BY Fiscal ORDER BY Fiscal;", engine)
print(df)

Salesforceのクエリー言語であるSOQLではなくSQLであることに注意です。SQL構文規約は以下の製品ヘルプをご参照ください。

cdn.cdata.com

f:id:kuwazzy:20201203212825p:plain

最後に、年度毎の金額をmatplotlibを使用して棒グラフで可視化してみましょう。

df = pd.read_sql(
    "SELECT Fiscal,sum(Amount) as Amount FROM Opportunity GROUP BY Fiscal ORDER BY Fiscal;",
    engine,
    index_col="Fiscal",
)
df.plot.bar()
plt.show()

f:id:kuwazzy:20201203213051p:plain

まとめ

この記事では、Pythonでのデータ分析ツールとして人気があるJupyterLabで、SalesforceのデータをSQLで取得してpandas.DataFrameとして扱う方法をご紹介しました。DB-APIとしてアクセスできるCData Salesforce Python Connectorを利用することでSQLite,MySQL, PostgreSQLのようなRDBMSのデータを扱うのと同じ方法でSalesforceのデータにアクセスできました。CData Softwareでは、Salesforceの他にも220を超えるSaaS、NoSQL、ビッグデータ連携用のDB-APIモジュールを提供しています。

f:id:kuwazzy:20201203213934p:plain

https://www.cdata.com/jp/python/

現在(2020/12時点)では、ベータ版での提供となり、製品へのフィードバックを絶賛受付しております。JupyterLabを利用してPythonでSaaSやNoSQLのデータを活用されている方は是非お試しくださいませ。本製品についてご不明な点などがございましたらこちらのCData Software Japanサポート窓口までお問い合わせください。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。