Pandas AI 사용법 - Pandas와 ChatGPT의 결합
- Python으로 데이터 분석을 할 때 빼먹을 수 없는 라이브러리인 Pandas. 아마 많은 분들이 사용하시고, 처음에 많이 학습하고 있을거에요
- 최근 Pandas-AI라는 라이브러리가 공개되었는데 대화형으로 Pandas를 사용할 수 있는 시대가 되었습니다. 아직 버전은 0.2지만, 추후에 더 많이 발전할 것 같네요
- 참고 : 이 글은 0.2.2 버전을 기준으로 작성했고, 글을 보시는 시기에 따라 다른 부분이 존재할 수 있습니다
Pandas-AI
- Github Repo
- Pandas AI는 Generative AI 기능을 Pandas와 결합해 사용할 수 있는 만든 라이브러리
설치
pip3 install pandasai==0.2.2
OpenAI API Key 발급
- OpenAI Platform 가입
- API Key 접근해서 발급
- Create new secret key 클릭
- name은 원하는 이름을 지정
- 이제 나오는 Key를 복사(우측 아이콘 클릭시 복사)
- 이 Key를 계속 사용하니 잘 저장해두기! 어딘가에 노출되면 안되니 Github에 업로드할 때도 주의 필요
- 만약 RateLimitError: You exceeded your current quota, please check your plan and billing details 오류가 발생하면 Open AI 문서에서 해결 방법을 찾을 수 있음
- Open AI에서 Plan이나 빌링 정보 확인. Billing Overview에 접근해서 설정
- 카드 등록 후 몇분 후 API를 다시 사용하면 오류가 발생하지 않음
사용법
- Jupyter Lab 실행
jupyter lab
라이브러리 Import & 데이터셋 정의
import pandas as pd
import numpy as np
from pandasai import PandasAI
from pandasai.llm.openai import OpenAI
df = pd.DataFrame({
"country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],
"gdp": [21400000, 2940000, 2830000, 3870000, 2160000, 1350000, 1780000, 1320000, 516000, 14000000],
"happiness_index": [7.3, 7.2, 6.5, 7.0, 6.0, 6.3, 7.3, 7.3, 5.9, 5.0]
})
OpenAI API Key를 사용해 LLM 정의
OPENAI_API_KEY = "여러분들이 생성한 OpenAI API Key"
llm = OpenAI(api_token=OPENAI_API_KEY)
Pandas AI에게 프롬프트 제출
pandas_ai = PandasAI(llm, verbose=True)
pandas_ai.run(df, prompt='Which are the 5 happiest countries?')
- verbose=True 인자를 주면 생성한 코드를 볼 수 있음(Jupyter Lab을 실행한 CLI에서 확인했음. 처음엔 Cell의 Output에서 보이다가 몇번 진행하니 나오지 않았음)
- Code generated가 보이고, 그것을 실행하는 것이 보임
- 결과
그래프 그려달라는 프롬프트 제출
pandas_ai.run(df, prompt='Divide GDP into 3 grades in ascending order, and draw each grade as a bar graph.')
생성된 코드는 다음과 같음
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({ 'country': ['United States', 'United Kingdom', 'France', 'Germany', 'Italy'], 'gdp': [21400000, 2940000, 2830000, 3870000, 2160000], 'happiness_index': [7.3, 7.2, 6.5, 7.0, 6.0] }) # Divide GDP into 3 categories gdp_categories = pd.qcut(df['gdp'], q=3, labels=['Low', 'Medium', 'High']) df['gdp_category'] = gdp_categories # Plot bar graph for each GDP category grouped = df.groupby('gdp_category').mean() grouped.plot(kind='bar', y='happiness_index') plt.show()
한국어로 Pandas AI 실행
이 부분에서 wow 포인트를 느껴 한국어로도 질문. “GDP를 높은 순으로 3등급으로 나눠주고, 각 등급의 평균 GDP를 Bar 그래프로 그려줘”
pandas_ai.run(df, prompt='GDP를 높은 순으로 3등급으로 나눠주고, 각 등급의 평균 GDP를 Bar 그래프로 그려줘')
생성한 코드
# GDP를 높은 순으로 3등급으로 나누기 df['gdp_category'] = pd.qcut(df['gdp'], q=3, labels=['Low', 'Medium', 'High']) # 각 등급의 평균 GDP 구하기 gdp_mean = df.groupby('gdp_category')['gdp'].mean() # Bar 그래프로 그리기 gdp_mean.plot(kind='bar')
직접 코드로 구현한 값과 비교하면 동일
df.groupby('gdp_category')['gdp'].mean().astype(int)
총평
- 요즘 HTML 작업을 할 때 ChatGPT와 협업(?)했는데 앞으론 데이터 분석에서도 이렇게 될 것으로 예상
- 목적을 정의하고 알아서 분석해봐! 가 가능한 시대가 올 것
- 프롬프트를 잘 작성하면 결과를 잘 내주고, 프롬프트를 구체적으로 작성하지 않으면 오류가 생기는 코드를 만들기도 합니다. 이 부분은 점차 개선될 것
- 속도도 아직 엄청 빠르진 않지만, 코드를 직접 짜는 것보단 수월한 편
- Pandas AI Prompt, Pandas Data Analytics Prompt 등도 점점 생길 것 같음
- Pandas 교육도 변화가 필요한 시점이 아닐까 싶음
사용한 코드 전체
import pandas as pd
import numpy as np
from pandasai import PandasAI
from pandasai.llm.openai import OpenAI
df = pd.DataFrame({
"country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],
"gdp": [21400000, 2940000, 2830000, 3870000, 2160000, 1350000, 1780000, 1320000, 516000, 14000000],
"happiness_index": [7.3, 7.2, 6.5, 7.0, 6.0, 6.3, 7.3, 7.3, 5.9, 5.0]
})
OPENAI_API_KEY = "여러분들이 생성한 OpenAI API Key"
llm = OpenAI(api_token=OPENAI_API_KEY)
pandas_ai = PandasAI(llm, verbose=True)
pandas_ai.run(df, prompt='Which are the 5 happiest countries?')
pandas_ai.run(df, prompt='Divide GDP into 3 grades in ascending order, and draw each grade as a bar graph.')
pandas_ai.run(df, prompt='GDP를 높은 순으로 3등급으로 나눠주고, 각 등급의 평균 GDP를 Bar 그래프로 그려줘')
카일스쿨 유튜브 채널을 만들었습니다. 데이터 분석, 커리어에 대한 내용을 공유드릴 예정입니다.
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 의견이 있으시면 댓글 남겨주셔요.