본문 바로가기
Analysis/Example

간단한 매출 데이터 분석

by 5ole 2021. 1. 28.

1. 전제조건

  • 품목 : 컴퓨터
  • 가격대별로 5개의 상품

2. 데이터 정보

  • customer_master.csv : 고객 정보

(customer_id, customer_name, registration_date, email, gender, age, birth, pref)

customer_master.csv

 

  • item_master.csv : 상품 데이터

(item_id, item_name, item_price)

item_master.csv

 

  • transaction_1.csv / transaction_2.csv 구매내역 데이터

(transaction_id, price, payment_date, customer_id)

transaction_1.csv

 

  • transaction_detail_1.csv / transaction_detail_2.csv : 구매 상세 데이터

(detail_id, transaction_iditem_id, quantity) 

transaction_detail_1.csv

 

import os
import pandas as pd
import matplotlib.pyplot as plt

os.chdir('C:\\Users\\leeso\\Downloads\\pyda100-master\\1장')

 # [행, 열]
customer_master = pd.read_csv('customer_master.csv') #[5000,8]
item_master = pd.read_csv('item_master.csv') #[5,3]
transaction_1 = pd.read_csv('transaction_1.csv') #[5000,4]
transaction_2 = pd.read_csv('transaction_2.csv') #[1786,4]
transaction_detail_1 = pd.read_csv('transaction_detail_1.csv') #[5000,4]
transaction_detail_2 = pd.read_csv('transaction_detail_2.csv') #[2144,4]

 

3. 데이터 준비

 

(1) transaction_*.csv 데이터와 transaction_detail_*.csv 데이터 파일 통합시키기 ( pd.concat )

transaction=pd.concat([transaction_1,transaction_2],ignore_index=True) #[6786,4]
transaction_detail=pd.concat([transaction_detail_1,transaction_detail_2],ignore_index=True) #[7144,4]

 

(2) 공통으로 가지고 있는 컬럼을 이용해 merge 시키기

  • transaction_detail 데이터가 가장 크고 자세한 데이터이므로 기준 데이터로 사용
  • how = 'left' 나 'outer' > 똑같은 결과
  • 다른 결과일 시에는 두 데이터끼리 key가 일치하지 않는 경우 -> 살펴보고 drop 결정
merge_data_1=pd.merge(transaction_detail,transaction,on='transaction_id',how='left') #[7144,7]
merge_data_2=pd.merge(merge_data_1,item_master,on='item_id',how='left') #[7144,9]
merge_data_3=pd.merge(merge_data_2,customer_master,on='customer_id',how='left') #[7144,16]

 

4. 데이터 가공

  • 데이터를 살펴보니 detail_id 마다의 가격을 구할 수 있음
  • detail_price= quatity * item_price
  • price = transaction_id 의 detail_price 총합
merge_data_3['detail_price']= merge_data_3['quantity']*merge_data_3['item_price']

# 검산과정 : 다 같은 결과
transaction['price'].sum()
merge_data_3['detail_price'].sum()
merge_data_3.drop_duplicates('transaction_id')['price'].sum()

 

5. 데이터 분석

  • NA값 파악 -> 없음
  • 각종 통계량 파악
merge_data_3.isnull().sum()
merge_data_3[['quantity','price','item_price','age','detail_price']].describe()

 

6. 월별 데이터 집계

  • pandas의 datetime의 dt 사용해 년, 월 추출
  • 월별 매출 구하기 > 2019/05 매출이 가장 낮고, 2019/07 매출이 가장 높음
merge_data_3.dtypes
merge_data_3['payment_date'] = pd.to_datetime(merge_data_3['payment_date'])
merge_data_3['payment_date'].min()
merge_data_3['payment_date'].max()

merge_data_3['payment_month']=merge_data_3['payment_date'].dt.strftime('%Y%m') #대문자 %Y는 2019 / %y는 19
merge_data_3.groupby("payment_month").sum()['detail_price']

 

7. 월별, 상품별로 데이터 집계

  • groupby
  • pivot_table : values가 나눠서 보여 직관적임
merge_data_3.groupby(['item_name','payment_month']).sum()[['quantity','detail_price']]

pd.pivot_table(merge_data_3,index='item_name',columns='payment_month',values=['detail_price','quantity'],aggfunc='sum')

 

8. 그래프로 나타내기

  • pivot_graph.index : ['201902', '201903', '201904', '201905', '201906', '201907']
pivot_graph = pd.pivot_table(merge_data_3,index='payment_month',columns='item_name',values='detail_price',aggfunc='sum')

plt.plot(list(pivot_graph.index), pivot_graph['PC-A'], label='PC-A') # x축, y축, 범례 이름
plt.plot(list(pivot_graph.index), pivot_graph['PC-B'], label='PC-B')
plt.plot(list(pivot_graph.index), pivot_graph['PC-C'], label='PC-C')
plt.plot(list(pivot_graph.index), pivot_graph['PC-D'], label='PC-D')
plt.plot(list(pivot_graph.index), pivot_graph['PC-E'], label='PC-E')
plt.legend()

 

월별, 상품별 매출

9. 결론

  • 매출 추이 파악 및 PC-E가 매출을 견인하는 상품

10. 참고 자료 및 출처

 

댓글