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()
# 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()
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()
# 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()
# 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()
# 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()
출처 : 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()
단순히 보면 보이지 않던 것들이 비로소 시각화를 하면 새로운 인사이트를 발견하게 된다.