イベント「Domopalooza 2021」より Pydomoを使ったDomo×Pythonの活用を考える
見出し画像

イベント「Domopalooza 2021」より Pydomoを使ったDomo×Pythonの活用を考える

◇データ取得・前処理・分析が格段に容易になる「PyDomo」

こんにちは、アタラでDomoなどのBIツールを活用したデータコンサルティングを担当する、小野澤です。今日は、先日米国で開催されたイベント「Domopalooza 2021」で紹介された、PyDomoを利用したデータ活用についてお話したいと思います。

Domoの先進的な活用事例や新機能が発表されるDomo主催の最大級イベント「Domopalooza 2021」。毎年恒例のイベントですが、今年は3月25日に開催され、私はオンラインで視聴しました。

Domoを日常から利用されている方やデータ活用に関心を持っている方には非常に刺激的な内容で、コンテンツの中で私が特に刺激を受けたのが、PyDomoを利用したデータ活用についてのスポットライトコンテンツでした。

PyDomoとは、DomoのAPIをPythonから利用できるようにしたツールです。データセット、グループ、PDPなどに関する操作をPythonから実行できます。

※参考リンク:

イベントコンテンツ内では、Wrench GroupのシニアデータアーキテクトであるWm. Dexter Jonesさんが、PyDomoを利用した柔軟なデータ取得、前処理、分析について事例を通して説明していました。特に彼が強調していたのは、PyDomoを使えば、これ以上ないくらい容易かつ柔軟にデータ取得、前処理、分析ができることです。

私もこのコンテンツを通して、実際にPyDomoを触れてみると、非常に簡単にDomoと自社の開発環境をつなげられることに驚きました。そして、このコンテンツから示唆を受け、PyDomoを利用したDomo×Pythonの活用を考える記事を書くことにしました。

本記事ではManaging DataSets with PyDomoで紹介された基本知識を網羅した上で、PyDomoとPythonの予測ライブラリを組み合わせて、Domoから取得したデータを予測分析にかけ、予測した値をDomoに返すプロセスを紹介します。なお、あくまでPyDomoを使ってPythonのライブラリを活用したデータ前処理、分析ができることを示すことが目的であるため、機械学習ライブラリの詳しい説明は省きます。


◇Domo×Python活用の全体像

全体像としては、PyDomoを介して、下の図のようにDomo環境と自社環境をつなげることで高度なデータ分析や、それに基づくアクション実施が可能になります。Pythonの充実したデータサイエンスライブラリを活用したデータ処理・分析が必要なケースでは、同方法は非常に便利だと思います。

画像1



◇今回利用するライブラリ

今回は以下のライブラリを利用します。

・PyDomo
⇒これはDomoのAPI(Domoからデータ取得、Domoにデータ送信)を利用するライブラリです。機能詳細は以下のリンクを確認してください。

※参考リンク:


・PyCaret
⇒機械学習に利用するAutoMLライブラリです。複数のアルゴリズムから最適なものを選び、予測を実施するものです。(前述の通り、PyCaretの使い方に関しては、本記事では詳細に説明しません)

・pandas
⇒データの前処理に利用するライブラリです。非常に柔軟性の高い前処理ツールなので、複雑な前処理を実施したい際には便利です。


◇コード全体

コード全体は以下のようになります。短いコードでDomoとの通信クライアントを作成後、簡単にDomoからデータを取得し、予測。どのようにして予測した結果をDomo上にアップロードするところまでを実装できるのかがお分かりになるかと思います。

#ライブラリ読み込み
from pydomo import Domo
import pandas as pd

#ここにクライアントIDとクライアントシークレットを入力する
clientID="XXXXXXXXXXXXXXXXXXXXXXXX"
clientSecret="YYYYYYYYYYYYYYYYYYYY"

#Domoとの通信クライアント作成
domo = Domo(clientID,clientSecret,api_host='api.domo.com')

# Domoから学習データと予測用のデータ取得
obento_train = domo.ds_get('b998b759-ba76-46f1-a8e6-29ddab893552')
obento_predict=domo.ds_get('9ca73231-0e8d-4f22-966f-d9358b3b0574')
predict_datetime=obento_predict["datetime"]

# 前処理
obento_train.drop(columns=['soldout', 'remarks','event','payday','datetime'], inplace=True)obento_predict.drop(columns=['soldout', 'remarks','event','payday','datetime'], inplace=True)

#トレーニング

#初期設定
from pycaret.regression import *
reg1 = setup(obento_train, target = 'soldamount')

#モデル比較
best_model = compare_models(fold=5)
print(best_model)

#モデル作成
lightgbm = create_model('lightgbm')
tuned_lightgbm = tune_model(lightgbm, n_iter=50, optimize = 'MAE')#予測
predictions=predict_model(tuned_lightgbm,data=obento_predict)
result=predictions["Label"]

#予測結果のDomoデータセット化
df= pd.concat([predict_datetime, result], axis=1)
df=df.rename(columns={'Label': 'prediction'})
car_ds = domo.ds_create(df,'atara_prod_prediction-obento','pydomo test')


■コードの一部補足
全体コードの詳しい説明は省きますが、特にPyDomoを利用する際の要点となるコードについては以下で補足します。

①Domoとの通信クライアントを作成

#ここにクライアントIDとクライアントシークレットを入力する
clientID="XXXXXXXXXXXXXXXXXXXXXXXX"
clientSecret="YYYYYYYYYYYYYYYYYYYY"
#Domoとの通信クライアント作成
domo = Domo(clientID,clientSecret,api_host='api.domo.com')

なお、DomoのAPIを利用するにはクライアントIDとクライアントシークレットが必要となります。(IDとパスワードの認識です)

クライアントIDとクライアントシークレットの取得方法は、以下リンクのAPI Authenticationに記載されている手順に従って、取得する必要があります。

※参考リンク:


②Domoからデータ取得
①で作成した通信クライアントのds_getというメソッドを利用することで、Domoからデータが取得できます。引数としてデータセットのIDを渡す必要がありますが、IDはデータセットをDomo上から開いた際のURLリンクから確認することができます。

例として、以下ならばdatasources/以降のXXX~に該当する部分がデータセットIDとなります。

例:https://xxx.domo.com/datasources/XXXXXXXXXXXXXXXXX/details/overview


③Domo上にデータをアップロードする
domo.ds_createというメソッドを利用することで、データセットをアップロードすることが可能です。

car_ds = domo.ds_create(df,'atara_prod_prediction-obento','pydomo test')


◇PyDomoを利用する魅力

PyDomoを利用することで、データの前処理や分析の手間をかけずに、ビジネス要件に合わせて柔軟なデータ分析が可能です。特にDomo内での実装が難しい部分については、Pythonの便利なライブラリを利用して解決するといったことが柔軟に選択できます。

PyDomoを使った柔軟なデータ分析がいかに簡単にできるかがお分かりいただけたでしょうか。Domoの持っている強みとPythonの持っている強みを掛け合わせることができたら、より難しい問題も対処できるようになりますよ。



この記事が参加している募集

私の仕事

イベントレポ

企業のデジタルマーケティングの自走化を支援するアタラ合同会社の公式noteです。アタラでの働き方やどんな社風なのか、デジタルマーケティングに関するTipsなどをご紹介します!