1. 상자 수염 그래프  Box plot

 

🍒  데이터의 분포 또는 퍼져 있는 형태를 직사각형 상자 모양으로 표현한 그래프
🍒  상자 그림을 보면 데이터가 어떻게 분포하고 있는지 알 수 있기 때문에 평균값만 볼 때 보다 데이터의 특징을 더 자세히 이해할 수 있음

🍒  사람의 나이가 500살, 키가 5미터 등은 표현은 가능하지만 현실적으로 불가능한 값들 이를 이상치, 극단치라고 하는데

      이상치는 효과적인 데이터 분석을 위해 제거해야 함
       ⚡️  이상치를 제거하기 위해 값의 정상 범위를 정하는 방법이 있다.

              ▶️  나이의 경우 121살은 이상치로 보는 것
       ⚡️  다른 방법으로 통계적인 기법을 사용
              ▶️  정규 분포에서 상하위 0.2% 밖의 데이터를 극단적인 값으로 가정하여 제거


 

1) 상자 그림 만들기

 

✏️  sns.boxplot()을 사용하여 그래프 생성

✏️  값을 크기순으로 나열해 4등분했을 때 위치하는 값인 '사분위수'를 이용해 그래프가 생성 된다
✏️  다음은 상자 그림의 요소가 나타내는 값

상자 그림 설명
상자 아래 세로선   아랫수염 하위 0 ~ 25% 내에 해당하는 값
상자 밑면  1사분위수(Q1) 하위 25% 위치 값
상자 내 굵은 선 2사분위수(Q2) 하위 50% 위치 값 (중앙값)
상자 윗면  3사분위수(Q3) 하위 75% 위치 값
상자 위 세로선 윗수염 하위 75 ~ 100% 내에 해당하는 값
상자 밖 가로선  극단치 경계 Q1, Q3 밖 1.5 IQR 내 최대값
상자 밖 점 표식 극단치  Q1, Q3 밖 1.5 IQR을 벗어난 값

  📍  IQR(사분위 범위)은 1사분위수와 3사분위수의 거리(직사각형의 높이)를 뜻하고 '1.5 IQR'은 IQR의 1.5배을 뜻함


 

📁  mpg 데이터를 이용해 x축을 drv, y축을 hwy로 지정하고 '구동 방식별 고속도로 연비'를 상자 그림으로 표현

     📌  mpt.csv : '구동 방식별 고속도로 연비 평균'
     📌  displ(배기량)
     📌  hwy(고속도로 연비)
     📌  drv(구동방식)

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

# 데이터 준비
mpg = pd.read_csv('../input/mpg.csv')

# 그래프 생성
sns.boxplot(data=mpg, x='drv', y='hwy')
plt.show()

 

 

📍  전륜구동(f)은 26 ~ 29 사이의 좁은 범위에 자동차가 모여 있는 뾰족한 형태의 분포
📍  수염의 위아래에 점 표식이 있는 것을 보면 연비가 극단적으로 높거나 낮은 자동차들이 존재
📍  4륜구동(4)은 17 ~ 22 사이에 자동차 대부분이 모여 있는 형태
        ▶️ 중앙값이 상자 밑면에 가까운 것을 보면 낮은 값 쪽으로 치우친 형태의 분포
📍  후륜구동(r)은 17 ~ 24 사이의 넓은 범위에 자동차가 분포
        ▶️ 수염이 짧고 극단치가 없는 것을 보면 자동차 대부분이 사분위 범위에 해당

 

 

 

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1.  산점도

🌻  데이터를 x축과 y축에 점으로 표현한 그래프
🌻  나이와 소득처럼 연속값으로 된 두 변수의 관계를 표현할 때 사용

 

1) 데이터 준비

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

mpg = pd.read_csv('../input/mpg.csv')
mpg.head()
'''
  manufacturer model  displ  year  cyl       trans drv  cty  hwy fl category
0         audi    a4    1.8  1999    4    auto(l5)   f   18   29  p  compact
1         audi    a4    1.8  1999    4  manual(m5)   f   21   29  p  compact
2         audi    a4    2.0  2008    4  manual(m6)   f   20   31  p  compact
3         audi    a4    2.0  2008    4    auto(av)   f   21   30  p  compact
4         audi    a4    2.8  1999    6    auto(l5)   f   16   26  p  compact
'''

 

📍 mpg.csv : '구동 방식별 고속도로 연비 평균'
📍 displ(배기량)
📍 hwy(고속도로 연비)
📍 drv(구동방식)


 

2) 그래프 생성

 

🌻  sns.scatterplot() : 산점도 만들때 사용
🌻  data : 그래프를 그리는 데 사용할 데이터 프레임을 입력
🌻  x, y : x축과 y축에 사용할 변수(데이터 프레임의 열)를  문자 형태로 입력

# x축은 displ, y축은 hwy를 나타낸 산점도 만들기
# mpg 데이터의 displ(배기량) 변수를 x축에, hwy(고속도로 연비) 변수를 y축에 놓음
sns.scatterplot(data=mpg, x='displ', y='hwy')
plt.show()

출력 결과


 

2. 추가 속성 적용

1) 축 범위 설정

 

🌻  축은 기본적으로 최소값에서 최대값까지 모든 범위의 데이터를 표현하도록 설정

🌻  데이터 전체가 아니라 일부만 표현하고 싶을 때는 축 범위를 설정
       ⚡️  sns.set() : 범위를 설정하는데 사용
       ⚡️  xlim, ylim을 이용해 설정

# xlim을 이용해 x축 범위 3~6으로 제한
sns.scatterplot(data=mpg, x='displ', y='hwy').set(xlim=(3, 6))
plt.show()

출력 결과


 

2) 종류별 표식 색깔 변경

 

🌻  hue='변수명'를 이용하면 표식 marker의 색깔을 종류별로 다르게 표현할 수 있음

# drv별로 표식 색깔 다르게 표현
sns.scatterplot(data=mpg, x='displ', y='hwy', hue='drv')
plt.show()

출력 결과


 

3) 그래프 활용

 

📌  Runtime Configuration Parameters = rcParams

       ▶️ 그래프 설정 변경할 때 사용

# 그래프 설정 바꾸기
plt.rcParams.update({'figure.dpi': '150'})  # 해상도, 기본값 72
plt.rcParams.update({'figure.figsize': [8,6]})  # 그림 크기, 기본값 [6,4]
plt.rcParams.update({'font.size': '15'})  # 글자 크기, 기본값 10
plt.rcParams.update({'font.family': 'AppleGothic'})  # 폰트, 기본값 sans-serif

# 여러 요소를 한 번에 설정하려면 {}에 설정값을 나열
plt.rcParams.update({'figure.dpi': '150',
                     'figure.figsize': [8,6],
                     'font.size': '15',
                     'font.family': 'AppleGothic'})

# 모든 설정 되돌리기
# 같은 페이지내에서 변경된 설정을 되돌림
# plt.rcParams.update(plt.rcParamsDefault)

sns.scatterplot(data=mpg, x='displ', y='hwy')
plt.show()

출력 결과

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1.  시본 산점도 그래프

🍓  시본 산점도 그래프는 스트립 플롯 Strip Plot 그래프, 스웜 플롯 Swarm Plot 그래프 등이 있음
🍓  맷플롯립의 산점도 그래프처럼 모든 데이터를 점으로 표현하는데,
      맷플롯립의 산점도보다 범주에 따른 각 분포의 실제 데이터나 전체 형상등을 보여 준다는 장점이 있음

 

1) 데이터 준비

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

data6 = pd.read_pickle('../output/data6.pickle')

# data6에서 남성 및 여성이 성별, 몸무게, 허리둘레, 음주 여부, 흡연 상태 데이터를 가져와
# male_data, female_data에 각각 저장
male_data = data6.loc[data6.gender == 'Male', 
                     ['gender', 'weight', 'waist', 'drinking', 'smoking']]
female_data = data6.loc[data6.gender == 'Female', 
                       ['gender', 'weight', 'waist', 'drinking', 'smoking']]
male_data.head()

'''
  gender  weight  waist      drinking      smoking
0   Male      60   72.1  Non-drinking  Non-smoking
3   Male      70   90.8  Non-drinking  Non-smoking
5   Male      85   94.0      Drinking      Smoking
6   Male      80   93.0      Drinking      Smoking
7   Male      65   92.0  Non-drinking      Smoking
'''

 


 

2) 시본 스트립 플롯 생성

 

🍬  stripplot() : 데이터 개수가 1개이고 변수의 종류가 연속적이거나 범주형인 데이터에 대해 간단히 요약하여 띠 형태로 보여준다
        ▶️ 상자수염 또는 바이올린 그래프를 보충하는 그래프로 많이 사용
🍬  일반적으로 작은 데이터를 다루는 용도로 사용되는데, 큰 데이터를 다룰 때는 주로 히스토그램 등을 많이 사용

plt.figure(figsize=(10, 5))  # 그래프의 크기를 지정
plt.title('Seaborn Strip Plot Graph')  # 그래프의 제목을 지정

# stripplot() 함수로 허리 둘레 데이터를 x축에 지정, 몸무게 데이터를 y축에 각각 지정
sns.stripplot(data=male_data, x='waist', y='weight')
sns.stripplot(data=female_data, x='waist', y='weight')

# 허리둘레 최솟값, 최댓값
min(female_data['waist'])  # 53
max(male_data['waist'])  # 128

# x축 눈금 간격(눈금 개수는 총 127개)을 허리둘레의 최솟값(53)과 최댓값(128)을 중심으로 지정
plt.xticks(np.arange(0, 127, 63), labels=[53, 90.5, 128])
plt.show()

출력 결과


 

3) 팔레트 속성으로 색상 지정

 

🍬  시본의 색상 표현
    - 시본 사이트  https://seaborn.pydata.org/tutorial/color_palettes.html#palette-tutorial
    - 그래프 색상을 사용하는 원칙과 6개의 기본 팔레트 외에도 다양한 색상 팔레트를 확인할 수 있음

 

Choosing color palettes — seaborn 0.13.2 documentation

Choosing color palettes Seaborn makes it easy to use colors that are well-suited to the characteristics of your data and your visualization goals. This chapter discusses both the general principles that should guide your choices and the tools in seaborn th

seaborn.pydata.org

 

plt.figure(figsize=(10, 5))  # 그래프의 크기를 지정
plt.title('Seaborn Strip Plot Graph - Color Palette')  # 그래프의 제목을 지정

# stripplot() 함수로 허리 둘레 데이터를 x축에 지정, 몸무게 데이터를 y축에,
# 성별을 hue 속성에 지정, 팔레트 종류 dark, Set1을 palette 속성에 각각 지정.
sns.stripplot(data=male_data, x='waist', y='weight', hue='gender', palette='dark')
sns.stripplot(data=female_data, x='waist', y='weight', hue='gender', palette='Set1')

plt.xticks(np.arange(0, 127, 63), labels=[53, 90.5, 128])
plt.show()

출력 결과

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

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 학원 강의 및 위키독스 ]


 

1. Seabron Library ?

 

🍋  시본 Seaborn 라이브러리는 맷플로립을 기반으로 다양한 테마와 통계용 차트 등의 동적인 기능을 추가한 라이브러리
🍋  시본 라이브러리는 맷플로립과 다르게 통계와 관련된 차트를 제공하기 떄문에 데이터프레임으로 다양한 통계 지표를 만들어 낼 수 있으며 데이터 분석에 활발하게 사용되고 있다

🍋  시본 라이브러리로 그리는 그래프들은 크게 관계형, 분포형, 카테고리형의 세가지 범주로 분류
       ▶️  실제 분석에는 맷플로립과 시본 라이브러리 두 가지를 함께 사용
🍋  사용할 때 주의할 점은 시본이 맷플로립에 의존적이기 때문에 맷플로립 라이브러리도 반드시 함께 임포트 해야 함

💡 시본 라이브러리의 주요 특징 💡
     a. 뛰어난 시각화 효과 

     b. 간결한 구문 제공 

     c. 판다스 데이터프레임에 최적화 

     d. 쉬운 데이터프레임 집계 및 차트 요약

🍋  기본적으로 맷플로립보다 제공하는 색상이 더 많기에 색 표현력이 좋음
🍋  맷플로립으로 그래프를 표현하더라도 시본의 set() 함수를 미리 선언해 주면 자동으로 시본 팔레트에 출력
🍋  시본은 'deep, muted, pastel, bright, dark, colorblind'의 6개 기본 팔레트를 제공

https://seaborn.pydata.org/

 

seaborn: statistical data visualization — seaborn 0.13.2 documentation

seaborn: statistical data visualization

seaborn.pydata.org


 

2. 데이터 시각화 준비하기


 1) 라이브러리 및 데이터 읽어오기 

# 2020년 건강검진 일부 데이터 엑셀 파일을 읽어와 동적인 시각화를 표현
import pandas as pd

data = pd.read_excel('../input/health_screenings_2020_1000ea.xlsx')
data.head()

출력 결과

 


 

2) 데이터 전처리

# 성별, 음주 여부, 흡연 상태에 대하여 숫자로 저장되어 있는 정보를 데이터 분석의 가독성을 높이기 위해
# 'Male', 'Female', 'Non-drinking', 'Drinking', 'Non-smoking', 'Smoking'의 문자열로 
# 변경하여 데이터 전처리

# 필요 컬럼 추출하여 저장
data6 = data[['gender', 'height', 'weight', 'waist', 'drinking', 'smoking']]
data6.head()
# 성별 데이터를 Male과 Female로 변경
data6.loc[data6['gender'] == 1, ['gender']] = 'Male'
data6.loc[data6['gender'] == 2, ['gender']] ='Female'

# 음주 여부 0(비음주)는 Non-drinking, 1(음주)는 Drinking으로 변경
data6.loc[data6['drinking'] == 0, ['drinking']] = 'Non-drinking'
data6.loc[data6['drinking'] == 1, ['drinking']] = 'Drinking'

# 흡연상태 1(비흡연)과 2(흡연 끊음)을 Non-smoking으로 변경하고, 3(흡연)을 Smoking으로 변경
data6.loc[(data6['smoking'] ==1) | (data6['smoking'] ==2), ['smoking']] = 'Non-smoking'
data6.loc[data6['smoking'] == 3, ['smoking']] = 'Smoking'

data6.head()

 

출력 결과

 

# 데이터 타입 변경없이 저장
data6.to_pickle('../output/data6.pickle')

 

3.  sns.barplot()

🍋  시본에서 사용하는 막대 그래프는 barplot() 함수로 속성 3개를 지정하여 범주별 그룹을 쉽게 표현
🍋  시본 막대 그래프는 기본적으로 오차 막대가 표시 되는데, 오차 막대를 그리는 범위를 신뢰구간이라고 함
        ▶️ 오차 막대 신뢰구간을 표준편차로 하고 싶다면 ci 속성을 'sd'(ci='sd')로 지정

# 다음과 같은 인수를 가진다
sns.barplot(x=None, y=None, hue=None, data=None, order=None, 
            hue_order=None, estimator=<function mean at 0x7f9e05dcf5e0>, 
            ci=95, n_boot=1000, units=None, seed=None, orient=None, 
            color=None, palette=None, saturation=0.75, errcolor='.26', 
            errwidth=None, capsize=None, dodge=True, ax=None, **kwargs)

 

<x>  x축에 사용할 데이터의 열 이름 또는 위치 (정수) <y> y축에 사용할 데이터의 열 이름 또는 위치 (정수)
<hue> 범례에 사용할 데이터의 열 이름 또는 위치 (정수) <data> 그래프를 그릴 데이터프레임
<order> 막대 그래프를 그릴 때, x축 값들의 순서 <hue_order> 범례에 표시될 값들의 순서
<estimator> 막대의 높이를 어떻게 계산할 것인지를 지정하는 함수
                          (기본값: mean)
<ci> 신뢰 구간을 설정할 때 사용하는 값 (기본값: 95)
<n_boot> 신뢰 구간 계산에 사용할 부트스트랩 샘플링 수
                     (기본값: 1000)
<units> 그래프를 그릴 때 사용할 데이터의 단위
<seed> 난수 발생 시드 값 <orient> 그래프의 방향 ('v' 또는 'h', 기본값: 'v')
<color> 모든 막대의 색상을 지정하는 단일 값 또는 색상 맵 <palette> 범주형 변수에 대한 색상 맵
<saturation> 색상 맵의 채도 <errcolor> 오차 막대의 색상
<errwidth> 오차 막대의 두께 <capsize> 오차 막대 끝 부분의 크기
<dodge> 막대를 서로 구분하기 위한 여유 공간 여부 (기본값: True) <ax> 그래프를 그릴 matplotlib의 축 객체

 

1) barplot() 함수 사용 예시

# 모듈 import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 데이터 프레임 생성
data6 = pd.read_pickle('../output/data6.pickle')

# 음주 여부 및 흡연 상태 데이터 준비하기
# data6에서 성별, 음주 여부의 그룹별 개수(인원)를 구하여 drinking에 저장
drinking = data6.groupby(['gender', 'drinking'])['drinking'].count()

# data6에서 성별, 흡연 상태의 그룹별 개수(인원)를 구하여 smoking에 저장
smoking = data6.groupby(['gender', 'smoking'])['smoking'].count()

# 음주 여부와 흡연 상태에 대한 그룹별 개수(인원)의 시리즈를 데이터프레임으로 변경
drinking = drinking.to_frame(name='count')
smoking = smoking.to_frame(name='count')

 

  📌  series.to_frame() : series ▶️ dataframe 으로 변경하는 함수

데이터 프레임 변경 결과

 

# 데이터프레임의 인덱스를 초기화
drinking = drinking.reset_index()
smoking = smoking.reset_index()
drinking
# 컬럼이 1개 -> 3개로 변경됨

 

  📌  reset_index() : 설정 인덱스를 제거하고 기본 인덱스(0,1,2, ... , n)으로 변경

인덱스 초기화 결과


# 성별 음주 여부 및 흡연 상태 시본 막대 그래프
fig = plt.figure(figsize=(17, 6))

# 1행 2열의 서브플롯 생성
area1 = fig.add_subplot(1, 2, 1)
area2 = fig.add_subplot(1, 2, 2)

# barplot() 함수를 이용하여 x축에 성별, y축에 음주여부 개수 (인원), hue에 성별 음주 여부를 할당하여 첫 번째 서브플롯에 할당
ax1 = sns.barplot(data=drinking, x='gender', y='count', hue='drinking', ax=area1)
# barplot() 함수를 이용하여 x축에 성별, y축에 흡연상태 개수 (인원), hue에 성별 흡연상태 그룹별 데이터를 할당하여
# 두 번째 서브플롯에 할당
ax2 = sns.barplot(data=smoking, x='gender', y='count', hue='smoking', ax=area2)

fig.suptitle('2020 Health Screenings Drinking & Smoking Type Seaborn Bar Graph', fontweight='bold')
area1.set_title('Drinking Type')
area2.set_title('Smoking Type')

plt.show()

출력 결과

 


 

4.  add_subplot() 함수

🍋  add_subplot() 함수의 인자를 통해 서브플롯 개수를 조정
      📍 add_subplot(1, 2, 1)은 1 X 2 (행 X 열)의 서브플롯을 생성한다는 의미
             ➡️  세 번째 인자 1은 생성된 두 개의 서브플롯 중 첫 번째 서브플롯을 의미
      📍 마찬가지로 (1, 2, 2)는 1 X 2 서브플롯에서 두 번째 서브플롯을 의미

 

# 성별 음주 여부 및 흡연 상태 막대 그래프

# 1) 전체 설정
fig = plt.figure(figsize=(17,6))  # 그래프 크기 지정 및 그림 객체 생성
fig.suptitle('2020 Health Screenings Drinking & Smoking Type Bar Graph', fontweight='bold')
index = np.arange(4)  # x축 눈금 개수를 배열로 생성하고 index에 저장

# 2) 첫 번쨰 서브플롯 설정
fig.add_subplot(1, 2, 1)  # 1행 2열의 서브플롯 중 첫 번쨰 서브플롯을 생성
# 첫 번째 서브플롯에 그려질 음주 여부 데이터 개수 (인원)을 bar() 함수를 이용하여 저장.
plt.bar(index, drinking['count'])
plt.title('Drinking Type')
plt.ylabel('Count')
# x축 눈금 이름 지정
plt.xticks(index, ['Drinking(Female)', 'Non-drinking(Female)', 'Drinking(Male)', 'Non-drinking(Male)'])

# 3) 두 번째 서브플롯 설정
fig.add_subplot(1, 2, 2)  # 1행 2열의 서브플롯 중 두 번쨰 서브플롯을 생성
# 두 번째 서브플롯에 그려질 흡연 상태 데이터 개수 (인원)을 bar()함수를 이용하여 저장
plt.bar(index, smoking['count'])
plt.title('Smoking Type')
plt.ylabel('Count')
# x축 눈금 이름 지정
plt.xticks(index, ['Non-smoking(Female)', 'Smoking(Female)', 'Non-smoking(Male)', 'Smoking(Male)'])

 

출력 결과

 

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 및 위키독스 ]


 

1. 한글 폰트

🍓  그래프에서 한글을 표시하고 싶으면 matplotlib에서 사용하는 폰트를 한글 폰트로 지정해야 함

# 기본 폰트는 아래 방법을 사용해서 알 수 있다
import matplotlib
print(matplotlib.rcParams['font.family'])
# ['sans-serif']
# 폰트를 변경하려면 다음과 같이 수행.
matplotlib.rcParams['font.family'] = '폰트 이름'
matplotlib.rcParams['axes.unicode_minus'] = False


    📍 폰트를 변경하지 않으면 기본 폰트는 'sans-serif'

    📍 matplotlib.rcParams['axes.unicode_minus'] = False  

          ▶️ 한글 폰트를 지정한 후에 그래프에서 마이너스(-) 폰트가 깨지는 문제를 해결해 줌

 

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

# 폰트 변경
matplotlib.rcParams['font.family'] = 'AppleGothic'
matplotlib.rcParams['axes.unicode_minus'] = False

x = np.arange(0, 5, 1)
y1 = x
y2 = x + 1
y3 = x + 2
y4 = x + 3

plt.plot(x, y1, '>-r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc')
plt.legend(['데이터1', '데이터2', '데이터3', '데이터4'], loc='best')
plt.xlabel('X 축')
plt.ylabel('Y 축')
plt.title('그래프 제목')
plt.grid(True)
plt.show()

출력 결과

 


 

2. 파이 그래프  Pie chart

 

🍓  파이 그래프는 범주별 구성 비율을 원형으로 표현한 그래프
🍓  파이 그래프에서 부채꼴 부분의 크기는 각 항목의 크기에 비례
🍓  전체 데이터에서 각 항목이 차지한 비율을 비교할 때 많이 사용

plt.pie(x [, labels=label_seq, autopct='비율 표시 형식(ex: %0.1f)', 
             shadow=False(기본) 혹은 True, explode=explode_seq, 
             counterClock=True(기본) 혹은 False, startangle=각도 (기본은 0)])

 

    📍 'x' : 배열 확인 시퀀스 형태의 데이터
           ➡️ pie()는 x의 각 요소가 전체에서 차지하는 비율을 계산하고 그 비율에 맞게 부채꼴 크기를 결정해서 파이 그래프를 생성
    📍 'labels' : x 데이터 항목의 수와 같은 문자열 시퀀스(리스트, 튜플)을 지정해 각 부채꼴 이름 지정
    📍 'autopct' : 각 부채꼴 부분의 항목의 비율이 표시되는 숫자의 형식을 지정
           ➡️ 예를 들어 '%0.1f' - 소수점 첫째 자리까지 표시, '%0.0f' - 정수만 표시
           ➡️ '%0.1f%%'  - %를 추가 
    📍 'shadow' : 그림자 효과를 지정. 기본 값은 False
    📍 'explode' : 부채꼴 부분이 원에서 돌출되는 효과. 기본 값은 강조 효과가 없음
    📍 'counterClock' : x 데이터에서 부채꼴 부분이 그려지는 순서가 반시계방향(True)인지 시계방향(False)인지를 지정. 기본값은 True로 반시계 방향
    📍 'startangle' : 제일 처음 부채꼴 부분이 그려지는 각도로 x축을 중심으로 반시계 방향으로 증가. 기본값은 0

 

plt.figure(figsize = (w, h))

 

 

    📍 w와 h는 그래프의 너비 width와 높이 height 를 의미. 단위는 인치 inch.
    📍 값을 지정하지 않으면 (w, h)의 기본값은 (6, 4)
    📍 w와 h를 같은 값으로 지정하면 생성되는 그래프는 가로와 세로의 비율은 1 대 1이 됨

 


import matplotlib
import matplotlib.pyplot as plt

# 한글 폰트 사용
matplotlib.rcParams['font.family'] = 'AppleGothic'
matplotlib.rcParams['axes.unicode_minus'] = False

fruit = ['사과', '바나나', '딸기', '오렌지', '포도']
result = [7, 6, 3, 2, 2]

plt.pie(result)
plt.show()

출력 결과


# 크기를 변경해서 출력
plt.figure(figsize=(7, 7))
plt.pie(result)
plt.show()

출력 결과


# 각 부채꼴 부분에 속하는 데이터의 라벨과 비율을 추가
plt.figure(figsize=(7, 7))
plt.pie(result, labels=fruit, autopct='%.1f%%')
plt.show()

출력 결과


# 각 부채꼴 부분은 x축 기준 각도 0도를 시작으로 반시계 방향으로 그려짐
# x축 기준 각도 90도에서 시작해서 시계방향으로 그리는 예

plt.figure(figsize=(7, 7))
plt.pie(result, labels=fruit, autopct='%.1f%%', startangle=90, counterclock=False)
plt.show()

출력 결과


# 그림자를 추가하고 특정 요소(사과)를 표시한 부채꼴 부분만 강조한 예.
explode_value = (0.1, 0, 0, 0, 0)
# 0.1 : 반지름의 10% 만큼 벗어나도록 설정.

plt.figure(figsize=(7, 7))
plt.pie(result, labels=fruit, autopct='%.1f%%', startangle=90, 
        counterclock=False, explode=explode_value, shadow=True)
plt.show()

출력 결과

 

 

 

[ 내용 참고 : IT학원 강의 및 위키독스 ]

+ Recent posts