PandasAI 이용해보려고 chatGPT 결제 했어요. 가입하고나서 얼마 지나지 않은 경우에는 무료로 조금 사용가능한데 시간이 많이 지나고 나서는 카드 등록해야 하더라고요. openai 로그인 하고 나서 api 부분에 있는 빌링 메뉴에서 카드 등록 할 수 있어요. 로그인 하고 나서 아래 주소로 이동해서 카드 등록할 수 있습니다.
https://platform.openai.com/account/billing/overview
카드 등록하면서 초기에 얼마로 시작할지 나와서 5$로 시작했어요. 벌써 0.02 사용했어요.
PandasAI 사용하려면 키가 있어야 합니다. API Keys 메뉴에서 생성해서 복사 해 놓으세요. 닫으면 다시 볼 수 없으니 잘 복사해놓아야 합니다.
https://platform.openai.com/api-keys
Python Jupyter Lab 이용해서 바로 해봤습니다.
일단 설치하세요. 파이썬 버전이 3.9에서 잘 되더라고요. 처음에 3.11 버전에서 오류나는 부분이 있었어요. 이 글을 읽고 있는 시점에서 시간이 더 지났다면 문제가 해결되어 있을 수 있습니다.
pip install pandasai
이제 Jupyter 켜고나서 진행 했어요.
import pandas as pd
from pandasai import SmartDataframe, SmartDatalake
from pandasai.llm import OpenAI
from pandasai.responses.streamlit_response import StreamlitResponse
from pandasai.responses.response_parser import ResponseParser
필요한 패키지들을 import 했어요.
OPENAI_API_KEY=''
llm = OpenAI(api_token=OPENAI_API_KEY)
할당받은 키를 이용해서 llm 변수 생성 합니다.
def is_dataframe(data):
return isinstance(data, pd.DataFrame)
pandsai에서 받은 결과가 데이터프레임인지 검사 합니다. 문자열이나 이미지가 나올 수 있어서요.
class PandasDataFrame(ResponseParser):
def __init__(self, context) -> None:
super().__init__(context)
def format_dataframe(self, result):
# Returns Pandas Dataframe instead of SmartDataFrame
return result["value"]
리턴 받는 형태를 정하는 예제입니다.
dataframe = pd.DataFrame({
"country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],
"gdp": [19294482071552, 2891615567872, 2411255037952, 3435817336832, 1745433788416, 1181205135360, 1607402389504, 1490967855104, 4380756541440, 14631844184064],
"happiness_index": [6.94, 7.16, 6.66, 7.07, 6.38, 6.4, 7.23, 7.22, 5.87, 5.12]
})
샘플데이터입니다.
#df = SmartDataframe(df, config={"llm": llm, "response_parser": PandasDataFrame})
# dl = SmartDatalake(
# [dataframe],
# config={"llm": llm, "verbose": True, "response_parser": StreamlitResponse},
# )
dl = SmartDatalake(
[dataframe],
config={"llm": llm, "verbose": True, "response_parser": PandasDataFrame, "save_charts": True},
)
이제 데이터를 준비 시키면 됩니다.
result = df.chat('행복지수 상위 5위 나라들의 차트 만들어줘')
결과가 이미지로 나오네요. 활용할 부분들이 많이 있겠어요.