FastAPI

FastAPI 강좌 3강: 데이터 처리와 Pandas 연동

atomicdev 2024. 10. 9. 10:16
728x90

데이터 처리와 Pandas 연동


강의 목표:

  • FastAPI와 Pandas를 연동하여 데이터를 처리하는 방법을 이해한다.
  • 수집된 데이터를 Pandas로 처리하여 변환하는 /process_data 엔드포인트를 구현한다.
    FastAPI와 Pandas를 사용하여 데이터를 처리하는 과정

 


강의 세부 내용:

1. Pandas와 FastAPI 연동 개념

  • Pandas: Python의 대표적인 데이터 분석 라이브러리로, 데이터 처리 및 변환에 최적화되어 있습니다. 테이블 형태의 데이터를 다루고, 데이터 정리, 변환, 필터링 등 다양한 기능을 제공합니다.
  • FastAPI와 Pandas의 연동: 수집된 데이터를 FastAPI에서 받아 Pandas로 처리하여 통계나 데이터를 변환한 후 클라이언트에 반환하는 구조를 학습합니다.

2. Pandas 기본 기능 소개

  • Pandas의 주요 객체:
    • DataFrame: 테이블 형태의 2차원 데이터 구조.
    • Series: 1차원 배열과 유사한 구조로, DataFrame의 각 열을 구성하는 요소.
  • Pandas는 CSV, Excel, JSON 등 다양한 형식의 파일을 읽고 처리할 수 있으며, 이를 이용해 데이터를 가공하고 분석할 수 있습니다.

실습: Pandas로 데이터 처리하는 /process_data 엔드포인트 구현

1. Pandas 설치

  • FastAPI와 함께 Pandas를 설치합니다.
pip install pandas

2. FastAPI와 Pandas 연동 예제

  • 먼저 /process_data라는 엔드포인트를 구현하여 데이터를 받아 Pandas로 처리한 후 반환하는 작업을 수행합니다.
    from fastapi import FastAPI
    from pydantic import BaseModel
    import pandas as pd
    
    app = FastAPI()
    
    # 데이터 입력 모델 정의
    class DataInput(BaseModel):
        name: str
        age: int
        salary: float
    
    # POST 엔드포인트 정의
    @app.post("/process_data/")
    async def process_data(data: list[DataInput]):
        # 입력된 데이터를 Pandas DataFrame으로 변환
        data_dict = [item.dict() for item in data]
        df = pd.DataFrame(data_dict)
        
        # 데이터 처리: 예시로 나이를 기준으로 필터링
        filtered_df = df[df['age'] > 30]
        
        # 처리된 데이터를 JSON 형태로 반환
        return filtered_df.to_dict(orient="records")

3. 코드 설명:

  • DataInput 모델: Pydantic의 BaseModel을 사용하여 데이터 구조를 정의합니다.
    • name: str: 이름 필드.
    • age: int: 나이 필드.
    • salary: float: 급여 필드.
  • /process_data 엔드포인트:
    • 클라이언트로부터 여러 개의 데이터 항목을 리스트로 받아옵니다.
    • 받은 데이터를 Pandas의 DataFrame으로 변환합니다.
    • df[df['age'] > 30]: 나이가 30 이상인 사람들만 필터링하는 간단한 데이터 처리 예시.
    • 필터링된 결과를 JSON 형태로 클라이언트에게 반환합니다.

4. 테스트: /process_data 엔드포인트에 POST 요청 보내기

  • Postman 또는 curl을 사용해 /process_data 엔드포인트에 데이터를 전송하고 처리된 결과를 확인합니다.

Postman 사용 예시:

  1. Method: POST
  2. URL: http://127.0.0.1:8000/process_data/
  3. Body: JSON 형식으로 데이터를 전송.
    [
        {"name": "Alice", "age": 32, "salary": 50000},
        {"name": "Bob", "age": 24, "salary": 45000},
        {"name": "Charlie", "age": 36, "salary": 60000}
    ]

curl 사용 예시:

curl -X 'POST' \
  'http://127.0.0.1:8000/process_data/' \
  -H 'Content-Type: application/json' \
  -d '[{"name": "Alice", "age": 32, "salary": 50000}, {"name": "Bob", "age": 24, "salary": 45000}, {"name": "Charlie", "age": 36, "salary": 60000}]'
 
  1. 응답
[
    {"name": "Alice", "age": 32, "salary": 50000},
    {"name": "Charlie", "age": 36, "salary": 60000}
]

5. Pandas의 다양한 처리 방법:

  • 필터링: 나이나 급여와 같은 조건을 이용하여 데이터 필터링.
  • 정렬: 데이터를 특정 필드를 기준으로 정렬
    df.sort_values(by='age', ascending=False)
  • 집계: 특정 필드를 기준으로 평균, 합계 등의 통계를 계산
    df['salary'].mean()  # 급여 평균

마무리 및 추가 학습

  • 이번 강의에서는 Pandas를 사용하여 데이터를 처리하는 방법을 학습했습니다. 클라이언트로부터 수집된 데이터를 Pandas DataFrame으로 변환하고, 필터링 및 처리 후 결과를 반환하는 실습을 진행했습니다.
  • 다음 강의에서는 데이터를 실제 데이터베이스에 저장하고 관리하는 방법을 다룹니다.
728x90