📈 pandas와 matplotlib로 월별 상품별 매출 시각화하기
이전 글에서 우리는 거래 데이터를 pandas로 병합하고,
상품별 월 매출을 계산하는 pivot_table까지 만들었습니다.
이번 글에서는 그 결과를 matplotlib로 시각화하여
월별 매출 흐름을 한눈에 확인하는 꺾은선 그래프(line chart)를 만들어보겠습니다.
✅ 1단계: pivot_table로 월 × 상품별 매출 집계
먼저 pivot_table을 이용해서 데이터를 표 형식으로 정리합니다.
import pandas as pd
# 데이터 불러오기
master_read = pd.read_csv('1장\\customer_master.csv')
trans1 = pd.read_csv('1장\\transaction_1.csv')
trans2 = pd.read_csv('1장\\transaction_2.csv')
detail = pd.read_csv('1장/transaction_detail_1.csv')
name = pd.read_csv('1장/item_master.csv') # ← 여기서 item_name과 item_price 있음
# 병합: 거래 상세 + 거래 정보
join_data = pd.merge(
detail,
trans1[["transaction_id", "payment_date", "price"]],
on="transaction_id",
how="left"
)
# 병합: 상품 정보 (item_id 기준으로 item_name 추가)
join_data = pd.merge(join_data, name[["item_id", "item_name"]], on="item_id", how="left")
# 날짜 처리
join_data["payment_date"] = pd.to_datetime(join_data["payment_date"])
join_data["payment_month"] = join_data["payment_date"].dt.strftime("%Y%m")
# 총매출 계산
join_data["total_price"] = join_data["quantity"] * join_data["price"]
# 결과 확인
print(join_data[["payment_date", "payment_month", "item_name"]].head())
print(join_data.groupby(["payment_month", "item_name"])[["price", "quantity", "total_price"]].sum())
pivot문법
pd.pivot_table(
data, # 데이터프레임
index="행으로 쓸 열", # groupby의 기준 행
columns="열로 쓸 열", # 컬럼 분할 기준
values="집계할 값", # 숫자형 집계 대상
aggfunc="sum", # 집계 함수: sum, mean, count 등
fill_value=0 # NaN 대신 채울 값
)
적용
import pandas as pd
# 데이터 불러오기
master_read = pd.read_csv('1장\\customer_master.csv')
trans1 = pd.read_csv('1장\\transaction_1.csv')
trans2 = pd.read_csv('1장\\transaction_2.csv')
detail = pd.read_csv('1장/transaction_detail_1.csv')
name = pd.read_csv('1장/item_master.csv') # ← 여기서 item_name과 item_price 있음
# 병합: 거래 상세 + 거래 정보
join_data = pd.merge(
detail,
trans1[["transaction_id", "payment_date", "price"]],
on="transaction_id",
how="left"
)
# 병합: 상품 정보 (item_id 기준으로 item_name 추가)
join_data = pd.merge(join_data, name[["item_id", "item_name"]], on="item_id", how="left")
# 날짜 처리
join_data["payment_date"] = pd.to_datetime(join_data["payment_date"])
join_data["payment_month"] = join_data["payment_date"].dt.strftime("%Y%m")
# 총매출 계산
join_data["total_price"] = join_data["quantity"] * join_data["price"]
# 결과 확인
print(join_data[["payment_date", "payment_month", "item_name"]].head())
print(join_data.groupby(["payment_month", "item_name"])[["price", "quantity", "total_price"]].sum())
graph=pd.pivot_table(join_data,index="payment_month",columns="item_name",values="price",aggfunc='sum')
print(graph.head())

✅ 2단계: matplotlib로 그래프 그리기
이제 위에서 만든 pivot 데이터를 이용해 꺾은선 그래프(line plot) 를 그려봅니다
plt.plot(x, y, label='이 라인의 이름', color='r', linestyle='--', marker='o')
import pandas as pd
# 데이터 불러오기
master_read = pd.read_csv('1장\\customer_master.csv')
trans1 = pd.read_csv('1장\\transaction_1.csv')
trans2 = pd.read_csv('1장\\transaction_2.csv')
detail = pd.read_csv('1장/transaction_detail_1.csv')
name = pd.read_csv('1장/item_master.csv') # ← 여기서 item_name과 item_price 있음
# 병합: 거래 상세 + 거래 정보
join_data = pd.merge(
detail,
trans1[["transaction_id", "payment_date", "price"]],
on="transaction_id",
how="left"
)
# 병합: 상품 정보 (item_id 기준으로 item_name 추가)
join_data = pd.merge(join_data, name[["item_id", "item_name"]], on="item_id", how="left")
# 날짜 처리
join_data["payment_date"] = pd.to_datetime(join_data["payment_date"])
join_data["payment_month"] = join_data["payment_date"].dt.strftime("%Y%m")
# 총매출 계산
join_data["total_price"] = join_data["quantity"] * join_data["price"]
# 결과 확인
print(join_data[["payment_date", "payment_month", "item_name"]].head())
print(join_data.groupby(["payment_month", "item_name"])[["price", "quantity", "total_price"]].sum())
graph=pd.pivot_table(join_data,index="payment_month",columns="item_name",values="price",aggfunc='sum')
print(graph.head())
import matplotlib.pyplot as plt
# 각 상품별 매출 꺾은선 그래프
plt.plot(list(graph.index), graph["PC-A"], label='PC-A', marker='o')
plt.plot(list(graph.index), graph["PC-B"], label='PC-B', marker='o')
plt.plot(list(graph.index), graph["PC-C"], label='PC-C', marker='o')
plt.plot(list(graph.index), graph["PC-D"], label='PC-D', marker='o')
plt.plot(list(graph.index), graph["PC-E"], label='PC-E', marker='o')
plt.legend()
plt.show()
결과

plt.legend()함수로 인해 우측 상단 label 설명(색별 태그) 이 붙고, vs code환경기준 show()를 해줘야 보임!
'인공지능' 카테고리의 다른 글
| 데이터 전처리 및 집계 분석 (0) | 2025.07.01 |
|---|---|
| 데이터 정리 후 출력 (0) | 2025.07.01 |
| 데이터 정리하기 (1) | 2025.06.30 |
| 데이터 분석을 위한 파이썬2 (0) | 2025.06.29 |
| 데이터 분석을 위한 파이썬 (0) | 2025.06.29 |