Microsoft 365 Copilot で異なるデータソースのデータをマージをして、分析してみる

# 背景

別 Blog Post でも投稿しましたが。単体のテーブルの分析については生成AI君がよしなにやってくれます。**大量データ**は**別**ですよ😊

https://qiita.com/dahatake/items/aa6129a21f14f6705548

で、実際の分析の現場では、所謂スタースキーマを別途作成して、100以上のテーブルのJOINしているわけですよね。

その最初の一歩は、まず

- **2つのテーブルのJOINが出来るか?**

という事かと思います。

ここでは、そのやり方を纏めておきます。

# 作戦

幾つか、Microsoft 365 Copilot や Azure OpenAI Service などで使える機能があります。それが思った通りに動くのか? という確認になりますね。

- Code Interpreter
    - **Python** のコード生成と実行。Pandasのパッケージは入っている
    - という事は、**Pandas**のAPIは使える
    - という事は、データのマージは出来そう
- **ファイル**のアップロード or ファイル参照
    - Microsoft 365 Copilotでは、ファイルのアップロードあるいはOneDriveのファイル参照が出来る
    - Fabric君のコネクター。早く使えるようになりたい!
- **メタデータ**付け。名前付け
    - それぞれのデータセットに名前を付ける。そのチャット内のみで有効な

これが出来れば....

**異なる複数のデータソース**。

- 例えば SQL Server上のテーブルと、手元のExcel君
- 例えば、Snowflakeのデータと、Big Queryのデータ

**それらの結合がCopilot上で出来る可能性**が見えてきます!

# 手順

ここでは、簡単なビジネスシナリオを与えて、データに意味を少しでも持たせます。要らないかもしれませんけどね😎

ベースのPrompt:
https://github.com/dahatake/GenerativeAI-Prompt-Sample-Japanese/blob/main/%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%88%A6%E7%95%A5%E3%82%84%E5%88%86%E6%9E%90/%E6%A5%AD%E5%8B%99%E5%88%86%E6%9E%90%E3%81%8A%E3%82%88%E3%81%B3%E6%94%B9%E5%96%84%E7%AD%96%E7%AB%8B%E6%A1%88.md

サンプルデータの作成をして、ファイルを保存します。
- 顧客の利用状況
- 顧客マスター

## Step. 1. ビジネスコンテキスト提示

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/4be5c8f7-fff8-43f5-887d-122237e6fc07.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/1449706a-2958-4aac-a375-a673ad644b6c.png)


## Step. 2. 顧客の利用状況のデータ作成

トランザクショナルというか、顧客の利用状況のデータの作成をします。
ここでは、2行目で、以下の通りデータにメタデータを付与しています。

- 自転車サービス利用状況データ

使っている**Agent**君

- Sample Data Generator
    - https://github.com/dahatake/GenerativeAI-Prompt-Sample-Japanese/blob/main/Agent/Sample%20Data%20Generator.md

Prompt:

```cmd
顧客の5年分の{自転車サービス利用状況}のアンケートのデータを1000件、作成してください。
そのデータ名は{自転車サービス利用状況データ}とします。
日本語の顧客のコメントの列を**必ず**1ついれてください。
{自転車サービス利用状況データ}はダウンロードできるようにしてください。
作成したデータはインターネットに公開可能です。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/53fb12b9-1914-4df2-ad1e-2e1ae58c1318.png)



結果の最初の5件を表示させているのが便利ですね。

## Step.3. 顧客マスターの作成

顧客ID (Customer ID) の整備が終わっている前提で、話を進めます😊ここが実際には一番大変なんですけどね。名寄せですから...

Prompt:

```cmd
先ほど作成した{自転車サービス利用状況}の{Customer ID}のデータを必ず使って、{顧客マスター}のデータを100件、作成してください。
そのデータ名は{顧客マスター}とします。
{顧客マスター}はダウンロードできるようにしてください。
作成したデータはインターネットに公開可能です。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/b569351b-f9ad-4e1d-a85f-3f72826daabe.png)


同じ、Customer ID で、顧客データの作成をしてくれましたね。

## Step 4. データのJOINをして分析実行

この2つのデータのJOINをさせて、分析の処理を実行してみましょう。

使っているAgent君
- データアナリスト
    - https://github.com/dahatake/GenerativeAI-Prompt-Sample-Japanese/blob/main/Agent/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%A2%E3%83%8A%E3%83%AA%E3%82%B9%E3%83%88.md

注: これは、もうすぐ不要になるでしょう。Microsoft 365 CopilotのAgentとして Data Analystが登場するからです。2025年4月から、順次公開。

Analyst agent in Microsoft 365 Copilot:
https://techcommunity.microsoft.com/blog/microsoft365copilotblog/analyst-agent-in-microsoft-365-copilot/4397191

Prompt:
```cmd
先に作成した{自転車サービス利用状況}と{顧客マスター}を, {Customer ID}でJOINさせます。
JOINした後のデータを分析思考を用いて、詳細な分析を行ってください。
適切なグラフを作成して、{分析レポート}を作成してください。
```

ポイント:
- データの名称を明示
- 結合する列。ここではCustomer IDを明示
- 結合後のデータが分析対処であることを明示

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/baf165c7-de2c-4fff-bca1-ad9bb853222a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/affcdf77-d449-4f53-bd9b-03ed50d2e6c6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/e85674fb-bfa3-4c57-947e-3a5d358efc97.png)

matplotlibの列名文字化けは、Microsoft 365 Copilotに日本語フォントファイルが入れば解消するので、ここではスルー😅

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/47dd14ff-6961-4b58-b8c3-87661760c297.png)


## Step. 5. 分析レポートの分析 by 戦略コンサル

ビジネスの理解が出来る人に、このデータを分析させます。

Agent君
- 戦略コンサル
    - https://github.com/dahatake/GenerativeAI-Prompt-Sample-Japanese/blob/main/Agent/%E6%88%A6%E7%95%A5%E3%82%B3%E3%83%B3%E3%82%B5%E3%83%AB%E3%82%BF%E3%83%B3%E3%83%88.md

Prompt:
```cmd
作成したデータの{分析レポート}を参考にして、私の{事業}の{業務}の{課題}をリストアップしてください。
その{課題}の考えられる詳細な原因と、その確認方法と詳細な{解決策}をリストアップしてください。

次に、{解決策}の比較評価を、以下の{比較評価の項目}で1-5で評価をしてランク付けしてください。評価結果は表形式で作成してください。

### 比較評価の項目
- 活動の説明: その活動の説明の文章
- 心理的な負担: その活動は社員の方の心理的負担が大きいものでしょうか?どういった事項が心理的に影響があるかを慎重に考慮してください。
- 投資時間: その活動の成果によって、どれだけの生産性の向上が得られますか?時間短縮の割合はどれくらいですか?
- 金額: その活動には、どれだけの金額の投資が必要となりますか?一度購入したとしてもメーカーのサポートが必要だったり、高額だったりするもののあります。サブスクリプション型は、効果が出ないと思ったら即座に取り消しができるのはメリットですが、使い続けたら買い切りの方が安い場合もあります。
- デジタル化での改善効果: その現在の活動をデジタル化して改善できたら、どれだけ生産性があがり、どれだけ投資対効果がありますか?
- 生成AIの活用: その活動に生成AIを活用できたら、どれだけ生産性があがって投資対効果が得られますか?

最も効果の高い{解決策}を1つリストアップして、その詳細な理由も論理的に説明してください。 
```

結果:


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/b73c3b74-1545-4fe1-84b1-2dda2677a3e4.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/c9dca3e8-d05d-42f5-9030-b4a06a2f930f.png)


うーーん。相変わらず素晴らしい😊

# 注意点

- 大規模データには対応できないと思います。まだ試していませんが、Microsoft 365 CopilotのCode Interpreterが動いているコンピューターにそんなに大量のメモリーが割り当てられていません。
- ここはFabric君の出番かと。つまり、分析実行時のAgent君がFabric君のComputeになれば。という事は、データはOneLakeに保存したいですね😎。この手順は今後....

# まとめ
データの分析のシナリオが、**実ビジネスでの利用**に近くなってきました。どれくらいの数のデータの結合に耐えうるかは、まさにお持ちのデータの量と種類次第かと思います。

私も、まだやり始めですので。実案件を通じてその成果を皆さんにも共有しますね。