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)