R์๋ ๋ค์ํ ๊ธฐ๋ฅ์ด ๊ฐ๋ํฉ๋๋ค. ์๋์์๋ ๋ง์ ์ฌ๋๋ค์ด ์์ง ๋ชปํ๋ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด XNUMX๊ฐ์ง๋ฅผ ์๊ฐํ๊ฒ ์ต๋๋ค. ์ด ๊ธฐ์ฌ๋ ๋ด๊ฐ ์์
์ ์ฌ์ฉํ๋ R์ ์ผ๋ถ ๊ธฐ๋ฅ์ ๋ํ ๋ด ์ด์ผ๊ธฐ๊ฐ ๋๋ฃ ํ๋ก๊ทธ๋๋จธ๋ค๋ก๋ถํฐ ์ด๊ด์ ์ธ ๋ฐ์์ ์ป์๋ค๋ ๊ฒ์ ์๊ฒ ๋ ํ์ ๊ฒ์ฌ๋์์ต๋๋ค. ์ด๋ฏธ ์ด์ ๋ํด ๋ชจ๋ ๊ฒ์ ์๊ณ ๊ณ์๋ค๋ฉด ์๊ฐ์ ๋ญ๋นํ๊ฒ ๋์ด ์ฃ์กํฉ๋๋ค. ๋์์ ๊ณต์ ํ ๋ด์ฉ์ด ์์ผ๋ฉด ๋๊ธ๋ก ์ ์ฉํ ๋ด์ฉ์ ์ถ์ฒํด ์ฃผ์ธ์.
Skillbox๋ ๋ค์์ ๊ถ์ฅํฉ๋๋ค. ์ค๊ธฐ ์ฝ์ค
"ํ์ด์ฌ ๊ฐ๋ฐ์" .์๋ฆผ: "Habr"์ ๋ชจ๋ ๋ ์๋ฅผ ์ํ - "Habr" ํ๋ก๋ชจ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ Skillbox ๊ณผ์ ์ ๋ฑ๋กํ ๋ 10 ๋ฃจ๋ธ ํ ์ธ.
์ค์์น ๊ธฐ๋ฅ
์ ๋ ์ ๋ง๋ก switch()๋ฅผ ์ข์ํฉ๋๋ค. ์ค์ ๋ก ์ด๋ ๋ค๋ฅธ ๋ณ์์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ์ ํํ ๋ if ๋ฌธ์ ํธ๋ฆฌํ ๋จ์ถํ์ ๋๋ค. ์ด์ ์ ํ ํญ๋ชฉ์ ๊ธฐ๋ฐ์ผ๋ก ํน์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ก๋ํด์ผ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ด ๊ธฐ๋ฅ์ด ํนํ ์ ์ฉํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋๋ฌผ์ด๋ผ๋ ๋ณ์๊ฐ ์๊ณ ๋๋ฌผ์ด ๊ฐ, ๊ณ ์์ด, ํ ๋ผ์ธ์ง์ ๋ฐ๋ผ ํน์ ๋ฐ์ดํฐ ์งํฉ์ ์ ํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ธ์.
๋ฐ์ดํฐ < โ read.csv(
์ค์์น(๋๋ฌผ,
"๊ฐ" = "dogdata.csv",
"๊ณ ์์ด" = "catdata.csv",
"ํ ๋ผ" = "ํ ๋ผ๋ฐ์ดํฐ.csv")
)
์ด ๊ธฐ๋ฅ์ ํ๋ ์ด์์ ์ ๋ ฅ ๋ฉ๋ด ํญ๋ชฉ์ ๋ฐ๋ผ ๋ค์ํ ๋ฐ์ดํฐ ์ธํธ๋ ํ๊ฒฝ ํ์ผ์ ๋ก๋ํด์ผ ํ๋ Shiny ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํฉ๋๋ค.
RStudio์ฉ ๋จ์ถํค
์ด ํดํน์ R์ ๋ํ ๊ฒ์ด ์๋๋ผ RStudio IDE์ ๋ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋จ์ถํค๋ ํญ์ ๋งค์ฐ ํธ๋ฆฌํ๋ฏ๋ก ํ ์คํธ๋ฅผ ์ ๋ ฅํ ๋ ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค. ๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ๊ฒ์ %>% ์ฐ์ฐ์์ ๊ฒฝ์ฐ Ctrl+Shift+M์ด๊ณ <- ์ฐ์ฐ์์ ๊ฒฝ์ฐ Alt+-์ ๋๋ค.
๋ชจ๋ ๋จ์ถํค๋ฅผ ๋ณด๋ ค๋ฉด RStudio์์ Alt+Shift+K๋ฅผ ๋๋ฅด๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
flexdashboard ํจํค์ง
Shiny ๋์๋ณด๋๋ฅผ ๋น ๋ฅด๊ฒ ์์ํด์ผ ํ ๋ ๋์๋ณด๋ ํจํค์ง๋ณด๋ค ๋ ์ข์ ๊ฒ์ ์์ต๋๋ค. HTML ๋ฐ๋ก๊ฐ๊ธฐ๋ก ์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก ์ฌ์ด๋๋ฐ, ํ ๋ฐ ์ด์ ์ฝ๊ณ ์ํํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ ๋ชฉ ํ์์ค์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ํ์ด์ง์ ๋ฐฐ์นํ๊ณ ์์ด์ฝ, Github์ ๋ฐ๋ก๊ฐ๊ธฐ, ์ด๋ฉ์ผ ์ฃผ์ ๋ฑ์ ๋จ๊ธธ ์ ์๋ ๊ธฐ๋ฅ๋ ์์ต๋๋ค.
ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด Rmarkdown ํ๋ ์์ํฌ ๋ด์์ ์์ ํ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ํ๋์ Rmd ํ์ผ์ ๋ฐฐ์นํ ์ ์์ผ๋ฉฐ, ์๋ฅผ ๋ค์ด Shinydashboard๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋๋ ๊ฒ์ฒ๋ผ ์ฌ๋ฌ ์๋ฒ ๋ฐ UI ํ์ผ์ ๋ฐฐํฌํ ํ์๊ฐ ์์ต๋๋ค. ๋ณต์กํ ์์ ์ ์ํํ๊ธฐ ์ ์ ๊ฐ๋จํ ๋์๋ณด๋ ํ๋กํ ํ์ ์ ๋ง๋ค์ด์ผ ํ ๋๋ง๋ค flexdashboard๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํ ์๊ฐ ์์ ํ๋กํ ํ์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
R Shiny์ req ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฅ
R Shiny์์ ๊ฐ๋ฐํ๋ ๊ฒ์ ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค. ํนํ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ์ด์ํ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๊ณ์ํด์ ๋ํ๋ ๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ Shiny๋ ๊ฐ๋ฐ๋๊ณ ๊ฐ์ ๋๋ฉฐ ์ฌ๊ธฐ์ ์ค๋ฅ์ ์์ธ์ ์ดํดํ ์ ์๋ ๋ ๋ง์ ๊ธฐ๋ฅ์ด ๋ํ๋ฉ๋๋ค. ๋ฐ๋ผ์ req()๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋ช ํํ์ง ์์ ๋ "์๋" ์ค๋ฅ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด์ ์์ ๊ณผ ๊ด๋ จ๋ UI ์์๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค.
์ถ๋ ฅ$go_๋ฒํผ < โ ๋น๋๋::renderUI({
# ๋๋ฌผ ์ ๋ ฅ์ด ์ ํ๋ ๊ฒฝ์ฐ์๋ง ํ์ ๋ฒํผ
๋ฐ์ง์ด::req(์ ๋ ฅ$๋๋ฌผ)
# ํ์ ๋ฒํผ
๋ฐ์ง์ด::actionButton("์ด๋",
Paste("ํ๋", input$animal, "๋ถ์!")
)
})
์ ํจ์ฑ ๊ฒ์ฌ()๋ ๋ ๋๋งํ๊ธฐ ์ ์ ๋ชจ๋ ๊ฒ์ ํ์ธํ๊ณ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ธ์ํ๋ ์ต์ ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์๋ชป๋ ํ์ผ์ ์ ๋ก๋ํ๋ค๋ ๊ฒ์ ๋๋ค.
# csv ์ ๋ ฅ ํ์ผ์ ์ป์ต๋๋ค.
inFile < โ ์
๋ ฅ$ํ์ผ1
๋ฐ์ดํฐ < โ inFile$datapath
# ๊ฐ๊ฐ ์์ ๊ฒฝ์ฐ์๋ง ํ ์ด๋ธ์ ๋ ๋๋งํฉ๋๋ค.
๋ฐ์ง์ด::๋ ๋ํ
์ด๋ธ({
# ๊ณ ์์ด๋ ํ ๋ผ๊ฐ ์๋ ๊ฐ ํ์ผ์ธ์ง ํ์ธ
๋ฐ์ง์ด::ํ์ธ(
need("๊ฐ ์ด๋ฆ" %in% colnames(data)),
"๊ฐ ์ด๋ฆ ์ด์ ์ฐพ์ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ํ์ผ์ ๋ก๋ํ์
จ๋์?"
)
๋ฐ์ดํฐ
})
์ด๋ฌํ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ํ ์ถ๊ฐ ์ ๋ณด
์์คํ ํ๊ฒฝ์ ์์ ์ ์๊ฒฉ ์ฆ๋ช ์ ์ ์ฅ
์๊ฒฉ ์ฆ๋ช ์ ์ ๋ ฅํด์ผ ํ๋ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ ค๋ ๊ฒฝ์ฐ ์์คํ ํ๊ฒฝ์ ์ฌ์ฉํ์ฌ Github ๋๋ ๋ค๋ฅธ ์๋น์ค์์ ์์ ์ ์๊ฒฉ ์ฆ๋ช ์ ํธ์คํ ํ์ง ๋ง์ญ์์ค. ๋ฐฐ์น ์์:
Sys.setenv(
DSN = "database_name",
UID = "์ฌ์ฉ์ ID",
PASS = "๋น๋ฐ๋ฒํธ"
)
์ด์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธํ ์ ์์ต๋๋ค.
db < โ DBI::dbConnect(
drv = odbc::odbc(),
dsn = Sys.getenv("DSN"),
uid = Sys.getenv("UID"),
pwd = Sys.getenv("PASS")
)
ํนํ ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด์์ฒด์ ์์ ์ง์ ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํ๋ ๊ฒ์ด ๋์ฑ ํธ๋ฆฌํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ํญ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ฝ๋์์ ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค.
์คํ์ผ๋ฌ๋ก tidyverse ์๋ํ
์คํ์ผ๋ฌ ํจํค์ง๋ ์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ผ๋ฉฐ, ์ฝ๋ ์คํ์ผ์ tidyverse๋ก ์๋์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ค์ํ ์ต์ ์ด ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์๋ ์คํฌ๋ฆฝํธ์์ styler::style_file()์ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ํจํค์ง๋ ์ฃผ๋ฌธ์ ๋ณต์ํ๊ธฐ ์ํด ๋ง์ ์์ ์ ์ํํ์ง๋ง ์ ๋ถ๋ ์๋๋๋ค.
R ๋งํฌ๋ค์ด ๋ฌธ์ ๋งค๊ฐ๋ณ์ํ
๊ทธ๋์ ๋น์ ์ ๊ฐ์ ๊ดํ ๋ค์ํ ์ฌ์ค์ ๋ถ์ํ๋ ํ๋ฅญํ R Markdown ๋ฌธ์๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋์ผํ ์์ ์ ์ํํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์ง๋ง ๊ณ ์์ด์ ํจ๊ป๋ง ์ํํฉ๋๋ค. ๋ฌธ์ ์์ต๋๋ค. ๋จ ํ๋์ ๋ช ๋ น์ผ๋ก cat ๋ณด๊ณ ์ ์์ฑ์ ์๋ํํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด R ๋งํฌ๋ค์ด ๋ฌธ์๋ฅผ ๋งค๊ฐ๋ณ์ํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ง์ ๋ ๋ฌธ์์์ YAML ํค๋์ ๋ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํ ๋ค์ ๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํ์ฌ ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค.
โ ์ ๋ชฉ: "๋๋ฌผ ๋ถ์"
์ ์: "Keith McNulty"
๋ ์ง: "21๋
2019์ XNUMX์ผ"
์ถ๋ ฅ :
html_๋ฌธ์:
code_folding: "์จ๊ธฐ๊ธฐ"
๋งค๊ฐ ๋ณ์ :
๋๋ฌผ_์ด๋ฆ:
๊ฐ: ๊ฐ
์ ํ :
-๊ฐ
-๊ณ ์์ด
- ํ ๋ผ
์ฐ๊ตฌ ์ฐ์:
์
๋ ฅ: ์ฌ๋ผ์ด๋
์ต์ : 2000
์ต๋ : 2019
1 ๋จ๊ณ
๋ผ์ด๋ 1
XNUMX์: "
๊ฐ: [2010, 2017] โ
์ด์ ๋ฌธ์ ์ฝ๋์ ๋ชจ๋ ๋ณ์๋ฅผ params$animal_name ๋ฐ params$years_of_study๋ก ๋ฑ๋กํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ Knit ๋๋กญ๋ค์ด ๋ฉ๋ด(๋๋ knit_with_parameters())๋ฅผ ์ฌ์ฉํ์ฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
๊ณต๊ฐ
Revealjs๋ ๋ด์ฅ๋ R ์ฝ๋, ์ง๊ด์ ์ธ ํ์ ๋ฐ ์ฌ๋ผ์ด๋ ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฅญํ HTML ํ๋ ์ ํ ์ด์ ์ ๋ง๋ค ์ ์๋ ํจํค์ง์ ๋๋ค. HTML ๋จ์ถํค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ํ ์คํ์ผ ์ต์ ์ ์ฌ์ฉํ์ฌ ์ค์ฒฉ๋ ์ฌ๋ผ์ด๋ ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. HTML์ ๋ชจ๋ ์ฅ์น์์ ์คํ๋๋ฏ๋ก ๋ชจ๋ ํด๋ํฐ, ํ๋ธ๋ฆฟ ๋๋ ๋ ธํธ๋ถ์์ ํ๋ ์ ํ ์ด์ ์ ์ด ์ ์์ต๋๋ค. ์ ๋ณด ๊ณต๊ฐ๋ ํจํค์ง๋ฅผ ์ค์นํ๊ณ YAML ํค๋์์ ํธ์ถํ์ฌ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โ ์ ๋ชฉ: "People Analytics ์ธ๊ณ์ ๊ฐ์ฅ์๋ฆฌ ํ๊ตฌ"
์ ์: "Keith McNulty"
์ถ๋ ฅ :
๊ณต๊ฐjs::revealjs_presentation:
์ผํฐ: ๋ค
ํ
ํ๋ฆฟ:starwars.html
ํ
๋ง: ๊ฒ์
๋ ์ง: "HR Analytics Meetup London - 18๋
2019์ XNUMX์ผ"
๋ฆฌ์์ค_ํ์ผ:
- darth.png
- deathstar.png
- ํ์ธ์ด.png
- ๋ฐ๋ ๋์.png
-r2d2-XNUMXpio.png
-starwars.html
โstarwars.png
โstormtrooper.png
-
ํ๋ ์ ํ
์ด์
์์ค์ฝ๋
R Shiny์ HTML ํ๊ทธ
๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋จธ๋ R Shiny๊ฐ ๊ฐ์ง๊ณ ์๋ HTML ํ๊ทธ๋ฅผ ์ต๋ํ ํ์ฉํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ 110๊ฐ์ ํ๊ทธ์ ๋ถ๊ณผํ๋ฏ๋ก HTML ๊ธฐ๋ฅ์ด๋ ๋ฏธ๋์ด ์ฌ์์ ์ํ ์งง์ ํธ์ถ์ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋๋ ์ต๊ทผ์ ์์ ์ด ์๋ฃ๋์์ ๋ ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๋ "์น๋ฆฌ" ์๋ฆฌ๋ฅผ ์ฌ์ํ๊ธฐ ์ํด tagged$audio๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
์นญ์ฐฌํจํค์ง
์ด ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ์ฌ์ฉ์์๊ฒ ์นญ์ฐฌ์ ํ์ํ๋ ๋ฐ ํ์ํฉ๋๋ค. ์ด์ํด ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ๊ทธ๊ฒ์ ์ข์ํฉ๋๋ค.
Skillbox๋ ๋ค์์ ๊ถ์ฅํฉ๋๋ค.
- XNUMX๋ ์ค์ต ์ฝ์ค
"์ ๋ PRO ์น ๊ฐ๋ฐ์์ ๋๋ค" .- ์จ๋ผ์ธ ์ฝ์ค
"C# ๊ฐ๋ฐ์" .- ์ค๊ธฐ ์ฝ์ค
"0์์ PRO๋ก์ PHP ๊ฐ๋ฐ์" .
์ถ์ฒ : habr.com