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 발급

  • 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 그래프로 그려줘')

카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)

PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다

이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)

Buy me a coffeeBuy me a coffee





© 2017. by Seongyun Byeon

Powered by zzsza