반응형
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
'Python' 카테고리의 다른 글
[Python] 데이터 프레임(Data Frame) 심화_5 (0) | 2019.10.19 |
---|---|
[Python] 데이터 프레임(Data Frame) 심화_3 (0) | 2019.10.16 |
[Python] 데이터 프레임(Data Frame) 심화_2 (0) | 2019.10.16 |
[Python] 데이터 프레임(Data Frame) 심화_1 (0) | 2019.10.11 |
[Python] 데이터 사전 처리(Preprocessing)_4 (0) | 2019.10.10 |