Python

[Python] 데이터 프레임(Data Frame) 심화_4

구루싸 2019. 10. 18. 00:15
반응형
SMALL

지난 학습에 이어 이번 학습 주제는 데이터를 집계, 변환, 필터링하는데 효율적인 그룹 연산입니다

그룹 연산은 데이터를 특정 조건에 의해 분할(split)하고 집계, 변환, 필터링에 필요한 메서드를 적용(apply)하여

그 결과를 결합(combine)하는 3단계의 과정으로 이루어집니다

또한, 여러 개의 열을 기준으로 그룹화할 수 있도록? 멀티 인덱스(MultiIndex)를 지원합니다

...더보기

※ 판다스(Pandas) 기본 집계(aggregation) 함수(Function) 

mean(), max(), min(), sum(), count(), size(), var(), std(), describe(), info(), first(), last() 등

import pandas
import seaborn

def max_min(x) :
    return x.max() - x.min()

def z_score(x) :
    return (x - x.mean()) / x.std()

titanic_data = seaborn.load_dataset('titanic')

# class 열을 기준으로 그룹화
groupby_class = titanic_data.groupby(['class'])
print(groupby_class, end = '\n') # 객체가 출력됨
for key, group in groupby_class :
    print('key : ', key, end = '\n')
    print('count : ', len(group), end = '\n')
    print(group.head(), end = '\n')

# 데이터 집계(aggregation) : 그룹 객체에 다양한 연산을 적용
# 판다스(Pandas) 기본 함수 이용(평균)    
average = groupby_class.mean()
print(average, end = '\n')
mean_fare = groupby_class.fare.mean()
print(mean_fare, end = '\n')

# 사용자 정의 함수 매핑
agg_maxmin = groupby_class.agg(max_min)
print(agg_maxmin.head(), end = '\n')

# 여러 함수를 각 열에 동일하게 적용
agg_all = groupby_class.agg(['min', 'max'])
print(agg_all, end = '\n')

# 각 열마다 다른 함수를 적용
agg_separate = groupby_class.agg({'fare' : ['min', 'max'], 'age' : 'mean'})
print(agg_separate, end = '\n')

# 그룹 연산 데이터 변환 : 표준점수(Standard score) 혹은 표준값(Standard value) 혹은 Z값(Z-value) 혹은 Z점수(Z-score) 구하기
mean_age = groupby_class.age.mean()
std_age = groupby_class.age.std()
for key, group in groupby_class.age :
    zscore = ( group - mean_age.loc[key] ) / std_age.loc[key]
    print('key : ', key, end = '\n')
    print(zscore.head(), end = '\n')
zscore_age = groupby_class.age.transform(z_score)
print(zscore_age.head(), end = '\n')   

# 그룹 객체 필터링
fltr_group = groupby_class.filter(lambda x : len(x) >= 300)
print(fltr_group.head(), end = '\n')

# 그룹 객체에 함수 매핑 : 요약 정보(describe)
aply_group = groupby_class.apply(lambda x : x.describe())
print(aply_group, end = '\n')
 
# 특정 그룹만 선택
print(groupby_class.get_group('First').head(), end = '\n')    

# 멀티 인덱스(Multi Index)
multi_group = titanic_data.groupby(['class', 'sex'])
for key, group in multi_group :
    print('key : ', key, end = '\n')
    print('count : ', len(group), end = '\n')
    print(group.head(), end = '\n')

# 특정 그룹만 선택
print(multi_group.get_group(('First', 'female')).head(), end = '\n')

# 연산 메소드(평균) 적용
average = multi_group.mean()
print(average, end = '\n')

# loc 인덱서 이용 : class 값이 First인 행 선택
print(average.loc['First'], end = '\n')

# xs 인덱서 이용 : sex 값이 female인 행 선택
print(average.xs('female', level = 'sex'), end = '\n') 

오늘 학습은 좀 어려웠네요-_-

머신러닝(Machine Learning)을 본격적으로 학습하다보면 자연스레 익숙해 질 것이라 믿고

이번 학습을 마치겠습니다 ☞ ☜

반응형
LIST