본문 바로가기
Python/데이터 분석

[Python] 데이터 집계

by Mr.Han 2024. 9. 2.

데이터 집계


분포 및 요약 통계

- 데이터명.describe() : 컬럼별 값의 갯수, 평균, 표준편차, 최솟값, 최댓값, 사분위수 출력

df.describe()

 

대푯값

- min() : 최솟값
- max() : 최댓값
- mean() : 평균
- median() : 중앙값
- std() : 표준편차
- var() : 분산
- quantile(분위) : 분위수
df.min(numeric_only=True) # 숫자형만

 

df.quantile(0.25, numeric_only=True) # 1분위수

 

변수의 상관관계 확인

- 데이터명.corr()

df.corr(numeric_only=True)

 

# 시각화 참고
import seaborn as sns
import matplotlib.pyplot as plt

sns.heatmap(df.corr(numeric_only=True), annot=True)
plt.show()

 

Groupby

- 같은 값을 한 그룹으로 묶어서 여러가지 연산 및 통계를 구할 수 있음.

- 데이터명.groupby(컬럼명).연산및통계함수

 

1) 단일 그룹

- count() : 행의 갯수
- nunique() : 행의 유니크한 갯수
- sum() : 합
- mean() : 평균
- min() : 최솟값
- max() : 최댓값
- std() : 표준편차
- var() : 분산
df.groupby('Pclass').count()

 

df.groupby('Pclass').nunique()

 

df.groupby('Pclass').mean(numeric_only=True)

 

# 특정 열만
df.groupby('Pclass')[['Survived', 'Age']].mean()

 

2) 다중 그룹

df.groupby(['Sex', 'Pclass']).mean(numeric_only=True)

 

# 여러 개의 통계값
import numpy as np

df.groupby(['Sex', 'Pclass'])[['Survived', 'Age', 'SibSp']].aggregate([np.mean, np.min, np.max])

 

 

 

 

데이터 재구조화


crosstab

- 범주형 데이터를 비교분석할 때 유용

- pd.crosstab(index=행, columns=열, margins=True/False, normalize=True/False)

 

1) 범주별 갯수 구하기

- pd.crosstab(행, 열)

pd.crosstab(df['Sex'], df['Survived'])

 

2) 범주별 비율 구하기

- normalize = 'all' : 전체 합이 100%
- normalize = 'index' : 행별 합이 100%

- normalize = 'columns' : 열별 합이 100%

pd.crosstab(df['Sex'], df['Survived'], normalize='all')
pd.crosstab(df['Sex'], df['Survived'], normalize='index')

# 합계 컬럼 생성
pd.crosstab(df['Sex'], df['Survived'], normalize='columns', margins=True)

 

3) 다중 인덱스, 다중 컬럼의 범주표 구하기

pd.crosstab(index=[df['Sex'], df['Pclass']], columns=df['Survived'], normalize='columns')

 

피벗 테이블

- 인덱스별, 컬럼별 값의 연산을 할 수 있음.
- pd.pivot_table(데이터명, index=, columns=, values=, aggfunc=)

 

1) 단일 인덱스, 단일 컬럼, 단일 값

pd.pivot_table(df, index='Sex', columns='Pclass', values='Survived', aggfunc='mean')

 

pd.pivot_table(df, index='Sex', columns='Survived', values='Age', aggfunc='mean', margins=True)
# margins=True : 행과 열 전체의 값

 

pd.pivot_table(df, index='Sex', columns='Survived', values='Age', aggfunc=['max', 'min', 'mean'])

 

2) 다중 인덱스, 다중 컬럼, 다중 값

pd.pivot_table(df, index=['Sex', 'Pclass'], columns=['Survived','Embarked'], values=['Age', 'Fare'], aggfunc= 'mean')

 

stack, unstack, melt

1) stack, unstack

- stack : 컬럼 레벨에서 인덱스 레벨로 데이터프레임 변경
- unstack : 인덱스 레벨에서 컬럼 레벨로 데이터프레임 변경
 
* 기본 pivot table
pivot = pd.pivot_table(df, index=['Sex', 'Pclass'], values=['Survived', 'Fare'], aggfunc=['mean', 'median', 'sum'])

 

pivot.stack(0) # 컬럼의 첫번째 레벨을 인덱스로 내림.

 

pivot.unstack(1) # 인덱스의 두번째 레벨을 컬럼으로 쌓음.

 

2) melt

- pd.melt(데이터명, id_vars=기준컬럼)
- 언피벗??

 

* 기본 데이터프레임

 

pd.melt(data, id_vars=['name'])

 

pd.melt(data, id_vars=['name'], var_name='type', value_name='val') # 컬럼 이름 바꿈.

'Python > 데이터 분석' 카테고리의 다른 글

[Python] 데이터 전처리  (2) 2024.09.01