본문 바로가기

Data Analysis/기타 데이터

[기타 데이터] Commerce 데이터 분석 3 (EDA / 시각화 / 리뷰)

728x90

이전 내용은 아래 글에서 확인 하실 수 있습니다.

[Data Analysis/기타 데이터] - [기타 데이터] Commerce 데이터 분석 1 (데이터 확인 / 질문하기)

 

[기타 데이터] Commerce 데이터 분석 1 (데이터 확인 / 질문하기)

Commerce 데이터 분석 데이터 출처 : https://archive.ics.uci.edu/ml/datasets/online+retail# UCI Machine Learning Repository: Online Retail Data Set Online Retail Data Set Download: Data Folder, Data..

sks8410.tistory.com

[Data Analysis/기타 데이터] - [기타 데이터] Commerce 데이터 분석 2 (데이터 전처리)

 

[기타 데이터] Commerce 데이터 분석 2 (데이터 전처리)

이전 내용은 아래 글에서 확인 하실 수 있습니다. [Data Analysis/기타 데이터] - [기타 데이터] Commerce 데이터 분석 1 (데이터 확인 / 질문하기) [기타 데이터] Commerce 데이터 분석 1 (데이터 확인 / 질문

sks8410.tistory.com

4. EDA & Visualization

4-1 어떤 고객이 가장 지출을 많이 했을까?

# 가장 돈을 많이 쓴 고객과 가장 적게 쓴 고객 확인
# 사용 금액(spent) 가 0 인 고객은 제외

online_spent = online_1[["customerid", "spent"]].groupby(["customerid"]).sum()
online_spent = online_spent[online_spent["spent"] > 0]
online_spent.sort_values("spent", ascending = False)

고객번호 14646 인 고객이 가장 돈을 많이 쓰고, 고객번호 16738 인 고객이 가장 돈을 적게 쓴 것을 알 수 있습니다.

4-2 상품 금액의 분포는?

# 상품 금액 분포 시각화

f, ax = plt.subplots(1, 1, figsize = (12, 4))

sns.boxplot(online_1["unitprice"], showfliers = False, ax = ax)

대체로 2 파운드 근처에 상품 가격대가 형성되어 있습니다.

4-3 어떤 물건의 주문량이 높을까?

# 주문 순위 top10 인 상품

print(online_1["description"].value_counts().head(10))

# 주문 순위 top10 인 상품 시각화
online_1["description"].value_counts().head(10).iplot(kind = "bar", orientation = "h")

WHITE HANGING HEART T-LIGHT HOLDER 가 가장 많이 주문한다는 것을 알 수 있습니다.

4-4 날짜에 따른 판매 금액

# 주문날짜 별 판매금액 시각화

online_1.plot(x = "invoicedate", y = "spent", figsize = (15, 6))

plt.title("주문날짜 별 판매금액 추이", fontsize = 20)
plt.xlabel("날짜")
plt.ylabel("판매금액")

plt.show()

전반적으로 판매 금액이 고르게 분포되어 있으나 특정 날짜에 굉장히 많은 판매가 일어 난 것을 알 수 있습니다.

4-5 요일별 / 시간별 주문량

# 주문번호가 중복되므로 각 요일별로 주문번호 하나만 남기기

online_invoice = online_1.drop_duplicates(["invoiceno"], keep = "first")

print(online_invoice.shape)
online_invoice.head()

 

 

# 요일별 주문량 확인 (주문번호 기준)

online_invoice[["weekday", "invoiceno"]].groupby("weekday").count()

 

 

# 요일별 주문량 시각화 (주문번호 기준)

weekday_invoice = online_invoice[["weekday", "invoiceno"]].groupby("weekday").count()

fig = go.Figure()
fig.add_trace(
    go.Bar(
        x = weekday_invoice.index,
        y = weekday_invoice["invoiceno"],       
        text = weekday_invoice["invoiceno"],
        textposition = "outside",
        textfont_size = 15,
        marker_color = px.colors.qualitative.Plotly
    )
)

fig.update_layout(
    title = dict(
        text = "<b>요일별 주문량</b>",
        x = 0.5,
        y = 0.9,
        font_size = 20
    ),
    
    xaxis = dict(
        title = "Weekday",
        tickmode = "array",
        tickvals = weekday_invoice.index,
        ticktext = ["Mon", "Tue", "Wed", "Thr", "Fri", "Sat", "Sun"]
    ),
    
    yaxis = dict(
        title = "주문량"
    ),
    template = "plotly_white"
)

fig.show()

목요일에 가장 많은 주문이 있는 것을 알 수 있고, 데이터에 토요일 주문 자료는 빠져 있다는 것을 알 수 있습니다.

 

 

# 시간대별 주문량 확인 (주문번호 기준)

online_invoice[["invoiceno", "hour"]].groupby("hour").count()

 

 

# 시간대별 주문량 시각화 (주문번호 기준)

hour_invoice = online_invoice[["invoiceno", "hour"]].groupby("hour").count()

fig = go.Figure()
fig.add_trace(
    go.Bar(
        x = hour_invoice.index,
        y = hour_invoice["invoiceno"],       
        text = hour_invoice["invoiceno"],
        textposition = "outside",
        textfont_size = 10,        
    )
)

fig.update_layout(
    title = dict(
        text = "<b>시간대별 주문량</b>",
        x = 0.5,
        y = 0.9,
        font_size = 20
    ),
    
    xaxis = dict(
        title = "Hour",
        dtick = hour_invoice.index
    ),
    
    yaxis = dict(
        title = "주문량"
    ),
    template = "plotly_white"
)

fig.show()

12시에 주문량이 가장 많으며, 10~15시 사이에 주문이 많다는 것을 알 수 있습니다.

21시 ~ 5시 데이터가 빠져 있다는 것을 알 수 있습니다.

4-6 국가 별 평균 구매 금액은?

# 국가별 주문 건수에서 전체 쓴 돈을 나누어 평균 구매금액 확인

online_country = online_1[["quantity", "spent", "country", "invoiceno"]] # 필요한 컬럼만 가져오기

print(online_country.shape)
online_country.head()

 

 

# 국가별, 주문번호별로 그룹화

online_country_group = online_country.groupby(["country", "invoiceno"]).sum()

# count 컬럼을 만들고 1을 입력 한다.
# 국가별로 sum 을 하면 count 컬럼의 합계가 주문건수 합계가 됨

online_country_group["count"] = 1
online_country_group = online_country_group.groupby("country").sum()
online_country_group.head()

 

 

# spent / count 를 하면 국가별 주문건당 평균 구매 금액 확인

online_country_group["avg_spent"] = online_country_group["spent"] / online_country_group["count"]
online_country_group = online_country_group.sort_values(["count", "avg_spent"], ascending = False)

online_country_group.head()

영국이 전체 주문금액과 수량이 가장 많은 것을 알 수 있습니다.

 

 

# 국가별 평균 구매 금액 시각화

fig = go.Figure()
fig.add_trace(
    go.Bar(
        y = online_country_group["avg_spent"].sort_values().index,
        x = online_country_group["avg_spent"].sort_values(),
        text = online_country_group["avg_spent"].sort_values(),
        textposition = "auto",
        texttemplate = "%{text:,.2f}",
        orientation = "h",
        marker = dict(color = online_country_group["avg_spent"].sort_values(),
                      colorscale = "viridis")
    )
)

fig.update_layout(
    autosize = False,    
    width = 1000,
    height = 1000,
    
    title = dict(
        text = "<b>국가별 평균 구매 금액</b>",
        x = 0.5,
        y = 0.95,
        font_size = 20),
    
    xaxis = dict(
        title = "구매 금액",
        title_font_size = 18),
                            
    yaxis = dict(
        title = "국가",
        title_font_size = 18),
    
    template = "plotly_white"
)

fig.show()

전체 구매 금액은 영국이 제일 높지만, 평균 구매 금액은 싱가포르가 제일 높다는 것을 알 수 있습니다.

4-7 이 쇼핑몰 판매 물품의 주요 키워드는?

# word cloud 패키지 불러오기

from wordcloud import WordCloud
from wordcloud import STOPWORDS

# word cloud 로 키워드 그리기

stopwords = set(STOPWORDS)
# stopwords.add() # add() 에 제외할 단어 추가

wordcloud = WordCloud(stopwords = stopwords,
                     background_color = "black",
                     width = 1600,
                     height = 1600,
                     colormap = "PuBu").generate(str(online_1["description"]))

plt.axis("off")
plt.title("주문 목록에서 자주 등장하는 단어", fontsize = 20)
plt.imshow(wordcloud)

5. Review

- Online Retail 데이터는  
   -> 총 데이터 수:  4335272  
   -> 총 결측치 수: 136534 = 전체 데이터의 3.15%   
   -> 전체 국가 수:  38  
   -> 전체 판매 물건 수:  4223  

 

- 어떤 고객이 가장 지출을 많이 했을까?  
   -> 고객번호 1689 이 가장 소비를 많이 했다  
   -> 고객번호 3217 이 가장 소비를 적게 했다

- 상품 금액의 분포는?  
   -> 대체로 2 파운드 근처에서 상품 가격대가 형성되어 있다  
   -> 8 파운드 이하 상품 주문이 93.28 % 를 차지한다  
   -> 수익의 88.09 % 는 8 파운드 이하의 상품에서 발생한다  
     
- 어떤 물건의 주문량이 높을까?  
   -> WHITE HANGING HEART T-LIGHT HOLDER  
     
- 요일/시간에 따라서 주문량이 다를까?  
   -> 목요일 주문이 가장 많고 일요일이 주문이 가장 적다  
   -> 낮 12시에 주문이 가장 많다
    
- 국가별 고객 1인당 평균 구매 금액은?  
   -> 영국의 매출액이 가장 높지만, 1인당 구매금액은 싱가포르가 가장 높다
    
- 이 쇼핑몰 판매 물품의 주요 키워드는?

   -> white, heart, children

728x90