programming/파이썬으로 배우는 통계학

[파이썬/통계] Python에 의한 기술 통계 : 다변량 데이터와 pandas 데이터 프레임

Jofresh 2023. 5. 5. 22:26
728x90
반응형

안녕하세요! 조신선입니다.

 

오늘은 다변량 데이터와 pandas 데이터 프레임에 대해서 포스팅하겠습니다.

 

오늘도 역시나 쥬피터(vscode확장자 : ipynb) 환경으로 시작하겠습니다.

 

라이브러리 임포트

import pandas as pd
import scipy as sp

%precision 3

그룹별 통계량

예시 코드에 쓰일 데이터 파일을 이미지로 공유드리겠습니다.

아래 코드는 fish_multi 데이터 프레임을 'species' 열을 기준으로 그룹핑한 뒤 각 그룹별로 열의 평균 값을 계산하는 코드입니다. groupby 메소드로 'species' 열을 기준으로 데이터 프레임을 그룹핑한 결과를 group 변수에 저장하고, mean 메소드를 이용해 각 그룹별로 열의 평균 값을 계산하여 출력합니다.

 

아래 코드는 fish_multi 데이터프레임에서 species 열을 기준으로 그룹화한 후, 각 그룹의 표준편차를 구하는 코드입니다.

group.std(ddof=1) 함수는 각 그룹 내 데이터의 표준편차를 계산하는 함수입니다. ddof=1은 자유도를 1로 설정하겠다는 의미로, 표본에서 계산한 표준편차를 반환합니다.

따라서, fish_multi 데이터프레임에서 species별로 그룹화한 후 각 그룹의 표준편차를 출력합니다.

 

group.describe() 함수는 그룹별로 데이터의 개수(count), 평균(mean), 표준편차(std), 최소값(min), 사분위수(25%, 50%, 75%), 최대값(max) 등을 요약해서 보여줍니다. 반환되는 값은 데이터프레임 형태입니다.

 

크로스 집계표

예시 코드에 쓰일 데이터 파일

 


아래 코드는 판다스(Pandas)의 pivot_table 함수를 사용하여, 신발 가게에서 각 색깔별로 판매된 신발의 수를 구하는 코드입니다.

pivot_table 함수는 데이터프레임에서 데이터를 선택하여 테이블 형태로 재배치하는 기능을 제공합니다. 위 코드에서는 다음과 같이 pivot_table 함수를 사용하였습니다.

 

 

공분산을 계산하기 위한 데이터 가져오기

예시 코드에 쓰일 데이터 파일

아래 코드에서는 cov_data 데이터 프레임에서 "x"와 "y" 열을 가져와서, 각각 변수 x와 y에 할당합니다. 그 후에는 데이터 개수 N, 변수 x와 y의 평균을 각각 mu_x와 mu_y에 구합니다.

아래 코드는 두 변수 x와 y 간의 공분산(covariance)을 계산하는 코드입니다.

먼저, x와 y의 평균값인 mu_x와 mu_y를 각각 계산합니다. 그리고 cov_data 데이터프레임의 길이 N을 계산합니다.

그 다음, 공분산의 식인 (xi - mu_x) * (yi - mu_y) 를 모든 데이터에 대해 계산하고 더한 뒤 데이터의 개수 N으로 나눠줌으로써 불편성을 가진 표본공분산(cov_sample)을 계산합니다.

마지막으로, 모든 데이터에 대해 계산하고 더한 뒤 (데이터의 개수 - 1)으로 나눠줌으로써 불편성을 가진 표본공분산(cov)을 계산합니다.

분산 공분산 행렬

아래 코드는 numpy와 scipy 라이브러리의 cov() 함수를 사용하여, 두 변수 x와 y의 불편공분산을 계산하는 코드입니다.

함수의 인수 ddof는 자유도를 나타내며, 1을 주면 불편공분산을 계산하고, 0을 주면 표본공분산을 계산합니다.

따라서 위 코드는 변수 x와 y의 불편공분산을 계산하고, 이를 출력합니다.

피어슨의 적률 상관계수

아래 코드는 x와 y의 분산과 공분산을 이용하여 상관계수를 계산하는 코드입니다.

우선, sp.var 함수를 사용하여 x와 y의 분산을 각각 계산하고, 그 값을 sigma_2_x와 sigma_2_y에 저장합니다.

그리고 위에서 계산한 공분산인 cov와 sigma_2_x, sigma_2_y의 제곱근을 곱하여 상관계수 rho를 계산합니다. 이 값은 -1과 1 사이의 값을 가지며, -1에 가까울수록 강한 음의 상관관계, 1에 가까울수록 강한 양의 상관관계를 나타냅니다. 0에 가까울수록 상관관계가 없다는 것을 의미합니다.

양의 상관관계를 가진다.

아래 코드는 두 변수 간의 표본 상관계수를 계산하는 코드입니다.

우선, sp.var() 함수를 사용하여 각 변수의 표본 분산 sigma_2_x_sample, sigma_2_y_sample을 계산합니다. 이때 ddof 인자를 0으로 설정하여 표본 분산이 아닌 모집단 분산을 계산합니다.

그 다음, cov_sample은 앞서 계산한 표본 공분산을 나타내며, sp.sqrt(sigma_2_x_sample * sigma_2_y_sample)는 각 변수의 표본 표준편차를 곱한 값을 루트 씌운 값입니다. 이를 이용하여 표본 상관계수 r_sample을 계산합니다.

하지만 표본 상관계수는 표본 크기가 작을 때 불안정하므로, 일반적으로는 모집단 상관계수를 추정하기 위해 더 많은 데이터를 수집하는 것이 좋습니다.

 

sp.corrcoef(x, y)는 주어진 두 변수 x와 y의 상관계수(correlation coefficient)를 계산하는 함수입니다. 이때 x와 y는 동일한 길이의 1차원 배열이어야 하며, 두 변수 간의 공분산(covariance)을 이용하여 상관계수를 계산합니다. 반환값은 상관계수 행렬(correlation coefficient matrix)로, 대각성분은 각 변수 자체와의 상관계수이고, 비대각성분은 두 변수 간의 상관계수입니다.

 

728x90
반응형