Alteryx Designerによるデータ処理をUiPathで自動化してみる

2021/04/13 追記
※アルテリックスジャパン社によれば、Alteryx Designerの実行は「認定されたユーザーのみ」となり、ユーザーは人間のみとなるようです。
　RPA BOTによるAlteryx Designerの実行については、各自責任をもって直接アルテリックスジャパン合同会社の問い合わせ窓口（info_jp@alteryx.com）に事前確認をお願いいたします。
　また、AlteryxとUiPathは先日テクノロジーアライアンスの締結を発表しており、正しい連携はhttps://www.alteryx.com/partners/alteryx-alliance/uipathをご参照ください。

----

Alteryxと呼ばれるツールをご存知でしょうか？
データ分析においてデータの下準備、加工や結合、さらには様々な手法による分析など、
一通りの事をこなせてしまうツールです。
詳細は下記のサイトを見ていただければと思います。
[KCME Tech Blog : Alteryxとは？](https://newssdx.kcme.jp/alteryx_what_is_alteryx/)

私は主に下記の用途で使用しています。
* ビッグデータを使い勝手の良い形にする
* AIで分析する前の下準備
* 簡易的な機械学習による分析

Alteryxにはいくつかの製品が存在していて、
データの処理フローを作成するためには、Alteryx Designerと呼ばれるツールを利用します。
本来、Alteryx Designerを用いて作成したワークフローの自動化はAltyeryx Serverが必要なのですが、今回は偶然手元にあったUiPathを用いて自動化したいと思います。

## Alteryxでワークフローを作成する

まずはデータ処理を行うワークフローを作成します。
使用するデータは↓のサイトから良さそうなものを拝借することにします。
[e-stat](https://www.e-stat.go.jp/)

今回は特定地域の気象に関するデータを選択してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/4854948a-1862-a58c-6734-c8a04b506911.png)

Alteryxを起動し、新規ワークフロー作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/abccbfdc-a802-754a-d822-944712002476.png)

先程のDLしたデータをD&DでAlteryxに投げ込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/b5365850-33a1-31ff-3a26-f77dc623d066.png)


適当にペタペタと上部のツール群から選択してつなげていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/d1219e66-ec8c-95c6-bc1c-0f3f81991839.png)

インプットからアウトプットまでのワークフローを作成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/5bce8e63-87dc-865a-c110-95fa05868614.png)

右上の「実行」ボタンを押して正常に処理できるか確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/d2a560dd-df1a-4405-115c-589f380c7422.png)


## 作成したワークフローをUiPathで自動化に対応させる

作成したワークフローを複数ファイルに対して適用することを考えます。
セレクター設定などを頑張ればこのままUiPathでも自動化できるかもしれませんが、
よりUiPathで扱いやすいように手を加えます。

#### 作成したワークフローにインターフェースを追加

上部のインターフェースタブから、テキストボックスツールをキャンバスのデータ入力ツールのそばにD&Dします。
そして、テキストボックスツールの下側端子をデータ入力ツールの上側端子と接続します。接続すると、自動的にアクションツールが間に挿入されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/00979661-8d82-50aa-f268-94025f56acca.png)

次に、アクションツールを選択して、左部にある設定から「アクションタイプ」→「値を更新（既定）」、「更新する値または属性」→「データ入力 > File」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/9acbad4f-f742-50d9-c3f0-264eea78161c.png)

データ出力ツールにも同様にテキストボックスツールとアクションツールを接続します。
アクションツールの設定も同様に、「アクションタイプ」→「値を更新（既定）」、「更新する値または属性」→「データ入力 > File」を選択します。
後で区別がつきやすいように追加した2つのテキストボックスツールの表示テキストを適切な文言に変更します。
できたワークフローがこちらです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/13c44513-4be7-85ba-e6d4-f68a1e27477f.png)

ワークフローを任意の場所に保存します。
このとき、保存するファイルの形式が.yxwzであることを確認します。
（インターフェースを入れる前に保存すると.yxmd形式で保存されるため、インターフェースを追加した後では別ファイルになります。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/be55aaa1-53f3-4224-a9e1-426ee3094e00.png)

#### 保存したワークフローを実行する

先程作成した.yxwzファイルをダブルクリックするなどして実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/4d074805-7235-ddd3-761d-9576cccb409c.png)

すると以下の様なウィンドウが表示されます。
UiPathでの自動化はこのアプリを実行して、インプット、アウトプットを入力することになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/cd052f6f-451f-c4ea-0d3a-109001a1cf4d.png)

## UiPathでワークフロー作成

ここからUiPathの出番です。
UiPathStudioで、先程のAlteryxワークフローを実行するUiPathワークフローを作成します。

#### ワークフローの処理内容
今回は以下の手順2のみ実装します。
1. 入力するファイル群のリストを読み込む
2. 読み込んだリストの各ファイルについて「Alteryxアプリを起動、入力、実行」を繰り返す。

ポイントはAlteryxのアプリ実行の部分のみです。
そこさえできれば、あとは普通のテキストボックスへの入力や、実行ボタンのクリックなど簡単な操作だけです。

#### ワークフローの概要

作成するワークフローのアウトラインです。
ところどころにDeleyが入っているのは、作り込み不足で暫定的な処置ですのでご容赦ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/4483e902-40d9-4bba-ac4f-4ecdec5f7e45.png)

#### 各アクティビティの設定

Alteryxのアプリ実行には「システム > アプリケーションを開く」のアクティビティを使用します。
そして、プロパティに以下の設定を入力します
「入力 > セレクター」：アプリ実行時のウィンドウ

`"<wnd app='alteryxgui.exe' ctrlname='AlteryxWizard' />"`

「入力 > ファイル名」：インストールしたAlteryxの実行ファイルパス

`"C:\Program Files\Alteryx\bin\AlteryxGui.exe"`

「入力 > 引数」：作成したAlteryxワークフローファイル(.yxwz)へのパス

`"C:\UiPathで自動化したいワークフロー.yxwz"`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/fa6d81e7-56c5-375b-2378-2e44ea5e1267.png)

あとは、「文字を入力」アクティビティ(Type Into)を使用して、インプットとなるファイルのフルパス（ファイル名含む）とアウトプットファイルのフルパス（ファイル名含む）を入力から、「クリック」アクティビティ(Click)で完了ボタンをクリックさせます。（完了ボタンを押すとAlteryxの処理が実行されます。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/35bba0ed-aab4-c1e0-afd8-411929d63c79.png)

Alteryxワークフローの処理が完了すると、完了画面がポップアップするので、
そこでアウトプットファイルを開かないように設定しつつ閉じます。
具体的には、「クリア」ボタンを押した後に、「完了」ボタンを押します。
また、Alteryxのアプリウィンドウは実行する度に多重起動するので、ひとつのファイル処理が完了する度にウィンドウを閉じるか、ウィンドウをそのままでインプットとアウトプットのテキストボックスを上書きするか、どちらかになると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/26ee05d7-731c-0a9b-0e67-e6a8f99ffe32.png)

もうひとつのポイントとしては、Alteryxウィンドウの「完了」ボタンを押すと、処理が実行されるのですが、処理に時間がかかる場合にセレクターエラーでUiPathの処理が落ちます。
なので、完了画面の出現を「要素を探す」アクティビティ(Find Element)をリトライスコープで定期実行することで検出します。
もっと良い方法があるとは思いますが、限られた時間のなかで最低限の実装をしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/91921746-7553-9eba-c47a-7f4d37642e2c.png)

リトライスコープの設定
リトライの回数：30
リトライの間隔：00:02:00

要素を探すの設定
以下の画像参照

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/60ecb0d9-6977-4e1a-7584-426f0ecb3b6c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189530/20724e30-4f91-a960-ed03-0a03069699fa.png)

#### UiPathワークフローの実行

作成したUiPathを実行してAlteryxの処理が完了できることを確認します。
確認できたら、あとはExcel等に処理対象ファイルを書き込み、それをExcelアクティビティで読み込んだあと、ForEachアクティビティでループ処理するだけです。

## 最後に

非常なニッチな内容だとは思うのですが、もしかしたら需要があるかもと思い記事にしました。
Alteryxは非常に使い勝手がよく、数十GB,数千万行といったcsvファイルもパッと処理してくれるので重宝しています。
UiPathもちょっと同じ事を繰り返しているな～と思ったら手軽に自動化できるので、面白くない雑務もやる気にさせてくれます。
今年も色々ありましたが、RPAが来年もより一層進歩していくことを楽しみにしています。