[Python] matplotlib과 seaborn 라이브러리를 활용한 데이터 시각화
기초부터 쌓아가는 머신러닝 #3
3주차 : matplotlib과 seaborn 라이브러리를 활용한 데이터 시각화
- 시각화 라이브러리
- matplotlib
- 파이썬으로 기본적인 차트들을 쉽게 그릴 수 있도록 도와주는 시각화 라이브러리
- seaborn
- matplotlib 기반으로 만들어진 통계 데이터 시각화 라이브러리
- Bar 차트 이해 및 제작
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 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
---------------------------------------------------
# Loding "tips" dataset from seaborn
tips = sns.load_dataset('tips')
tips.head()
> total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
... ... ... ... ... ... ... ...
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2
tips.shape
>(244, 7)
# matplotlib을 활용한 시각화
# 요일별 tip의 합계를 막대그래프로 나타내기
sum_tip_by_day = tips.groupby('day')['tip'].sum()
sum_tip_by_day
>day
Thur 171.83
Fri 51.96
Sat 260.40
Sun 247.39
Name: tip, dtype: float64
x_label = ['Thu','Fri','Sat','Sun']
x_label_index = np.arange(len(x_label))
plt.bar(x_label_index,sum_tip_by_day,
color='pink', # color : 색깔 지정
alpha=0.6, # alpha : 색 투명도
width=0.3, # width:0.3
align='edge') # default:'center'
plt.title('Sum Of Tips by Days', fontsize=16)
plt.xlabel('Days',fontsize=14)
plt.ylabel('Sum Of Tips',fontsize=14)
plt.xticks(x_label_index,
x_label,
rotation=45, # x 라벨이 많은 경우 기울여서 씀
fontsize=15)
plt.show()
- 파이썬으로 기본적인 차트들을 쉽게 그릴 수 있도록 도와주는 시각화 라이브러리
- 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 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
---------------------------------------------------
# Loding "tips" dataset from seaborn
tips = sns.load_dataset('tips')
tips.head()
> total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
... ... ... ... ... ... ... ...
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2
tips.shape
>(244, 7)
# matplotlib을 활용한 시각화
# 요일별 tip의 합계를 막대그래프로 나타내기
sum_tip_by_day = tips.groupby('day')['tip'].sum()
sum_tip_by_day
>day
Thur 171.83
Fri 51.96
Sat 260.40
Sun 247.39
Name: tip, dtype: float64
x_label = ['Thu','Fri','Sat','Sun']
x_label_index = np.arange(len(x_label))
plt.bar(x_label_index,sum_tip_by_day,
color='pink', # color : 색깔 지정
alpha=0.6, # alpha : 색 투명도
width=0.3, # width:0.3
align='edge') # default:'center'
plt.title('Sum Of Tips by Days', fontsize=16)
plt.xlabel('Days',fontsize=14)
plt.ylabel('Sum Of Tips',fontsize=14)
plt.xticks(x_label_index,
x_label,
rotation=45, # x 라벨이 많은 경우 기울여서 씀
fontsize=15)
plt.show()
# seaborn을 활용한 시각화 sns.barplot(data = tips, # 데이터 프레임 x='day', # x 변수 y='tip', # y 변수ns.barplot(data = tips, # 데이터 프레임 hue='sex', # 특정 컬럼값을 기준으로 나눠서 보고 싶을 때 palette='pastel', # pastel, husl, Set2, flare, Blues_d order=['Sun','Sat','Fri','Thur'], # x 변수 순서 지정 edgecolor=".6", # edge 선명도 지정 linewidth=2.5 # line두께 지정 ) plt.title('Sum Of Tips by Days', fontsize=16) plt.xlabel('Days') plt.ylabel('Sum of Tips') plt.xticks(rotation=45) plt.show()
- Pie 차트 이해 및 제작
# matplotlib을 활용한 시각화 sum_tip_by_day = tips.groupby('day')['tip'].sum() ratio_tip_by_day = sum_tip_by_day/sum_tip_by_day.sum() ratio_tip_by_day >day Thur 0.234875 Fri 0.071024 Sat 0.355942 Sun 0.338159 Name: tip, dtype: float64 x_label = ['Thu','Fri','Sat','Sun'] plt.pie(ratio_tip_by_day, # 비율 값 labels=x_label, # 라벨 값 autopct='%.1f%%', # 부채꼴 안에 표시될 숫자 형식(소수점 1자리까지 표시) startangle=90, # 축이 시작되는 각도 설정 counterclock=True, # True: 시계방향순 , False:반시계방향순 explode=[0.05,0.05,0.05,0.05], # 중심에서 벗어나는 정도 표시 shadow=True, # 그림자 표시 여부 colors = ['#ff9999', '#ffc000', '#8fd9b6', '#d395d0'], # colors=['gold','silver','whitesmoke','gray'] wedgeprops = {'width':0.7,'edgecolor':'w','linewidth':3} ) #width: 부채꼴 영역 너비,edgecolor: 테두리 색 , linewidth : 라인 두께 plt.title('Ratio Of Tips by Days', fontsize=16) plt.show()
- Line 차트 이해 및 제작
matplotlib을 활용한 시각화
# line 차트 예제를 위해, tips 데이터에 가상 시간 컬럼 추가하기 # 일요일 데이터만 사용 sun_tips = tips[tips['day']=='Sun'] 현재 서버 시간을 얻기 위해 datetime 라이브러리 사용 import datetime date = [] today = datetime.date.today() # 오늘 날짜 출력 YYYY-MM-DD date.append(today) for i in range(sun_tips.shape[0]-1): today += datetime.timedelta(+1) # 하루씩 추가 date.append(today) sun_tips['date'] = date sun_tips > total_bill tip sex smoker day time size date 0 16.99 1.01 Female No Sun Dinner 2 2021-04-10 1 10.34 1.66 Male No Sun Dinner 3 2021-04-11 2 21.01 3.50 Male No Sun Dinner 3 2021-04-12 3 23.68 3.31 Male No Sun Dinner 2 2021-04-13 4 24.59 3.61 Female No Sun Dinner 4 2021-04-14 ... ... ... ... ... ... ... ... ... 186 20.90 3.50 Female Yes Sun Dinner 3 2021-06-20 187 30.46 2.00 Male Yes Sun Dinner 5 2021-06-21 188 18.15 3.50 Female Yes Sun Dinner 3 2021-06-22 189 23.10 4.00 Male Yes Sun Dinner 3 2021-06-23 190 15.69 1.50 Male Yes Sun Dinner 2 2021-06-24 plt.plot(sun_tips['date'],sun_tips['total_bill'], linestyle='-', # linestyle= '--', '-', ':', '-. linewidth=1, # line두께 color='pink', # 색상 선택 alpha=10, # 투명도 조절 ) plt.title('Total Tips by Date',fontsize=20) plt.xlabel('date',fontsize=15) plt.ylabel('total tip',fontsize=15) plt.xticks(rotation=90) plt.show()
# seaborn을 활용한 시각화 sns.lineplot(data=sun_tips,x='date',y='total_bill', hue='sex', palette='pastel') plt.title('Total Bill by Date & Sex') plt.show()
- Scatter 차트 이해 및 제작
# matplotlib을 활용한 시각화 plt.scatter(tips['total_bill'],tips['tip'], color='pink', # 색상 선택 edgecolor='black', # 테두리 색깔 linewidth=2) # 라인 두께 plt.show()
# seaborn을 활용한 시각화 sns.scatterplot(data=tips,x='total_bill',y='tip', hue='day', # 색깔로 구분해서 보고 싶을 때 style='time', # 모양으로 구분해서 보고 싶을 때 size='size',sizes=(20,200), # 크기별로 보고 싶을때 palette='pastel') # 색상 지정 plt.title('Scatter between total_bill and tip',fontsize=20) plt.xlabel('total_bill',fontsize=16) plt.ylabel('tip',fontsize=16) plt.show()
- Heat Map 차트 이해 및 제작
# seaborn을 활용한 시각화 sns.heatmap(tips.corr(), annot=True, # 박스안 corr 값 표시할지 말지 square=True, # 박스를 정사각형으로 할지 말지 vmin=-1,vmax=1, # 최소 최댓값 지정 linewidth=.5, # 라인 두께 지정 cmap='RdBu') # 색상 선택 plt.title('Heatmap by correlation',fontsize=20) plt.show()
- Histogram 차트 이해 및 제작
# matplotlib을 활용한 시각화 plt.hist(tips['total_bill'], bins=30, density=True, alpha=0.7, color='pink', edgecolor='black', linewidth=0.9) plt.title('Histogram for total_bill') plt.xlabel('total_bill') plt.ylabel('rate') plt.show()
# seaborn을 활용한 시각화 sns.histplot(data=tips,x='total_bill', bins=30, # bin의 갯수 kde=True, #kernel density estimate to smooth the histogram hue='sex', # 색깔에 따른 구분 multiple='stack', # dodge stat="density", # 비율로 확인할 때 shrink=0.6 # bin의 두께 ) plt.title('Histogram for total_bill') plt.xlabel('total_bill') plt.ylabel('rate') plt.show()
- Box 차트 이해 및 제작
출처 : https://towardsdatascience.com/understanding-boxplots-5e2df7bcbd51
# matplotlib을 활용한 시각화 plt.boxplot(tips['tip'], sym='rs', # outlier => red & square로 표현 ) plt.title('Box Plot for Tip',fontsize=20) plt.ylabel('tip',fontsize=15) plt.show()
# seaborn을 활용한 시각화 sns.boxplot(data=tips,x='day',y='tip', hue='smoker', palette='pastel', linewidth=3, order=["Sun", "Sat","Fri","Thur"]) plt.title('Box Plot for Tip by Day',fontsize=20) plt.ylabel('tip',fontsize=15) plt.show()
결론
단순히 보면 보이지 않던 것들이 비로소 시각화를 하면 새로운 인사이트를 발견하게 된다.
Author And Source
이 문제에 관하여([Python] matplotlib과 seaborn 라이브러리를 활용한 데이터 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@changhtun1/기초부터-쌓아가는-머신러닝-3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)