UiPath×PowerQuery×ChatGPTで最新データの考察をしてみよう
本記事は、2023年7月開催の「UiPathブログ 発信チャレンジサマー」の15日目のブログです。ブログの詳細、参加方法については以下のブログを参照ください。
https://note.com/shumpei_w/n/nd082bdf28853
②このブログ情報は、2023/7/15時点の情報です。
③UiPathはCommunity Edition、Versionは2023.6.1を使用しています。
本記事で紹介する主な内容
Webからデータ(csvのzipファイル)を取得
PowerQueryに最新データファイルパスを書き込んでクエリ更新
Excelの表をChatGPTに投げ、考察結果を得る
作成するワークフローの概要
公表されている男女賃金差異の最新データをもとに表とグラフを作成し、表をChatGPTに考察させるワークフローです。
クエリ、PowerPivot、PowerPivotグラフを設定済みのExcelを使用しています。
ChatGPTでの分析ではUiPathのInternalLabs.GPT.Activitiesに入っている『Ask GPT』アクティビティを使用しています。2023/7/15時点で公式サポートではありませんが、将来的に公式アクティビティ化予定のようです。Azure上に構築されたOpenAIリソースで動きます。
UiPathでChatGPTを使う方法や説明については、UiPath社の@Manabutechさんが丁寧に解説してくださっているブログがありますので、ご参照ください。
分析するデータ
女性の活躍推進企業データベースオープンデータを利用します。
利用時は女性の活躍推進企業データベースオープンデータ利用規約を順守しましょう。
完成イメージ
公表企業数推移、平均賃金差異の企業規模別と業種別のグラフと、ChatGPTによる考察を作成します。
ChatGPTによる考察は、グラフの下にあるセルに記載します。
ワークフローの全体図
ワークフローの全体図はこちらです。
初期設定とオープンデータダウンロードは他のワークフローでも使いまわしている為、切り出し処理して都度呼び出しにしています。
ワークフローの解説
初期設定
初期設定用のConfig.csvからDictionary型変数に値を格納しています。
使い回しxamlの為、今回のワークフローで使用しないデータも入っています。
今回使用するのは、集計ファイル、URL、GPTプロンプトフォルダ、生データフォルダの4つです。
見切れコードmemo
代入:Config初期化の右辺⇒New System.Collections.Generic.Dictionary(Of String, String)
代入:Dictionary型変数Configに格納し直し左辺⇒o_Config(CurrentRow("Item").ToString)
代入:Dictionary型変数Configに格納し直し右辺⇒CurrentRow("Value").ToString
プロンプトデータ テーブルを構築
ChatGPTへの質問と回答をまとめて入れるデータテーブルの空箱を作成します。
オープンデータをDL
全体版のzipをダウンロードし、zip解凍を行います。
見切れコードmemo
ダウンロードを待機:全体版 監視対象のフォルダ⇒System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads")
代入:DLしたファイルのフルパスを取得:全体版左辺⇒tmpDLデータ(0).LocalPath
クエリを更新
今回使用したデータのヘッダー名に重複がある為、UiPathの『CSVを読み込み』アクティビティではダウンロードしたデータをヘッダー付きで読込出来ませんでした。
そのため、全体的な処理速度も鑑み、データ整形はPowerQueryで行い、UiPathでは書込み・更新・読込のみを行っています。
(UiPath)ダウンロードしたファイルのフルパスを転記
(UiPath)今日日付を書込み
(PowerQuery)ダウンロードしたファイルを読込み
(PowerQuery)不要列の削除やデータ変換(文字⇒日付)
(PowerQuery)PowerPivotとPowerPivotを更新
(UiPath)PowerPivotをデータテーブルとして読込
また、データテーブルにGPT投入時不要な列(グラフの横軸100位置に線を引くための『合計/フィールド』列)がありますので、『データ テーブルをフィルター』アクティビティで削除しています。
表を文字列化
ChatGPTにデータテーブルを投入する為に、データテーブルを文字列化します。
プロンプトをデータテーブルに格納
プロンプトテキストファイルを読み込み、表文字列化データと共にプロンプトデータテーブルに格納します。
プロンプト文は、今回このように書いてみました。
見切れコードmemo
テキスト ファイルを読み込み:公表企業数推移⇒Config("GPTプロンプトフォルダ")+"\公表企業数推移.txt"
データ行を追加:公表企業数推移⇒{"公表企業数推移", 公表企業数推移プロンプト, 公表企業数推移DTStr,""}
ChatGPTに投げる
プロンプトデータテーブルに格納したデータをもとに、ChatGPTに質問していきます。
Textが文字列化した表、Question Listがプロンプトテキストファイルから読み込んだ文です。
Question Listは配列なのでTextに対して複数のプロンプト文を設定できます。例:{"総合計は?","2022年までの累計公表数は?"}
『Ask GPT』の出力はList型で、格納されている順番(0スタート)と項目を指定して回答などを取得します。取得出来る項目は3つです。
question :今回の例ではプロンプトテキストファイルから読み込んだ文
answer :ChatGPTの回答
evidence:今回の例では文字列化した表
今回はプロンプト文は1つでanswerのみを取得しますので、
プロンプトデータテーブルに追加する『代入:回答をプロンプトDTに反映』アイティビティの処理は、右辺に『tmpGPT回答(0)("answer")』と記載します。
ChatGPTの回答をExcelファイルに書き込む
プロンプトデータテーブルから、ChatGPTの回答を各グラフの下にあるセルに転記します。
今日日付の集計ファイルを作成
作業が完了したExcelファイル名に、本日日付を付け加えたファイルをコピー作成します。
見切れコードmemo
コピー先⇒system.io.path.GetDirectoryName(Config("集計ファイル"))+""+system.io.path.GetFileNameWithoutExtension(Config("集計ファイル"))+now.ToString("yyyyMMdd")+".xlsx"
まとめ
自己学習を兼ねて収集・分析しているデータを、作業効率化する為にこのワークフローを作成してみました。
今回実施したワークフローで得られたChatGPTの回答は以下の通りです。
ChatGPTの回答が思ったようにうまく出てくれず、ワークフロー作成よりプロンプト文作成に時間を取られました。
公表企業数推移と平均賃金差異_企業規模別は正しく読み取ってくれていますが、平均賃金差異_業種別はイマイチの回答でした(最も男女賃金差異が少ない業種はサービス業ではなく、医療・福祉業)。
これは私のプロンプト文がよろしくなかった結果かと思いますので、今後はプロンプトの書き方も学んでいく必要があると痛感しました。
しかしながら、無料でOpenAI環境のChatGPTを使用でき、自動化への組み込みも簡単なUiPathは、ChatGPTを使用した業務効率化を探り、実装する良いツールなのではないでしょうか。
皆様も是非試してみてくださいね。
Have a nice Automation!🚀