어제 카테고리가 비어있는 곳에 각 월별에 대한 값을 집어넣고, 거기에 상응하는 평균값을 0으로 집어넣었다.
시각화까지는 구현하는데에 큰 문제없이 그냥 값이 없구나 할 정도로 넘길 수 있었는데,
귀무가설을 연도별로 비교했을 때, 큰 차이를 보이지 않는다. 로 잡고 분산분석을 시작했다.
그런데 코드를 여러번 수정해서 얻은 값을 보고 의문이 생겼다. (아래에 따로 다루겠다.)
현재 내가 코드부분을 정확하고 알아보기 쉽게 적용하는 능력이 부족하다.
코드를 보고 해설할 수 있는 능력은 생겼는데 내가 이 부분을 어떻게 해야 되는거지? 하고 적용은 아직 안되는 것 같다.
물론 파이썬 과정을 수강하면 실질적으로 코드 부분을 배운건 2달 남짓.. 2달만에 이 코드를 내 것처럼 구현한다는건 말이 되질 않는다.
그만큼 내가 더 노력을 해야한다는 의미로 받아들이고 코드를 다시한번 읽어봤다.
코드의 문제점
초기의 코드는 다음과 같다.
import pandas as pd
from scipy import stats
Years = [2018, 2019, 2020, 2021]
# 각 연도별 데이터를 Years_data 리스트에 저장합니다.
Years_data = [total_mean_cost_2018, total_mean_cost_2019, total_mean_cost_2020, total_mean_cost_2021]
f_statistics = []
p_values = []
# 각 연도별로 월별 물가에 대한 분산 분석을 수행합니다.
for year, month_data in zip(Years, Years_data):
# 분산 분석을 수행합니다.
f_statistic, p_value = stats.f_oneway(*month_data)
# 결과를 리스트에 저장합니다.
f_statistics.append(f_statistic)
p_values.append(p_value)
# 해당 연도의 결과를 출력합니다.
print(f"{year}년:")
print("F-통계량 (F-statistic):", f_statistic)
print("p-값 (p-value):", p_value)
# 각 연도별로 월별 물가에 대한 귀무 가설을 검정하고 결과를 해석합니다.
alpha = 0.05 # 유의수준 (보통 0.05를 사용)
for year, p_value in zip(Years, p_values):
if p_value < alpha:
print(f"{year}년: 귀무 가설을 기각합니다. 연도별 물가에 차이가 있습니다.")
else:
print(f"{year}년: 귀무 가설을 기각하지 않습니다. 연도별 물가에 큰 차이가 없습니다.")
초기 코드에서 발생한 오류값이다.
ValueError : zero-dimensional arrays cannot be concatenated
현재 내가 가진 데이터 프레임에서는 연도에 대한 값이 없어서, 연도를 따로 리스트로 지정을 한 상태였다,
그리고 어제 시각화에 사용한 각 연도별로 뽑은 전체 지출비용 카테고리의 월별 평균값을 정수형 리스트로 지정한 total_mean_cost 를 활용할 생각이었다.
월별 데이터를 따로 지정을 한게 실수였다.
월별 평균값이 이미 total_mean_cost 에 리스트 형태로 담겨있었기 때문에 이것을 그대로 활용했어야 했다.
바꾼 코드는 다음과 같다.
import pandas as pd
from scipy import stats
# 연도별로 월별 평균 물가 데이터를 비교하여 분산 분석을 수행합니다.
f_statistic, p_value = stats.f_oneway(total_mean_cost_2018, total_mean_cost_2019, total_mean_cost_2020, total_mean_cost_2021)
# 결과를 출력합니다.
print("F-통계량 (F-statistic):", f_statistic)
print("p-값 (p-value):", p_value)
# 유의수준 (일반적으로 0.05)을 기준으로 귀무 가설을 검정합니다.
alpha = 0.05
if p_value < alpha:
print("귀무 가설을 기각합니다. 적어도 하나의 연도에서 연도별 물가에 차이가 있습니다.")
else:
print("귀무 가설을 기각하지 않습니다. 연도별로 물가에 큰 차이가 없습니다.")
F-통계량 (F-statistic): 2.60804020989176
p-값 (p-value): 0.0634534305358464
귀무 가설을 기각하지 않습니다. 연도별로 물가에 큰 차이가 없습니다.
여기서 문제가 생겼다.
위에서 언급했던 의문이 생겼다는 부분이 이 부분이다.
내가 잘못설정을 한건지 이게 맞는건지 헷갈리기 시작했는데 그 이유는 아래의 코드 결과를 보면 이해가 될 것이다.
print(total_mean_cost_2018)
print(total_mean_cost_2019)
print(total_mean_cost_2020)
print(total_mean_cost_2021)
[563737, 481899, 463494, 485475, 561425, 539357, 494075, 578370, 515749, 502549, 474495, 433259] [398538, 487232, 445378, 422618, 487010, 478963, 465747, 511081, 446911, 475645, 458333, 472795] [407989, 438452, 0, 0, 0, 0, 0, 619088, 577591, 494086, 513175, 543347]
[568421, 593278, 0, 0, 0, 608374, 649945, 651897, 634682, 574032, 607384, 640789]
이것처럼 2020년과 2021년의 경우 결측치를 0으로 해뒀기에,
전체적으로 보면 귀무가설이 어떻게 채택이 된거지? 하고 생각이 너무 많아졌다.
월요일에 팀원들과 상의해보고, 의문 해결이 안된다면 강사님께 추가로 여쭤봐야할 것 같다.
해결되면 다음 포스팅으로 작성하고 링크를 추가하겠다.
'프로젝트' 카테고리의 다른 글
분산분석을 진행하면서 발생한 이슈들 해결법 (0) | 2023.09.18 |
---|---|
[박스플롯] labels와 positions 크기 호환 안되는 이슈 (0) | 2023.09.18 |
데이터 결측치로 인한 시각화 오류 및 한글 깨짐 해결하기 (0) | 2023.09.15 |
프로젝트 물가 데이터 통계분석 변경사항 (0) | 2023.09.14 |
데이터 전처리 과정에서 발생한 csv 파일 인코딩 이슈 해결법 (0) | 2023.09.13 |