Data Analysis

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

Joon09 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로 검증 하였습니다.
  • 분석 방법론은 애자일 방식을 적용하였으며, 이론-분석-검증을 반복 및 번복하여 진행하였습니다.
  • 감사합니다.
반응형