-
기상데이터와 GS25 판매량 데이터를 이용한 분석 리포트 - 2Data Analysis 2021. 3. 8. 22:48반응형
2021/03/08 - [Programming/Data Analysis] - 기상데이터와 GS25 판매량 데이터를 이용한 분석 리포트 - 1
이전 글에서 이어집니다.
이번 글에서는 데이터의 유의성을 검증하고 통계적으로 접근할 예정입니다.
많은 양의 데이터를 전부 다 확인하기 보다는 특정 부분만 집어서 분석을 진행했습니다.
주제 : 경기도 광주시와 성남시의 판매량 차이
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-12print('광주시') print('상관계수 : ',(stats.pearsonr(gwangju_temp['평균기온'],total_gwangju_count)[0]), 'P-value : ',(stats.pearsonr(gwangju_temp['평균기온'],total_gwangju_count)[1]))
광주시
상관계수 : 0.2493108024105657 P-value : 0.14255532630759693. 광주시와 성남시의 판매량(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.801T-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.000print('성남시의 판매량과 광주시의 판매량 상관관계') 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로 검증 하였습니다.
- 분석 방법론은 애자일 방식을 적용하였으며, 이론-분석-검증을 반복 및 번복하여 진행하였습니다.
- 감사합니다.
반응형'Data Analysis' 카테고리의 다른 글
P-Value, T-Test, Z-Test 설명 (0) 2023.06.27 기상데이터와 GS25 판매량 데이터를 이용한 분석 리포트 - 1 (0) 2021.03.08 뉴스데이터를 이용한 문서유사도 확인 (0) 2021.03.05