1. 평균 막대 그래프
🐰 평균 막대 그래프는 평균값의 크기를 막대 길이로 표현한 그래프
🐰 여러 집단의 평균 값을 비교할 때 평균 막대 그래프를 주로 사용
1) 데이터 가져오기
📌 mpg 데이터에서 drv(구동방식)별 hwy(고속도로 연비) 평균을 나타낸 막대 그래프를 만들기
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
mpg = pd.read_csv('../input/mpg.csv')
2) 집단별 평균표 생성
✏️ 평균 막대 그래프를 만들려면 집단별 평균값을 담은 데이터 프레임이 필요
✏️ '구동 방식별 고속도로 연비 평균'을 담은 데이터 프레임을 생성
# agg(mean_hwy=('hwy', 'mean') -> mean_hwy열을 생성하면서 'hwy'열의 평균(mean()) 값을 입력
df_mpg = mpg.groupby('drv').agg(mean_hwy=('hwy', 'mean'))
df_mpg
📍 집단을 나타낸 변수 drv가 인덱스로 바뀌어 mean_hwy 아래에 표시
📍 seaborn으로 그래프를 만들려면 값이 변수에 담겨 있어야 함
➡️ 인덱스가 아니라 열로 만들어져야 함
📍 변수를 인덱스로 바꾸지 않고 원래대로 유지하려면 df.groupby()에 as_index = False를 입력
df_mpg = mpg.groupby('drv', as_index=False).agg(mean_hwy=('hwy', 'mean'))
df_mpg
3) 그래프 만들기
✏️ 생성된 데이터 프레임을 이용해 막대 그래프 생성
sns.barplot(data=df_mpg, x='drv', y='mean_hwy')
plt.show()
📍 data : 데이터 프레임을 지정
📍 x : x축에 범주를 나타낸 변수
📍 y : y축에 평균값을 나타낸 변수
4) 크기 순으로 정렬
✏️ 막대 정렬 순서는 그래프를 만드는데 사용한 데이터 프레임의 행 순서에 따라 정해짐
✏️ 앞에서 출력한 그래프를 보면 drv 막대가 4, f, r 순으로 정렬
✏️ 크기 순으로 정렬하려면 그래프를 만들기 전에 df.sort_values()를 이용해 데이터 프레임을 내림차순으로 정렬
# 데이터 프레임 정렬하기
df_mpg = df_mpg.sort_values('mean_hwy', ascending=False)
# 막대 그래프 만들기
sns.barplot(data=df_mpg, x='drv', y='mean_hwy')
plt.show()
2. 빈도 막대 그래프
🐰 빈도 막대 그래프는 값의 빈도(개수)를 막대 길이로 표현한 그래프
🐰 여러 집단의 빈도를 비교할 때 빈도 막대 그래프를 자주 사용
1) 집단별 빈도표 만들기
✏️ 빈도 막대 그래프를 만들려면 집단별 빈도를 담은 데이터 프레임이 필요
✏️ df.agg()에 빈도를 구하는 함수 count를 적용해 '구동 방식 별 빈도'를 담은 데이터 프레임을 만듦
# 집단별 빈도표 만들기
df_mpg = mpg.groupby('drv', as_index=False).agg(n=('drv', 'count'))
df_mpg
'''
drv n
0 4 103
1 f 106
2 r 25
'''
2) 그래프 만들기
# 막대 그래프 만들기
sns.barplot(data=df_mpg, x='drv', y='n')
plt.show()
✏️ sns.barplot() 대신 sns.countplot()을 이용하면 원데이터를 바로 이용해 빈도 막대 그래프를 만들 수 있음
# 빈도 막대 그래프 만들기
sns.countplot(data=mpg, x='drv')
plt.show()
📍 두 그래프는 x축의 순서가 다름
📍 sns.barplot()에 사용한 df_mpg와 sns.countplot()에 사용한 mpg의 drv 값 순서가 다르기 때문
✏️ 데이터 프레임에서 변수의 값 순서는 데이터 프레임에 입력된 행의 순서에 따름
➡️ mpg의 drv는 0~6행이 f, 7~17행이 4, 18~27이 r로 되어 있으므로 값의 순서는 f, 4, r
➡️ 변수의 고유값을 출력하는 unique()를 이용하면 값의 순서를 알 수 있음
mpg['drv'].unique() # ['f', '4', 'r']
# df_mpg의 drv는 값의 순서가 알파벳 순으로 되어 있음.
# groupby()를 이용해 데이터 프레임을 요약하면 값의 순서가 알파벳 순으로 바뀌기 때문
df_mpg['drv'].unique() # ['4', 'f', 'r']
3) 막대 정렬
✏️ sns.countplot()으로 만든 그래프의 막대를 정렬하려면 order에 원하는 순서로 값을 입력
# 4, f, r 순으로 막대 정렬
sns.countplot(data=mpg, x='drv', order=['4', 'f', 'r'])
plt.show()
✏️ sns.countplot()의 order에 mpg['drv'].value_counts().index를 입력하면 drv의 빈도가 높은 순으로 막대를 정렬
# drv의 값을 빈도가 높은 순으로 출력
mpg['drv'].value_counts().index
# Index(['f', '4', 'r'], dtype='object', name='drv')
# drv 빈도 높은 순으로 막대 정렬
sns.countplot(data=mpg, x='drv', order=mpg['drv'].value_counts().index)
plt.show()
[ 내용 참고 : IT 학원 강의 및 위키독스 ]
'Programming Language > Python' 카테고리의 다른 글
[Python] Seaborn | 산점도 그래프 - scatter plot (0) | 2024.03.15 |
---|---|
[Python] Seaborn | 산점도 그래프 - Strip plot (0) | 2024.03.15 |
[Python] Seaborn 라이브러리 | 시본 막대 그래프 - sns.barplot() / add_subplot() (2) | 2024.03.14 |
[Python] Matplotlib | 한글 폰트 사용, 파이 그래프 (0) | 2024.03.14 |
[Python] Matplotlib | 히스토그램 (Histogram) (0) | 2024.03.14 |