LlamaIndex

LlamaIndex와 Pandas를 이용한 데이터 분석 및 검색

Pro.Dev 2025. 1. 22. 13:15
반응형

LlamaIndex와 Pandas를 이용한 데이터 분석 및 검색

Pandas는 데이터 분석에서 널리 사용되는 강력한 Python 라이브러리입니다. 이를 LlamaIndex와 결합하면 DataFrame 데이터를 인덱싱하고 자연어 기반 검색 기능을 추가할 수 있습니다. 이 글에서는 Pandas와 LlamaIndex를 활용하여 데이터 분석과 검색 시스템을 구현하는 방법을 단계별로 설명합니다.


1. 프로젝트 개요

목표

  • Pandas DataFrame 데이터를 LlamaIndex로 인덱싱합니다.
  • 자연어 기반 검색을 통해 DataFrame 데이터를 탐색할 수 있는 시스템을 만듭니다.

주요 기능

  • Pandas DataFrame 데이터 읽기 및 가공
  • LlamaIndex를 사용한 데이터 인덱싱
  • 자연어 질의 응답 시스템 구현

2. 개발 환경 준비

2.1 필수 라이브러리 설치

다음 명령어를 실행하여 필요한 라이브러리를 설치합니다:

pip install pandas llama-index openai

참고: OpenAI API 사용을 위해 API 키가 필요합니다.

2.2 기본 설정

Python 3.8 이상의 환경에서 개발하는 것을 권장합니다. 가상 환경(venv, Conda)을 사용하여 의존성 관리를 간편하게 할 수 있습니다.


3. 데이터 분석 및 검색 시스템 구현

3.1 데이터 준비

Pandas를 사용하여 CSV 파일을 읽어옵니다. 아래는 샘플 데이터 data.csv입니다:

data.csv:

id,name,role,department
1,Alice,Software Engineer,Engineering
2,Bob,HR Manager,Human Resources
3,Charlie,Data Scientist,Engineering
4,Diana,Accountant,Finance

3.2 Pandas 데이터 읽기 및 가공

Pandas를 사용하여 데이터를 읽고 DataFrame으로 변환합니다.

import pandas as pd

# 데이터 읽기
data = pd.read_csv("data.csv")
print(data)

출력 결과:

   id     name                role         department
0   1    Alice  Software Engineer       Engineering
1   2      Bob          HR Manager  Human Resources
2   3  Charlie       Data Scientist       Engineering
3   4    Diana           Accountant          Finance

3.3 LlamaIndex를 사용한 인덱싱

DataFrame 데이터를 LlamaIndex로 변환하여 인덱싱합니다.

import os
from llama_index import GPTSimpleVectorIndex, Document

# OpenAI API 키 설정
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

# DataFrame 데이터를 LlamaIndex에 추가
def dataframe_to_documents(df):
    documents = []
    for _, row in df.iterrows():
        content = f"ID: {row['id']}\nName: {row['name']}\nRole: {row['role']}\nDepartment: {row['department']}"
        documents.append(Document(content))
    return documents

# 문서 생성 및 인덱싱
documents = dataframe_to_documents(data)
index = GPTSimpleVectorIndex.from_documents(documents)
print("데이터 인덱싱 완료!")

3.4 자연어 기반 검색

사용자가 입력한 질의를 처리하고 DataFrame 데이터를 검색합니다.

# 검색 질의 처리
while True:
    query = input("질문을 입력하세요 (종료하려면 'exit' 입력): ")
    if query.lower() == "exit":
        print("프로그램을 종료합니다.")
        break
    response = index.query(query)
    print(f"답변: {response}")

4. 실행 결과

데이터

ID Name Role Department
1 Alice Software Engineer Engineering
2 Bob HR Manager Human Resources
3 Charlie Data Scientist Engineering
4 Diana Accountant Finance

실행 예시

질문을 입력하세요 (종료하려면 'exit' 입력): Engineering 부서의 직원은 누구인가요?
답변: Engineering 부서에는 Alice (Software Engineer), Charlie (Data Scientist)가 있습니다.

질문을 입력하세요 (종료하려면 'exit' 입력): exit
프로그램을 종료합니다.

5. 확장 가능성

5.1 대규모 데이터 처리

  • 수백만 건의 데이터를 다루는 경우, 데이터를 여러 청크로 나누어 인덱싱하거나 데이터베이스와 결합하여 성능을 최적화할 수 있습니다.

5.2 고급 검색 기능 추가

  • 키워드 필터링, 조건부 검색, 또는 특정 열에만 집중하는 기능을 추가할 수 있습니다.

5.3 웹 애플리케이션 통합

  • Flask 또는 FastAPI를 사용하여 검색 기능을 RESTful API로 제공할 수 있습니다.
  • Streamlit을 활용해 대시보드와 시각화를 추가하면 사용자 친화적인 인터페이스를 구축할 수 있습니다.

참고 자료

반응형