이번 분석에는 K-beauty가 실제로 각광받는지를 파악하기 위해 상품군별 온라인쇼핑 해외직접판매액 데이터를 활용해 분석을 진행하였다.


tidy data 만들기

위에서 다운받은 데이터셋은 분기별로 컬럼이 나누어져 있어 분석하기 불편한 경향이 있다. 이를 분석하기 좋게 재배치하기 위해 pandasmelt를 사용하였다.

df = df_raw.melt(id_vars=["국가(대륙)별", "상품군별", "판매유형별"], var_name="기간", value_name="백만원")

id_vars는 기준이 되는 컬럼, var_name은 재배치 이후에 컬럼명을 변경, value_name은 값에 대한 컬럼명을 지정한다.

데이터베이스를 그냥 read한 df_raw를 재가공하여 df에 저장하였다.


데이터 전처리

데이터 전처리는 앞선 실습과 크게 다르지 않다. 몇 가지 팁만 살펴보자.

df["기간"].map(lambda x: int(x.split()[0]))

df["백만원"] = df["백만원"].replace("-", pd.np.nan).astype(float)

첫 번째 코드는 데이터를 추출해 정수로 변환하는 것이다. 문자데이터를 숫자처럼 사용해야 하는 경우에 적용하면 편한데, lambda함수를 활용하였다.

두 번째 코드는 데이터가 없음을 뜻하는 ‘-‘를 결측치로 변경하는 코드이다. ‘-‘는 문자이지만 결측치는 숫자처럼 취급하므로 다양한 연산을 수행할 수 있다는 장점이 있다.


시각화

시각화 역시 비슷하게 진행할 수 있다. 여기서도 몇 가지 팁을 위주로 살펴보자.

plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad = 0.)     # 그래프 밖에 legend 추가

sns.relplot(data = df_total, x="연도", y="백만원", hue="상품군별", kind="line", col="상품군별", col_wrap=4) 

df_sub = df_total[df_total["상품군별"].isin(["화장품", "의류 및 패션관련 상품"])].copy()

sns.relplot(data = df_sub, x="연도", y="백만원", hue="상품군별", col="상품군별", col_wrap=4, kind="line")

첫 번째 코드는 그래프에 범례(legend)를 추가하는 것이다.

두 번째 코드는 ‘상품군별’로 서브플롯을 그리는 코드이다. kind로 그래프 모양을 설정할 수 있다.
여기서 단점이 한 가지 있는데, ‘화장품’과 ‘의류 및 패션관련 상품’의 값이 너무 커서 다른 그래프의 스케일링이 엉망이라 그래프를 제대로 보기가 어렵다는 것이다.

이를 해결하기 위해 세 번째 코드에서 두 가지를 제외하고 그래프를 그렸다.


관련 코드 보러가기

댓글남기기