-
[Pandas] Stat series를 dataframe으로 바꾸는법개발 이야기/TIL 2024. 3. 10. 16:00
최근에 통계 관련 scipy를 import해서 사용하던 중에 해당 결과를 dataframe으로 바꾸어서 이것저것 다루고 싶은데 여러 어려움을 겪다가 드디어 알아낸 방법을 간단히 작성해보려고 한다.
아래의 stackoverflow와 gpt를 열심히 괴롭혀서 알아낸 방법이다.
Problem: <class 'statsmodels.iolib.table.SimpleTable'>은 다루기가 힘들다!
Solve: Datafame으로 바꾸자(pd.read_html이용)
pd.read_html은, pandas dataframe으로 html문서를 읽는 함수이다. 이 함수는 HTML 문자열을 읽어서 표 형식의 데이터를 파싱하고, dataframe으로 바꾸어준다.
이때 각 인자는 다음과 같다.
- results_as_html: HTML 형식의 표 데이터를 포함하는 문자열입니다. 이 문자열은 HTML 테이블로 구성되어야 하며, 여러 테이블이 포함된 경우 첫 번째 테이블만을 반환합니다.
- header: 결과 DataFrame에서 열 이름으로 사용할 행의 인덱스입니다. 예를 들어, header=0으로 설정하면 첫 번째 행이 열 이름으로 사용됩니다. 기본값은 0이며, 행 인덱스를 사용하지 않을 경우 None으로 설정할 수도 있습니다.
- index_col: 결과 DataFrame에서 인덱스로 사용할 열의 인덱스입니다. 예를 들어, index_col=0으로 설정하면 첫 번째 열이 인덱스로 사용됩니다. 기본값은 None으로, 인덱스를 사용하지 않을 경우에는 인덱스를 자동으로 생성합니다.
이제 간단히 사용 코드를 봐보자.
import pandas as pd import numpy as np from scipy.stats import f_oneway from statsmodels.stats.multicomp import MultiComparison # 예시 데이터프레임 생성 data = {'TH0': [1, 1, 1, 1, 2, 2, 2, 2], 'sp': [0, 0, 1, 1, 0, 0, 1, 1], 'cost': [10, 15, 220, 225, 30, 35, 200, 222]} df_param = pd.DataFrame(data) # 새로운 열을 저장할 빈 리스트 초기화 # 각 TH 내에서 sp별로 Turkey HSD를 통해 사후검정 실행하고, 통계적으로 유의미한 sp들로 이루어진 리스트 생성 for th, group_data in df_param.groupby('TH0'): significant_sps = [] # TH 내에서 sp를 기준으로 데이터 그룹화 grouped = group_data.groupby('sp') # 각 그룹에 대해 Turkey HSD 실행 sp_list = [] for sp, group in grouped: sp_list.append(group['cost'].values) # Turkey HSD 실행 mc = MultiComparison(group_data['cost'], group_data['sp']) result = mc.tukeyhsd() # datfame으로 변경 print(result.summary()) results_summary = result.summary() results_as_html = results_summary.as_html() result_df = pd.read_html(results_as_html, header=None, index_col=None)[0] print(type(result_df)) print(result_df.columns)
코드의 윗부분은 Anova의 사후검정 중 하나인 Turkey HSD를 사용하는 코드로, 현재는 설명을 생략한다.
주요한 부분은 바로 아래의 3줄이다. 이 3줄을 통해 데이터를 dataframe 형태로 다룰 수 있다!!!
results_summary = result.summary() results_as_html = results_summary.as_html() result_df = pd.read_html(results_as_html, header=None, index_col=None)[0]
'개발 이야기 > TIL' 카테고리의 다른 글
[Error] github에 공개된 모델을 돌려보는 법(sh, window multi process error) (0) 2024.04.25 [Colab] 패키지 영구 설치하기 & 문제점 (0) 2024.03.27 LSTM(Long short term memory) (0) 2023.08.07 RNN(recurrent neural network) (0) 2023.08.07 TIL 파이썬으로 조합과 순열 구하기 (0) 2023.02.01