안녕하세요! 오늘은 PandasAI와 Ollama를 이용해서 Llama3 모델을 통해 쉽고 간편하게 엑셀과 대화하는 파이썬예제를 알아보겠습니다. PandasAI는 깃허브 스타 11k를 받고 있는 Python 라이브러리로, 자연어 질문을 사용하여 데이터를 탐색하고 분석하는 데 도움이 되는 기능을 제공하며, CSV, XLSX, PostgreSQL, MySQL, BigQuery 등과 같은 다양한 데이터 소스에 연결할 수 있습니다. 이 블로그에서는 PandasAI를 활용해서 6줄 파이썬코드로 엑셀 데이터와 대화해 보겠습니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
PandasAI란?
PandasAI는 자연어로 데이터를 탐색하고 분석할 수 있게 도와주는 도구입니다. 데이터 시각화, 클린징, 특성 생성과 같은 다양한 기능을 제공하여 데이터 분석 작업을 보다 효율적으로 수행할 수 있습니다. 주요 기능은 다음과 같습니다:
- 자연어 질문하기: 자연어로 데이터에 질문할 수 있습니다.
- 데이터 시각화: 데이터를 시각화하여 그래프와 차트를 생성할 수 있습니다.
- 데이터 클린징: 결측값을 처리하여 데이터를 클린징할 수 있습니다.
- 특성 생성: 특성 생성을 통해 데이터의 품질을 향상시킬 수 있습니다.
- 데이터 연결: CSV, XLSX, PostgreSQL, MySQL, BigQuery, Databrick, Snowflake 등 다양한 데이터 소스에 연결할 수 있습니다.
PandasAI는 AI 언어 모델을 사용하여 자연어 질문을 이해하고 해석하며, Python 코드와 SQL 쿼리로 변환합니다. 그런 다음 이 코드를 사용하여 데이터와 상호 작용하고 결과를 사용자에게 반환합니다.
https://docs.pandas-ai.com/en/latest/
코드개요 및 환경설정
이 블로그 예제 코드의 출처는 PandasAI 예제 사이트와 유튜브 Use AI to Analyse Your Database (Pandas AI)이며, 메인 코드는 ChainLit을 사용하여 사용자와 상호작용하고, PandasAI를 활용하여 엑셀 파일 데이터에 대한 자연어 질문에 답변하는 챗봇을 구현합니다. 사용자가 질문을 하면 챗봇은 엑셀 파일을 SmartDataframe으로 변환하고, 질문에 대한 응답을 제공하며, 이를 통해 데이터 분석 작업을 보다 쉽게 수행할 수 있습니다.
https://docs.pandas-ai.com/en/latest/examples/
이 예제코드의 실행환경은 Windows 11 Pro(23H2), WSL2, 파이썬 버전 3.11, 비주얼 스튜디오 코드 1.39이며, VSC를 실행하여 "WSL 연결"을 통해 Windows Subsystem for Linux(WSL) Linux 환경에 액세스 하도록 구성하였습니다.
WSL(Windows Subsystem for Linux) 설치는 아래 링크를 참고하시면 됩니다. WSL은 언어 모델 관련 다양한 파이썬 라이브러리 및 GPU 설정과의 호환성이 우수하고, 개발 및 시스템 관리 작업을 편리하게 수행하도록 도와줍니다.
https://learn.microsoft.com/ko-kr/windows/wsl/install
먼저, 작업디렉토리로 이동하여 다음 명령어로 가상환경을 생성 및 활성화한 후, 의존성 라이브러리를 설치해 줍니다.
python3.11 -m venv myenv
source myenv/bin/activate
pip install pandasai openpyxl langchain_community chainlit
여기서 설치되는 각 라이브러리에 대한 설명은 다음과 같습니다:
- pandasai: PandasAI는 자연어 질문을 통해 데이터를 탐색하고 분석하는 도구입니다. 주로 Pandas 라이브러리와 함께 사용되며, 데이터를 탐색하고 시각화하는 기능을 제공합니다.
- openpyxl: openpyxl은 파이썬에서 엑셀 파일을 읽고 쓸 수 있는 라이브러리입니다. 엑셀 파일의 데이터를 읽어와 데이터프레임으로 변환하는 데 사용될 수 있습니다.
- langchain_community: LangChain 커뮤니티에서 제공하는 도구들을 포함한 패키지입니다. 다양한 대규모 언어 모델과 텍스트 생성 작업을 효과적으로 수행할 수 있는 Ollama 클래스를 제공합니다.
- chainlit: ChainLit은 대화형 기계 학습 프레임워크로, 사용자와의 대화를 기반으로 작업을 수행하고 결과를 반환합니다. 대화형 작업을 구현하고 사용자와 상호작용하는 데 사용됩니다.
다음은 Ollama를 설치하고 및 WSL 명령 프롬프트에서 "ollama pull llama3" 명령어로 llama3 모델을 다운로드합니다.
엑셀 데이터 준비 및 코드작성
예제코드에서 사용할 데이터는 아래 링크에서 다운로드해서 작업디렉토리에 저장하시면 됩니다. 10개 나라별 GDP와 행복지수가 임의의 데이터로 작성되어 있습니다.
다음은 첫 번째 간단한 예제 코드로, PandasAI를 사용하여 엑셀 파일에서 데이터를 읽어와 SmartDataframe으로 변환하고, 이를 통해 자연어 질문에 대한 답변을 생성하는 6라인 코드입니다. Ollama 모델을 활용하여 자연어 이해를 수행하며, "Which are 5 happiest countries?"라는 질문에 대한 응답을 생성하여 출력합니다.
from pandasai import SmartDataframe
from langchain_community.llms import Ollama
llm = Ollama(model="llama3")
sdf = SmartDataframe("data.xlsx", config={"llm": llm})
response = sdf.chat("Which are 5 happiest countries?")
print(response)
위 코드를 복사하여 VSCode에서 새 파이썬 파일을 만들어 붙여 넣고 저장한 후, 실행합니다.
아래 화면은 질문을 바꿔서 "가장 행복지수가 높은 나라"를 물어본 결과 화면입니다.
다음은 두 번째 예제 코드로 로컬 웹 브라우저 인터페이스에서 엑셀과 대화하는 챗봇을 구현하는 파이썬 스크립트입니다. 주요 기능과 동작 순서는 다음과 같습니다.
- 라이브러리 및 모듈 임포트: 코드 실행에 필요한 라이브러리와 모듈을 임포트 합니다. 여기에는 chainlit(cl), pandasai(SmartDataframe), langchain_community(Ollama) 등이 포함됩니다.
- Ollama 모델 초기화: Ollama 모델을 초기화합니다. 이 모델은 자연어 처리를 수행하여 사용자의 질문에 대한 응답을 생성하는 데 사용됩니다.
- 챗봇 시작 함수: @cl.on_chat_start 데코레이터를 사용하여 챗봇이 시작될 때 호출되는 함수를 정의합니다. 이 함수에서는 초기 메시지 히스토리를 설정합니다.
- 메시지 처리 함수: @cl.on_message 데코레이터를 사용하여 사용자 메시지를 처리하는 함수를 정의합니다. 이 함수에서는 다음 작업을 수행합니다.
- 대화기록 및 데이터 로드: 이전 대화 기록을 가져오고, SmartDataframe을 사용하여 Excel 파일("data.xlsx")을 읽고 객체를 생성합니다.
- 사용자 질문 처리: 사용자의 질문을 가져오고, SmartDataframe의 chat() 메서드를 사용하여 Ollama 모델을 통해 응답을 생성합니다.
- 응답 전송 및 대화기록 업데이트: 생성된 응답을 메시지로 포장하여 전송하고, 대화 기록에 사용자의 메시지와 챗봇의 응답을 추가합니다.
- 최종 메시지 업데이트: 최종 메시지를 업데이트하여 새로운 메시지를 반영합니다.
아래 코드를 복사하여 VSCode에서 새 파이썬 파일을 만들어 붙여 넣고 ui.py로 저장한 후, 실행합니다. 실행 명령어는 "chainlit run ui.py"입니다.
import chainlit as cl
from pandasai import SmartDataframe
from langchain_community.llms import Ollama
llm = Ollama(model="llama3")
@cl.on_chat_start
def start_chat():
# Set initial message history
cl.user_session.set(
"message_history",
[{"role": "system", "content": "You are a helpful assistant."}],
)
@cl.on_message
async def main(message: cl.Message):
# Retrieve message history
message_history = cl.user_session.get("message_history")
message_history.append({"role": "user", "content": message.content})
sdf = SmartDataframe("data.xlsx", config={"llm": llm})
question = message.content
response = sdf.chat(question)
msg = cl.Message(content=response)
await msg.send()
# Update message history and send final message
message_history.append({"role": "assistant", "content": msg.content})
await msg.update()
코드 실행결과
위에서 작성한 두 번째 예제 코드의 실행결과는 다음과 같습니다. "chainlit run ui.py"를 실행하면 http://localhost:8000/의 주소에서 아래 화면과 같이 브라우저가 열립니다.
첫 화면의 아래쪽 입력상자에 "Which are the 5 happiest countries?" 질문을 입력한 결과 다음 화면과 같이 결과가 표시되었습니다. 사용자의 컴퓨터 성능에 따라 응답속도는 차이가 있을 수 있습니다.
다음은 "Create a happiness index chart based on the above data"를 입력해서 차트를 그려달라고 요청한 결과, 아래 화면과 같이 png 파일이 생성되고 행복지수가 세로축, 나라이름이 가로축인 막대그래프가 표시됩니다.
맺음말
이상과 같이 PandasAI와 Ollama를 사용하여 엑셀 데이터와 간편하게 대화하는 파이썬 예제를 살펴보았습니다. 자연어 질문을 사용하여 데이터를 탐색하고 분석하는 데 도움이 되는 라이브러리인 PandasAI와 대규모 언어 모델 활용도구 Ollama를 함께 사용하면 단 6줄의 코드 만으로도 엑셀 파일에서 데이터를 읽고, 사용자의 자연어 질문에 답변을 생성하는 간단한 챗봇을 구현할 수 있습니다.
내일은 ChatGPT를 개발한 OpenAI에서 사람들이 재밌어할 만한 내용을 발표한다고 하는데 과연 어떤 내용일지 궁금하네요. 🤔❓혹시 인터넷 가능한 ChatGPT 일까요? 오늘 블로그 내용은 여기까지입니다. 이 블로그가 여러분의 데이터 분석과 챗봇 개발에 도움이 되기를 바라면서 저는 다음시간에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다.
2024.03.28 - [AI 도구] - PraisonAI: 명령어 1줄! 코드 없이 AI 에이전트로 영화 대본 만들기
'AI 도구' 카테고리의 다른 글
NVIDIA ChatRTX 2024. 5월 최신 업데이트: 설치 및 사용 후기 (0) | 2024.05.16 |
---|---|
Librechat: 온라인, 오프라인 AI 모델을 통합한 오픈소스 챗봇 플랫폼 (2) | 2024.05.15 |
LM Studio의 CLI를 활용한 EEVE 챗봇 만들기 (0) | 2024.05.10 |
Ollama 기반 인공지능 노트 앱 Reor: 한국어 모델 EEVE 적용 및 설정 가이드 (0) | 2024.05.10 |
Msty와 Open WebUI: 직관적인 UI와 로컬 RAG까지 지원하는 언어 모델 활용 도구 (0) | 2024.05.07 |