LangGraph

LangGraph로 EDA만들기 (1)

오예에 2025. 6. 20. 18:32

LangGraph StateGraph 기반 EDA 자동화 시스템 개요

본 시스템은 LangGraph의 StateGraph(상태 그래프)를 활용하여 로컬 환경에서 데이터 탐색(EDA)을 자동화합니다. Supervisor(감독자)가 중심이 되어 Data Loader(데이터 로더), Summary(요약), Statistician(통계분석), Visualizer(시각화)의 4개 에이전트를 순차·병렬로 제어합니다. 각 에이전트는 공통의 state(상태) 사전을 통해 데이터를 주고받으며, StateGraph의 노드로 기능합니다langchain-ai.github.iomedium.com. 예를 들어, LangGraph에서 State는 “시스템의 메모리” 역할을 하여 워크플로우 전반에 걸쳐 정보를 기억·갱신하게 해줍니다medium.comlangchain-ai.github.io. EDA(탐색적 데이터 분석)는 데이터 세트의 주요 특성을 요약하기 위해 분포, 통계량, 시각화 등을 활용하는 접근 방식입니다en.wikipedia.org. 본 시스템은 EDA의 전형적인 절차(데이터 로딩→요약→통계→시각화)를 에이전트 워크플로우로 구현합니다. Supervisor는 Graph API를 통해 StateGraph를 생성·컴파일하고, 조건부 에지 및 사용자 승인 과정을 포함한 복잡한 흐름을 정의할 수 있습니다langchain-ai.github.iolangchain-ai.github.io.

 

* 옵시디언의 내용을 붙여넣기 하니깐 이상하게 깨졌는데 고치다가 더 이상해져서 일단 업로드 ㅜㅜ

에이전트 구성 및 입출력 예시

  • Data Loader 에이전트
    • 입력 예시: 파일 경로 문자열 "data.csv" 또는 업로드된 파일 객체 등.
    • 출력 예시: Pandas DataFrame (pandas.DataFrame) 형태로 로드된 데이터. 예: state["dataframe"] = pd.read_csv("data.csv").
    • 의존 상태값: "loaded": True. 데이터 로딩 완료 여부를 나타냅니다.
    • 설명: 로컬 CSV나 Excel 파일에서 데이터를 읽어옵니다. 예를 들어 load_data() 함수를 사용해 state에 DataFrame과 함께 loaded=True를 추가합니다.
  • Summary 에이전트
    • 입력 예시: 앞 단계에서 로드된 DataFrame (예: state["dataframe"]).
    • 출력 예시: 데이터 요약 텍스트(str) 또는 JSON. 예: "5 columns, 10 rows. Numeric stats: Age mean=33.5...".
    • 의존 상태값: "summarized": True. 요약 완료 여부를 나타냅니다. 또한 state["summary"]에 요약 내용 저장.
    • 설명: 데이터 프레임의 크기, 컬럼 정보, 결측치 여부, 대표값(평균·중앙값 등) 등을 텍스트로 생성합니다. 예를 들어 “데이터는 10행 5열로 구성되며, 수치형 열의 평균과 분산은 …”와 같은 요약을 작성합니다. 요약 후에는 사용자 승인을 받기 위한 옵션 상태(approved)를 추가할 수 있습니다.
  • Statistician 에이전트
    • 입력 예시: DataFrame 및 (선택적으로) 요약 정보.
    • 출력 예시: 통계량 JSON/딕셔너리. 예: {"Age": {"mean":33.5, "std":9.2}, "Score": {"mean":82.1, "median":85.0}, "Gender_counts": {"F":4, "M":6}}.
    • 의존 상태값: "stats_ready": True. 통계 계산 완료 여부를 나타냅니다. 또한 state["stats"]에 결과 저장.
    • 설명: 수치형 열의 기본 통계(평균, 표준편차, 최소/최대 등)와 범주형 열 분포(빈도 등)를 계산합니다. 예: df.describe()df[col].value_counts()를 이용해 state["stats"]에 저장할 수 있습니다.
  • Visualizer 에이전트
    • 입력 예시: DataFrame, 통계량, 혹은 사용자 요청(예: “Score 분포를 시각화” 등의 명령).
    • 출력 예시: 이미지 파일(예: PNG) 리스트. 예: ["histogram_score.png", "scatter_age_score.png"].
    • 의존 상태값: "visualized": True. 시각화 완료 여부를 나타냅니다. 또한 state["figures"]에 경로 또는 이미지 데이터를 저장.
    • 설명: Matplotlib/Seaborn 기반으로 차트(히스토그램, 박스플롯, 산점도 등)를 생성합니다. 예를 들어 Score 분포를 위한 히스토그램과 Age-Score 산점도를 그려 파일로 저장하고, 해당 파일 경로를 state에 기록합니다.