R ggplot2 패키지로 box-plot 을 그렸을 때 조금 더 손을 보고 싶을 때가 있습니다.  


가령, 배경색을 흰색으로 바꾸어서 좀더 깔끔하게 보이게 하고 싶을 수 있습니다. 혹은 라벨 길이가 너무 길거가 요인 개수가 너무 많아서 가로의 X축이 모자라서 라벨명이 짤리는 상황이 발생했을 때 라벨을 45도나 90도 돌려 줌으로써 긴 라벨을 온전히 그래프에 다 제시를 해줄 수도 있겠지요. 아니면 아예 라벨을 가로축이 아니라 세로축으로 제시를 해주는 것도 방법이겠구요. 


이에 이번 포스팅에서는 아래의 3가지 소소한 팁을 공유하고자 합니다. 



(1) ggplot 배경을 흰색으로 바꾸기 


(2) ggplot x축 라벨 각도를 90도 돌리기


(3) ggplot x축과 y축 바꾸기 (x축 라벨을 세로 축으로 옮기기)



예제로 사용한 데이터는 MASS 패키지의 Cars93 데이터프레임에 들어있는 '차종(Type)'과 '고속도로연비(MPG.highway)' 입니다. 



> library(ggplot2)

> library(MASS)

> str(Cars93)

'data.frame': 93 obs. of  27 variables:

 $ Manufacturer      : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...

 $ Model             : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...

 $ Type              : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...

 $ Min.Price         : num  12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...

 $ Price             : num  15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...

 $ Max.Price         : num  18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...

 $ MPG.city          : int  25 18 20 19 22 22 19 16 19 16 ...

 $ MPG.highway       : int  31 25 26 26 30 31 28 25 27 25 ...

 $ AirBags           : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...

 $ DriveTrain        : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...

 $ Cylinders         : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...

 $ EngineSize        : num  1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...

 $ Horsepower        : int  140 200 172 172 208 110 170 180 170 200 ...

 $ RPM               : int  6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...

 $ Rev.per.mile      : int  2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...

 $ Man.trans.avail   : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...

 $ Fuel.tank.capacity: num  13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...

 $ Passengers        : int  5 5 5 6 4 6 6 6 5 6 ...

 $ Length            : int  177 195 180 193 186 189 200 216 198 206 ...

 $ Wheelbase         : int  102 115 102 106 109 105 111 116 108 114 ...

 $ Width             : int  68 71 67 70 69 69 74 78 73 73 ...

 $ Turn.circle       : int  37 38 37 37 39 41 42 45 41 43 ...

 $ Rear.seat.room    : num  26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...

 $ Luggage.room      : int  11 15 14 17 13 16 17 21 14 18 ...

 $ Weight            : int  2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...

 $ Origin            : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...

 $ Make              : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...

 




  (1) ggplot 그래프 배경을 흰색으로 바꾸기 : theme_bw() 


기본 설정값을 사용해서 박스 그래프를 그려보면 아래와 같은 배경색으로 그래프가 나타납니다. 



# box-plot by default

ggplot(Cars93, aes(x=Type, y=MPG.highway)) +

  geom_boxplot()

 






ggplot 의 배경을 흰색으로 바꾸려면 theme_bw() 를 추가해주면 됩니다. 


 

# box-plot with white background

ggplot(Cars93, aes(x=Type, y=MPG.highway)) +

  geom_boxplot() +

  theme_bw() # white background 






 (2) ggplot x축 라벨 각도를 90도 돌리기 : theme(axis.text.x=element_text(angle=90, hjust=1))


이번에는 x축에 있는 '차종(Type)' 라벨을 90도 회전시켜서 세로로 세워보겠습니다.  

라벨이 길다거나 라벨 개수가 많아서 x축에 다 안들어가는 바람에 라벨이 짤리는 경우에 사용하면 유용합니다. 



# box-plot with axis label's angle of 90 degrees

ggplot(Cars93, aes(x=Type, y=MPG.highway)) +

  geom_boxplot() +

  theme_bw() +

  theme(axis.text.x=element_text(angle=90, hjust=1))




 




물론 라벨을 눕히는 각도를 'angle' 옵션을 사용해서 원하는 만큼 조절할 수도 있습니다.  

아래는 x축 라벨의 각도를 45도 회전시켜본 예제입니다. 



# box-plot with x axis label's angle of 45 degrees

ggplot(Cars93, aes(x=Type, y=MPG.highway)) +

  geom_boxplot() +

  theme_bw() +

  theme(axis.text.x=element_text(angle=45, hjust=1))


 





x축 라벨을 회전시킬 수 있으면 y축 라벨도 회전시킬 수 있겠지요? 

아래 예제는 왼쪽 세로의 y축 라벨을 45도 회전 시켜본 것입니다. 



# box-plot with y axis label's angle of 45 degrees

ggplot(Cars93, aes(x=Type, y=MPG.highway)) +

  geom_boxplot() +

  theme_bw() +

  theme(axis.text.y=element_text(angle=45, hjust=1))


 






 (3) ggplot x축과 y축의 위치를 바꾸기 : coord_flip()


아래는 coord_flip() 을 사용해서 x축의 '차종(Type)'을 세로축으로 옮기고, y축의 '고속도로연비(MPG.highway)'를 가로축으로 옮겨본 것입니다. 


x축의 라벨이 너무 많거나 길 경우에 이처럼 x축과 y축을 바꿔주면 라벨이 짤리는 경우 없이 세로로 길게 볼 수 있어서 유용합니다. 



# box-plot with the label at vertical axis

ggplot(Cars93, aes(x=Type, y=MPG.highway)) +

  geom_boxplot() +

  theme_bw() +

  coord_flip()






많은 도움이 되었기를 바랍니다. 


이번 포스팅이 도움이 되셨다면 아래의 '공감~'를 꾹 눌러주세요. ^^





저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by R Friend R_Friend

이번 포스팅에서는 외부의 엑셀(Excel) 파일로 존재하는 데이터를 RStudio 를 사용해서 R로 불러오기 하는 방법을 소개하겠습니다. 


저는 주로 DB에 직접 connect해서 데이터를 내리거나, 아니면 csv 나 txt 형태의 데이터를 R로 불러와서 분석에 사용하곤 합니다만(read.table() 함수 참고), 엑셀이 워낙 숫자 다루는데 강력하고 편리하다 보니 엑셀 데이터를 가져다가 R에서 사용해야 하는 경우도 있을 것입니다. 그리고 RStudio 에서 GUI로 Excel, SAS, SPSS, Stata 포맷을 데이터를 불러올 수 있는 기능이 있으니 클릭 몇 번으로 해결할 수 있으니 편리합니다. 


예제로 사용할 'cust_profile.xlsx'라는 이름의 엑셀 자료는 아래처럼 생겼습니다. 

(주의사항 1) 여러개의 sheet 중에서 'cust_profile' 라는 이름의 첫번재 sheet에 있는 데이터를 불러오고 싶습니다. 

(주의사항 2) 1~2번째 행(row)는 사용하지 않을 것이구요, 3번째 행부터 데이터를 불러오고 싶습니다.  1번째 열은 사용하지 않고 2번째 열부터 데이터를 불러오고 싶습니다. (정확히는 B3:E8 range)

(주의사항 3) 'gender' 열의 세번째 관측치 값이 결측값(missing value) 인데요, R로 불러왔을 때 결측값( 'NA')으로 잘 인식해서 불러오게 하고 싶습니다.  


[ 엑셀 예제 파일 ] 

* 실습 예제 엑셀 파일 첨부 ☞   cust_profile.xlsx



우선 R에서 "readex" package를 설치하고 로딩해보겠습니다. 


(1) {readxl} package 설치 및 로딩하기 



# installing and loading readxl package 

install.packages('readxl')

library(readxl)

 



엑셀 데이터를 R로 불러오는 방법에는 (a) R script를 이용하는 방법과,  (b) RStudio GUI 를 이용하는 방법의 2가지가 있습니다.  차례대로 소개하겠습니다. 


  (2) R script를 사용해서 엑셀 데이터 불러오기


엑셀 파일이 들어있는 경로(path), 사용할 sheet 이름, 불러올 데이터의 범위(range), 칼럼 이름(column name), 칼럼 유형(column type), cell 에 값이 비어있는 결측값에 사용할 문자열(비어 있으면 디폴트로 결측값으로 인식함)을 입력해주면 됩니다. 

> # importing excel file by using read_excel() function

> cust_profile <- read_excel("C:/Users/Administrator/Documents/cust_profile.xlsx", # path

+                            sheet = "cust_profile", # sheet name to read from

+                            range = "B3:E8", # cell range to read from

+                            col_names = TRUE, # TRUE to use the first row as column names

+                            col_types = "guess", # guess the types of columns

+                            na = "NA") # Character vector of strings to use for missing values

> str(cust_profile)

Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 5 obs. of  4 variables:

 $ ID    : chr  "c1" "c2" "c3" "c4" ...

 $ gender: chr  "F" "M" NA "M" ...

 $ age   : num  30 28 46 65 38

 $ name  : chr  "Kim" "Lee" "Park" "Moon" ...


> cust_profile

# A tibble: 5 × 4

     ID gender   age  name

  <chr>  <chr> <dbl> <chr>

1    c1      F    30   Kim

2    c2      M    28   Lee

3    c3   <NA>    46  Park

4    c4      M    65  Moon

5    c5      F    38  Choi






엑셀 데이터 크기가 커지면 행과 열의 범위(range)를 찾아서 정확히 입력하기가 번거로운 경우도 있을 텐데요, 아래처럼 처음의 2개의 행(row)은 무시하고(skip), 3번재 행부터 엑셀에서 데이터를 불러오라고 설정을 해주어도 결과는 똑같게 데이터를 불러올 수 있습니다. 


> # importing excel file using 'skip' option

> cust_profile_2 <- read_excel("C:/Users/Administrator/Documents/cust_profile.xlsx", # path

+                            sheet = "cust_profile", # sheet name to read from

+                            skip = 2, # Minimum number of rows to skip before reading anything

+                            col_names = TRUE, # TRUE to use the first row as column names

+                            col_types = "guess", # guess the types of columns

+                            na = "NA") # Character vector of strings to use for missing values

> cust_profile_2

# A tibble: 5 × 4

     ID gender   age  name

  <chr>  <chr> <dbl> <chr>

1    c1      F    30   Kim

2    c2      M    28   Lee

3    c3   <NA>    46  Park

4    c4      M    65  Moon

5    c5      F    38  Choi

 



다음으로 RStudio GUI 를 사용해서 클릭 몇 번으로 간단하게 엑셀 데이터 불러오는 방법을 소개하겠습니다. 


  (3) RStudio GUI 를 사용해서 엑셀 데이터 불러오기


(3-1) RStudio 우측 상단의 'Environments' 창에서 'Import Dataset' 메뉴를 선택한 후에, 'From Excel...' 하위 메뉴를 선택해보세요. 



(3-2) RStudio 의 'Import Excel Data' 창에서 왼쪽 하단의 'Import Options:' 화면에서 옵션을 입력하여 엑셀 데이터 불러오기



'Import Options:' 화면이 잘 안보일 것 같아서 아래에 확대해서 R Script 와 비교할 수 있도록 번호를 같이 표기해보았습니다. 


많은 도움 되었기를 바랍니다. 

이번 포스팅이 도움이 되었다면 아래의 '공감~♡'를 꾸욱 눌러주세요. ^^



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by R Friend R_Friend

지난번 포스팅에서는 

- RStudio 에 내장되어 있는 .Rmd 소스파일을 가지고 HTML 문서를 만들기와 

- servr 패키지의 rmdv2() 함수를 사용해서 .Rmd 소스파일을 렌더링해서 로컬 웹 서버(포트 4321)로 올리는 방법을 알아보았습니다. 


이번 포스팅부터는 .Rmd 소스파일 안으로 들어가서 하나씩 더 자세히 알아보도록 하겠습니다. 

.Rmd 소스파일은 (1) YAML Header, (2) Code Chunk, (3) Markdown text 로 구성됩니다.  이중에서 이번 포스팅에서는 먼저 (1) YAML Header부터 시작해보겠습니다. 


[ .Rmd source file 구성 ]


YAML Header에는 title, author, date, output 등의 메타정보를 지정합니다.  특히, output 필드에는  rmarkdown 문서의 포맷으로서 HTML, pdf, MS word, Beamer Presentation 등을 지정할 수가 있는데요, 이번 포스팅에서는 HTML output format 에 대해서 소개하겠습니다. 




YAML Header 작성에 지켜야하는 문법이 몇가지 있습니다. 


(1) YAML Header는 '---' 로 시작해서 안에 문서에 대한 메타정보를 작성하고 '---'로 끝을 냅니다. 

(2) 상하관계는 space bar 로 들여쓰기(보통 2칸)를 해서 구분합니다. 

(3) 각 필드는 colon (':') 을 이용해서 key : value 형태로 입력합니다. (예 title: "My_First_R_MarkDown")

(4) value 는 큰 따옴표(" ")나 작은 따옴표(' ')를 사용하거나 혹은 그냥 아무런 표시 없이 입력합니다.

(5) key : value 쌍에서 value가 2개 이상일 경우 (5-1) 대괄호([ ]) 안에 value를 나열하고 comma(,) 로 구분하거나, 또는 (5-2) 한 줄에 한개의 value를 hyphen ('-')을 사용해서 나열합니다. 

---

Seoul: [Jonro, Gangnam, Ganak]

Sungnam:

  - Bungdang

  - Suwon

  - Anyang

---  




이제 YAML Header 의 output: html_document 를 사용해서 HTML 문서의 옵션을 설정하는 방법을 소개하겠습니다.  그리 어렵지 않습니다. 


 (1) 목차 만들기 (Table of Contents) > toc: true


toc: true 옵션을 설정해주면 목차를 자동으로 생성해줍니다. 

toc_depth: 2 옵션을 설정해주면 목차를 자동 생성할 때 목차의 깊이(depth)를 어디까지 할지 지정해줄 수 있습니다. '2'로 하면 '##', '3'으로 하면 '###' 수준까지 목차를 알아서 만들어줍니다. 

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output

  html_document

    toc: true

    toc_depth: 2

--- 



 (2) 문서 단락 번호 자동부여 하기 (section numbering) > number_sections: true

문서의 단락('#', '##', '###' 등으로 구분)에 따라서 자동으로 문서 번호를 부여하기 위해서는 number_sections: true 옵션을 지정해주면 됩니다.  문서 작성할 때 알아서 스마트하게 번호를 따주면 실수할 염려도 없고 신경쓸 일도 없어서 아주 유용하겠지요?!

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output: 

  html_document: 

    toc: true

    toc_depth: 2

    number_sections: true

--- 



  (3) 유동적인 목차 만들기 (Floating TOC) > toc_float: true

만약 문서가 길다면 커서로 HTML 문서를 scrolling 하게 되면 상단에 위치한 목차(Table of Contents)가 시야에서 사라지게 됩니다.  그래서 목차를 보려면 다시 scroll up 해야 하는 불편이 있습니다.  이럴때 유용하게 사용할 수 있는 옵션이 toc_float: true 옵션입니다.  scroll 하면 목차가 현재 화면으로 따라다니면서 항상 목차를 볼 수 있도록, 그래서 목차의 특정 하위 목차를 선택하면 바로 그 목차 부분으로 직행할 수 있는 인터페이스를 제공해줍니다. 

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output: 

  html_document: 

    toc: true

    toc_depth: 2

    toc_float: true

    number_sections: true

---


toc_float: 옵션의 디폴트 설정은 collapsed: true (목차에 최상위 수준만 나타남), smooth_scroll: true (특정 목차를 마우스로 선택했을 때 웹 화면이 부드럽게 움직이면서 해당 목차로 이동) 인데요, 이걸 바꾸고 싶다면 아래처럼 설정을 바꾸면 됩니다. 상하 위계를 고려해서 들여쓰기(indentation) 주의해서 하시기 바랍니다. 

---

title: "My_First_R_MarkDown"

output:

  html_document:

    toc: true

    toc_float:

      collapsed: false

      smooth_scroll: false

---



  (4) 탭으로 구분하여 부분별 내용 만들기 (Tabbed Sections) > {.tabset} class


{.tabset} class attribute 을 사용하면 HTML 본문 내용을 탭(Tab) 으로 구분하고, 탭을 선택하면 그 부분의 내용이 나타나도록 할 수도 있습니다. 가령, 국가나 지역별로 매출, 수익 등을 표로 작성한 후에 국가나 지역을 탭(tba)으로 구분해 주면 원하는 국가나 지역 탭을 선택해서 볼 수 있어 편리할 것입니다. 

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output: 

  html_document: 

    toc: true

    toc_depth: 2

    toc_float:

      collapsed: true

      smooth_scroll: true

    number_sections: true

---


## Tab by country {.tabset}

### Korea

this tab is for Korea


### China

this tab is for Chian


### Japan

this tab is for Japan




  (5) HTML 문서 모습과 스타일 (Appearance and Style) > theme: cerulean

HTML 문서의 전체적인 모습과 스타일을 지정해줄 수 있는 theme 옵션에는 "default",  "cerulean", "journal", "flatly", "readable", "spacelab", "united", "cosmo", "lumen", "paper", "sandstone", "simplex", "yeti" 등이 있습니다.  

---

title: "My_First_R_MarkDown"

author: "RFriend"

date: '2017.05.02'

output: 

  html_document: 

    toc: true

    toc_float: true

    number_sections: true

    theme: journal

---


다양한 theme 중에서 아래 화면 캡쳐 예시를 참고해서 원하는 취향의 theme을 선택해서 지정해주면 됩니다. 


[ 다양한 HTML 문서 스타일 theme ]






많은 도움 되었기를 바랍니다. 

이번 포스팅이 도움이 되었다면 아래의 '공감~♡'를 꾸욱 눌러주세요. ^^







저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by R Friend R_Friend

지난번 포스팅에서는 knitr 을 사용해서 source file 로 부터  R code 를 실행하고 pandoc 패키지로 Markdown 문서를 HTML 로 변환하는 작업을 소개하였습니다. 

지난번 포스팅에 이어서, 이번 포스팅에서는현재 작업 경로에 있는 파일 중 '.Rmd' 확장자 이름을 가진 R Markdown 문서들에 대해서 knitr 이나 rmarkdown 을 사용해서 다시 컴파일하고, 이를 연동시켜서 HTML 페이지가 자동으로 갱신되도록 해주는 servr (Serve R Markdown based websites) 패키지의 rmdv2() 함수 사용법을 소개해보겠습니다. 간단히 말해서 R 과 HTML 페이지가 서로 연결되어서 R로 '.Rmd' 파일을 변경시키면 HTML 페이지가 자동으로 알아서 통신을 해서 문서를 갱신해준다는 뜻입니다. 


작업 순서는 아래와 같습니다. 


======================

1. 미리 만들어놓은 R Markdown Project 가 있다면 불러오기

2. servr 패키지 설치하고 불러오기 

3. rmdv2() 함수를 사용해서 '.Rmd' 파일을 다시 컴파일하고 HTML 페이지 자동 갱신하기

4. 데몬 중지시키기 : servr::daemon_stop() 함수

======================



1. 미리 만들어놓은 R Markdown Project 가 있다면 불러오기 


이전 포스팅에서 만들어 두었던 'RMarkDownDir' Project 를 불러오도록 하겠습니다. 아래의 화면캡쳐에 표시해 놓은 것처럼 RStudio Environment 화면 최우측 상단의 검정색 네모 상자에 아이콘을 클릭하면 Project list 가 나타나구요, 여기서 해당 프로젝트를 선택하면 됩니다. 

Project를 선택하고 나면 해당 디렉토리에 있는 파일들을 불러오며, 작업 경로가 자동으로 세팅되고, 추가 작업하고 저장하고, 버전관리하고, 이래저래 매우 편리합니다. 


[ R Project 리스트 확인하고 불러오기 ]



> # chceking working directory

> getwd()

[1] "C:/Users/Administrator/Documents/R_DynamicDoc/RMarkDownDir"

 



2. servr 패키지 설치하고 불러오기 


servr 패키지는 간단히 말해서 "A simple HTTP server in R" 입니다. 

(* https://cran.r-project.org/web/packages/servr/servr.pdf : Start an HTTP server in R to serve static files, or dynamic documents that can be converted to HTML files (e.g., R Markdown) under a given directory)


library(knitr)

library(rmarkdown)


# installing servr package

# Serve R Markdown based websites

install.packages("servr")

library(servr)




3. rmdv2() 함수를 사용해서 '.Rmd' 파일을 다시 컴파일하고 HTML 페이지 자동 갱신하기



# rendering .Rmd files, refreshing local web server automatically by using rmdv2() function

rmdv2(serve = TRUE, in_session = FALSE, daemon=TRUE)

 


- serve = TRUE : 웹사이트를 serve 함 

- in_session = FALSE : 현재의 R session 에서 R Markdown 을 rendering 하지 않고, 각각의 source document를 서로 다른 session 에서 컴파일 함 (default setting 은 FALSE 임)

- daemon = TRUE : 현재의 R session 을 막지않고 serve 함


우측 하단의 Viewer 창을 보면 아래 처럼 웹 경로가 미리보기처럼 생겼습니다. 



웹 브라우저를 하나 뜨우고서 'http://localhost:4321' 을 입력해보세요. 그러면 아래의 화면 캡쳐처럼 로컬 웹 서버에서 R Markdown Project 의 파일들과 경로를 볼 수 있습니다. 



위의 Index of ./  웹 화면에서 'My_First_R_MarkDown.html' 링크를 클릭하면 아래처럼  R Markdown 문서가 HTML 로 변환(텍스트, R code, R summary statistics, Plots) 된 결과를 볼 수 있습니다. 

전체 경로는 http://localhost:4321/My_First_R_MarkDown.html 이 되겠지요. 


4. 데몬 중지시키기 : daemon_stop() 함수


# To stop the server, use servr::daemon_stop() function

daemon_stop()

 


이상으로 R servr 패키지를 사용해서 .Rmd 파일들을 자동 rendering 하고 로컬 웹 서버로 올리는 방법 소개를 마치겠습니다. 


다음번 포스팅에서는 .Rmd 소스파일의 코드 문법에 대해서 알아보겠습니다. 


많은 도움 되었기를 바랍니다. 

이번 포스팅이 도움이 되셨다면 아래의 '공감~♡'를 꾸욱 눌러주세요. ^^

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by R Friend R_Friend


티스토리 툴바