국가(대륙)별/상품군별 온라인쇼핑 해외직접판매액 데이터 분석
e : 추정치, p : 잠정치, - : 자료없음, ... : 미상자료, x : 비밀보호, ▽ : 시계열 불연속
▶ 가설설정
1. 국가별/상품군별 온라인쇼핑 해외직접판매는 성장하고 있을까?
2. 해외 직접판매를 한다면 어느 국가에 대해, 어느 상품으로 판매전략을 세우면 좋을까?
▶ 준비과정
1. 필요한 라이브러리 가져오기
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
plt.rc('font', family='Malgun Gothic')
plt.rc('axes', unicode_minus=False)
2. 데이터 로드하기
df_raw = pd.read_csv("C:/data/국가_대륙_별_상품군별_온라인쇼핑_해외직접판매액_20220202200821.csv", encoding="cp949")
df_raw.shape
# "국가(대륙)별" 데이터 빈도수 세기
df_raw["국가(대륙)별"].value_counts()
3. 분석과 시각화를 위해 tidy data 만들기
열에 있는 분기 데이터를 행으로 옮기기 위해 melt 함수 사용
df = df_raw.melt(id_vars=["국가(대륙)별", "상품군별", "판매유형별"],
var_name="기간", value_name="백만원")
df.shape
df.head()
df.info()
이때, var_name은 "기간", value_name은 "백만원"으로 지정
잘 처리된 것을 확인할 수 있다.
▶ 전처리
1. 기간에서 연도, 분기를 분리하기
# 기간에서 연도 분리
df["연도"] = df["기간"].map(lambda x : int(x.split()[0]))
df.head()
# 기간에서 분기 분리
df["분기"] = df["기간"].map(lambda x : int(x.split()[1].split("/")[0]))
df.head()
2. 금액의 데이터 타입 변경하기 - 수치데이터로 표현하기 위함
'-'는 자료없음 이므로 - 문자를 결측치로 변경하고 백만원 열을 float 타입으로 변경
df["백만원"] = df["백만원"].replace("-", pd.np.nan).astype(float)
df.head()
3. 필요없는 데이터 제거하기
df.info()
# 합계 데이터는 따로 구할 수 있기 때문에 전체 데이터에서 제거
df = df[(df["국가(대륙)별"] != "합계") & (df["상품군별"] != "합계")].copy()
df.info()
# 결측치 보기
df.isnull().sum()
▶ 시각화
1. 전체 상품군 판매액
판매유형별 데이터에서 "계" 데이터만 가져와 연도, 판매액 lineplot 그리기
# 연도, 판매액 lineplot으로 그리기
sns.lineplot(data=df_total, x="연도", y="백만원")
# 연도, 판매액 lineplot으로 그리고 상품군별로 다른 색상으로 표시하기
# legend 값 밖에 표시하기
sns.lineplot(data=df_total, x="연도", y="백만원", hue="상품군별")
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
# 위에 그린 그래프를 자세히 보기 위해 서브플롯으로 표시하기
sns.relplot(data=df_total, x="연도", y="백만원",
hue="상품군별", kind="line", col="상품군별", col_wrap=4)
화장품을 제외하고 연도, 판매액 lineplot 그리기
df_sub = df_total[~df_total["상품군별"].isin(["화장품", "의류 및 패션관련 상품"])].copy()
df_sub
# 연도별 판매액을 상품군별로 relplot을 활용해 서브플롯으로 그려보기
sns.relplot(data=df_sub, x="연도", y="백만원",
hue="상품군별", kind="line", col="상품군별", col_wrap=4)
2. 화장품의 온라인쇼핑 해외직접판매액
# df_cosmetic이라는 변수에 상품군별이 화장품인 데이터만 가져오기
df_cosmetic = df_total[df_total["상품군별"] == "화장품"].copy()
df_cosmetic["상품군별"].unique()
# 연도와 판매액을 lineplot으로 그리고 분기별로 다른 색상으로 표현해보기
plt.figure(figsize=(15, 4))
sns.lineplot(data=df_cosmetic, x="연도", y="백만원", hue="분기")
# 화장품 판매액에 대한 기간별 금액 데이터 시각화 하기
plt.figure(figsize=(15,4))
plt.xticks(rotation=30)
sns.lineplot(data=df_cosmetic, x="기간", y="백만원")
# 화장품 판매액에 대한 기간별 금액 데이터 시각화하고 "국가(대륙)별"로 다른 색상으로 표시하기
plt.figure(figsize=(15,4))
plt.xticks(rotation=30)
sns.lineplot(data=df_cosmetic, x="기간", y="백만원", hue="국가(대륙)별")
중국 데이터가 너무 크기 때문에 중국을 제외하고 시각화해보기
plt.figure(figsize=(15,4))
plt.xticks(rotation=30)
sns.lineplot(data=df_cosmetic[df_cosmetic["국가(대륙)별"] != "중국"],
x="기간", y="백만원", hue="국가(대륙)별")
# 화장품 판매액에 대한 기간별 금액 데이터 시각화하고 "판매유형별"로 다른 색상으로 표시하기
# 계 뺴고 그리기
plt.figure(figsize=(15,4))
plt.xticks(rotation=30)
df_sub = df[df["판매유형별"] != "계"].copy()
sns.lineplot(data=df_sub, x="기간", y="백만원", hue="판매유형별")
3. 의류 및 패션관련 상품 온라인쇼핑 해외직접판매액
# df_fashion 이라는 변수에 의류 데이터만 가져와 따로 담아주기
df_fashion = df[(df["상품군별"] == "의류 및 패션 관련상품") & (df["판매유형별"] == "계")].copy()
df_fashion
# "의류 및 패션관련 상품" 판매액에 대한 기간별 금액 데이터 시각화하고
# "국가(대륙)별"로 다른 색상으로 표시하기
plt.figure(figsize=(15,4))
plt.xticks(rotation=30)
sns.lineplot(data=df_fashion, x="기간", y="백만원", hue="국가(대륙)별")
# "의류 및 패션관련 상품" 판매액에 대한 기간별 금액 데이터 시각화하고
# "판매유형별"로 다른 색상으로 표시하기
df_fashion2 = df[(df["상품군별"] == "의류 및 패션 관련상품") & (df["판매유형별"] != "계")].copy()
plt.figure(figsize=(15,4))
plt.xticks(rotation=30)
sns.lineplot(data=df_fashion2, x="기간", y="백만원", hue="판매유형별", ci=None)
4. 데이터 집계 후 시각화 해보기
피봇테이블로 "국가(대륙)별", "연도"별 합계 금액을 표 형태로 구한 후 시각화 해보자
result = df_fashion.pivot_table(index="국가(대륙)별", columns="연도",
values="백만원", aggfunc="sum")
result
# 피봇테이블로 구한 결과를 값의 많고 적음에 따라 시각적으로 표현하기
plt.figure(figsize=(10,6))
sns.heatmap(result, cmap="Blues", annot=True, fmt=".0f")
5. 전체 상품군별로 시각화 해보기
# 위에서 판매유형별 데이터의 "계"만 모은 df_total 변수를 통한 연도별 합계 금액을 시각화
sns.barplot(data=df_total, x="연도", y="백만원")
# 연도별 판매액을 그리고 "국가(대륙)별"로 다른 색상으로 표현하기
plt.figure(figsize=(15,4))
sns.lineplot(data=df_total, x="연도", y="백만원", hue="국가(대륙)별")
# 연도별 판매액을 그리고 "상품군별"로 다른 색상으로 표현하기
plt.figure(figsize=(15,4))
sns.lineplot(data=df_total, x="연도", y="백만원", hue="상품군별")
plt.legend(bbox_to_anchor=(1.02, 1), loc=2, borderaxespad=0.)
▶ 결론
1. 국가별/상품군별 온라인쇼핑 해외직접판매는 성장하고 있을까?
- 연도별 전체 판매액은 2014년부터 2020년까지 증가하다가 2021년에 감소하였다.
- 중국에서 가장 많은 판매량을 보였지만 2021년에 감소하였다.
- 제품들 중 화장품이 가장 많은 판매량을 보였지만 2021년에 감소하였다.
2021년에 조금 판매량이 줄어들긴 했지만, 2014년부터 대체적으로 성장하고 있다고 볼 수 있다.
2. 해외 직접판매를 한다면 어느 국가에 대해, 어느 상품으로 판매전략을 세우면 좋을까?
- 화장품, 농축수산물, 음/식료품 순으로 많이 판매되었다.
- 국가들 중 중국이 가장 많은 판매량을 보였다.
중국에 대해 화장품, 농축수산물, 음/식료품 등을 판매전략으로 세우면 좋을 것 같다.
다음 수업을 바탕으로 실습하였습니다.
'Python > 데이터분석 실습' 카테고리의 다른 글
[Kaggle ] Pima Indians Diabetes 예측 ② 데이터 전처리 후 모델 학습/예측 (0) | 2022.03.01 |
---|---|
[Kaggle] Pima Indians Diabetes 예측 ① EDA, 시각화 탐색 (0) | 2022.02.28 |
[Python] 서울 종합병원 분포 데이터 분석 (0) | 2022.02.04 |
[DACON_101] Lv.2 결측치 보간법과 랜덤포레스트로 따릉이 데이터 예측하기 (0) | 2022.02.02 |
[DACON_101] Lv.1 의사결정회귀나무로 따릉이 데이터 예측하기 (0) | 2022.02.02 |