2024年2月28日 更新

LLM Mavericks~事例紹介~PandasAIとAzure OpenAIで機密性の高いデータも安心分析

こんにちは!
LLM Mavericksの岩崎です。

私たちは5月末にLLM Mavericksというバーチャル組織を立ち上げました。
プレスリリースはこちらです。

LLM Mavericksの課題のひとつが、機密性の高いデータを安心して分析できる方法を探ること。
今回は、「PandasAI」を使ってみた事例をご紹介します。

なお、本事例はQiitaの技術ブログにも投稿しています。

ーーーーーーーーーーーーーーーー

突然の質問ですが、PythonのライブラリであるPandasAIをご存じでしょうか?

🐼Introducing PandasAI: The Generative AI Python Library 🐼 | by Gabe A, M.Sc. | Level Up Coding

データに対して、自然言語により質問をすることができるようになるライブラリです。本記事ではこのPandasAIと、高度なセキュリティ機能を備えたAzure OpenAI Serviceを組み合わせたデータ分析についてデモ画面を交えてご紹介します。
(ここでは既にMicrosoft社のAzure OpenAI Serviceを契約されていて、また、少しPythonコードが読める方をイメージして書かせていただいていますが、ざっと眺めるだけでももちろん結構です。まだ、ご存じない方に「こんなライブラリがあるのか」と知って頂ければ幸いです。)

PandasAIとは

PandasAIは、データ分析用のPythonライブラリであるpandasにAI(人工知能)機能を追加するための補完ライブラリです。自然言語を使ってデータに関する質問ができるようになります。このライブラリはまだまだ開発途上のようです。記事投稿時点でこのように使える程度に捉えて頂ければと思います。

Azure OpenAI Serviceとは

Azure OpenAI Serviceは、言わずと知れたMicrosoft社によるAzure上で動作するOpenAIのモデルサービスです。エンタープライズレベルの高度なセキュリティが提供されています。

Streamlitとは

Pythonベースのフレームワークで、気軽にデモ用のアプリを作成することができます。

GitHub - streamlit/streamlit: Streamlit — A faster way to build and share data apps.

デモデータについて

機械学習等で有名なタイタニックのデータを使わせて頂きました。(次のリンク先からCSVファイルをダウンロードして使わせていただきました。)

https://github.com/datasciencedojo/datasets/blob/master/titanic.csv

デモ用Pythonコードについて

今回のデモ用Pythonコードはこのブログの最後の方に付けています。私もまだまだPythonは勉強中なのですが、参考になれば幸いです。早速、次のようにコマンドを打ち実行してみます。私の場合Windows上のコマンドプロンプトから実行しています。


streamlit run main.py


.

デモ

分析するファイルの取り込み

次のような画面が出ますので、赤枠ところから先ほどダウンロードしておいたファイルを指定して取り込みます。

ファイルの最初の5行が表示されました。

プロンプト(質問)

では、実際にプロンプト(質問)を書いて実行します。ファイルのヘッダーは英語ですが、日本語で質問してみます。プロンプト(質問)を書いたら赤枠の実行ボタンを押します。

「このデータの基本統計量を出して。」

count、mean(平均)、std(標準偏差)、min(最小値)、max(最大値)と言ったこのデータの基本的な統計量が表示されました。

次の質問をしてみます。

「平均年齢を教えて。」

特に赤枠で囲っていませんが、プロンプトに入れて実行ボタンを押す動作は一緒です。
実行ボタンの下に数字がでました。これは先ほどの基本的統計量の平均年齢と一致しています。

グラフも出せるようなので次のようにプロンプト欄に入れて実行ボタンを押します。

「男女比をパイチャートで出して。」

簡単ですね。では、次のプロンプト。

「年齢別の棒グラフを出して。」

サンプルコード

次のコードが今回使った主なライブラリとコードです。Azure OpenAI Serviceのキーやエンドポイント等は契約し、デプロイされているご自身(会社)のものを使って下さい。


japanize-matplotlib==1.1.3
matplotlib==3.7.2
numpy==1.25.1
openpyxl==3.1.2
pandas==1.5.3
pandasai==0.6.9
python-dotenv==1.0.0
streamlit==1.26.0


.

import os
import openai
import pandas as pd
import streamlit as st
import japanize_matplotlib

from dotenv import load_dotenv
from pandasai import PandasAI
from pandasai.llm.azure_openai import AzureOpenAI
from pandasai.middlewares.streamlit import StreamlitMiddleware


load_dotenv('env')

def load_api():
llm = AzureOpenAI(api_base = os.getenv("AZURE_OPENAI_ENDPOINT") ,
api_version = os.getenv("AZURE_OPENAI_VERSION"),
api_token = os.getenv("AZURE_OPENAI_KEY"),
deployment_name = os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME")
)

pandas_ai = PandasAI(
llm,
verbose=True,
enable_cache=False,
enforce_privacy=True,
conversational=True,
middlewares=[StreamlitMiddleware()],
)
return pandas_ai


def markdown_header():
st.markdown(
"<h1 style='font-size: 28px;'>Data analysis with PandasAI</h1>",
unsafe_allow_html=True
)

def handle_upload_file(pandas_ai):
upload_file = st.file_uploader(
"分析するcsvもしくはxlsx形式のファイル指定して下さい。", type=['csv', 'xlsx']
)

if upload_file is not None:
file_extension = os.path.splitext(upload_file.name)[1]

if file_extension == ".csv":
df = pd.read_csv(upload_file, encoding='utf-8')
elif file_extension == ".xlsx":
df = pd.read_excel(upload_file)
else:
st.warning("このファイルタイプはサポートされていません。")
return

st.write(df.head(5))

prompt = st.text_area("プロンプトを入れて下さい。")

if st.button("実行"):
if prompt:
with st.spinner("実行中..."):
st.write(pandas_ai.run(df, prompt=prompt))
else:
st.warning("プロンプトを入れて下さい。")
else:
st.info("ファイルを選択して下さい。")

if __name__ == "__main__":
pandas_ai = load_api()
markdown_header()
handle_upload_file(pandas_ai)


.

さいごに

機密性の高いデータでも安心して分析できるPandasAIAzure OpenAI Serviceという組み合わせは、データ分析をより効率的かつ楽しくしてくれるかもしれません。今後、OpenAI社のCode Interpreterのような機能がAzureにも入ってきたりする場合、Code Interpreterだけでデータ分析は完結してしまうのかもしれません。果たしてそのような時にこのPandasAIがどこまで有用なのか不明なのですが、それでもライブラリ自体にAIを搭載するという発想が面白いと感じています。まだまだ、鋭意開発中のようですので今後もどのように進化するのか見ていければと考えています。

GitHub - gventuri/pandas-ai: PandasAI is a Python library that integrates generative artificial intelligence capabilities into pandas, making dataframes conversational

※掲載内容は個人の見解です。
※会社名、製品名、サービス名等は、各社の登録商標または商標です。

関連記事