728x90
데이터 분석 결과 API 구현
강의 목표:
- 데이터를 실시간으로 분석하고 그 결과를 API를 통해 제공하는 방법을 이해한다.
- /summary와 /top_customers와 같은 분석 결과를 반환하는 엔드포인트를 구현한다.
강의 세부 내용:
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 요청을 보내 분석 결과를 확인할 수 있습니다.
- /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
'FastAPI' 카테고리의 다른 글
FastAPI 강좌 6강: 도커를 사용한 FastAPI 애플리케이션 컨테이너화 (0) | 2024.10.09 |
---|---|
FastAPI 강좌 5강: 비동기 처리와 성능 최적화 (1) | 2024.10.09 |
FastAPI 강좌 3강: 데이터 처리와 Pandas 연동 (4) | 2024.10.09 |
FastAPI 강좌 2강: 데이터 수집 API 구현 (0) | 2024.10.09 |
FastAPI 강좌 1강: FastAPI 기본 개념과 환경 설정 (0) | 2024.10.09 |