[レポート] RツールとPythonツールの使い方入門 – Alteryx Inspire 2019 #alteryx19

こんにちは、小澤です。

現地時間2019年06月10日〜2019年06月14日に米国ナッシュビルで開催されているAlteryxの年次カンファレンスイベント「Inspire 2019」。今回クラスメソッドからは計6人のメンバーが現地参加しています。

当エントリではイベント4日目に行われたセッション「Music to Your Ears: Expand Your Alteryx Data Preparation with Python and R」について、その内容をレポートしたいと思います。

セッション概要

当セッションの概要は以下の通りです。

セッションタイトル:
Music to Your Ears: Expand Your Alteryx Data Preparation with Python and R
(PythonとRであなたのAlteryxデータ準備を拡大)

登壇者:
Andrew Kramer, Solutions Architect
Emily Roach, Lead Research Scientist

セッション概要:
By fully utilizing R and Python tools in Designer, you can easily complement and expand the data preparation you are already doing. This session will discuss how the R tool can be used as a custom SQL builder for Alteryx datasets, and how the Python tool can use variables to dynamically prepare and merge data sources without the need for hardcoding. (DesignerでRとPythonのツールを完全に活用することで、すでに行っているデータ準備を簡単に補完および拡張できます。 このセッションでは、RツールをAlteryxデータセット用のカスタムSQLビルダーとして使用する方法、およびPythonツールがハードコーディングを必要とせずに変数を使用してデータソースを動的に準備およびマージする方法について説明します。)

セッションレポート

本セッションはRツールとPythonツールに関して、基本的な使い方を紹介するものとなっています。

Rツール

RツールはAlteryx上で直接Rのコードを記述・実行可能なツール read.Alteryx関数で入力コネクションからデータを受け取り、write.Alteryxで出力を行います。

Rツールは単一コネクションで複数の入力を受け取るツールなので、引数に「#1」のように入力コネクション名を指定します。

出力は最大5つまでで、write.Alteryxでは1~5の番号で指定します。

df.input <- read.Alteryx("#1", mode = "data.frame")
# ...
# 各種処理
# ...
write.Alteryx(df.output, 1)

また、Rのinstall.packages関数利用して、任意のパッケージを導入可能です。 注意点としては、Alteryxから利用する際はrepos引数が必須となります。そのため、install.packages("sqldf", repos = "http://cran.rstudio.com")のように指定します。

Rツールのデモ

Rツールの動きを関するためにデモを行います。

行うのは、右側のデータを左側のものにするための加工となります。 Rツールを使わない方法では、以下のような様々な処理を行っています。

Rツールを使う側では以下のようにほぼすべての処理をRツールをつかい、一部細かい加工はAlteryxで行っています。

Rツール部分のコードは以下のようになっており、sqldfというRのdata.frameに対してSQLライクに処理を行うライブラリを利用してます。

library(sqldf)

# Load Data from Alteryx
pos <- read.Alteryx("#1", mode="data.frame")
lookup <- read.Alteryx("#2", mode="data.frame")

# SQL Operation
  pos_lookup <- sqldf("select TicketID,
                            sum(case when Type='Pizza' or Type='Burger' then 1 else 0 end) as burger_pizza_count,
                            sum(case when Type='Side' then 1 else 0 end) as side_count,
                            sum(case when Type='Drink' then 1 else 0 end) as drink_count
                      from pos t1
                      inner join lookup t2
                      on t1.Des = t2.Des
                          where Date > "2013-06-30"
                      group by TricketID")

# Write SQL Operation to Alteryx
write.Alteryx(pos_lookup, 1)

# Identity transactions that the of Pizza or Burger, Side, and Drink
pos_lookup_filter <- pos_lookup[pos_lookup$burger_pizza_count > 0 & pos_lookup$side_count > 0 & pos_lookup$drink_count > 0, ]

#Number of transactions after June 30 2013
row_count <- nrow(pos_lookup)

# Number of transactions that purchesed Pizza or Burger, Side and Drink
criteria_met <- nrow(pos_lookup_filter)

# Final Percentage
final_percent <- criteria_met / row_count

# Create Data Frame and write to Alteryx)
final_df <- data.frame("Potencial"=criteria_met, "Total"=row_count, "Percentage"=final_percent)

write.Alteryx(final_df, 2)

処理内容の詳細は割愛しますが、Rと(そのライブラリである)sqldfを使った処理となっています。

Pythonツール

PythonツールもRツールと同様、基本的な使い方が解説されました。

Pythonツールは内部でJupyter Notebookが起動して、そこでコードを記述する仕組みになっています。 データの入出力はPandasのDataFrame形式で行います。 Pythonツールは専用のvenv環境で動作し、以下のパッケージがデフォルトで含まれています。

  • pandas
  • matplotlib
  • numpy
  • pandas
  • requests
  • sckit-learn
  • scipy
  • six
  • SQLAlchemy
  • statmodels

Pythonツールを利用する際、ワークフローとのデータの受け渡しは一時ファイルを作成することによって実現しています。 Jupyter Notebookが起動しているのでインタラクティブにコードを実行することが可能ですが、入出力を伴う場合、事前に一度ワークフローを実行し、どのような入力を行うかを確定させておく必要があります。

ワークフローからデータを受け取るにはAlteryx.read関数を利用します。 データそのものではなく、メタデータ(列名などの情報)のみが欲しい場合は、Alteryx.readMetadata関数が利用することでdict形式で取得が可能です。 これらはRツールと同様、引数でコネクション名を指定します。

また、Alteryx.getIncomingConnectionNames関数でPythonツールに接続されている入力コネクション名一覧を取得できます。 そのほか、Alteryx.getWorkflowConstants関数で取得します。 これらも戻り値はdict型となっています。

Pythonツールでは、既存のスクリプトやノートブックをインポートすることも可能です。

Pythonツールから処理結果をワークフロー側に渡すにはAlteryx.write関数を利用します。 オプショナルで3つ目の引数にdict形式で出力のメタデータを指定する子も可能です。

PythonツールでもRツールと同様パッケージの追加が可能です。 ただし、PythonツールのJupyter NotebookはAlteryxのインストール先ディレクトリ内にvenv環境を作成するため、Admin版のAlteryx Designerを使っている場合は管理者権限で実行してインストールする必要があります。

おわりに

Alteryx Inspire 2019、「Music to Your Ears: Expand Your Alteryx Data Preparation with Python and R」のセッションレポートでした。 ここで紹介した内容はAlteryxのワークフローとRツールやPythonツールのインターフェースとなる部分がメインで、実際にはここから必要な処理そのものはコードを書いて実現する必要があります。 とはいえ、最初の一歩としてはこういったところから始めてみるのもいいかもしれません。