[Python pandas] 다수 그룹 별 다수의 변수 간 상관관계 분석 (correlation coefficients with multiple columns by groups)
Python 분석과 프로그래밍/Python 데이터 전처리 2019. 2. 17. 23:30이번 포스팅에서는 다수 그룹 별 다수의 변수 간 쌍을 이룬 상관계수 분석(paired correlation coefficients with multiple columns by multiple groups) 을 하는 방법을 소개하겠습니다.
보통 다수의 변수간의 상관계수를 구할 때는 상관계수 행렬 (correlation matrix)를 하면 되는데요, 이때 '다수의 그룹별 (by multiple groups)'로 나누어서 다수의 변수 간 상관계수를 구하려면 머리가 좀 복잡해집니다.
간단한 예제 데이터셋을 만들어서 예를 들어보겠습니다.
(1) 3개의 그룹 변수, 4개의 연속형 변수를 가진 예제 DataFrame 만들기 |
import numpy as np import pandas as pd
|
'group_1' 변수 내 ('A', 'B' 그룹), 'group_2' 변수 내 ('C', 'D', 'E', 'F' 그룹), 'group_3' 변수 내 ('G', 'H', 'I', 'J', 'K', 'L', 'M', 'N' 그룹) 별로 나누어서 상관계수를 구해보겠습니다.
# making groups group_1 = ['A', 'B']*20 group_2 = ['C', 'D', 'E', 'F']*10 group_3 = ['G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']*5;
|
상관계수를 구할 연속형 변수는 'col_1', 'col_2', 'col_3', 'col_4' 라는 4개의 변수를 사용하겠습니다.
df = pd.DataFrame({'group_1': group_1, 'group_2': group_2, 'group_3': group_3, 'col_1': np.random.randn(40), 'col_2': np.random.randn(40), 'col_3': np.random.randn(40), 'col_4': np.random.randn(40)})
|
df.sort_values(by=['group_1', 'group_2', 'group_3'], axis=0)
|
(2) 그룹별 두 개 변수 간 상관계수를 구하는 사용자 정의 함수 |
예제 데이터셋이 준비가 되었으니 이제 '그룹별로 두 개 변수 간 상관계수를 구하는 사용자 정의 함수 (a user-defined function of correlation coefficients with paired variables by groups)' 를 정의해보겠습니다.
# a user-defined function of correlation coefficients with paired variables by groups def corr_group(df, var_1, var_2, group_list): # correlaiton fuction with 2 variables corr_func = lambda g: g[var_1].corr(g[var_2])
# GroupBy operator grouped = df.groupby(group_list)
# calculate correlation coefficient by Group corr_coef_df = pd.DataFrame(grouped.apply(corr_func), columns=['corr_coef'])
# add var_1, var_2 column names corr_coef_df['var1'] = var_1 corr_coef_df['var2'] = var_2
return corr_coef_df
|
(3) 다수 그룹별 다수 변수 간 두개 씩 쌍을 이루어 상관계수 구하기 |
'group_1', 'group_2', 'group_3' 의 3개의 그룹 변수로 만들어진 모든 경우의 수의 그룹 조합에 대해서, 'col_1', 'col_2', 'col_3', 'col_4'의 4개 연속형 변수로 2개씩 쌍(pair)을 이루어 만들어진 모든 경우의 수의 조합, 즉, ('col_1', 'col_2'), ('col_1', 'col_3'), ('col_1', 'col_4'), ('col_2', 'col_3'), ('col_2', 'col_4'), ('col_3', 'col_4') 의 4C2=6개의 조합별 상관계수를 구해보겠습니다.
이때 위의 (2)번에서 만들었던 '두 개 쌍의 변수간 상관계수 구하는 사용자 정의함수'인 corr_group() 함수를 사용하여 for loop 문으로 6개의 연속형 변수의 조합별로 상관계수를 구한 후에, corr_coef_df_all 데이터 프레임에 append 해나가는 방식을 사용하였습니다.
# blank DataFrame corr_coef_df_all = pd.DataFrame()
# group by list group_list = ['group_1', 'group_2', 'group_3'] # column lists for correlation matrix col_list = ['col_1', 'col_2', 'col_3', 'col_4'] # get all cominations of col_list with length 2 from itertools import combinations comb = combinations(col_list, 2) # calculate correlation coefficients pair-wise for var in list(comb): corr_tmp = corr_group(df, var[0], var[1], group_list) corr_coef_df_all = corr_coef_df_all.append(corr_tmp) # result corr_coef_df_all[['var1', 'var2', 'corr_coef']]
|
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요. :-)
'Python 분석과 프로그래밍 > Python 데이터 전처리' 카테고리의 다른 글
[Python Numpy] 배열에 차원 추가하기 (Adding Dimensions to a Numpy Array) (2) | 2019.02.24 |
---|---|
[Python Numpy] 배열에서 0보다 작은 수를 0으로 변환하는 방법 (0) | 2019.02.21 |
[Python pandas] 그룹 별 무작위 표본 추출 (random sampling by group) (0) | 2018.12.26 |
[Python pandas] 그룹 별 선형회귀모형 적합하기 (Group-wise Linear Regression) (0) | 2018.12.25 |
[Python pandas] 그룹 별 변수 간 상관관계 분석 (correlation with columns by groups) (0) | 2018.12.24 |