-
2주 1일차 TIL 정리웅진 STARTERS 부트캠프 2023. 2. 13. 18:41
2주 1일차에는 기타 시각화 그래프의 종류를 마저 알아보고, 실제 데이터를 활용해 실습을 진행하였다.
※ 박스플롯 (상자수염그림)
- 데이터로부터 얻어진 아래의 다섯 가지 요약 수치를 사용해서 그려진다.
최소값
제 1사분위 수 (Q1) : 전체 데이터 중 하위 25%에 해당하는 값
제 2사분위 수 또는 중위수 (Q2)
제 3사분위 수 (Q3) : 전체 데이터 중 상위 25%에 해당하는 값
최대값 - 다른 값들과 동떨어진 값을 이상치로 표현한다.
어떤 값이 (1/4 지점의 값 - 1.5 * 사분위수 범위) 보다 작거나,
어떤 값이 (3/4 지점의 값 + 1.5 * 사분위수 범위) 보다 크면 그 값을 이상치로 정한다. - 사분위수 범위 = 3/4 지점의 값 - 1/4 지점의 값
- 박스플롯에 필요한 값과 이상치 구하기
- 1/4 지점의 값 : 시리즈.quantile(.25)
- 3/4 지점의 값 : 시리즈.quantile(.75)
- 이상치
1/4 지점의 값 - 1.5 * 사분위수 범위
3/4 지점의 값 + 1.5 * 사분위수 범위
# 샘플데이터 scores = pd.Series([0,10,15,15,15,16,19,20,21,25,25,26,26,29,30,35,36,37,39,40,41,41,44,45,45,45,45,47, 50,50,50,50,51,51,51,53,54,55,55,56,60,61,62,62,63,64,65,65,65,65,66,66,66,66,66, 67,68,68,69,70,70,70,70,70,70,70,70,71,71,71,71,71,72,72,72,72,73,74,74,74,75,75, 76,76,76,77,77,77,77,78,78,78,78,78,79,79,79,79,80,80,80,80,80,80,81,81,81,82,82, 85,85,85,88,88,89,90,90,90,93,93,95,95,95,97,100]) Q1 = scores.quantile(.25) print('1/4 지점의 값 : ',Q1) Q3 = scores.quantile(.75) print('3/4 지점의 값 : ',Q3) # 이상치 print('이상치:',Q1 - 1.5*(Q3-Q1),'미만') # 3/4 지점의 값 + 1.5 * 사분위수 범위 print('이상치:',Q3 + 1.5*(Q3-Q1),'이상')
- 박스플롯: plt.boxplot(data)
plt.boxplot(scores) plt.show()
- 평균값, 중앙값 표시하기
- showmeans=True
- meanline=True
plt.boxplot(scores, showmeans = True, meanline = True) plt.show()
* meanline=True를 체크하지 않으면 중앙값이 세모(▲로 표시된다.)
- 수평 박스플롯
- vert=False
plt.boxplot(scores, showmeans = True, meanline = True, vert = False) plt.show()
- 여러 개의 데이터 비교하기
# 샘플데이터 import seaborn as sns iris = sns.load_dataset('iris') iris.head() # 값이 들어가는 자리에 여러 개의 데이터 입력 → 데이터프레임['컬럼'],데이터프레임['컬럼'], ... plt.boxplot([iris['sepal_length'],iris['sepal_width'],iris['petal_length'],iris['petal_width']] ,labels=['sepal_length','sepal_width','petal_length','petal_width'] ,showmeans=True, meanline=True) plt.grid(axis='y') plt.show()
* 동그라미로 표시된 부분이 이상치 데이터
※ 바이올린플롯
- plt.violinplot(data)
- 최댓값, 최소값, 평균값, 중간 표시
- showextrema=True/False : 최대값,최소값에 직선 표시(default:True)
- showmeans=True/False : 평균값에 직선 표시(default:False)
- showmedians=True/False : 중간값에 직선 표시(default:False)
- 분위수 지정하기
- quantiles=0~1사이의 실수리스트
# 샘플데이터 scores = pd.Series([0,10,15,15,15,16,19,20,21,25,25,26,26,29,30,35,36,37,39,40,41,41,44,45,45,45,45,47, 50,50,50,50,51,51,51,53,54,55,55,56,60,61,62,62,63,64,65,65,65,65,66,66,66,66,66, 67,68,68,69,70,70,70,70,70,70,70,70,71,71,71,71,71,72,72,72,72,73,74,74,74,75,75, 76,76,76,77,77,77,77,78,78,78,78,78,79,79,79,79,80,80,80,80,80,80,81,81,81,82,82, 85,85,85,88,88,89,90,90,90,93,93,95,95,95,97,100]) plt.violinplot(scores, showmeans=True, showmedians=True) plt.show()
- 스타일 지정하기
- 바이올린플롯 객체를 받아서 스타일을 지정한다.
- 플롯['bodies'][인덱스].set_facecolor(컬러)
- 플롯['cmins'].set_edgecolor(컬러)
- 플롯['cmaxes'].set_edgecolor(컬러)
- 플롯['cbars'].set_edgecolor(컬러)
- 플롯['cmedians'].set_edgecolor(컬러)
- 플롯['cquantiles'].set_edgecolor(컬러)
- 플롯['cmeans'].set_edgecolor(컬러)
v1 = plt.violinplot(scores, showmeans=True, showmedians=True,quantiles=[0.25,0.75]) v1['bodies'][0].set_facecolor('r') v1['cmins'].set_edgecolor('r') v1['cmaxes'].set_edgecolor('r') v1['cbars'].set_edgecolor('k') v1['cmedians'].set_edgecolor('g') v1['cquantiles'].set_edgecolor('w') v1['cmeans'].set_edgecolor('y') plt.show()
- 여러 개의 데이터 비교하기
# 샘플데이터 import seaborn as sns iris = sns.load_dataset('iris') v2 = plt.violinplot([iris['sepal_length'],iris['sepal_width'],iris['petal_length'],iris['petal_width']] ,showmeans=True, showmedians=True, quantiles=[[0.25,0.75],[0.25,0.75],[0.25,0.75],[0.25,0.75]]) plt.xticks(range(1,5,1),labels=['sepal_length','sepal_width','petal_length','petal_width']) v2['bodies'][0].set_facecolor('r') v2['bodies'][1].set_facecolor('g') v2['bodies'][2].set_facecolor('b') v2['bodies'][3].set_facecolor('m') v2['cmins'].set_edgecolor('r') v2['cmaxes'].set_edgecolor('r') v2['cmedians'].set_edgecolor('r') plt.grid(axis='y',ls=':',alpha=0.5) plt.show()
※ 파이차트
- 기본 그리기
- plt.pie(data)
- 레이블 달기
- labels=label목록
- labeldistance = 그래프로부터 레이블을 얼만큼 떨어뜨려서 표시할것인가 (default:1.1)
- 비율 표시하기
- autopct = '%소수점자리수%%' eg) '%.1f%%'
- pctdistance = 중심에서의 거리(반지름을 1이라고 했을 때 반지름으로부터 얼만큼 떨어져서 비율을 표시할 것인지.., default:0.6)
- 돌출효과
- explode=돌출정도리스트
- 반지름의 길이를 1이라고 했을 때를 기준으로 하여 돌출 정도를 지정
# 샘플데이터: 2019년 병역판정검사 - 혈액형 분포 blood_type = ['A','B','O','AB'] Personnel = [111901,87066,86804,36495] # 기본 그리기 plt.pie(Personnel ,labels=blood_type # blood_type으로 저장돼있는 것 레이블로 사용 ,labeldistance=1.05 # 그래프로부터 레이블 얼마나 떨어져있는지 ,autopct='%.1f%%' # 퍼센트 소수점 몇자리까지 표시 ,pctdistance=0.5 # 반지름에서 얼마나 떨어져서 비율 표시할 것인지 ,explode=[0,0,0,0.07]) plt.show()
- 색상 바꾸기
- colors = 색상리스트
['lightcoral', 'gold', 'greenyellow', 'skyblue']
- 각도 바꾸기
- startangle = 시작각도
- 기본시작각도는 3시방향
- 시작각도를 지정하면 3시방향으로부터 반 시계방향으로 각도만큼 이동하여 시작
- 회전방향
- counterclock=True/False (반시계/시계)
- default = True
# 기본 그리기 plt.pie(Personnel ,labels=blood_type ,labeldistance=1.05 ,autopct='%.1f%%' ,pctdistance=0.5 ,colors=['lightcoral', 'gold', 'greenyellow', 'skyblue'] # 각각 색상 결정 ,startangle=90 # 시작각도 지정(3시 방향이 기본, 반시계방향) ,counterclock=False # 회전방향 (시계/반시계) 결정 plt.legend(loc=(1,0.5)) # 레이블 부착(loc: 위치 좌표) plt.show()
- 범례
- legend(레이블리스트)
- 반지름 설정
- radius=반지름(Default:1)
- 부채꼴 스타일링
- wedgeprops = {'ec':테두리컬러, 'lw':선두께, 'ls':선스타일, 'width':반지름에대한비율}
- 폰트 설정
- textprops = {'fontsize':폰트사이즈, 'color':폰트컬러, 'rotation':폰트회전각도}
plt.figure(facecolor='ivory',edgecolor='gray',linewidth=2,figsize=(5,5)) plt.pie(Personnel ,labels=blood_type ,labeldistance=1.1 ,autopct='%.1f%%' ,pctdistance=0.5 ,explode=[0.02,0.02,0.02,0.1] ,colors=['lightcoral', 'gold', 'greenyellow', 'skyblue'] ,startangle=90 ,counterclock=True ,wedgeprops={'ec':'k','lw':'1','ls':'-','width':0.8} # 부채꼴 스타일링 ,textprops={'fontsize':10,'color':'#333333'}) # 폰트설정 plt.title('2019년 병역판정검사 - 혈액형 분포') # 타이틀 설정 plt.show()
※ rcParams 사용하기 : 그래프 그리기를 위한 사전설정같은 개념.
- figure
# figure 크기 plt.rcParams['figure.figsize']=(9,4)
- axes
# 그래프 테두리 두께 plt.rcParams['axes.linewidth'] = 2 # 그래프 테두리 색 plt.rcParams['axes.edgecolor'] = 'navy' # 그래프 바탕 색 plt.rcParams['axes.facecolor'] = 'ghostwhite' # 그리드 표시 plt.rcParams['axes.grid'] = True
- 그리드
# 제목 컬러 plt.rcParams['axes.titlecolor'] = 'navy' # 폰트 사이즈 plt.rcParams['axes.titlesize'] = 15 # 폰트 weight plt.rcParams['axes.titleweight']='bold'
- 폰트
# 레이블 색상 plt.rcParams['axes.labelcolor'] = 'gray' # 레이블 크기 plt.rcParams['axes.labelsize'] = 12
- 눈금
# top/bottom/left/right를 True/False로 지정해 눈금이 표시될 위치 선택 plt.rcParams['xtick.top'] = True plt.rcParams['ytick.right'] = True # 눈금이 위, 아래, 중간 중 어디에 있는지 plt.rcParams['xtick.direction'] = 'inout' plt.rcParams['ytick.direction'] = 'inout' # 큰 눈금 사이즈(xticks minor도 있음) plt.rcParams['xtick.major.size'] = 10 plt.rcParams['ytick.major.size'] = 10
- 선
# 라인굵기 plt.rcParams['lines.linewidth']=3 # 라인스타일 plt.rcParams['lines.linestyle']='--' # 라인마커 plt.rcParams['lines.marker'] ='o'
- 패턴
# 해치 라인굵기 plt.rcParams['hatch.linewidth']=3 # 해치 색상 plt.rcParams['hatch.color'] = 'w'
- 박스플롯
# 박스 plt.rcParams['boxplot.boxprops.color'] = 'b' plt.rcParams['boxplot.boxprops.linewidth'] = 2 # 최대값, 최소값 plt.rcParams['boxplot.capprops.color'] = 'r' plt.rcParams['boxplot.capprops.linewidth'] = 2 # 평균 plt.rcParams['boxplot.showmeans'] = True
- 적용 예시
# 샘플데이터 df1 = pd.DataFrame({'요일':['월','화','수','목','금','토','일'], '매출액':[10000,9000,11000,8000,13000,15000,14000]}) # 선그래프 plt.plot(df1['요일'],df1['매출액']) plt.title('요일별 매출액') plt.xlabel('요일') plt.ylabel('매출액(만원)') plt.show()
plt.bar(df1['요일'],df1['매출액'], hatch='/') plt.title('요일별 매출액') plt.xlabel('요일') plt.ylabel('매출액(만원)') plt.show()
# 샘플데이터 scores = pd.Series([0,10,15,15,15,16,19,20,21,25,25,26,26,29,30,35,36,37,39,40,41,41,44,45,45,45,45,47, 50,50,50,50,51,51,51,53,54,55,55,56,60,61,62,62,63,64,65,65,65,65,66,66,66,66,66, 67,68,68,69,70,70,70,70,70,70,70,70,71,71,71,71,71,72,72,72,72,73,74,74,74,75,75, 76,76,76,77,77,77,77,78,78,78,78,78,79,79,79,79,80,80,80,80,80,80,81,81,81,82,82, 85,85,85,88,88,89,90,90,90,93,93,95,95,95,97,100]) # 박스플롯 plt.boxplot(scores) plt.title('성적 분포') plt.ylabel('점수') plt.show()
※ 그래프 영역 채우기
- 가로방향으로 채우기
- plt.fill_between(x슬라이싱, y슬라이싱)
- 슬라이싱 범위가 같아야 한다.
x = [1,2,3,4] y = [1,4,3,6] plt.plot(x,y) plt.fill_between(x[1:3],y[1:3],color='skyblue',alpha=0.6,hatch='//') plt.show()
- 세로방향으로 채우기
- plt.fill_betweenx(y슬라이싱, x슬라이싱)
- 슬라이싱 범위가 같아야 한다.
x = [1,2,3,4] y = [1,4,3,6] plt.plot(x,y) plt.fill_betweenx(y[:2],x[:2],color='skyblue',alpha=0.3,hatch='//') plt.show()
- 두 그래프 사이 영역을 채우기
x = [1,2,3,4] y1 = [1,3,4,6] y2 = [2,4,7,9] plt.plot(x,y1) plt.plot(x,y2) plt.fill_between(x[1:3],y1[1:3],y2[1:3],color='darkorange',alpha=0.4,hatch='x') plt.show()
- 다각형 채우기: 그리기라고 생각해도 무방할 듯
- plt.fill([x축의 좌표들],[y축의 좌표들])
x = [1,2,3,4] y = [1,4,3,6] plt.plot(x,y) plt.grid() plt.fill([2.0,1.75,2.5,2.25,2],[2,2.5,3,1.5,2],alpha=0.2) plt.show()
※ 수평선, 수직선 그리기
- 수평선 그리기
- plt.axhline(y좌표, x축시작위치, x축끝위치)
수평선의 길이가 1이라고 했을 때 x축시작위치, x축끝위치를 지정한다.
따로 지정하지 않으면 x축 전범위에 걸쳐 그려진디ㅏ. - plt.hlines(y, x축시작좌표, x축끝좌표)
plt.plot([1,2,3,4], 'ko') plt.axhline(1,0.1,0.9, color='g') # x좌표와 상관없이 0~1 사이 plt.axhline(2,0,1,color='b',alpha=0.5,ls=':') plt.hlines(3,0.0,3,color='darkorange',ls='--') plt.show()
- 수직선 그리기
- axvline(x좌표, y축시작위치, y축끝위치)
수직선의 길이가 1이라고 했을 때 y축시작위치, y축끝위치를 지정한다.
따로 지정하지 않으면 y축 전범위에 걸쳐 그려진디ㅏ. - vlines(x, y축시작좌표, y축끝좌표)
plt.plot([1,2,3,4], 'ko') plt.axvline(1,0,.5,ls='--',color='r') plt.vlines(2,1.0,3.0,ls=':',color='g') plt.show()
※ 그래프에 설명 적기
- 텍스트 추가하기
- plt.text(x좌표, y좌표, 텍스트)
- rotation=회전각도
- ha : horizontal alignment
- va : vertical alignment
- 텍스트 상자
bbox = {'boxstyle':상자스타일, 'fc':facecolor,'ec':edgecolor,...}
boxstyle : 'round'/'square'
plt.plot([1,2,3,4], 'ko') plt.text(2.1,2.7,'x=2, y=3' ,ha='left' ,va='bottom' ,fontsize=11 ,rotation=-3 ,bbox={'boxstyle':'round','fc':'skyblue','ec':'b','alpha':0.3}) plt.axhline(3,ls=':',alpha=0.5,lw=0.5) plt.axvline(2,ls=':',alpha=0.5,lw=0.5) plt.plot(2,3,'ro') plt.show()
- 화살표와 텍스트 추가하기
- plt.annotate('텍스트',xy=(화살표x,화살표y))
- xytext=(텍스트x,텍스트y)
- arrowprops=화살표속성(딕셔너리))
- 화살표 속성
width: 화살표의 너비
headwidth: 화살표 머리 밑부분의 너비
headlength: 화살표 머리의 길이
shrink: 양쪽 끝에서 축소할 전체 길이의 비율
plt.plot([1,2,3,4], 'ko') plt.axhline(2,color='orange',lw=0.5,alpha=0.5,ls='--') plt.axvline(1,color='orange',lw=0.5,alpha=0.5,ls='--') plt.plot(1,2,'ro') plt.annotate('(x:1,y:2)' ,xy=(1,2) ,xytext=(1.2,2.3) ,arrowprops={'width':1,'headwidth':10 ,'headlength':10,'shrink':0.1 ,'facecolor':'g'} ,fontsize=12 ,color='r') plt.show()
※ 2중 y축 표시하기
- 두 가지 정보를 하나의 그래프에 그림
- 축을 분리하기 위해 객체지향으로 그린다.
- fig, ax = plt.subplots()
# 샘플데이터 age = [13,14,15,16,17] height = [160,165,170,173,177] weight = [80,85,83,78,73] # 축 분리 ( 객체지향으로 그림 ) fig,ax = plt.subplots() ax.bar(age,height,color='skyblue',width=0.5,ec='lightgray',label='height') ax.plot(age,weight,color='darkred',marker='o',ls='-.',label='weight') plt.legend() plt.show()
- 2중 y축 만들기
- x축을 공유하는 새로운 axes객체를 만든다.
axes객체.twinx()
fig,ax1 = plt.subplots() ax1.bar(age,height,color='skyblue',width=0.5,ec='lightgray',label='height') ax2 = ax1.twinx() ax2.plot(age,weight,color='darkred',marker='o',ls='-.',label='weight') plt.show()
- 축 레이블 표시
- axes객체.set_xlabel(x레이블)
- axes객체.set_ylabel(y레이블)
- y축 레이블 지정
- axes객체.set_ylim(y축눈금범위)
- y축 눈금 지정
- axes객체.set_yticks(y축눈금)
- axes객체.tick_params(...)
- 범례 표시
- axes객체별로 legend메소드 호출
- 그리드 표시
- axes객체.grid()
fig,ax1 = plt.subplots() ax1.bar(age,height,color='skyblue',width=0.5,ec='lightgray',label='height') ax2 = ax1.twinx() ax2.plot(age,weight,color='darkred',marker='o',ls='-.',label='weight') # 축 레이블 표시하기 ax1.set_xlabel('나이') ax1.set_ylabel('키(cm)') ax2.set_ylabel('몸무게(kg)') # y축 범위 지정하기 ax1.set_ylim(150,180) ax2.set_ylim(60,90) # y축 눈금 설정하기 ax1.set_yticks(height) ax2.set_yticks(weight) ax1.tick_params(axis='y',colors='skyblue') ax2.tick_params(axis='y',colors='darkred') # 범례 표시 ax1.legend() ax2.legend() # 그리드 표시 ax1.grid(axis='y',ls='--',color='skyblue') ax2.grid(axis='y',ls=':',color='pink') plt.show()
※ matplotlib으로 그린 그래프와 seaborn으로 그린 그래프 코드 비교
- 요일별 팁 비교
* matplotlib
# 데이터 가공 (day로 그룹핑해 tip의 평균 구한 dataframe 만들기) day_tip_mean = tips.groupby('day')['tip'].mean() # 그래프 그리기 plt.bar(day_tip_mean.index,day_tip_mean) plt.xlabel('day') plt.ylabel('tip') plt.title('요일별 팁 평균',size=15) plt.show()
* seaborn
→ sns.barplot(data=데이터프레임명, x=x축컬럼, y=y축컬럼)
→ 신뢰구간(CI)를 항상 기본 표시
# sns.barplot(data=데이터프레임명, x=x축컬럼, y=y축컬럼) sns.barplot(data=tips,x='day',y='tip',ci = None) plt.title('요일별 팁 평균',size=15) plt.show()
(추가) seaborn - 요일별 팀 합계(흡연자 비흡연자 구분)
sns.barplot(data=tips,x='day',y='tip',ci=None,estimator=sum,hue='smoker' ,palette={'Yes':'gray','No':'skyblue'}) plt.title('요일별 팁 합계',size=15) plt.grid(axis='y',ls=':') plt.show()
- 주문금액과 팁의 관계성
* matplotlib
# 요일에 따라 다른 색상 표시를 위해 요일별 서브셋 만들기 tips_sun = tips[tips['day']=='Sun'] tips_sat = tips[tips['day']=='Sat'] tips_thur = tips[tips['day']=='Thur'] tips_fri = tips[tips['day']=='Fri'] # 시각화 plt.scatter(tips_sun['total_bill'],tips_sun['tip'], label='Sun', s=tips_sun['size']*30,alpha=0.5) plt.scatter(tips_sat['total_bill'],tips_sat['tip'], label='Sat', s=tips_sat['size']*30,alpha=0.5) plt.scatter(tips_thur['total_bill'],tips_thur['tip'],label='Thur', s=tips_thur['size']*30,alpha=0.5) plt.scatter(tips_fri['total_bill'],tips_fri['tip'],label='Fri', s=tips_fri['size']*30,alpha=0.5) plt.legend() plt.xlabel('total_bill') plt.ylabel('tip') plt.show()
* seaborn
sns.scatterplot(data=tips,x='total_bill',y='tip',hue='day',size='size',alpha=0.5) plt.show()
- 연도별 월별 승객수 변화
* matplotlib
# 연도별 월별 피봇테이블 생성 flights_pivot = flights.pivot(index='year',columns='month',values='passengers') # 시각화 for i in range(12): plt.plot(flights_pivot.iloc[i],label=flights_pivot.index[i]) plt.legend() plt.show()
* seaborn
sns.lineplot(data=flights,x='month',y='passengers',ci=None,hue='year') plt.show()
※ seaborn을 활용한 여러 가지 그래프
- 샘플데이터 1
titanic = sns.load_dataset('titanic') titanic.head()
- 카운트플롯
- 데이터의 갯수를 카운트하여 시각화
- sns.countplot(data=데이터프레임, x=컬럼)
* 연령별 승선인원 카운트해 시각화
plt.figure(figsize=(15,4)) sns.countplot(data=titanic,x='age') plt.xticks(rotation=90) plt.grid(axis='y') plt.show()
- 러그플롯
- sns.rugplot(data=데이터프레임, x=컬럼)
* 연령대별 생존 및 사망자
sns.rugplot(data=titanic,x='age',hue='alive') plt.show()
- 샘플데이터 2
iris = sns.load_dataset('iris')
- 히스토그램
- sns.displot(data=데이터프레임, x=컬럼)
sns.displot(data=iris,x='petal_length',bins=20,rug=True,hue='species',kde=True) plt.show()
(막대 없이 곡선만 나타내고 싶을 때)
sns.displot(data=iris,x='petal_length',rug=True,hue='species',kind='kde') plt.show()
- 상자수염그래프, 파이올린플롯, 스트립플롯, 스웜플롯
- sns.boxplot(data=데이터프레임)
- sns.violinplot(data=데이터프레임)
- sns.stripplot(data=데이터프레임)
- sns.swarmplot(data=데이터프레임)
# 컬럼별 비교 plt.figure(figsize=(12,8)) # 박스플롯(왼쪽위) plt.subplot(221) sns.boxplot(data=iris) # 바이올린플롯(오른쪽 위) plt.subplot(222) sns.violinplot(data=iris) # 스트립플롯(왼쪽 아래) plt.subplot(223) sns.stripplot(data=iris) # 스웜플롯(오른쪽 아래) plt.subplot(224) sns.swarmplot(data=iris,s=2) plt.show()
# 품종별 비교 plt.figure(figsize=(12,8)) # 박스플롯 plt.subplot(221) sns.boxplot(data=iris,x='species',y='petal_length') # 바이올린플롯 plt.subplot(222) sns.violinplot(data=iris,x='species',y='petal_length') # 스트립플롯 plt.subplot(223) sns.stripplot(data=iris,x='species',y='petal_length') # 스웜플롯 plt.subplot(224) sns.swarmplot(data=iris,x='species',y='petal_length',s=2) plt.show()
※ 그룹 토의 결과
matplotlib과 seaborn의 차이에 대해 이야기를 나누었다. 토의를 통해 도출한 결론은 seaborn을 이용하기 위한 기반지식은 matplotlib을 통해 쌓을 수 있다는 것이다. seaborn에서는 손쉽게 시각화를 할 수 있는 만큼 자유도가 떨어지고, matplotlib에서는 하나하나 설정해야 하는 만큼 변형이 쉽고 자유도가 높다.
더불어, seaborn에서 그래프를 그릴 때 임의로 설정된 컬러나 팔레트가 아닌 직접 설정하여 색을 변경하는 방식을 토의하고 결론이 나지 않아 각자 구글링하며 찾아보았는데, list에 색상코드를 넣어 하나의 팔레트로 사용할 수 있다는 내용을 찾았다. 하지만, matplotlib으로 하는 것보다 상당히 까다로운 방식이었다.
'웅진 STARTERS 부트캠프' 카테고리의 다른 글
2주 3일차 TIL 정리 (0) 2023.02.15 2주 2일차 TIL 정리 (0) 2023.02.14 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화 직무(태블로) 1주차 학습일지 (0) 2023.02.12 1주 5일차 TIL 정리 (0) 2023.02.10 1주 4일차 TIL 정리 (0) 2023.02.09 - 데이터로부터 얻어진 아래의 다섯 가지 요약 수치를 사용해서 그려진다.