AI&GameDev

AI와 게임개발에 관련된 이야기

Ollama #6: GPT와 로컬LLM으로 PandasAI의 강력한 데이터 분석 기능 테스트

pandas ai

PandasAI는 자연어로 데이터에 질문할 수 있는 혁신적인 파이썬 라이브러리입니다. 이 도구는 데이터 분석과 처리 과정을 크게 간소화하며, 다음과 같은 포괄적인 기능을 제공합니다.

  1. 자연어 쿼리: 복잡한 코딩 없이 자연어로 데이터에 대한 질문을 할 수 있습니다.
  2. 데이터 시각화: 그래프와 차트를 통해 데이터를 직관적으로 표현합니다.
  3. 데이터 정제: 누락된 값을 처리하고 데이터셋을 정리합니다.
  4. 품질 향상: 특성 생성을 통해 데이터의 품질을 개선합니다.
  5. 다양한 데이터 활용: CSV, XLSX, PostgreSQL, MySQL, BigQuery, Databrick, Snowflake 등과 같은 다양한 데이터 소스에 연결합니다.
  6. LLM 통합: 다양한 대규모 언어 모델(LLM)과 연동하여 데이터 처리 능력을 향상시킵니다.

간단히 말해, PandasAI는 Pandas 라이브러리에 AI 기능을 추가한 것으로, 데이터 분석 과정의 효율성을 크게 높입니다.

이 블로그 포스트에서는 PandasAI를 활용한 실제 데이터 분석 및 시각화 과정을 상세히 살펴볼 것입니다. 특히, OpenAI의 GPT 모델과 Ollama를 이용한 로컬 LLM을 PandasAI와 연동하는 방법에 초점을 맞추어, 다양한 LLM 데이터 처리 방식의 특징과 장단점을 비교 분석할 것입니다.

이를 통해 독자들은 PandasAI의 다양한 기능과 활용 방법을 이해하고, 자신의 데이터 분석 프로젝트에 가장 적합한 LLM 데이터 처리 방식을 선택할 수 있는 인사이트를 얻게 될 것입니다.

준비

계정생성

PandasAI 공식 사이트에 접속하여 계정을 만듭니다.

pandasai

로그인 후 API 키를 확인합니다.

pandasai api key

테스트용 데이터 준비

데이터 분석을 위해 ChatGPT에서 임시로 두 개의 CSV 파일을 생성하였습니다.

  • Employee_Info.csv: 직원 정보
test data
  • Employee_Salary.csv: 급여 정보
test data

PandasAI 기본 모델

PANDASAI_API_KEY 설정

PANDASAI_API_KEY 환경변수 사용을 위해 dotenv 패키지를 사용했습니다. (PANDASAI_API_KEY 를 직접 입력해도 상관 없습니다.)
dotenv 설치

pip install python-dotenv

.env 파일에 다음 내용을 추가합니다.

PANDASAI_API_KEY='pandasai-api-key'

환경설정을 불러오는 부분입니다.

from dotenv import load_dotenv

load_dotenv()

PandasAI 및 필요한 라이브러리 설치

numpy 버전을 구버전으로 유지하기 위해 먼저 설치를 하고 PandasAI를 설치한 후 PyYAML을 설치합니다.
(차후 버그가 수정되면 numpy를 별도로 설치하는 과정이 필요 없어질 수 있습니다.)

pip install numpy==1.26.4
pip install pandasai
pip install PyYAML

BambooLLM 기본LLM

BambooLLM은 PandasAI의 기본 언어 모델로, 데이터 분석에 특화되어 있습니다.
별도로 LLM을 지정하는 코드가 없다면 기본적으로 실행됩니다.

SmartDataFrame Chat 테스트

PandasAI의 SmartDataframe 클래스는 사용자가 데이터프레임과 자연어 질의를 통해 상호 작용할 수 있게 해줍니다. 이 클래스는 자연어를 데이터 조작 및 검색 쿼리로 변환하여 데이터 분석을 단순화하며, 내장된 AI를 사용해 사용자의 입력을 효과적으로 이해하고 처리합니다. 이 기능은 복잡한 프로그래밍 지식 없이 데이터 탐색을 용이하게 합니다.

간단하게 직원의 수가 가장 많은 부서를 물어보았습니다.

import os
from pandasai import SmartDataframe

csv_file_path_employee = os.path.join('data', 'Employee_Info.csv')
df = SmartDataframe(csv_file_path_employee, config={'enable_cache': False})

df.chat('Which department has the most employees?')

결과는 다음과 같이 잘 출력해 주었습니다.

'The department with the most employees is Sales.'

데이터 시각화 테스트

부서 별 직원수를 시작적으로 표현해 달라고 해봤습니다.

df.chat('Give us a visual representation of how many people are in your department.')

부서 별로 인원수에 맞게 그래프를 그려주었습니다.

visual representation using default llm

SmartDatalake 테스트

PandasAI의 SmartDatalake 기능을 사용하면 여러 DataFrame을 동시에 분석할 수 있습니다.
SmartDatalake를 이용한 복수 DataFrame 분석 예시

import os
import pandas as pd
from pandasai import SmartDatalake

# csv 파일 읽기
csv_file_path_employee = os.path.join('data', 'Employee_Info.csv')
csv_file_path_salary = os.path.join('data', 'Employee_Salary.csv')

csv_data_employee = pd.read_csv(csv_file_path_employee)
csv_data_salary = pd.read_csv(csv_file_path_salary)

employees_df = pd.DataFrame(csv_data_employee)
salaries_df = pd.DataFrame(csv_data_salary)

lake = SmartDatalake([employees_df, salaries_df], config={'enable_cache': False})

lake.chat("Who gets paid the most?")

급여 데이터에서 가장 높은 급여를 찾고 직원정보 데이터에서 해당 직원의 이름을 찾아주었습니다.

'The employee who gets paid the most is Charles Wilson from the Sales department with a salary of $98268.'

가장 급여가 적은 직원도 물어보았습니다.

lake.chat("Who is the lowest paid person?")

해당 직원의 정보를 잘 찾아주는 것을 볼 수 있습니다.

'The lowest paid person is David Brown with a salary of $31871.'

OpenAI GPT 모델을 이용한 PandasAI 데이터 분석

OpenAI의 GPT 모델을 PandasAI와 연동하여 데이터 분석을 수행할 수 있습니다. 표현에는 차이가 있으나 맞는 답변을 제공합니다.

OPENAI_API_KEY 설정

OPENAI_API_KEY='openai-api-key'

gpt-4o 모델을 사용한 Chat 테스트

직원수가 가장 많은 부서를 물어보는 chat

import os
from pandasai import SmartDataframe
from pandasai.llm import OpenAI

llm = OpenAI(model='gpt-4o',
             temperature=0,
             seed=26
)
csv_file_path_employee = os.path.join('data', 'Employee_Info.csv')
df = SmartDataframe(csv_file_path_employee, 
                    config={"llm": llm, 'enable_cache': False})
                    
df.chat('Which department has the most employees?')

결과

'The department with the most employees is Sales with 8 employees.'

데이터 시각화 테스트

df.chat('Give us a visual representation of how many people are in your department.')
visual representation using gpt-4o

SmartDatalake 테스트

gpt-4o를 사용한 SmartDatalake 테스트

llm = OpenAI(model='gpt-4o',
             temperature=0,
             seed=26
)
lake = SmartDatalake([employees_df, salaries_df], config={"llm": llm, 'enable_cache': False})

lake.chat("Who gets paid the most?")

가장 급여가 많은 직원에 대한 답변은 다음과 같습니다.

'The employee who gets paid the most is Charles Wilson from the Sales department with a salary of $98268.'

가장 급여가 적은 직원에 대한 답변은 다음과 같습니다.

'The lowest paid person is David Brown from Sales with a salary of 31871.'

Ollama를 활용한 로컬 LLM 데이터 처리

Ollama를 사용하면 로컬에서 LLM을 구동하여 PandasAI와 연동할 수 있습니다. 이는 데이터 프라이버시가 중요한 경우에 유용한 방법입니다. 또한 별도의 비용이 추가되지 않습니다.

Ollama 설정

Ollama 설치 및 설정 방법은 별도의 문서 Ollama #1: 비용 걱정 없이 내 컴퓨터에서 제약 없는 LLM 실행하기  부분을 참조하시기 바랍니다.

API KEY 설정 필요 없음

로컬LLM을 사용하는 경우 별도로 요구되는 api key가 존재하지 않습니다.

llama3 모델을 사용한 Chat 테스트

import os
from pandasai import SmartDataframe
from pandasai.llm.local_llm import LocalLLM

llm = LocalLLM(api_base="http://localhost:11434/v1", model="llama3", 
               temperature=0,
               seed=26
)
csv_file_path_employee = os.path.join('data', 'Employee_Info.csv')
df = SmartDataframe(csv_file_path_employee, config={"llm": llm, "enable_cache": False})

df.chat('Which department has the most employees?')

가장 인원이 많은 Sale 부터를 잘 찾아주는 것을 볼 수 있습니다.

'The department with the most employees is Sales.'

데이터 시각화 테스트

df.chat('Give us a visual representation of how many people are in your department.')

정렬은 되지 않았지만 그래도 어느 정도 맞는 답변을 해줍니다.

visual representation using ollama


SmartDatalake 테스트 결과
동일 코드로 llama3 모델을 사용하는 경우 결과가 제대로 출력되지 않아 ‘codestral’ 모델로 테스트 진행하였습니다.

import os
import pandas as pd
from pandasai import SmartDatalake
from pandasai.llm.local_llm import LocalLLM

# csv 파일 읽기
csv_file_path_employee = os.path.join('data', 'Employee_Info.csv')
csv_file_path_salary = os.path.join('data', 'Employee_Salary.csv')

csv_data_employee = pd.read_csv(csv_file_path_employee)
csv_data_salary = pd.read_csv(csv_file_path_salary)

employees_df = pd.DataFrame(csv_data_employee)
salaries_df = pd.DataFrame(csv_data_salary)

llm = LocalLLM(api_base="http://localhost:11434/v1", model="codestral",
               temperature=0,
               seed=26
)
lake = SmartDatalake([employees_df, salaries_df], config={"llm": llm, "enable_cache": False})

lake.chat("Who gets paid the most?")

결과는 자체 모델이나 gpt-4o를 사용하는 경우와 의미는 동일합니다.

'The highest salary is earned by Charles Wilson with a salary of $98268.'

SmartDatalake 테스트

import os
import pandas as pd
from pandasai import SmartDatalake
from pandasai.llm.local_llm import LocalLLM

# csv 파일 읽기
csv_file_path_employee = os.path.join('data', 'Employee_Info.csv')
csv_file_path_salary = os.path.join('data', 'Employee_Salary.csv')

csv_data_employee = pd.read_csv(csv_file_path_employee)
csv_data_salary = pd.read_csv(csv_file_path_salary)

employees_df = pd.DataFrame(csv_data_employee)
salaries_df = pd.DataFrame(csv_data_salary)

llm = LocalLLM(api_base="http://localhost:11434/v1", model="codestral",
               temperature=0,
               seed=26
)
lake = SmartDatalake([employees_df, salaries_df], config={"llm": llm, "enable_cache": False})

lake.chat("Who gets paid the most?")

가장 급여가 많은 직원에 대한 답변은 다음과 같습니다.

'The highest salary is earned by Charles Wilson with a salary of $98268.'
lake.chat("Who is the lowest paid person?")
# 답변:'The lowest paid person is David Brown with a salary of $31871.'

PandasAI 추가 기능

Agen (문서)

PandasAI의 Agent 클래스는 다중 턴 대화를 지원하여, 사용자의 질문에 상태를 유지하며 연속적으로 답변할 수 있습니다. 이 클래스를 통해 사용자는 복잡한 데이터 질의를 자연어로 수행할 수 있고, 필요한 경우 명확화 질문을 할 수 있습니다. 또한, Agent는 주어진 답변에 대한 설명을 제공하거나 질문을 재구성하여 더 정확하고 포괄적인 응답을 도출할 수 있도록 돕습니다.

Connectors (문서)

PandasAI의 connectors 기능은 다양한 데이터 소스에 연결을 지원하여 사용자가 데이터베이스 및 기타 데이터 플랫폼에 쉽게 접근할 수 있도록 합니다. 이 커넥터들은 PostgreSQL, MySQL, SQLite, Snowflake, DataBricks, GoogleBigQuery, Yahoo Finance 및 Airtable 등을 포함하여, 사용자가 특정 데이터베이스를 직접적으로 SmartDataframe 객체에 연결할 수 있게 해줍니다. 이를 통해 자연어 질의를 사용하여 데이터에 대한 질문과 분석을 수행할 수 있습니다.

Large Language Models (문서)

PandasAI는 자연어 쿼리를 데이터 분석 및 조작을 위한 실행 가능한 코드로 변환하는 다양한 대형 언어 모델(LLM)을 지원합니다. 이러한 모델에는 데이터 관련 쿼리에 특화된 BambooLLM과 OpenAI, Google PaLM과 같이 특정 API 키가 필요한 모델이 포함됩니다. 사용자는 이 모델들을 PandasAI 환경에 통합하고 특정 매개변수를 사용자 정의하여 데이터 처리 작업을 향상시킬 수 있습니다.

  • BambooLLM (자체 기본 모델)
  • OpenAI models
  • Google PaLM
  • Google Vertexai
  • Azure OpenAI
  • HuggingFace via Text Generation
  • LangChain models
  • Amazon Bedrock models
  • IBM watsonx.ai models
  • Local models
    • Ollama
    • LM Studio

Skills (문서)

PandasAI의 skills 기능을 사용하면 사용자 정의 함수를 에이전트에 추가하여 다양한 작업을 수행할 수 있습니다. 이러한 스킬은 에이전트가 데이터를 분석하고 조작하는 데 필요한 기능을 확장하도록 설계되어 있으며, 사용자가 자신의 요구에 맞게 에이전트를 맞춤 설정할 수 있게 해줍니다. 예를 들어, 데이터 시각화 작업을 자동화하고 그 결과를 보여주는 함수를 에이전트에 통합할 수 있습니다.

Judge Agent (문서)

생성된 코드를 평가하는 JudgeAgent를 사용하여 PandasAI 라이브러리를 강화할 수 있습니다.

Train PandasAI (문서)

데이터를 더 잘 이해하고 성능을 개선하도록 PandasAI를 훈련할 수 있습니다.

  • 모델이 특정 유형의 쿼리에 어떻게 접근할지에 대한 일반적인 지침
  • 특정 질문에 답하기 위해 필요한 프로세스 학습

Custom Response (문서)

필요에 따라 응답 출력을 수정하도록 확장할 수 있는 ResponseParser 클래스를 제공합니다.

라이센스 (문서)

일부 기능은 별도의 라이센스를 따르도록 되어 있습니다.

마무리

PandasAI는 데이터 분석 분야에 새로운 접근 방식을 제시하는 흥미로운 도구입니다. 이 라이브러리는 자연어 처리 기능과 AI를 결합하여 데이터 분석 과정에 도움을 주고 있습니다.

본 글에서 우리는 PandasAI의 주요 기능을 살펴보았습니다:

  1. 자연어를 이용한 데이터 쿼리
  2. 데이터 시각화 지원
  3. 데이터 정제 및 품질 향상 기능
  4. 다양한 LLM과의 연동 가능성

특히, OpenAI의 GPT 모델과 Ollama를 활용한 로컬 LLM 데이터 처리 방식을 비교 분석했습니다. PandasAI는 이러한 다양한 LLM 데이터 처리 옵션을 제공함으로써, 사용자가 자신의 요구사항에 맞는 방식을 선택할 수 있게 해줍니다.

PandasAI는 데이터 분석 워크플로우에 추가할 수 있는 흥미로운 새로운 도구입니다. 자연어 처리 기능과 다양한 LLM 연동 옵션은 일부 데이터 분석 작업을 간소화할 수 있습니다. Ollama와 OpenAI 같은 다양한 LLM 옵션을 활용할 수 있는 PandasAI의 유연성은 사용자들에게 선택의 폭을 넓혀줍니다.

데이터 분석에 관심 있는 분들이라면, 기존 도구와 함께 PandasAI를 시험해보고 자신의 워크플로우에 어떻게 통합할 수 있을지 고민해보는 것도 좋을 것 같습니다.

본 글은 GPTers에 게시되고 있습니다.
Ollama #6: GPT와 로컬LLM으로 PandasAI의 강력한 데이터 분석 기능 테스트

Ollama #6: GPT와 로컬LLM으로 PandasAI의 강력한 데이터 분석 기능 테스트

답글 남기기

Scroll to top