Python/데이터분석 실습

[Python] 국가(대륙)별/상품군별 온라인쇼핑 해외직접판매액 데이터 분석

dori_0 2022. 2. 4. 01:51

국가(대륙)별/상품군별 온라인쇼핑 해외직접판매액 데이터 분석

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. 해외 직접판매를 한다면 어느 국가에 대해, 어느 상품으로 판매전략을 세우면 좋을까?

  • 화장품, 농축수산물, 음/식료품 순으로 많이 판매되었다.
  • 국가들 중 중국이 가장 많은 판매량을 보였다.

 

중국에 대해 화장품, 농축수산물, 음/식료품 등을 판매전략으로 세우면 좋을 것 같다.

 

 

 

 

KOSIS

 

kosis.kr

 


 

 

다음 수업을 바탕으로 실습하였습니다.

 

파이썬으로 시작하는 데이터 사이언스

부스트코스 무료 강의

www.boostcourse.org