Open jiheon788 opened 1 year ago
목데이터 특성 파악을 중심으로
import warnings warnings.filterwarnings(action='ignore') import json, pandas as pd import matplotlib.pyplot as plt %matplotlib inline plt.rcParams['font.family'] = 'Malgun Gothic' from statsmodels.tsa.stattools import adfuller from statsmodels.tsa.stattools import kpss with open("public/mock/mockdata.json", encoding='utf-8') as f: js = json.loads(f.read()) df = pd.DataFrame(js['response']).T df.head()
plt.figure(figsize=(40, 20)) plt.subplot(2, 2, 1) plt.pie(df['id'].value_counts(), labels=df['id'].value_counts().index, autopct='%.1f%%') plt.subplot(2, 2, 2) plt.scatter(df['value_area'], df['value_bar']) plt.subplot(2, 2, 3) plt.plot(df['value_area']) plt.xticks(rotation=90) plt.subplot(2, 2, 4) plt.plot(df['value_bar']) plt.xticks(rotation=90) plt.tight_layout() plt.show()
id
value_area
value_bar
ADF 테스트와 KPSS 테스트를 모두 사용하여 시계열의 안정성에 대해 교차 확인할 것입니다.
ADF 테스트는 시계열이 안정적(Stationary)인지 여부를 확인하는데 이용되는 방법입니다.
def adf_test(values): result = adfuller(values) print('ADF Statistics: %f' % result[0]) print('p-value: %f' % result[1]) print('Critical values:') for key, value in result[4].items(): print('\t%s: %.3f' % (key, value)) print('ADF Test: value_area') adf_test(df['value_area']) print('\nADF Test: value_bar') adf_test(df['value_bar'])
ADF Test: value_area ADF Statistics: -11.450498 p-value: 0.000000 Critical values: 1%: -3.498 5%: -2.891 10%: -2.583 ADF Test: value_bar ADF Statistics: -5.163666 p-value: 0.000010 Critical values: 1%: -3.502 5%: -2.893 10%: -2.583
시계열이 평균 또는 선형 추세 주변에 고정되어 있는지 또는 단위 루트(unit root)로 인해 고정되지 않은지 확인합니다.
def kpss_test(values): statistic, p_value, n_lags, critical_values = kpss(values) print(f'KPSS Statistic: {statistic}') print(f'p-value: {p_value}') print(f'num lags: {n_lags}') print('Critial Values:') for key, value in critical_values.items(): print(f' {key} : {value}') print('KPSS Test: value_area') kpss_test(df['value_area']) print('\nKPSS Test: value_bar') kpss_test(df['value_bar'])
KPSS Test: value_area KPSS Statistic: 0.06021346300418588 p-value: 0.1 num lags: 12 Critial Values: 10% : 0.347 5% : 0.463 2.5% : 0.574 1% : 0.739 KPSS Test: value_bar KPSS Statistic: 0.22758849425522884 p-value: 0.1 num lags: 12 Critial Values: 10% : 0.347 5% : 0.463 2.5% : 0.574 1% : 0.739
현재 데이터는 여러 지역이 섞여 있습니다. 각 지역별로 구분하여도 안정적인지 확인합니다.
def adf_test_only_p_value(values): result = adfuller(values) print('ADF p-value: %f' % result[1]) def kpss_test_only_p_value(values): statistic, p_value, n_lags, critical_values = kpss(values) print(f'KPSS p-value: {p_value}') for loc in df['id'].value_counts().index: df_by_loc = df[df['id'] == loc] print(f'\n{loc} Test:') adf_test_only_p_value(df_by_loc['value_area']) kpss_test_only_p_value(df_by_loc['value_area'])
성북구 Test: ADF p-value: 0.007769 KPSS p-value: 0.1 강남구 Test: ADF p-value: 0.065291 KPSS p-value: 0.1 노원구 Test: ADF p-value: 0.000026 KPSS p-value: 0.09626532001173367 중랑구 Test: ADF p-value: 0.000000 KPSS p-value: 0.08952778863900929
분석을 통해 파악한 특성은 아래와 같습니다.
자료의 내용을 떠나서, 이런 태도가 그냥 코더와 문제를 해결하려는 사람을 가르는 것 같습니다. 과제에도, 본받는 면에서도 도움이 많이 됩니다. :100:
EDA
0. Setting
1. 시각화
id
의 경우, 성북구가 28%로 조금 더 많고 그 외는 동일하게 분포되어 있습니다.value_area
와value_bar
는 특별한 관계를 가지지 않습니다.2. 시계열 분석
ADF 테스트와 KPSS 테스트를 모두 사용하여 시계열의 안정성에 대해 교차 확인할 것입니다.
2.1. ADF 안정성 테스트
ADF 테스트는 시계열이 안정적(Stationary)인지 여부를 확인하는데 이용되는 방법입니다.
2.2. KPSS 안정성 테스트
시계열이 평균 또는 선형 추세 주변에 고정되어 있는지 또는 단위 루트(unit root)로 인해 고정되지 않은지 확인합니다.
2.3. 지역별 안정성 테스트
현재 데이터는 여러 지역이 섞여 있습니다. 각 지역별로 구분하여도 안정적인지 확인합니다.
3. 결론
분석을 통해 파악한 특성은 아래와 같습니다.
id
의 경우, 성북구가 28%로 조금 더 많고 그 외는 동일하게 분포되어 있습니다.value_area
와value_bar
는 특별한 관계를 가지지 않습니다.용어
Reference