12
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AI機能搭載Pythonライブラリ、PandasAIとAzure OpenAIでデータ分析を楽しく!機密性の高いデータも安心分析

Last updated at Posted at 2023-09-01

みなさん、こんにちは。突然の質問ですが、PythonのライブラリであるPandasAIをご存じでしょうか?

データに対して、自然言語により質問をすることができるようになるライブラリです。本記事ではこの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ベースのフレームワークで、気軽にデモ用のアプリを作成することができます。

デモデータについて

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

デモ用Pythonにコードについて

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

streamlit run main.py

デモ

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

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

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

readcsv.png

プロンプト(質問)

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

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

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

次の質問をしてみます。

「平均年齢を教えて。」

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

mean_age.png

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

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

piechart.png

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

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

bar.png

サンプルコード

次のコードが今回使った主なライブラリとコードです。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を搭載するという発想が面白いと感じています。まだまだ、鋭意開発中のようですので今後もどのように進化するのか見ていければと考えています。

12
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?