인공지능

데이터 가시화

존카터 2025. 6. 29. 12:19

📈 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