Jin's Dev Story

[Python] Matplotlib과 Seaborn라이브러리를 활용한 데이터 시각화 본문

Programming Language/Python

[Python] Matplotlib과 Seaborn라이브러리를 활용한 데이터 시각화

woojin._. 2024. 6. 13. 09:03

Bar 차트 - 막대 차트

Pie 차트 - 원형 차트

Line 차트 - 선 차트

Scatter 차트 - 점 차트

Heat Map 차트 - 열 차트

Histogram 차트 - 빈포 분도 차트

Box 차트 - 박스 차트

 

  • 시각화 라이브러리
    1. matplotlib
      • 파이썬으로 기본적인 차트들을 쉽게 그릴 수 있도록 도와주는 시각화 라이브러리
    2. seaborn
      • matplotlib 기반으로 만들어진 통계 데이터 시각화 라이브러리
import numpy as np 
import pandas as pd

import matplotlib.pyplot as plt 
import seaborn as sns 

import warnings   # 시각화 관련 버전 등의 경고(없애기위함) 

# 시각화 하기 전 준비 (안해도 되는 과정) 
plt.rcParams['figure.figsize'] = [10,8] # 시각화 보여줄 때의 화면 크기 
sns.set(style ='whitegrid') # 시각화 그려주는 테마 중 하나 
sns.set_palette('pastel') # 시각화 색깔 

warnings.filterwarnings('ignore') # 경고 무시

 

시각화할 때 한글 깨지는 경우

# % 한글이 깨지는 경우 
from matplotlib import font_manager, rc 
import matplotlib
import platform 

if platform .system() == 'Windows':
  # 원도우인 경우 
  font_name =font_manager.FontProperties(fname ='c:/Windows/Fonts/malgun.ttf').get_name()
  rc('font', family = font_name) 
else: 
  # MAC인 경우 
  rc('font', family= 'AppleGothic')

matplotlib.rcParams['axes.unicode_minus'] = False
# Loading'Tips' dataset from seaborn 
tips = sns.load_dataset('tips') 
tips.head()

 

데이터를 로딩해오면 shape로 크기 확인하기

tips.shape 
>>> (244, 7)

matplotlib를 활용한 시각화

# matplotlib를 활용한 시각화 
# 어느 요일에 팁을 많이 받는지 
sum_tip_by_day = tips.groupby('day')['tip'].sum() 
sum_tip_by_day

x_label = ['Thu', 'Fri','sat', 'sun'] # X_label이 목,금,토,일이 있음 
x_label_index = np.arange(len(x_label)) # np.arange(4) 
x_label_index

Bar차트

matplotlib를 활용한 시각화

# Bar 차트 이해 및 제작 
#x축에는 X_label, y축에는 팁받은날 
#plt.bar(x_label, sum_tip_by_day)

#옵션 추가한경우 
plt.bar(x_label, sum_tip_by_day,
                      color='pink', # 차트 색 
                      alpha=0.6, # 차트 투명도 
                      width=0.3, # 너비 
                      align='edge') # 격자가 변경됨 (배치) 

plt.title('sum of Tips by Days') # 차트 제목 
plt.xlabel('Days', fontsize =14) #x축에 변수 넣기
plt.ylabel('sum of Tips', fontsize=14) # y축에 설명넣기 
plt.xticks(x_label_index, x_label, rotation=45, fontsize=15) # X축 변수 글자크기, 회전 등 
plt.show()

seaborn을 활용한 시각화

# seaborn을 활용한 시각화 
# sns.barplot(data=tips, # 데이터프레임 
            # x='day',
            # y='tip', 
           #  estimator= np.sum)

# 옵션 추가한 경우 
sns.barplot(data=tips, # 데이터프레임 
             x='day',
             y='tip', 
             estimator= np.sum, # 평균도 가능 
             hue ='sex', # 색깔 구분으로 특정 컬럼값을 비교하고 싶을 때 
             palette ='pastel', # 위에서 했으므로 굳이 안해도됨 
             order=['Sun', 'Sat','Fri', 'Thur'], # xticks 순서 
             edgecolor = '.6', # 바 모서리 선명도 
             linewidth=2.5)  # 라인에 대한 두께설정 

plt.title('sum of Tips by Days', fontsize=16) # 차트 제목 
plt.xlabel('Days') #x축에 변수 넣기
plt.ylabel('sum of Tips') # y축에 설명넣기 
plt.xticks(rotation=45) # X축 변수 글자크기, 회전 등 
plt.show()

Pie차트

  • 둥근모양

matplotlib을 활용한 시각화

# pie 차트 이해 및 제작
# matplotlib를 활용한 시각화 
sum_tip_by_day =tips.groupby('day')['tip'].sum() 
ratio_tip_by_day = sum_tip_by_day/sum_tip_by_day.sum()
x_label = ['Thu', 'Fri','Sat', 'Sun'] # X_label이 목,금,토,일이 있음 

plt.pie(ratio_tip_by_day,  # 비율값
            labels=x_label,   # 라벨값
            autopct='%.2f%%',  # 부채꼴 안에 표시될 숫자 형식(소수 2자리깢 표시) 
            startangle=90, # 축이 시작되는 각도 설정 
            counterclock=True, # 시계 방향ㅁ -> False : 반시계 방향
            explode=[0.05, 0.05, 0.05, 0.05], # 중심에서 벗어나는 정도 표시
            shadow=True, # 그림자 표시 여부
            colors=['gold', 'silver', 'whitesmoke', 'gray'], # 색 변환
            wedgeprops={'width':0.7, 'edgecolor':'w', 'linewidth':3})  # 도넛 차트 그릴 때 사용
plt.show()

Line 차트

matplotlib을 활용한 시각화

# Line 차트 이해 및 제작
# matplotlib을 활용해서 시각화

# line 차트 예제를 위해, tips 데이터에 가상 시간 컬럼 추가하기
# 일요일 데이터만 사용
sun_tips = tips[tips['day']=='Sun']
sun_tips

# 현재 서버 시간을 얻기 위해 datetime 라이브러리 사용

import datetime
# datetime.date.today() -> 오늘 날짜
date =[]
today = datetime.date.today()
date.append(today)

for time in range(sun_tips.shape[0]-1):
    today += datetime.timedelta(1) # 하루씩 추가
    date.append(today)
date

sun_tips['date'] = date
sun_tips

# line chart

plt.plot(sun_tips['date'], sun_tips['total_bill'],
        linestyle='-', # 선의 모양
        linewidth=2, # 너비
        color='pink', # 색
        alpha=0.5 ) # 투명도
plt.title('Total Tips by Date', fontsize=20)
plt.title('sum of Tips by Days', fontsize=16) # 차트 제목 
plt.xlabel('Days') #x축에 변수 넣기
plt.ylabel('sum of Tips') # y축에 설명넣기 
plt.xticks(rotation=90) # X축 변수 글자크기, 회전 등 

plt.show()

seaborn을 활용한 시각화

# seaborn을 활용한 시각화
sns.lineplot(data=sun_tips,
             x='date',
             y='total_bill',
             hue='sex')

plt.title('Total Bill By date & sex')
plt.show()

 

Scatter 차트

matplotlib을 활용한 시각화

# Scatter 차트 이해 및 제작
# 변수 간의 상관 관게를 볼 때 많이 사용
# matplotlib을 활용한 시각화

plt.scatter(tips['total_bill'], tips['tip'],
            color='pink', # 색상
            edgecolors='black', # 테두리 색깔
            linewidths=2) # 라인 두께
plt.show()

seaborn을 활용한 시각화

# seaborn을 활용한 시각화
sns.scatterplot(data=tips,
                x='total_bill',
                y='tip',
                style='time', # 모양 구분으로 다른 변수랑 비교
                hue='day', # 색깔 구분으로 다른 변수랑 비교
                size='size', # 크기 구분으로 다른 변수랑 비교
                )
plt.title('Scatter between total_bill and trip', fontsize=20)
plt.xlabel('total_bill', fontsize=16) #x축에 변수 넣기
plt.ylabel('tip', fontsize=16) # y축에 설명넣기 
plt.show()

Heat Map 차트

seaborn을 활용한 시각화

# Heat Map 차트 이해 및 제작
# seaborn을 활용한 시각화

sns.heatmap(tips.corr(),
            annot=True, # 박스 안 corr 값 표시 여부
            square=True, # 정사각형으로 만들지 여부
            vmin=-1, vmax=1, # 범위 지정은 1부터 -1로 지정(최소 최댓값 지정)
            linewidths=.5, # 라인 두께 지정
            cmap='RdBu') # 색상 선택

plt.title('Heatmap by correlation', fontsize=20)
plt.show()

Histogram 차트

matplotlib을 활용한 시각화

# Histogram 차트 이해 및 제작
# matplotlib을 활용한 시각화

plt.hist(tips['total_bill'],
         bins=30, # x축의 갯수
         density=True, # 비율적으로 보여주는 것
         alpha=0.7, # 선명도
         color='pink', # 색상
         edgecolor='black') # 테두리 색상

plt.title('Histogram for total_bill') # 차트 제목 
plt.xlabel('total_bill') #x축에 변수 넣기
plt.ylabel('rate') # y축에 설명넣기 

plt.show()

seaborn을 활용한 시각화

# seaborn을 활용한 시각화

sns.histplot(data=tips,
             x='total_bill',
             bins=30,
             kde=True, # 분포도를 선으로 보여줌
             hue='sex',
             multiple='stack',
             shrink=0.6) # bin의 두께

plt.title('Histogram for total_bill by sex') # 차트 제목 
plt.xlabel('total_bill') #x축에 변수 넣기
plt.ylabel('rate') # y축에 설명넣기 
plt.show()

Box 차트

matplotlib을 활용한 시각화

# Box 차트 이해 및 제작
# matplotlib을 활용한 시각화

plt.boxplot(tips['tip'],
            sym='rs', # 빨간색으로 표시
            )

plt.title('Box Plot for Tip', fontsize=20)
plt.xlabel('tip', fontsize=15)
plt.ylabel('tip size', fontsize=15)

plt.show()

seaborn을 활용한 시각화

# seaborn을 활용한 시각화

sns.histplot(data=tips,
             x='total_bill',
             bins=30,
             kde=True, # 분포도를 선으로 보여줌
             hue='sex',
             multiple='stack',
             shrink=0.6) # bin의 두께

plt.title('Histogram for total_bill by sex') # 차트 제목 
plt.xlabel('total_bill') #x축에 변수 넣기
plt.ylabel('rate') # y축에 설명넣기 
plt.show()

'Programming Language > Python' 카테고리의 다른 글

[Python] apply 함수  (0) 2024.06.13
[Python] DataFrame 그룹  (0) 2024.06.13
[Python] DataFrame  (0) 2024.06.13
[Python] iloc와 loc  (0) 2024.06.13
[Python] Pandase(판다스)  (0) 2024.06.13