FastAPI

FastAPI 강좌 4강: 데이터 분석 결과 API 구현

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

데이터 분석 결과 API 구현


강의 목표:

  • 데이터를 실시간으로 분석하고 그 결과를 API를 통해 제공하는 방법을 이해한다.
  • /summary와 /top_customers와 같은 분석 결과를 반환하는 엔드포인트를 구현한다.
    FastAPI를 사용한 실시간 데이터 분석 과정

 


강의 세부 내용:

1. 데이터 분석 결과 API 개요

  • 실시간 분석 결과 제공: FastAPI를 통해 실시간으로 데이터 분석 결과를 API로 제공할 수 있습니다. 이를 통해 클라이언트는 항상 최신 데이터를 조회할 수 있습니다.
  • 분석 결과 제공 엔드포인트: 데이터 분석 작업을 자동화하고, 필요한 통계 정보를 API 요청에 따라 반환하는 구조를 구현합니다.

실습: 데이터 분석 결과를 반환하는 엔드포인트 구현

1. 기본 분석 API 엔드포인트 구현

  • 먼저 데이터를 간단하게 분석하고 그 결과를 반환하는 /summary와 상위 고객 데이터를 반환하는 /top_customers 엔드포인트를 만들어봅니다.
from fastapi import FastAPI
import pandas as pd

app = FastAPI()

# 샘플 데이터
data = {
    "customer_id": [1, 2, 3, 4, 5],
    "name": ["Alice", "Bob", "Charlie", "David", "Eve"],
    "age": [34, 23, 45, 32, 29],
    "purchase_amount": [200, 150, 400, 300, 500]
}

df = pd.DataFrame(data)

# /summary 엔드포인트 구현 (총 구매 금액과 평균 나이 반환)
@app.get("/summary")
async def get_summary():
    total_purchase = df["purchase_amount"].sum()
    avg_age = df["age"].mean()
    
    return {
        "total_purchase": total_purchase,
        "average_age": avg_age
    }

# /top_customers 엔드포인트 구현 (상위 3명의 고객 반환)
@app.get("/top_customers")
async def get_top_customers():
    top_customers = df.nlargest(3, "purchase_amount")
    
    return top_customers.to_dict(orient="records")

2. 코드 설명:

  • DataFrame 생성: data는 고객의 구매 정보를 포함한 샘플 데이터이며, Pandas DataFrame으로 변환되어 사용됩니다.
  • /summary 엔드포인트:
    • 고객의 총 구매 금액과 평균 나이를 계산하여 반환합니다.
    • df["purchase_amount"].sum(): 모든 고객의 구매 금액을 합산합니다.
    • df["age"].mean(): 고객의 평균 나이를 계산합니다.
  • /top_customers 엔드포인트:
    • 구매 금액 기준으로 상위 3명의 고객 정보를 반환합니다.
    • df.nlargest(3, "purchase_amount"): 구매 금액이 가장 높은 상위 3명의 데이터를 추출합니다.

3. 테스트: 엔드포인트 호출

  • FastAPI 서버가 실행 중일 때 /summary와 /top_customers 엔드포인트에 GET 요청을 보내 분석 결과를 확인할 수 있습니다.
  1. /summary 엔드포인트 테스트:
    • URL: http://127.0.0.1:8000/summary
    • 응답:
      {
          "total_purchase": 1550,
          "average_age": 32.6
      }
     

/top_customers 엔드포인트 테스트:

  • URL: http://127.0.0.1:8000/top_customers
  • 응답:
    [
        {"customer_id": 5, "name": "Eve", "age": 29, "purchase_amount": 500},
        {"customer_id": 3, "name": "Charlie", "age": 45, "purchase_amount": 400},
        {"customer_id": 4, "name": "David", "age": 32, "purchase_amount": 300}
    ]
 

4. 추가 분석 결과 엔드포인트 확장

/average_purchase 엔드포인트 구현

  • 목표: 고객의 평균 구매 금액을 반환하는 API 엔드포인트를 구현합니다.
    @app.get("/average_purchase")
    async def get_average_purchase():
        avg_purchase = df["purchase_amount"].mean()
        return {"average_purchase": avg_purchase}

/customer_details 엔드포인트 구현

  • 목표: 특정 고객 ID를 입력받아 해당 고객의 상세 정보를 반환하는 엔드포인트를 구현합니다.
    @app.get("/customer_details/{customer_id}")
    async def get_customer_details(customer_id: int):
        customer = df[df["customer_id"] == customer_id]
        if customer.empty:
            return {"error": "Customer not found"}
        
        return customer.to_dict(orient="records")[0]

 

테스트:

  • URL: http://127.0.0.1:8000/customer_details/2
  • 응답:
    {
        "customer_id": 2,
        "name": "Bob",
        "age": 23,
        "purchase_amount": 150
    }
     

 


마무리 및 추가 학습

  • 이번 강의에서는 데이터를 분석하고 그 결과를 실시간으로 API를 통해 제공하는 방법을 학습했습니다. 데이터를 요약하여 통계를 제공하는 /summary와 구매 금액 기준 상위 고객을 반환하는 /top_customers 엔드포인트를 구현했습니다.
  • 다음 강의에서는 더 복잡한 분석 작업과 데이터베이스와의 연동을 다루어 실무적인 분석 API를 구축하는 방법을 배울 것입니다.
728x90