K-beautyオンライン販売分析


これらの内容は、Boost Cosデータセット
  • データツール:Google Copulator
  • 庫:パンダ、numpy、seborn、matplotlib.pyplot
  • 🎄 仮定の作成

  • K-beautifyは成長していますか?
  • 🎄 データのロードとプリプロセッシング


    [データのロード]
    # 폰트 다운로드 및 설치
    !sudo apt-get install -y fonts-nanum
    !sudo fc-cache -fv
    !rm ~/.cache/matplotlib -rf
    ### 라이브러리 로드
    import pandas as pd
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as pl
    import os
      
    %matplotlib inline
    # windows: os.name='nt'
    # mac: os.name='posix'
    sns.set(font="Malgun Gothic")
      
    ### 데이터 로드
    df_raw = pd.read_csv("/content/국가_대륙_별_상품군별_온라인쇼핑_해외직접판매액
      			_20210810120634.csv", encoding = "cp949")
    [前処理]
    ### 데이터 전처리
    # tidy data(깔끔한 데이터) 생성
    # melt() : 행에 있는 데이터 열로 옮기는 함수
    df_raw.melt(id_vars=["국가(대륙)별", "상품군별", "판매유형별"])
    # stack(): 세로로 데이터를 나열하는 것
    df_raw.stack()
      
    # reset_index(): 인덱스 초기화
    
    # 기간에서 연도, 분기 분리
    df["연도"] = df["기간"].map(lambda x: int(x.split()[0]))
    df["분기"] = df["기간"].map(lambda x : int(x.split()[1].split("/")[0]))
    
      
    # 금액 -> 수치데이터
    # - 결측치 값 -> nan
    df["백만원"] = df["백만원"].replace("-", np.nan).astype(float)
      
    # 필요 없는 데이터 제거 :: 합계가 아닌 데이터만 남기기 -> 메모리 절약
    df = df[(df["국가(대륙)별"] != "합계") & (df["상품군별"] != "합계")].copy()

    🎄 データ可視化、仮定検査


    [全商品群]
    ### 전체 상품군별 판매량 시각화
    df_total = df[df['판매유형별'] == '계'].copy()
    sns.lineplot(data=df_total, x='연도', y='백만원')
      
    ### 상품군별 판매량 시각화
    # matplotlib를 활용하여 legend 표시
    sns.lineplot(data=df_total, x="연도", y="백만원", hue="상품군별")
    plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
    # seaborn 활용하여 legend 표시
    sns.relplot(data=df_total, x="연도", y="백만원", hue="상품군별",kind="line")
      
    # barplot
    # 검정선 = 신뢰구간
    # estimator 기본값 = 평균 ##########################################
    sns.barplot(data=df_total, x='연도', y='백만원')
      
    # linplot - 국가(대륙)별 -> 중국 우세
    plt.figure(figsize=(15, 4))
    sns.lineplot(data=df_total, x="연도", y="백만원", hue="국가(대륙)별")  
    # linplot - 상품군별 -> 화장품 우세
    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,)  
      
    ### 각각의 상품군에 대해 데이터 시각화  
    ### (결과)화장품 > 의류 및 패션 관련 상품 > 가전.전자,통신기기, 음반.비디오.악기
    # col='상품군별' :: 상품군별 색상 다르게 표시 / col_wrap=4: 한 행에 4개씩 표시
    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")
      
    # '의류 및 패션 관련상품' 우세
    # '화장품'과 '의류 및 패션 관련상품' 제외
    # '가전.전자,통신기기'와 '음반.비디오.악기' 우세
    df_sub = df_total[~df_total["상품군별"]
      			.isin(["화장품","의류 및 패션 관련상품"])].copy()
    sns.relplot(data=df_sub, x="연도", y="백만원", hue="상품군별",
      			col="상품군별", col_wrap=4, kind="line") 
    [化粧品]
    ### 분기별 화장품 판매액 데이터 시각화
    # 원본 데이터를 건드리지 않기 위해 copy() 활용
    df_cosmetic = df_total[df_total["상품군별"] == "화장품"].copy()
      
    # 상품군이 화장품만 담겨졌는지 확인
    df_cosmetic["상품군별"].unique()
    
    ### 시간별 판매액 확인
    # 연도별 판매액 확인
    sns.lineplot(data=df_cosmetic, x="연도", y="백만원")
      
    # 분기별 판매액 확인
    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="판매유형별")
    
    # 온라인 면세점을 제외한 시각화 -> '면세점 이외'도 증가
    plt.figure(figsize=(15,4))
    plt.xticks(rotation=30)
    df_sub = df[(df["판매유형별"] != "계") 
      			& (df["판매유형별"] != "면세점")].copy()
    sns.lineplot(data=df_sub, x="기간", y="백만원", hue="판매유형별", ci=None)
    [ファッション関連商品]
    # 의류 및 패션 관련상품 데이터
    df_fashion = df[df['상품군별']=='의류 및 패션 관련상품'].copy()
      
    # 판매유형별=계 인 데이터만 추출 <국가별 확인>
    df_fashion = df[(df["상품군별"] == "의류 및 패션 관련상품") & (df["판매유형별"] == "계")].copy()
    # (코로나 전 기준) 보면 중국, 일본, 미국, 아세아 순으로 성장
    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)
    
    ### 데이터 집계
    # df_fashion에 대해 집계
    # aggfunc의 기본값 = mean(평균)
    df_fashion.pivot_table(index='국가(대륙)별', columns='연도', values='백만원')
    
    # 합 표시
    df_fashion.pivot_table(index="국가(대륙)별", columns="연도", values="백만원", aggfunc="sum")  
    
      
    df_fashion["판매유형별"].value_counts() 	# 유형: 계
    df_fashion2["판매유형별"].value_counts()	# 유형: 면세점, 면세점 이외  
    
    ### heatmap
    # 데이터들의 변화를 나타내는 데 효과적인 chart
    # 2019 기준 중국 일본 미국 아세안 순 확인
    result = df_fashion.pivot_table(index='국가(대륙)별', columns='연도', values='백만원', 
      				aggfunc='sum')
    sns.heatmap(result)
    # 크기, 색상, 셀의 값 표시 여부 변경
    plt.figure(figsize=(10, 6))
    sns.heatmap(result, cmap = "Blues_r", annot=True)

    🎄 コード結果の確認


    k-beautyオンライン販売分析。ipynb