🔥알림🔥
① 테디노트 유튜브 -
구경하러 가기!
② LangChain 한국어 튜토리얼
바로가기 👀
③ 랭체인 노트 무료 전자책(wikidocs)
바로가기 🙌
④ RAG 비법노트 LangChain 강의오픈
바로가기 🙌
⑤ 서울대 PyTorch 딥러닝 강의
바로가기 🙌
#04-Pandas(판다스) 통계
이번 에피소드에서는 Pandas 데이터프레임(DataFrame)의 가장 유용하면서 탐색적 데이터 분석(Exploratory Data Analysis)에서 가장 유용하게 사용되는 기능인 통계 입니다.
numpy
를 이미 익히셨다면, Pandas의 통계 함수를 사용함에 있어 크게 이질감이 없을 겁니다. 거의 사용방법이 같거든요.
왜냐하면 Pandas가 numpy
패키지 기반으로 만들어졌기 때문에 그렇습니다.
Pandas에서 제공하는 모든 통계 함수에 대해서는 굳이 알 필요없습니다. 자주 사용되는 통계 함수를 위주로 알아보겠습니다.
모듈 importPermalink
from IPython.display import Image
import numpy as np
import pandas as pd
import seaborn as sns
데이터셋 로드Permalink
df = sns.load_dataset('titanic')
df.head()
컬럼(columns) 설명
- survivied: 생존여부 (1: 생존, 0: 사망)
- pclass: 좌석 등급 (1등급, 2등급, 3등급)
- sex: 성별
- age: 나이
- sibsp: 형제 + 배우자 수
- parch: 부모 + 자녀 수
- fare: 좌석 요금
- embarked: 탑승 항구 (S, C, Q)
- class: pclass와 동일
- who: 성별과 동일
- adult_male: 성인 남자 여부
- deck: 데크 번호 (알파벳 + 숫자 혼용)
- embark_town: 탑승 항구 이름
- alive: 생존여부 (yes, no)
- alone: 혼자 탑승 여부
- count: 데이터 개수
- mean: 평균
- std: 표준편차
- min: 최솟값
- max: 최대값
df.describe()
문자열 컬럼에 대한 통계표도 확인할 수 있습니다.
- count: 데이터 개수
- unique: 고유 데이터의 값 개수
- top: 가장 많이 출현한 데이터 개수
- freq: 가장 많이 출현한 데이터의 빈도수
df.describe(include='object')
count() - 개수Permalink
데이터의 개수
# DataFrame 전체의 개수를 구하는 경우
df.count()
# 단일 column의 데이터 개수를 구하는 경우
df['age'].count()
mean() - 평균Permalink
데이터의 평균
# DataFrame 평균
df.mean()
# Column 평균
df['age'].mean()
Mean - 조건별 평균Permalink
성인 남성의 나이의 평균 구하기
condition = (df['adult_male'] == True)
df.loc[condition, 'age'].mean()
df.head()
# 코드를 입력해 주세요 (데이터 개수 구하기)
condition1 = (df['fare'] >= 30) & (df['fare'] < 40)
condition2 = (df['pclass'] == 1)
df.loc[condition1 & condition2, 'age'].count()
# 코드를 입력해 주세요 (나이 평균 구하기)
df.loc[condition1 & condition2, 'age'].mean()
skipna=True
옵션Permalink
기술 통계 함수에서는 skipna=True
가 기본으로 설정 되어 있습니다.
만약, skipna=False
로 설정하게 된다면, NaN 값이 있는 column은 NaN 값으로 출력 됩니다.
# skipna=False를 지정한 경우
df.mean(skipna=False)
# skipna=True를 지정한 경우
df.mean(skipna=True)
median() - 중앙값Permalink
데이터의 중앙 값을 출력 합니다. 데이터를 오름차순 정렬하여 중앙에 위치한 값입니다.
이상치(outlier)가 존재하는 경우, mean()
보다 median()
을 대표값으로 더 선호합니다.
pd.Series([1, 2, 3, 4, 5]).median()
pd.Series([4, 5, 1, 2, 3]).median()
짝수개의 데이터가 있는 경우에는 가운데 2개 중앙 데이터의 평균 값을 출력 합니다.
pd.Series([1, 2, 3, 4, 5, 6]).median()
나이의 평균(mean)과 중앙값(median)은 약간의 차이가 있음을 확인할 수 있습니다.
print(f"나이 평균: {df['age'].mean():.5f}\n나이 중앙값: {df['age'].median()}\n차이: {df['age'].mean() - df['age'].median():.5f}")
sum() - 합계Permalink
데이터의 합계입니다. 문자열 column은 모든 데이터가 붙어서 출력될 수 있습니다.
df.sum()
단일 column에 대한 합계 출력
df['fare'].sum()
cumsum() - 누적합, cumprod() - 누적곱Permalink
누적되는 합계를 구할 수 있습니다.
df['age'].cumsum()
누적되는 곱도 구할 수 있으나, 일반적으로 값이 너무 커지므로 잘 활용하지는 않습니다.
df['age'].cumprod()
var() - 분산Permalink
# 평균
fare_mean = df['fare'].values.mean()
# 분산
my_var = ((df['fare'].values - fare_mean) ** 2).sum() / (df['fare'].count() - 1)
my_var
df['fare'].var()
std() - 표준편차Permalink
분산(var)의 제곱근
np.sqrt(df['fare'].var())
np.sqrt(my_var)
min() - 최소값, max() - 최대값Permalink
# 최소값
df['age'].min()
# 최대값
df['age'].max()
quantile() - 분위Permalink
Quantile이란 주어진 데이터를 동등한 크기로 분할하는 지점을 말합니다
10%의 경우 0.1을, 80%의 경우 0.8을 대입하여 값을 구합니다.
# 10% quantile
df['age'].quantile(0.1)
# 60% quantile
df['age'].quantile(0.8)
unique() - 고유값, nunique() - 고유값 개수Permalink
고유값과 고유값의 개수를 구하고자 할 때 사용합니다.
unique()
df['who'].unique()
nunique(): 고유값의 개수를 출력합니다.
df['who'].nunique()
mode() - 최빈값Permalink
최빈값은 가장 많이 출현한 데이터를 의미합니다.
df['who'].mode()
카테고리형 데이터에도 적용 가능합니다.
df['deck'].mode()
corr() - 상관관계Permalink
corr()
로 컬럼(column)별 상관관계를 확인할 수 있습니다.
- -1~1 사이의 범위를 가집니다.
- -1에 가까울 수록 반비례 관계, 1에 가까울수록 정비례 관계를 의미합니다.
df.corr()
특정 컬럼에 대한 상관관계를 확인할 수 있습니다.
df.corr()['survived']
댓글남기기