본문 바로가기

Python 파이썬

파이썬 데이터프레임 집계

데이터프레임 집계

# 타이타닉 데이터 불러오기
import pandas as pd
import numpy as np
import seaborn as sns

titanic = sns.load_dataset(('titanic'))

# # survived, pclass, sex, age, embarked 컬럼만 조회할 수 있는 데이터 프레임 생성
df = titanic[['survived','pclass','sex','age','fare']]

df

=> titanic 데이터에서 survived, pclass, sex, age, fare 데이터만 조회할 수 있는 데이터프레임 생성

 

데이터프레임 데이터 형태별 집계 방법
범주형 데이터 갯수, 최빈값
연속형 데이터 합, 평균, 최댓값, 최솟값

 

# 합
print('합')
print(df['fare'].sum())
print('-'*20)
# 평균
print('평균')
print(df['fare'].mean())
print('-'*20)
# 최댓값
print('최댓값')
print(df['fare'].max())
print('-'*20)
# 최솟값
print('최솟값')
print(df['fare'].min())


28693.9493
--------------------
평균
32.2042079685746
--------------------
최댓값
512.3292
--------------------
최솟값
0.0

=> 데이터프레임 df의 컬럼 fare에 대한 집계값(합, 평균, 최댓값, 최솟값) 출력

=> fare 데이터는 연속형 데이터임

 

- groupby() 사용하여 집계

 

1) 성별(sex)에 따른 요금(fare) 총합

# groupby()
df.groupby(by='sex', as_index=False)[['fare']].sum()

=> 성별에 따른 요금 총합

=> 여성 탑승자의 요금 총합은 13967, 남성 탑승자의 요금 총합은 14727이다.

=> by='sex' : 성별로 그룹화하겠다.

=> as_index = False : 그룹화 기준(sex)을 인덱스로 설정하지 않겠다.

=> [['fare']] : 대괄호[] 를 하나만 작성하면 시리즈 형태로 출력되기 때문에, 2개를 작성하여 데이터프레임 형태로 출력했다.

=> [['fare']].sum() : fare의 합계를 출력하겠다.

 

2) 성별(sex)에 따른 요금(fare), 연령(age) 평균

# groupby()
df.groupby(by='sex', as_index=False)[['fare', 'age']].mean()

=> 성별에 따른 요금과 연령의 평균

=> 여성 탑승자의 평균 요금은 44, 평균 연령은 28 // 남성 탑승자의 평균 요금은 26, 평균 연령은 31이다.

=> by='sex' : 성별로 그룹화하겠다.

=> as_index = False : 그룹화 기준(sex)을 인덱스로 설정하지 않겠다.

=> [['fare', 'age']].sum() : fare, age의 평균을 출력하겠다. (여러 열 집계 가능)

 

 

** 집계를 통해, 그래프를 그려 가시성을 좋게 할 수 있다.

 

# groupby()
a = df.groupby(by='sex', as_index=False)[['fare']].sum()
a.plot(kind='bar')

=> 0(female)이 1(male)보다 요금 총합이 적다는 것을 확인할 수 있다.

 

- value_counts() 사용하여 집계

 

# 남자, 여자별 데이터 수
df['sex'].value_counts()

=> 남자는 몇명, 여자는 몇명인지 확인할 수 있음

 

# 시각화
df['sex'].value_counts().plot(kind='bar')

=> 타이타닉에는 남자가 여자보다 더 많이 탑승했다는 것을 확인할 수 있다.