-
(5) 데이터분석_가상 쇼핑몰 데이터 프로젝트데이터분석 2023. 6. 13. 11:30728x90
가상 쇼핑몰 데이터를 분석해보자
pandas 사용을 위해 import를 시켜준다
import pandas as pd쇼핑몰 데이터를 경로에따라서 읽어온다
retail = pd.read_csv('/content/drive/MyDrive/study/데이터분석/OnlineRetail.csv')각 컬럼에 대한 설명
- InvoiceNo: 주문번호
- StockCode: 상품코드
- Description: 상품설명
- Quantity: 주문수량
- InvoiceDate: 주문날짜
- UnitPrice: 상품가격
- CustomerID: 고객아이디
- Country: 고객거주지역(국가)
pd.options.display.max_rows = 10retail.isnull().sum()# 각 필드당 null이 몇 % 있는지 확인retail.isnull().mean()# 비회원을 제거retail = retail[pd.notnull(retail['CustomerID'])]#구입 수량이 0이하인 데이터 확인retail[retail['Quantity'] <= 0]# 구입 가격이 0이하인 데이터 확인retail[retail['UnitPrice'] <= 0]# 고객의 총 비출비용 (CheckoutPrice) 파생변수 구하기# 수량 * 가격retail['CheckoutPrice'] = retail['UnitPrice'] * retail['Quantity']retailretail.info()retail['InvoiceDate'] = pd.to_datetime(retail['InvoiceDate'])total_revenue = retail['CheckoutPrice'].sum()total_revenueretail['Country'].value_counts()국가별 매출
rev_by_countries = retail.groupby('Country')['CheckoutPrice'].sum().sort_values()rev_by_countriesplot = rev_by_countries.plot(kind='bar', figsize=(20,10))plot.set_xlabel('Country', fontsize = 12)plot.set_ylabel('Revenue', fontsize = 12)plot.set_title('Revenue by Country', fontsize = 15)plot.set_xticklabels(labels = rev_by_countries.index,rotation = 45)# 월별 매출 구하기retail['InvoiceDate'].sort_values(ascending=False)# 2011 - 03 - 01 입력def extract_month(date):month = str(date.month) # 3if date.month < 10:month = '0' + month # 03return str(date.year) + month # 201103rev_by_month = retail.set_index('InvoiceDate').groupby(extract_month)['CheckoutPrice'].sum()def plot_bar(df, xlabel, ylabel,title, rotation = 45, titlesize = 15,fontsize = 12, figsize=(20,10) ):plot = df.plot(kind='bar', figsize=figsize)plot.set_xlabel(xlabel, fontsize = fontsize)plot.set_ylabel(ylabel, fontsize= fontsize )plot.set_title(title, fontsize = fontsize )plot.set_xticklabels(labels = df.index,rotation = rotation)plot_bar(rev_by_month, 'Month', 'Revenue', 'Revenue by Month')# 요일별 매출 구하기def extract_dow(date):return date.dayofweekrev_by_dow = retail.set_index('InvoiceDate').groupby(lambda date: date.dayofweek)['CheckoutPrice'].sum()plot_bar(rev_by_dow,'DOW','Revenue','Revenue by DOM')# 시간대별 매출 구하기rev_by_hour = retail.set_index('InvoiceDate').groupby(lambda date: date.hour)['CheckoutPrice'].sum()plot_bar(rev_by_hour,'hour','Revenue','Revenue by DOM')# 판매제품(StockCode) Top 10# 기준: Quantity
rev_by_StockCode= retail.groupby('StockCode')['Quantity'].sum().sort_values(ascending = False)[0:10]plot_bar(rev_by_StockCode, 'Month', 'Revenue', 'Revenue by Month')# 우수고객(Customer Id) Top 10# 지불금액: CheckoutPricerev_by_CustomerID= retail.groupby('CustomerID')['CheckoutPrice'].sum().sort_values(ascending = False).head(10)plot_bar(rev_by_CustomerID, 'Month', 'Revenue', 'Revenue by Month')데이터로부터 Insight
- 전체 매출의 약 82%가 UK에서 발생
- 11년도에 가장 많은 매출이 발생한 달은 11월
- 매출은 꾸준히 성장(11년 12월 데이터는 9일까지만 포함)
- 토요일은 영업을 하지 않음
- 새벽 6시에 오픈, 오후 9시에 마감이 예상
- 일주일 중 목요일까지는 성장세를 보이고,이후 하락
'데이터분석' 카테고리의 다른 글
(7) 데이터분석_워드 클라우드 (0) 2023.06.14 (6) 데이터분석_형태소 분석 (0) 2023.06.13 (4) 데이터분석_데이터프레임 활용하기 (0) 2023.06.13 (3) 데이터분석_MatPlotlib (0) 2023.06.12 (2) 데이터분석_Pandas (1) 2023.06.11