Python

[Python] 온라인 쇼핑 해외 판매액 데이터를 활용한 온라인 시장 동향 파악

seo0seok 2023. 5. 22. 03:33

 

1. 서론

   

1) 프로젝트 개요

 분석에 사용할 데이터는 2017~2022년도 온라인 쇼핑 해외 판매 데이터로 지역별, 상품군별,  판매유형별로 분류 되있다. 이 데이터는 연도(분기)별로 기록되어 있으며 판매액의 단위는 백만원이다. 해당 데이터를 시계열 분석하여 체 품목의 총 판매액 추이, 특정 지역의 특정 상품군 판매액 추이, 그리고 지역별 전체 판매액 비교 등 다양한 시각분석을 통해 온라인 시장 동향을 파악하고자 한다.

 

2) 가설 설정

 1. 최대 판매 지역은 중국일 것이다.

 2. 최대 판매 상품은 전자(반도체)일 것이다.

 3. 코로나가 시작된 2020도부터 판매액은 감소할 것이다.

 

3) 사용한 데이터

    통계청 < 2017 ~ 2022년 온라인 쇼핑 해외 판매액 > 데이터

컬럼명 컬럼 의미
지역별 국가(지역)
상품군별 상품 종류
판매유형별 면세점 or 면세점 이외
항목 해외직접판매
단위 백만원
기간 년도 + 분기
백만원 금액 (단위 : 백만원)
연도 기간에서 연도만 추출
분기 기간에서 분기만 추출

 

2. 본론

 

1) 데이터 로드

# 데이터 로드
df_raw = pd.read_csv("OnlineData.csv", encoding = "cp949")
df_raw.shape # (969,30)
df_raw

-> 969행과 30개의 컬럼으로 이루어져있다.

 

# 컬럼명 확인
df_raw.columns

# 안쓰는 열 제거
df_raw.drop(["항목", "단위", "Unnamed: 29"], axis=1, inplace=True)

# 데이터 melt
df = df_raw.melt(id_vars=["지역별", "상품군별", "판매유형별"], var_name="기간", value_name="백만원")

-> 컬럼은 지역별, 상품군별, 판매유형별, 2017 1분기 ~ 2022년 4분기로 이루어져있다.

 

    분석에서 사용되지 않는 항목, 단위, Unnamed: 29 컬럼은 제거하고 진행하였다.

 

2) 데이터 전처리

# 기간 컬럼에서 연도 / 분기를 뽑아내어 컬럼으로 생성
df["연도"] = df["기간"].map(lambda x : int(x.split('.')[0]))
df["분기"] = df["기간"].map(lambda x : int(x.split('.')[1].split('/')[0]))

# 금액 타입 정수형으로 변경 / 결측치 0으로 변경
df["백만원"] = df["백만원"].replace("-", 0).astype(int)

# 기간 format 날짜형으로 바꾸기 (2017.1/4 -> 2017-01-04)
df["기간"] = df["기간"].astype(str)
df["기간"] = df["기간"].str.replace("/", ".")
df["기간"] = pd.to_datetime(df["기간"], format="%Y.%m")

# 필요없는 데이터(합계) 제외
df = df[(df["지역별"] != "합계") & (df["상품군별"] != "합계")].copy()

# 결측치 보기
df.isnull().sum()

-> 연도와 분기별로 시각화 하기 위해 기간 컬럼에서 연도와 분기를 split함수를 통해 뽑아내어 컬럼으로 생성하였다.

-> 금액 타입은 문자형에서 정수형으로 변경하였다.

-> 기간은 기존 데이터에서 2018.1/4와 같이 문자열로 지정되어있어 날짜형 format으로 변경하였다.

-> 분석에서 사용되지 않는 합계가 들어가있는 데이터는 제외하였다.

-> 결측치는 기존 로 표기되어 있었으나 0으로 변경하였고 나머지 결측치는 없었다.

 

3) 데이터 분석 및 시각화

# 전체 품목 총 판매액
df_total = df[df["판매유형별"] == "계"].copy()
sns.lineplot(data=df_total, x="연도", y="백만원", ci=None)
plt.title("전체 품목 총 판매액")


sns.barplot(data=df_total, x="연도", y="백만원")
plt.title("전체 품목 총 판매액")

전체 품목 총 판매액을 lineplot으로 시각화 한 그래프이다.
전체 품목 총 판매액을 barplot으로 시각화 한 그래프이다.

   

 두 그래프가 2017~2020년까지 총 판매액이 증가하다 2020년부터 하락하는 것을 알 수 있다.

이는 2020년 코로나 발생 및 입국 금지 같은 방역 대책이 큰 영향을 미친 것으로 예상된다.

 

 실제 당시 뉴스 확인 시 아래에서 다룰 인기 상품 중 하나인 화장품과 판매유형 중 하나인 면세점이 코로나로 인해 큰 타격을 입은 것을 알 수 있었다. 가설 설정을 옳게 하였다고 볼 수도 있다.

 

# 지역별 총 판매액
plt.figure(figsize=(15,5))
sns.lineplot(data=df_total, x="연도", y="백만원", hue="지역별", ci=None)
plt.legend(bbox_to_anchor=(1.12, 1), loc=1, borderaxespad=0.)
plt.title("지역별 총 판매액")

# 중국 제외 후 총 판매액
plt.figure(figsize=(15,5))
plt.xticks(rotation=30) # x축 기울기
sns.lineplot(data=df_total[df_total["지역별"] != "중국"], x="기간", y="백만원", hue="지역별", ci=None)
plt.legend(bbox_to_anchor=(1.12, 1), loc=1, borderaxespad=0.)
plt.title("중국 제외 지역별 총 판매액")

지역별 총 판매액을 lineplot으로 시각화 한 그래프이다.
중국을 제외 한 지역별 총 판매액을 lineplot으로 시각화 한 그래프이다.

 

 첫 번째 그래프에서 중국 판매액이 너무 높아 다른 지역간 판매액 비교가 어려워 중국을 제외하고 다시 지역별로 판매액을 비교하였다.

 

 위 두 그래프를 통해 중국이 가장 큰 판매 지역임을 알 수 있고, 그 뒤로 일본, 미국, 중동, 아세안 등이 뒤를 잇고 있다.

 

 중국과 아세안, 기타 지역이 2020년 이후로 감소 하고 있지만 일부 미국, 일본 같은 국가는 오히려 상승하는 것을 볼 수 있다. 이는 조기에 입국 금지 및 봉쇄 조치를 한 중국, 아세안 지역은 판매액 감소에 큰 영향을 미치고, 상대적으로 늦게 입국 금지한 일본과 입국 제한을 한 미국은 판매액 증가에 영향을 미친 것으로 판단된다.

 

# 지역별 총 판매액 히트맵으로 시각화
result = df_total.pivot_table(index="지역별", columns="연도", values="백만원", aggfunc="sum")
plt.figure(figsize=(10,6))
sns.heatmap(result, cmap="Blues", annot=True, fmt=".0f")
plt.title("지역별 총 판매액")

# 중국 제외 후 지역별 총 판매액 히트맵으로 시각화
result = df_total[df_total["지역별"] != "중국"].pivot_table(index="지역별", columns="연도", values="백만원", aggfunc="sum")
plt.figure(figsize=(10,6))
sns.heatmap(result, cmap="Blues", annot=True, fmt=".0f")
plt.title("중국 제외 지역별 총 판매액")

지역별 총 판매액을 heatmap으로 시각화 한 그래프이다.
중국을 제외 한 지역별 총 판매액을 heatmap으로 시각화 한 그래프이다.

 위 두 그래프는 heatmap으로 지역별 총 판매액을 시각화한 그래프로 중국, 미국, 일본, 아세안 등의 총 판매액이 높은 것을 색의 진함을 통해 직관적으로 파악 할 수 있다.

# 특정 지역 특정 상품군 판매액 분석 코드
df_time_series = df.pivot_table(index="기간", columns=["지역별", "상품군별"], values="백만원", aggfunc="sum")
selected_region = "중국"
selected_product = "의류 및 패션 관련 상품"
region_product_sales = df_time_series[selected_region][selected_product]
region_product_sales.plot(figsize=(12, 6))
plt.title(f"{selected_region}의 {selected_product} 판매액")
plt.xlabel("연도")
plt.ylabel("백만원")

특정 지역 / 특정 상품의 판매액을 lineplot으로 시각화 한 그래프이다.

 위 코드는 특정 지역 / 특정 상품을 타겟으로 총 판매액을 시각화 할 수 있다.

중국의 의류 판매액에 대한 그래프이고 2020년 전후로 크게 감소하는 것을 알 수 있다.

# 상품군별 총 판매액
plt.figure(figsize=(10,6))
sns.lineplot(data=df_total, x="연도", y="백만원", hue="상품군별", ci=None)
plt.legend(bbox_to_anchor=(1.10, 1), loc=1, borderaxespad=0.)
plt.title("상품군별 총 판매액")

# 가장 많이 팔린 화장품, 의류 제외 후 판매액
df_sub = df_total[~df_total["상품군별"].isin(["화장품", "의류 및 패션 관련 상품"])].copy()
g = sns.relplot(data=df_sub, x="연도", y="백만원", hue="상품군별", col="상품군별", col_wrap=5, kind="line")
leg = g._legend
leg.set_bbox_to_anchor([0.93,0.17])

상품군별 총 판매액을 lineplot으로 시각화 한 그래프이다.
화장품, 의류 제외 상품군별 판매액을 relplot으로 시각화 한 그래프이다.

 위 두 그래프는 상품군별 총 판매액을 연도에 따라 시각화 한 것이다. 첫 번째 그래프는 전체 상품군 중 화장품의 판매액이 압도적으로 높은 것을 알 수 있지만 다른 상품군의 비교가 어려워 화장품과 그 다음으로 많이 판매된 의류를 제외하고 relplot으로 시각화 하였다.

 

 두 번째 그래프를 통해 화장품과 의류를 제외한 상품군 중 가전.전자.통신 / 음반.비디오.악기 / 기타 등의 판매액이 높은 것을 알 수 있다. 가설로 설정한 전자(반도체)가 가장 높을 것이라는 것은 기각되었지만 상위권에 있는 것을 확인 할 수 있었다.

 

 다음으로는 가장 많이 판매된 화장품에 대해 분기별 / 기간별 / 지역별로 시각화를 진행하였다.

# 가장 많이 팔린 화장품 판매액
df_cosmetic = df_total[df_total["상품군별"] == "화장품"].copy()

# 분기별 화장품 판매액 시각화
sns.lineplot(data=df_cosmetic, x="연도", y="백만원", hue="분기", ci=None)
plt.title("분기별 화장품 판매액")

# 연도별 화장품 판매액 시각화
plt.figure(figsize=(15,5))
plt.xticks(rotation=30)
sns.lineplot(data=df_cosmetic, x="기간", y="백만원", ci=None)
plt.title("연도별 화장품 총 판매액")

# 지역별 화장품 판매액 시각화
plt.figure(figsize=(15,5))
plt.xticks(rotation=30) # x축 기울기
sns.lineplot(data=df_cosmetic, x="기간", y="백만원", hue="지역별")
plt.legend(bbox_to_anchor=(1.12, 1), loc=1, borderaxespad=0.)
plt.title("지역별 총 판매액")

# 중국 제외 후 지역별 화장품 판매액
plt.figure(figsize=(15,5))
plt.xticks(rotation=30) # x축 기울기
sns.lineplot(data=df_cosmetic[df_cosmetic["지역별"] != "중국"], x="기간", y="백만원", hue="지역별")
plt.legend(bbox_to_anchor=(1.12, 1), loc=1, borderaxespad=0)
plt.title("중국 제외 총 판매액")

분기별 화장품 판매액을 lineplot으로 시각화 한 그래프이다.
연도별 화장품 판매액을 lineplot으로 시각화 한 그래프이다.

 위 두 그래프는 분기와 연도별로 화장품 판매액을 lineplot으로 시각화한 그래프이다.

첫 번째 분기별 그래프에서는 2017년부터 4, 3, 2, 1분기 순으로 판매액이 증가하다 2020년 전후로 급감하는 것을 알 수 있다.

 

 두 번째 연도별 그래프에서 역시 2017년부터 2019년 까지 상승하다 20202년부터 감소 하는 것을 알 수 있다.

 

 가장 큰 판매액을 차지하는 화장품이 코로나의 영향으로 2020년 전후로 크게 감소하는 것이 총 판매액에도 영향을 미쳐 감소했다는 것을 알 수 있다.

지역별 화장품 판매액을 lineplot으로 시각화 한 그래프이다.
중국을 제외 한 지역별 화장품 판매액을 lineplot으로 시각화 한 그래프이다.

 위 두 그래프는 지역별 화장품 총 판매액을 나타낸 그래프이다. 화장품 역시 중국이 가장 큰 판매지역임을 알 수 있다.

 

 중국을 제외 한 아세안, 기타, 미국, 일본의 판매액이 뒤를 잇고 있다. 전체적으로 2020년 기준으로 판매액이 감소하고있지만 일본은 2020년 이후에도 판매액이 증가하는 것을 알 수 있다.

 

 다음으로 판매유형별로 총 판매액을 시각화 진행하였다.

# 판매유형별 판매액
df_sub = df[df["판매유형별"] != "계"].copy()
plt.figure(figsize=(15,5))
plt.xticks(rotation=30) # x축 기울기
sns.lineplot(data=df_sub, x="기간", y="백만원", hue="판매유형별", ci=None)
plt.title("판매유형별 총 판매액")

# 면세점 제외 후 판매액
df_sub = df[(df["판매유형별"] != "계") & (df["판매유형별"] != "면세점")].copy()
plt.figure(figsize=(15,5))
plt.xticks(rotation=30) # x축 기울기
sns.lineplot(data=df_sub, x="기간", y="백만원", hue="판매유형별", ci = None)
plt.title("면세점 제외 총 판매액")

판매유형별 총 판매액을 lineplot으로 시각화 한 그래프이다.
면세점을 제외 한 총 판매액을 lineplot으로 시각화 한 그래프이다.

 위 두 그래프는 판매유형별 총 판매액을 lineplot으로 시각화 한 그래프이다.

 

 첫 번째 그래프에 면세점의 판매액이 너무 커 비교하기 어려워 면세점을 제외 후 다시 시각화한 것이 두 번째 그래프이다.

 

 두 그래프에서 면세점이 총 판매액이 가장 큰 판매유형임을 알 수 있고, 판매유형에 상관없이 2020년 전후로 총 판매액이 감소한 것 역시 확인 할 수 있다.

 

3. 분석 결과 및 결론

 

1) 온라인 시장 동향 파악

 본론에서 다양한 시각화를 통해 분석해본 결과 중국이 가장 큰 판매 지역이고, 화장품이 가장 큰 판매 상품군이며, 로나가 시작된 2020년 전후로 판매액이 감소했다는 것을 알 수 있었다.     

       

 이 사실들을 토대로 중국, 일본, 미국 등에 K-뷰티(화장품), K-POP(음반) 같은 한류 상품들이 주요 판매상품임을 유추 할 수 있다.

 

 코로나 발생 이후 대부분 지역의 총 판매액의 감소세가 현재까지 이어지고 회복세가 더딘 와중에 미국, 일본의 총 판매액은 오히려 증가하는 것으로 보아 대한민국의 최대 수출국이 중국에서 미국, 일본으로 바뀔 수 있음을 시사하기도한다.

 

 실제로 20235월 기준 미국이 중국의 수출액을 넘어서고 있다는 소식이 들려 오고있다.

 추가적으로 러시아, 우크라이나 전쟁 간 각 국에 우호적이거나 우호적이지 않은 나라에 대해 수입, 수출을 규제함에 따라 한국의 수출액에도 영향을 미치고있다는 것을 인지하고 각 상품군별 기업들은 사전에 대비해야 큰 손실을 막을 수 있을 것으로 보인다.

 

참고 자료

 

1) 통계청 데이터

지역별 / 상품군별 온라인쇼핑 해외직접판매액 (kosis.kr)

 

2) 뉴스 기사

지난해 온라인쇼핑 18% 증가…'온라인 해외 수출' 급증 l KBS WORLD Korean

잘나가던 신세계, 코로나 직격탄 주력 사업 ‘흔들’ - 뉴스웨이 (newsway.co.kr)

 

3) 블로그

중국에서 미국으로…한국의 최대 수출국 20년 .. : 네이버블로그 (naver.com)

'Python' 카테고리의 다른 글

[Python] 캐글(kaggle) 필사 전략  (0) 2023.06.20
[Python] 딥러닝 분석  (0) 2023.05.03
[Python] 코로나 데이터 분석  (0) 2023.05.03