-
Python 데이터분석 기초 35 - 어느 음식점 매출 자료와 날씨 자료를 활용하여 강수 여부에 따른 매출액 평균에 차이를 검정Python 데이터 분석 2022. 11. 8. 15:03
전혀 다른 데이터이지만 서로 merge 해서 데이터를 만들었다.
데이터 타입 바꾸기, 데이터 안에 들어있는 -를 공백으로 바꾸기, 두 데이터 병합 등의 내용이 들어있다.
# 어느 음식점 매출 자료와 날씨 자료를 활용하여 강수 여부에 따른 매출액 평균에 차이를 검정 # 귀무 : 강수 여부에 따른 음식점 매출액의 평균에 차이가 없다. # 대립 : 강수 여부에 따른 음식점 매출액의 평균에 차이가 있다. import numpy as np import scipy.stats as stats import pandas as pd import matplotlib.pyplot as plt # 데이터는 data.go.kr을 참조 # 매출 자료 sales_data = pd.read_csv("https://raw.githubusercontent.com/pykwon/python/master/testdata_utf8/tsales.csv", dtype={'YMD':'object'}) # 데이터 타입 바꾸기 print(sales_data.head(3)) print(sales_data.info()) # 328 * 3 # 날씨 자료 wt_data = pd.read_csv("https://raw.githubusercontent.com/pykwon/python/master/testdata_utf8/tweather.csv") print(wt_data.head(3)) print(wt_data.info()) # 702 * 9 # 두 데이터를 병합 : 날짜를 사용. 그래서 wt_data의 tm을 2018-06-01 ==> 20180601 형태로 변환 wt_data.tm = wt_data.tm.map(lambda x:x.replace('-','')) # 데이터를 하나만 꺼냈기 때문에 시리즈 데이터이다. 그래서 map함수 사용 print(wt_data.head(3)) print(wt_data.tail(3)) print('merge --------') frame = sales_data.merge(wt_data, how = 'left', left_on = 'YMD', right_on = 'tm') print(frame.head(5)) print(frame.tail(5)) print(len(frame)) # 328행 print() # 분석에 사용할 열만 추출 print(frame.columns) # ['YMD', 'AMT', 'CNT', 'stnId', 'tm', 'avgTa', 'minTa', 'maxTa', 'sumRn', 'maxWs', 'avgWs', 'ddMes'] data = frame.iloc[:, [0, 1, 7, 8]] # 'YMD', 'AMT' 'maxTa', 'sumRn' print(data.head(3)) print('두 집단 간의 매출액 평균 검정 : t-test') print(data.isnull().sum()) # 결측치 확인(없음) print(data['sumRn'] > 0) # 비가 왔는지 안 왔는지 True False 로 반환 data['rain_yn'] = (data['sumRn'] > 0).astype(int) # rain_yn 칼럼을 int type으로 추가, 비가 오면 1, 안 오면 0 # print(True * 1, ' ', False * 1) # True, False 에 * 1을 하면 1, 0이 나온다. # data['rain_yn'] = (data.loc[:, ('sumRn')] > 0) * 1 print(data.head(3)) # boxplot으로 강수 여부에 따른 매출액 시각화 sp = np.array(data.iloc[:, [1,4]]) # print(sp) tgroup1 = sp[sp[:, 1] == 0, 0] # 집단1 : 비 안오는 그룹의 매출액 tgroup2 = sp[sp[:, 1] == 1, 0] # 집단2 : 비 오는 그룹의 매출액 # plt.plot(tgroup1) # plt.show() # plt.plot(tgroup2) # plt.show() plt.boxplot([tgroup1, tgroup2], meanline = True, showmeans = True, notch = True) plt.show() print('평균은 ', np.mean(tgroup1), ' ', np.mean(tgroup2)) # 761040.254 vs 757331.521 차이? # 정규성 확인 print(stats.shapiro(tgroup1).pvalue) # 0.05604 > 0.05 이므로 정규성 만족 print(stats.shapiro(tgroup2).pvalue) # 0.88273 > 0.05 이므로 정규성 만족 # 등분산성 확인 print(stats.levene(tgroup1, tgroup2).pvalue) # 0.712345 > 0.05 이므로 등분산성 만족 print(stats.ttest_ind(tgroup1, tgroup2, equal_var = True)) # statistic=0.10109828602924716, pvalue=0.919534587722196 # pvalue=0.91953 > 0.05 이므로 귀무가설 채택. # 강수 여부에 따른 음식점 매출액의 평균에 차이가 없다. <console> YMD AMT CNT 0 20190514 0 1 1 20190519 18000 1 2 20190521 50000 4 <class 'pandas.core.frame.DataFrame'> RangeIndex: 328 entries, 0 to 327 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 YMD 328 non-null object 1 AMT 328 non-null int64 2 CNT 328 non-null int64 dtypes: int64(2), object(1) memory usage: 7.8+ KB None stnId tm avgTa minTa maxTa sumRn maxWs avgWs ddMes 0 108 2018-06-01 23.8 17.5 30.2 0.0 4.3 1.9 0.0 1 108 2018-06-02 23.4 17.6 30.1 0.0 4.5 2.0 0.0 2 108 2018-06-03 24.0 16.9 30.8 0.0 4.2 1.6 0.0 <class 'pandas.core.frame.DataFrame'> RangeIndex: 702 entries, 0 to 701 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 stnId 702 non-null int64 1 tm 702 non-null object 2 avgTa 702 non-null float64 3 minTa 702 non-null float64 4 maxTa 702 non-null float64 5 sumRn 702 non-null float64 6 maxWs 702 non-null float64 7 avgWs 702 non-null float64 8 ddMes 702 non-null float64 dtypes: float64(7), int64(1), object(1) memory usage: 49.5+ KB None stnId tm avgTa minTa maxTa sumRn maxWs avgWs ddMes 0 108 20180601 23.8 17.5 30.2 0.0 4.3 1.9 0.0 1 108 20180602 23.4 17.6 30.1 0.0 4.5 2.0 0.0 2 108 20180603 24.0 16.9 30.8 0.0 4.2 1.6 0.0 stnId tm avgTa minTa maxTa sumRn maxWs avgWs ddMes 699 108 20200430 17.1 9.3 23.4 0.0 5.9 2.7 0.0 700 108 20200501 20.2 16.4 26.2 0.0 5.5 2.7 0.0 701 108 20200502 20.3 18.0 23.9 0.0 4.6 2.3 0.0 merge -------- YMD AMT CNT stnId tm ... maxTa sumRn maxWs avgWs ddMes 0 20190514 0 1 108 20190514 ... 26.9 0.0 4.1 1.6 0.0 1 20190519 18000 1 108 20190519 ... 21.6 22.0 2.7 1.2 0.0 2 20190521 50000 4 108 20190521 ... 23.8 0.0 5.9 2.9 0.0 3 20190522 125000 7 108 20190522 ... 26.5 0.0 5.4 2.4 0.0 4 20190523 222500 13 108 20190523 ... 29.2 0.0 3.5 1.7 0.0 [5 rows x 12 columns] YMD AMT CNT stnId tm ... maxTa sumRn maxWs avgWs ddMes 323 20200424 1092500 51 108 20200424 ... 14.3 0.0 8.2 3.9 0.0 324 20200425 672500 34 108 20200425 ... 17.1 0.0 7.8 3.9 0.0 325 20200426 1123500 55 108 20200426 ... 19.0 0.0 6.5 3.2 0.0 326 20200427 819500 45 108 20200427 ... 18.3 0.0 5.5 2.8 0.0 327 20200428 950500 45 108 20200428 ... 19.9 0.0 5.5 3.0 0.0 [5 rows x 12 columns] 328 Index(['YMD', 'AMT', 'CNT', 'stnId', 'tm', 'avgTa', 'minTa', 'maxTa', 'sumRn', 'maxWs', 'avgWs', 'ddMes'], dtype='object') YMD AMT maxTa sumRn 0 20190514 0 26.9 0.0 1 20190519 18000 21.6 22.0 2 20190521 50000 23.8 0.0 두 집단 간의 매출액 평균 검정 : t-test YMD 0 AMT 0 maxTa 0 sumRn 0 dtype: int64 0 False 1 True 2 False 3 False 4 False ... 323 False 324 False 325 False 326 False 327 False Name: sumRn, Length: 328, dtype: bool C:\Users\JEONGYEON\Desktop\Python\Python\pro1\pack8anal2\t-test3.py:44: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy data['rain_yn'] = (data['sumRn'] > 0).astype(int) # rain_yn 칼럼을 int type으로 추가, 비가 오면 1, 안 오면 0 YMD AMT maxTa sumRn rain_yn 0 20190514 0 26.9 0.0 0 1 20190519 18000 21.6 22.0 1 2 20190521 50000 23.8 0.0 0 평균은 761040.2542372881 757331.5217391305 0.056049469858407974 0.882739782333374 0.7123452333011173 Ttest_indResult(statistic=0.10109828602924716, pvalue=0.919534587722196)
'Python 데이터 분석' 카테고리의 다른 글
서로 대응인 두 집단의 평균 차이 검정(paired samples t-test) 예제 (0) 2022.11.08 Python 데이터분석 기초 35 - 서로 대응인 두 집단의 평균 차이 검정(paired samples t-test) (0) 2022.11.08 Python 데이터분석 기초 34 - 서로 독립인 두 집단의 평균 차이 검정(independent samples t-test), 정규성, 등분산성 (0) 2022.11.08 one-sample t 검정 : 문제3 (0) 2022.11.08 one-sample t 검정 : 문제2(데이터 공백제거, to_numeric) (0) 2022.11.08