ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기상데이터와 GS25 판매량 데이터를 이용한 분석 리포트 - 2
    Data Analysis 2021. 3. 8. 22:48
    반응형

    2021/03/08 - [Programming/Data Analysis] - 기상데이터와 GS25 판매량 데이터를 이용한 분석 리포트 - 1

     

    기상데이터와 GS25 판매량 데이터를 이용한 분석 리포트 - 1

    Data download and python code link Joonyeong97/GS25_weather_data Contribute to Joonyeong97/GS25_weather_data development by creating an account on GitHub. github.com 진행사항 일단위로 진행하기엔 무..

    datacook.tistory.com

    이전 글에서 이어집니다.

    이번 글에서는 데이터의 유의성을 검증하고 통계적으로 접근할 예정입니다.

    많은 양의 데이터를 전부 다 확인하기 보다는 특정 부분만 집어서 분석을 진행했습니다.

    주제 : 경기도 광주시와 성남시의 판매량 차이

     

    gwangjusi = gyunggido[gyunggido['korea_cvs.bor_nm']=='광주시']
    sungnamsi = gyunggido[gyunggido['korea_cvs.bor_nm']=='성남시']

    성남시 및 광주시 데이터 유의성 검증

    def gender(dataframe):
        groupby = dataframe[['korea_cvs.sale_dt(month)',
                             'korea_cvs.gen_cd',
                             'korea_cvs.adj_qty',
                             '최고기온',
                             '최대풍속',
                             '최소기온',
                             '평균기온',
                             '평균풍속',
                             '합계강수량']]
        category_count = groupby.groupby(['korea_cvs.sale_dt(month)','korea_cvs.gen_cd']).sum()
        category_count.reset_index(inplace=True)
        category_count = category_count[['korea_cvs.sale_dt(month)','korea_cvs.gen_cd','korea_cvs.adj_qty']]
        category_count_M = category_count[category_count['korea_cvs.gen_cd']=='M']
        category_count_F = category_count[category_count['korea_cvs.gen_cd']=='F']
        category_count_M['datetime'] = pd.to_datetime(category_count_M['korea_cvs.sale_dt(month)'],format='%Y%m')
        category_count_F['datetime'] = pd.to_datetime(category_count_F['korea_cvs.sale_dt(month)'],format='%Y%m')
        category_count_F.reset_index(inplace=True)
        category_count_M.reset_index(inplace=True)
        category_count_M = category_count_M[['datetime','korea_cvs.gen_cd','korea_cvs.adj_qty']]
        category_count_F = category_count_F[['datetime','korea_cvs.gen_cd','korea_cvs.adj_qty']]
        return category_count_M,category_count_F

    성별로 나눠서 분석을 할 예정이기 때문에 함수화로 만들어서 진행합니다.

    category_count_sungnam_M,category_count_sungnam_F = gender(sungnamsi)
    
    category_count_gwangju_M,category_count_gwangju_F = gender(gwangjusi)

    1. 남성과 여성의 판매량 비교

    def visual_sido(dataframe,sido,gender):
        plt.figure(figsize=(18,12))
        plt.plot(dataframe['datetime'],dataframe['korea_cvs.adj_qty'])
        plt.title('{} {} 판매량'.format(sido,gender),size=35)
        plt.xlabel('년도',size=25)
        plt.ylabel('Count',size=25)
    
    visual_sido(category_count_sungnam_M,'성남시','남성')

    visual_sido(category_count_sungnam_F,'성남시','여성')

    visual_sido(category_count_gwangju_M,'광주시','남성')

    visual_sido(category_count_gwangju_F,'광주시','여성')



    확인결과

    • 남성보다는 여성이 판매량을 더 많이 차지하고 있고, 둘의 공통점으로는 계절성을 띄고있으며, 6~9월이 가장 판매가 많이 되는것을 확인할 수 있습니다.

    2. 경기도 광주시와 경기도 성남시의 판매 비교 및 온도와의 상관성 분석

    온도별 점그래프를 이용하여 확인검증

    # 날짜별로 Groupby를 진행하여 기온별로 확인하기 위해 전처리를 진행
    def sido_temp(dataframe):
        dataframe = dataframe[['korea_cvs.sale_dt(month)','최고기온','최대풍속','최소기온','평균기온','평균풍속','합계강수량']]
    
        
        groupby_temp = dataframe.groupby('korea_cvs.sale_dt(month)').mean()
        groupby_temp.reset_index(inplace=True)
        groupby_temp['datetime'] = pd.to_datetime(groupby_temp['korea_cvs.sale_dt(month)'],format='%Y%m')
        groupby_temp = groupby_temp[['datetime','최고기온','최대풍속','최소기온','평균기온','평균풍속','합계강수량']]
        return groupby_temp

    위와 동일하게 함수화를 이용해서 적용해줍니다.

    sungnam_temp = sido_temp(sungnamsi)
    gwangju_temp = sido_temp(gwangjusi)

    분석을 위해서 나눠주었던 남녀파일을 다시 합쳐줍니다.

    # 위에서 나눠진 여성과 남성을 다시 합치는 작업
    total_sungnam_count = category_count_sungnam_F['korea_cvs.adj_qty'] + category_count_sungnam_M['korea_cvs.adj_qty']
    total_gwangju_count = category_count_gwangju_M['korea_cvs.adj_qty'] + category_count_gwangju_F['korea_cvs.adj_qty']

    성남시의 온도별 판매량을 scatter plot으로 확인해 봅시다.

    # 성남시 온도별 판매량 비교 그래프
    columns = ['최고기온','최대풍속','최소기온','평균기온','평균풍속','합계강수량']
    for col in columns:
        plt.figure(figsize=(12,8))
        plt.scatter(sungnam_temp[col],total_sungnam_count)
        plt.title('성남시 {}과 판매량'.format(col),size=35)
        plt.xlabel('{}'.format(col),size=25)
        plt.ylabel('판매량',size=25)

     

    광주시의 온도별 판매량을 scatter plot으로 확인해 봅시다.

    # 광주시 온도별 판매량 비교 그래프
    columns = ['최고기온','최대풍속','최소기온','평균기온','평균풍속','합계강수량']
    for col in columns:
        plt.figure(figsize=(12,8))
        plt.scatter(gwangju_temp[col],total_gwangju_count)
        plt.title('광주시 {}과 판매량'.format(col),size=35)
        plt.xlabel('{}'.format(col),size=25)
        plt.ylabel('판매량',size=25)

    확인결과 :

    • 경기도 성남시는 온도와 상관성이 있는것으로 확인됐습니다.
    • 광주시는 상관관계가 없음
    • 가설 1. 기온과 판매량은 상관없음을 기각하고 대립가설인 기온과 판매량은 상관있음으로 판정됐습니다.
    • 단, 광주는 예외
    • 성남시는 기온이 올라갈수록 판매량이 증가하고 있는것을 확인하였고, 상관계수가 양의 상관관계를 유지하고 있습니다.
    print('성남시')
    print('상관계수 : ',(stats.pearsonr(sungnam_temp['평균기온'],total_sungnam_count)[0]),
         'P-value : ',(stats.pearsonr(sungnam_temp['평균기온'],total_sungnam_count)[1]))

    성남시
    상관계수 :  0.8697292505354522 P-value :  5.786996641351627e-12

     

    print('광주시')
    print('상관계수 : ',(stats.pearsonr(gwangju_temp['평균기온'],total_gwangju_count)[0]),
         'P-value : ',(stats.pearsonr(gwangju_temp['평균기온'],total_gwangju_count)[1]))

    광주시
    상관계수 :  0.2493108024105657 P-value :  0.1425553263075969

     

    3. 광주시와 성남시의 판매량(count) 비교검증

    • 가설 : 광주시와 성남시의 판매량은 차이가 없다.

     

    등분산 검증

    • 유의확률 80%로 등분산임을 확인했습니다.
    lresult = stats.levene(total_sungnam_count, total_gwangju_count)
    print('LeveneResult(F) : %.3f \np-value : %.3f' % (lresult))

    LeveneResult(F) : 0.064 
    p-value : 0.801

     

    T-test 검증결과

    # 등분산이 아닌경우 equal_var=False 파라미터를 추가해서 진행합니다.
    result = stats.ttest_ind(total_sungnam_count, total_gwangju_count)
    print('t statistic : %.3f \np-value : %.3f' % (result))

    t statistic : 6.601 
    p-value : 0.000

     

    print('성남시의 판매량과 광주시의 판매량 상관관계')
    print('상관계수 : ',(stats.pearsonr(total_sungnam_count,total_gwangju_count)[0]),
         'P-value : ',(stats.pearsonr(total_sungnam_count,total_gwangju_count)[1]))

    성남시의 판매량과 광주시의 판매량 상관관계
    상관계수 :  0.11947103728167645 P-value :  0.4876695573535495

     

    확인결과:

    • T-Test 결과 가설인 성남시와 광주시의 차이가 없음을 기각하고, 차이가 있음을 알 수 있습니다.
    • 둘의 판매량은 T-test로는 유의성을 확인하였고, 상관관계로는 의미가 없음을 알 수 있습니다.

     

    최종 결론

    • 남성보단 여성이 편의점을 더 이용을 하고있고, 성남시는 광주시보다 판매량이 계절성을 띄고있으며, 주로 판매되는 월은 6~9월 입니다.
    • 실제로 온도와 판매량은 상관관계가 있었으며, 성남시의 판매량과 광주시의 판매량은 등분산을 띄고있습니다.
    • 그리고 비가오기 시작하면 판매량은 감소추세를 보이는가 싶다가도 비가 더 올때는 오히려 판매량이 증가함을 알 수 있습니다.
    • 그리고 바람이 많이 부는 날에는 판매량이 감소하며, 이는 비가 많이 올시하고는 다르게 많이 불수록 판매량은 줄어듭니다.
    • 성남시의 판매량과 광주시의 판매량은 차이가 있으며 이를 T-test로 검증 하였습니다.
    • 분석 방법론은 애자일 방식을 적용하였으며, 이론-분석-검증을 반복 및 번복하여 진행하였습니다.
    • 감사합니다.
    반응형
Designed by Tistory.