이전 내용은 아래 글에서 확인 하실 수 있습니다.
[Data Analysis/기타 데이터] - [기타 데이터] Commerce 데이터 분석 1 (데이터 확인 / 질문하기)
[Data Analysis/기타 데이터] - [기타 데이터] Commerce 데이터 분석 2 (데이터 전처리)
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
'Data Analysis > 기타 데이터' 카테고리의 다른 글
[기타 데이터] Airbnb NewYork 데이터 분석 2 (데이터 전처리) (0) | 2021.10.20 |
---|---|
[기타 데이터] Airbnb NewYork 데이터 분석 1 (데이터 확인 / 질문) (0) | 2021.10.20 |
[기타 데이터] Commerce 데이터 분석 2 (데이터 전처리) (0) | 2021.10.12 |
[기타 데이터] Commerce 데이터 분석 1 (데이터 확인 / 질문하기) (0) | 2021.10.12 |
[기타 데이터] LA Lakers 경기 데이터 분석 3 (EDA / 시각화 / 리뷰) (0) | 2021.10.12 |