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

2024. 6. 13. 09:03·Programming Language/Python

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
'Programming Language/Python' 카테고리의 다른 글
  • [Python] apply 함수
  • [Python] DataFrame 그룹
  • [Python] DataFrame
  • [Python] iloc와 loc
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    프로그래머스
    리눅스
    Linux
    Spring Security
    pcce 기출문제
    데이터베이스
    스프링
    spring
    리눅스마스터 1급
    python
    스프링부트
    baekjoon
    스프링 부트 쇼핑몰 프로젝트 with JPA
    플러터
    데이터
    DB
    CS지식
    백준
    JPA
    CS
    리눅스마스터
    springboot
    backjoon
    자바
    programmers
    postgresql
    Oracle
    Java
    Flutter
    시큐리티
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[Python] Matplotlib과 Seaborn라이브러리를 활용한 데이터 시각화
상단으로

티스토리툴바