index 시 60이하 60~85 85초과 0 서울 0 0 0 1 서울 54 2 0 2 부산 0 0 0 3 부산 577 735 142 4 대구 0 0 0 5 대구 143 1437 44 6 대전 0 0 0 7 대전 782 1 0 위의 데이터 프레임 group by() 활용해서
'시'
컬럼을 기준으로 합친 데이터 프레임을 만들어보자. 나머지 컬럼의 값은 합산으로 적용df_cp = df.copy() # loc함수 사용으로 [인덱스열은 전부, 60이하 ~ 85 초과]의 위치에서 # '시' 컬럼을 기준으로 그룹 grouped = df.loc[:, '60이하' : '85초과'].groupby(df['시']) # 그룹 지어진 데이터 에서 '시' 기준 [60이하 ~ 85 초과] 합산 df_grouped = grouped.sum() df_grouped.head()
out :
시 60이하 60~85 85초과 대구 143 1437 44 대전 782 1 0 부산 577 735 142 서울 54 2 0 시가 인덱스 컬럼으로 자리잡고 있는 다음과 같은 형태로 출력할 수 있다.
[참고]https://rfriend.tistory.com/383
시 60이하 60~85 85초과 대구 143 1437 44 대전 782 1 0 부산 577 735 142 서울 54 2 0 다음과 같은 데이터를 나는
서울 -> 대전 -> 대구 -> 부산
순서로 바꾸려고 한다.# 바꾸고 싶은 순서대로 row list 작성 row = ['서울', '대전', '대구', '부산'] # row list의 순서대로 인덱스 순서 변경 df.reindex(index=row) df.head()
out :
시 60이하 60~85 85초과 서울 54 2 0 대전 782 1 0 대구 143 1437 44 부산 577 735 142 위와 같은 형태로 인덱스가 내가 정한 순서대로 변경된 것을 볼 수 있다.
그 이외의 방법
[참고]https://k-glory.tistory.com/21
# 지역별 미분양수 추출
# 샘플 뽑을 리스트 만들기
sample = []
for i in range(len(df)): # 데이터 길이만큼 반복
sample.append(df.iloc[i].sum()) # 컬럼 구별없이 합산한 데이터 가져오기
sample
#
# out
# [56, 783, 1624, 1454]
일원 카이제곱 검정 실시
from scipy import stats
import numpy as np
# sample의 관측값을 numpy array로 만들어주기
obs = np.array(sample)
# sample의 기댓값 = 모든 샘플의 합 / 샘플의 갯수 -> 즉 평균값
exp = obs.mean()
# sample의 chi-square test
stats.chisquare(obs, exp)
#
# out
# Power_divergenceResult(statistic=x.xxxxxxxx..., pvalue=0.xxxxxxxx..)
카이제곱 검정 numpy로 식 구현
# chi-square 값 계산
chi = 0
for x in obs:
chi += (x - exp)**2 / exp # 카이제곱 식
# chi-square의 Pvalue 값
1 - stats.chi2.cdf(chi, len(obs - 1))
이원 카이제곱
# 다음의 함수는 샘플에 대해 카이제곱을 실시하고
# 카이제곱값, P값, 자유도, 기대값을 리턴해준다.
chi, pvalue, df, exp = stats.chi2_contingency(sample)