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


 

1. 히스토그램  Histogram

✏️  히스토그램 histogram은 데이터를 정해진 간격으로 나눈 후 그 간격 안에 들어간 데이터 갯수를 막대로 표시한 그래프

✏️  변수가 하나인 데이터의 빈도수를 막대 모양으로 나타낼 때 사용
✏️  통계분석에서 도수분포표와 히스토그램은 가장 많이 사용되는 도구이고, 데이터의 분석 및 분포를 파악하는 역할

💡 도수 분포표 이해를 위한 용어 
  · 변량 variate : 자료를 측정해 숫자로 표시한 것 (예: 점수, 키, 몸무게, 판매량, 시간 등)

  · 계급 class : 변량을 정해진 간격으로 나눈 구간 (예: 시험 점수를 60 ~ 70, 70 ~ 80, 80 ~ 90, 90 ~ 100 점 구간으로 나눔)
  · 계급의 간격 class width : 계급을 나눈 크기 (예: 위의 시험 점수를 나눈 간격은 10)
  · 도수 frequency : 나눠진 계급에 속하는 변량의 수 (예: 각 계급에서 발생한 수로 3, 5, 7, 4)
  · 도수 분포표 frequency distribution table : 계급에 도수를 표시한 표


📍  어떤 학급에서 수학 시험 결과를 이용해 도수 분포표 만드는 과정


      1. 변량 생성 : 학생 25명의 수학 시험 결과는 다음과 같음.
           ex.  76, 82, 84, 83, 90, 86, 85, 92, 72, 71, 100, 87, 81, 76, 94, 78, 81, 60, 79, 69, 74, 87, 82, 68, 79

      2. 계급 간격 설정 및 계급 생성 : 변량 중 가장 작은 숫자가 60이고 가장 큰 숫자가 100이므로 60에서 일정한 간격

                                                            (여기서는 5로 설정)으로 나누어서 다음과 같은 8개의 계급을 설정
           ex. 60 ~ 65, 65 ~ 70, 70 ~ 75, 75 ~ 80, 80 ~ 85, 85 ~ 90, 90 ~ 95, 95 ~ 100

      3. 계급별 도수 확인 및 분포표 만들기
           각 계급에 몇 개의 변량이 들어있는지 확인해 계급별로 도수를 구함. 이를 이용해 계급별로 도수를 표시한 도구 분포표 생성

           

           계급 (수학점수)                 도수        마크로 도수 표시
           60(이상) ~ 65(미만)        1                      *
           65 ~ 70                              2                     **
           70 ~ 75                              3                     ***
           75 ~ 80                              5                     *****
           80 ~ 85                              6                    ******
           85 ~ 90                              4                    ****
           90 ~ 95                              3                    ***
           95 ~ 100                            1                     *



plt.hist(x, [, bins=bins_s 혹은 'auto'])

 

   📌  x는 변량 데이터
   📌  옵션 bins는 계급의 갯수로 이 개수 만큼 자동으로 계급이 생성
         입력하지 않으면 'auto'가 되고 기본적으로 bins=10 이 됨

 

math = [76, 82, 84, 83, 90, 86, 85, 92, 72, 71, 100, 
        87, 81, 76, 94, 78, 81, 60, 79, 69, 74, 87, 82, 68, 79]
plt.hist(math)
plt.show()


# bins 를 8로 설정
plt.hist(math, bins=8)
plt.show()


 

2. 히스토그램 생성 

# 1) 데이터 읽기
import pandas as pd
import matplotlib.pyplot as plt

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

 

1)  히스토그램 그리기

# data에서 남성(data.gender==1.0)의 성별, 키 데이터만 가져옴.
man_data = data.loc[data.gender == 1.0, ['gender', 'height']]
man_data.head()

출력 결과

plt.figure(figsize=(10, 6))
# hist() 메서드로 man_data 데이터의 키를 지정하고 계급 개수 20개 등의 속성을 지정.
plt.hist(man_data['height'], bins=20, label='Man')
plt.title('2020 Health Screenings Man Height Histogram')
plt.xlabel('height')
plt.ylabel('frequency')
plt.legend()
plt.grid()
plt.show()

출력 결과

 

📌  hist() 함수의 bins 파라미터는 히스토그램의 가로축 구간의 개수를 지정

 


 

2) 그룹 히스토그램 그리기

 

✏️   그룹 히스토그램을 그리는 것은 기존 히스토그램 위에 히스토그램을 하나 더 그리는 형식

# 남성 및 여성 키 그룹 히스토그램

# data에서 남성(data.gender==1.0)의 성별, 키 데이터만 가져옴.
man_data = data.loc[data.gender == 1.0, ['gender', 'height']]
# data에서 여성(data.gender==2.0)의 성별, 키 데이터만 가져옴
woman_data = data.loc[data.gender == 2.0, ['gender', 'height']]
#%%
plt.figure(figsize=(10, 6))  # 그래프 크기 지정
# hist() 메서드로 데이터의 키를 지정하고 계급 개수 20개 등의 속성을 지정.
plt.hist(man_data['height'], bins=20, alpha=0.5, label='Man')
plt.hist(woman_data['height'], bins=20, alpha=0.5, label='Woman')

plt.title('2020 Health Screenings Man & Woman Height Group Histogram')
plt.xlabel('height')
plt.ylabel('frequency')
plt.xlim(120, 200)
plt.legend()
plt.grid()
plt.show()

출력 결과

 

 

 

 

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


 

1.  산점도 그래프

plt.scatter(x,y)

 

👩🏻‍💻  산점도 (Scatter plot)는 두 변수의 상관 관계를 직교 좌표계의 평면에 점으로 표현하는 그래프

👩🏻‍💻  서로 다른 두 연속성 변수 사이의 관계를 나타내며 연속성 변수의 상관성을 확인할 때 산점도 그래프를 사용
👩🏻‍💻  예를 들어 나이와 소득에 대한 상호 관련성 파악 등에 유용하게 사용되는데, 두 변수 간의 상관관계를 개략적으로 파악할 수 있기 때문

👩🏻‍💻  산점도에 표시되는 각 점들은 자료의 관측값을 의미하고, 각 점의 위치는 관측값이 가지는 x축, y축 변수의 값으로 결정

 

    📌  공공데이터포털에서 다운로드한 2020년 건강검진 일부 데이터 health_screenings_2020.xlsx를 이용하여 산점도 그래프를 표현

import pandas as pd
import matplotlib.pyplot as plt

# 1) 데이터 읽기
data = pd.read_excel('../input/health_screenings_2020.xlsx')
data.head()

출력 결과

height_data = df1['height']  # 키 데이터만 가져와 height_data에 저장
weight_data = df1['weight']  # 몸무게 데이터만 가져와 weight_data에 저장
height_data.head()
'''
0    175
1    150
2    155
3    165
4    160
Name: height, dtype: int64
'''
plt.figure(figsize=(10, 4))  # 그래프 크기를 지정
plt.scatter(height_data, weight_data)  # x축 데이터에 height_data, y축 데이터에 weight_data 지정
plt.title('2020 Health Screenings Scatter Graph')
plt.xlabel('height')
plt.ylabel('weight')
plt.show()

출력 결과

 


 

2) 그룹 산점도 그래프

 

✏️  누적 산점도 그래프를 그리는 것은 기존 산점도 그래프 위에 산점도 그래프를 하나 더 그리는 방식

# HDL, LDL, cholesterol 데이터를 가져와 각각의 변수에 저장.
HDL_data = df1['HDL']
LDL_data = df1['LDL']
cholesterol_data = df1['cholesterol']

plt.figure(figsize=(10, 6))  # 그래프 크기 지정

# scatter()에 x축 데이터와 y축 데이터를 지정하고 점 색상과 점 테두리 색상을 지정.
plt.scatter(cholesterol_data, LDL_data, color='r', edgecolor='w', label='Cholesterol*LDL')
plt.scatter(HDL_data, cholesterol_data, color='g', edgecolor='w', label='HDL*Cholesterol')
plt.scatter(HDL_data, LDL_data, color='b', edgecolor='w', label='HDL*LDL')

plt.title('2020 Health Screenings Group Scatter Graph')
# xlim(), ylim()으로 x축 및 y축의 최솟값과 최댓값을 지정
plt.xlim(-50, 500)
plt.ylim(-50, 500)
plt.legend()
plt.show()

출력 결과

 

 

 

 

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

+ Recent posts