1.  선 그래프 - 시간에 따라 달라지는 데이터 표현하기

🐰  선 그래프 line chart : 데이터를 선으로 표현한 그래프, 시간에 따라 달라지는 데이터를 표현할 때 자주 사용
🐰  환율, 주가지수 등 경제 지표가 시간에 따라 변하는 양상을 '선 그래프'로 표현

    🥕  시계열 데이터 time series data  : 일별 환율처럼, 일정 시간 간격을 두고 나열된 데이터
    🥕  시계열 그래프 time series chart : 시계열 데이터를 선으로 표현한 그래프

 


 

1) 시계열 그래프 만들기

 

🐰  economics는 미국의 여러 가지 경제 지표를 월별로 나타낸 데이터
🐰  economics를 이용해 시간에 따라 실업자 수가 어떻게 변하는지 나타낸 시계열 그래프를 생성

🐰  sns.lineplot()을 이용하면 선 그래프를 만들 수 있다

 

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

# economics 데이터(시계열 데이터) 불러오기
economics = pd.read_csv('../input/economics.csv')

'''
         date    pce       pop  psavert  uempmed  unemploy
0  1967-07-01  506.7  198712.0     12.6      4.5      2944
1  1967-08-01  509.8  198911.0     12.6      4.7      2945
2  1967-09-01  515.6  199113.0     11.9      4.6      2958
3  1967-10-01  512.2  199311.0     12.9      4.9      3143
4  1967-11-01  517.4  199498.0     12.8      4.7      3066
'''
# x축에는 시간을 나타낸 date, y축에는 실업자 수를 나타낸 uneploy를 지정
sns.lineplot(data=economics, x='date', y='unemploy')
plt.show()

 

 

📍 출력된 그래프를 보면 x축에 굵은 선이 표시
      ▶️  date 변수에는 '1967-07-01' 처럼 '연월일'을 나타낸 문자가 있는데 이 값이 x축에 가로로 여러 번 겹쳐 표시되어서 굵은 선으로 보임

 

 

 

 

 

 


 

(1)  x축에 연도 표시하기

 

🥕  x축에 연도를 표시하려면 변수 타입을 날짜 시간 타입 datetime64으로 바꿔야
       ( economics 데이터의 date가 문자 object 타입으로 되어 있음 )

🥕  pd.to_datetime()을 이용하면 변수의 타입을 날짜 시간 타입으로 바꿀 수 있음

        ⚡️  변수의 타입을 날짜 시간 타입으로 바꾸더라도 값이 달라지지 않음

🥕  날짜 시간 타입은 df.dt를 이용해 연, 월, 일을 추출할 수 있음

# 날짜 시간 타입 변수 만들기
# date 타입을 날짜 시간 타입으로 변경해서 date2 변수 추가
economics['date2'] = pd.to_datetime(economics['date'])

# 변수 타입 확인
economics.info()
'''
RangeIndex: 574 entries, 0 to 573
Data columns (total 7 columns):
 #   Column    Non-Null Count  Dtype         
---  ------    --------------  -----         
 0   date      574 non-null    object        
... 생략...    
 6   date2     574 non-null    datetime64[ns]
 '''
# 연도 변수 추가
economics['year'] = economics['date2'].dt.year
economics.head()
# 연도를 나타낸 변수를 sns.lineplot()의 x에 입력하면 x축에 연도가 표시
sns.lineplot(data=economics, x='year', y='unemploy')
plt.show()

출력 결과

 

 

📍 선의 위아래에 표시된 면적은 신뢰구간 confidence interval
📍 신뢰 구간을 표시하지 않으려면 errorbar = None을 입력

 

 

 

 

 

 

 

 

 

# 신뢰구간 제거
sns.lineplot(data=economics, x='year', y='unemploy', errorbar=None)
plt.show()

신뢰구간 제거 결과

 

# date2로 그래프 바로 생성
sns.lineplot(data=economics, x='date2', y='unemploy')
plt.show()

 

 

 

 

 

 

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


 

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

+ Recent posts