본문 바로가기
Coding(코딩)/Python

[Python] 파이썬 Pandas AI 사용법과 프롬프트(prompt) 입력 예시

by DevKev 2023. 6. 21.

Pandas 라이브러리를 데이터 처리하는데 종종 사용했었는데, 올 초에 한번 사용해보라는 메일과 함께 관련 사용법에 대해서 소개한 medium 링크가 왔었다. 한동안 Pandas를 사용할 일이 많이 없어서 신경 안쓰고 있었는데 다량의 데이터를 핸들링하고 그래프를 그리는 작업에 한 번 이용해 볼 수 있을까 싶어서 관심 두고 사용해봤다.

Pandas AI: The Generative AI Python Library

Pandas AI는 OpenAI의 ChatGPT처럼 나의 데이터 및 데이터셋과 대화를 나눌 수 있도록 도와준다. 원래대로라면 계속 데이터 행/열에는 뭐가 있고, 튀는 데이터는 어떤 데이터고 그런 행위들을 하면서 흘러가는 시간을 절약하기 위한 라이브러리이다. 기존의 Pandas 라이브러리를 대체하기 위함이 아니고 도와주는 좋은 보조(assistant) 수단이 될 수 있다.

 

 

 

 

 

 

 

함수처럼 활용하는데 필요한건 두 가지:

1. 내가 활용하고자 하는 데이터

2. 명령어(prompt)

 

아주 간단하게 쓸 수 있다.

 

자 그럼 사용하는 방법에 대해서 알아보자. 이미 파이썬 환경이 세팅됐다는 가정 하에 라이브러리 설치부터 진행했다.

To do

PandasAI 설치

✅ OpenAI 가입 및 API Key 발급

✅ PandasAI 활용 예시

 

사용 전 설치 방법부터 먼저 알아보자.

 

사용 전 setup

 PandasAI 설치

pip install pandasai

# 특정 버전 설치
pip install pandasai==0.x.x

 

예전에는 아나콘다(Anaconda) 파이썬을 많이 썼어서 conda install을 많이 썼는데, 요즘은 주로 비주얼 스튜디오 코드(VScode)를 쓰다보니 pip install 명령어로 설치했다.

 

설치를 진행하면서 WinError 2(지정된 파일 찾을 수 없습니다)WinError 5(액세스 거부) 같은 에러가 발생하면서 정상적으로 설치가 안됐지만, cmd 창을 관리자 권한으로 실행하여 위의 명령어를 입력해주니 정상적으로 설치가 됐다.

 

관리자 권한 실행

PandasAI 설치는 이걸로 끝. 다음으로는 OpenAI API를 이용하기 위한 키를 발급해보자.

 

✅ OpenAI 가입 및 API Key 발급

OpenAI API Key 발급

 

OpenAI 계정의 API keys 탭에 들어가서 Create new secret key 버튼을 눌러준다.

 

Create new secret key

선택사항이지만 키 관리를 위해 나만의 테스트 목적을 적어둔다.

 

이후 sk- 로 시작하는 키가 생성되는데, 여러 번 키를 생성할 수 있지만 지금 뜨는 키는 이후 나도 다시 못보니까 꼭! 어딘가에 복사/붙여넣기해서 저장해두자.

 

Key는 누구에게도 공유하면 안된다.  깃허브(Github) 같은데 올린다면 유의하자. 내 키를 누군가 쓰게되면 과금이 되니 그리고 만약 악용한다면? 아무튼 이건 무조건 개인적으로 보관하자. 전에 python 코들를 git에 올릴 때 어떤 세팅이 필요한지 작성해뒀으니 참고하자.

 

 

[Python] python 코드 git에 올리기 전 할 일들

To Do ✅ .gitignore 생성 ✅ path 관리할 .env 생성 ✅ 필요한 package 설치 관련 requirements.txt 생성 .gitignore 생성 git에 push할 파일과 아닌 파일 구분이 필요하기 때문에 필요한 작업 https://www.toptal.com/develop

totheretirement.tistory.com

 

 

 

 

 

 

 

 

 

이제 모든 세팅이 완료되었으니, 본격적으로 PandasAI 라이브러리를 사용해보자.

 

PandasAI 라이브러리 활용해보기

공식 깃허브에는 다음과 같은 예시 코드를 제공하고 있다:

import pandas as pd
from pandasai import PandasAI

# Sample DataFrame
df = 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]
})

# Instantiate a LLM
from pandasai.llm.openai import OpenAI
llm = OpenAI(api_token="YOUR_API_TOKEN")

pandas_ai = PandasAI(llm)
pandas_ai(df, prompt='Which are the 5 happiest countries?')

 

여기서 변경해볼 것은 서두에서도 언급했지만,

 

1. 내가 분석하고자 하는 데이터프레임(변수: df)

2. 내가 발급한 OpenAI Key

3. PandasAI가 명령을 수행할 명령어(prompt)

 

이렇게 세 가지이다.

 

나는 내가 가지고 있는 데이터에서 작성을 하려했다. 다음과 같은 형태를 가지고 있고 코드를 작성했다.

pandas dataframe

In [1]:
import pandas as pd
from pandasai import PandasAI
from pandasai.llm.openai import OpenAI

df = pd.read_csv('./combined/2030.csv')
In [2]:
import pandas as pd
import os
KEY = os.environ.get('OPENAI')
In [3]:
import pandas as pd
llm = OpenAI(api_token=KEY)
# verbose=True 시 생성한 코드를 볼 수 있음
pandas_ai = PandasAI(llm, verbose=True)

pandas_ai.run(df, prompt='Which has the high D value? And show me the row.')

처음으로 OpenAI API 키를 발급 받은 경우 Billing 관련해서 입력해준 적이 없기 때문에 아마 다음의 메세지가 뜰 것이다.

You exceeded your current quota, please check your plan and billing details.
'Unfortunately, I was not able to answer your question, because of the following error:\n\nYou exceeded your current quota, please check your plan and billing details.\n'

Billing info

 

API 사용하는 것이 유료고 발급한 키에서 호출 건에 대해서 비용을 매기기 때문에 결제 정보를 입력해줘야 한다. 매달 말 사용량에 대해서 청구된다는 문구가 적혀있다. 아 4월까지 18불 줬던 history가 보이는데 미리 써볼걸 그랬다.... 한 번 사용해보면 얼마가 나올지 궁금하니 그것도 포스트 마지막에!

 

Monthly payment for using API
[ OpenAI API 이용 시 사용량에 따라 매달 청구 된다는 문구 ]

 

지불 수단 등록 후 몇 분이 지나면 정상적으로 API를 이용할 수 있다.

 

다시 위의 코드를 실행해봤더니 내 API KEY를 인식하고 돌아가는 것은 보이는데, 다음과 같은 에러가 났다. 근데 그 와중에 돈은 나간다.... 비싸진 않은데 뭔가 기분이 나쁨. 안돌아갔는데 돈은 나감. 한 5번 정도 호출했더니 다음과 같이 비용이 나온다. 샘 이미 부자겠지만 더 부자되라...

 

API cost

 

음 왜 에러가 났는지 보면 질문이 이상하면 작동을 안하는 것 같다. 여러가지 prompt를 작성해서 돌려보았지만 아무래도 자동으로 코드를 작성해주는 것이다 보니 아직까지는 완벽하지 않은 것 같다. 고급 코더도 아닌 나를 대체하기 아직은 힘들어보임... 예제로 작성했던 데이터프레임에 대해서는 적용이 잘 됐는데 왜 그럴까에 대한 고찰이 조금 더 필요해 보인다.

 

PandasAI result
[ 예제 데이터프레임에 대한 PandasAI의 답변 ]

 

pandas_ai.run(df, prompt='Which row index has the highest D value?')
pandas_ai.run(df, prompt='Which row exhibits the highest D value?')

위에 대한 답변은 해주었다. 두 질문에 대해서 같은 대답을 해주었고, 뭔가 깔끔한 답변은 아니었다.

run할 때마다 돈이 나간다고 생각하니 여간 거슬리는게 아니다.

 

결론은 아직까지는 프롬프트를 어떻게 작성하는냐에 따라서 양질의 답변이 나오기도 하고 오류가 나기도 한다는 것이다. 조금 더 이용을 해보면서 시행착오를 좀 더 겪어봐야될 것 같다.

 

PandasAI result for custom dataframe
[ 내가 가지고 있는 dataframe에 대한 PandasAI의 답변 ]

 

아직은 이런 사업도 초기라서 조금 더 발전이 필요하다라고 초기에 적었다.

(위까지는 6월 21일에 작성한 결과)

 

이후 내 데이터에서 문제를 발견했는데 이게 굉장히 중요한 문제인 듯하여 고찰을 적어본다.

데이터프레임을 불러올 때 다음과 같이 불러왔었는데,

df.read_csv('파일명')

 

콤마와 공백(blank)도 있다보니 열 이름을 다음과 같이 공백을 함께 인식을 해서 생기는 문제가 있었다.

Index(['W', ' L', ' D', ' Rtheta', ' Z'], dtype='object')

 

그래서 다음과 같이 코드를 수정했고,

df = pd.read_csv('파일명', sep=',', skipinitialspace=True)

 

다시 물어봤더니 정상적으로 내가 원하는 답변을 얻을 수 있었다.

modified results

 

추가적으로 특정 컬럼의 히스토그램도 그려달라고 요청했더니 다음과 같은 결과를 얻었다.

pandas_ai.run(df, prompt='Plot the histogram of D with 5 bins')

PandasAI histogram

 

결국 내가 잘못했던거지 pandasAI는 잘못이 없다... ㅎㅎㅎ

 

좀 더 유용하게 활용할 수 있는 컨텐츠가 있다면 다음 시리즈로 돌아오도록 하겠다.

 

Tistory 첫번째 pip 블로거로서,

도움이 되셨다면? 아래 pip button을 통해 후원해 주시면 감사합니다.

 

 

 

 

 

 

 

 

 

 


 
 
 

 

https://pip.me/pipmoonbien

 

toss | PIP ME

Life, degen mode on.

www.pip.me