29 R Markdown formatları
29.1 Giriş
Şimdiye kadar HTML belgeleri üretmek için kullanılan R Markdown kısımlarını gördünüz. Bu bölüm, R Markdown ile üretebileceğiniz diğer birçok çıktı türünden bazılarına kısa bir genel bakış sunar. Bir belgenin çıktısını ayarlamanın iki yolu vardır:
Kalıcı olarak YAML başlığını değiştirerek:
title: "Viridis Demo" output: html_document
Geçici olarak
rmarkdown::render()
öğesini çağırarak:::render("diamond-sizes.Rmd", output_format = "word_document") rmarkdown
Bu, özellikle programlı olarak birden çok çıktı türü üretmek istiyorsanız kullanışlıdır.
RStudio’nun knit butonu bir dosyayı output
(çıktı) alanında listelenen ilk format neyse onunla işler. Knit butonunun yanındaki açılır menüyü kullanarak ek biçimlerde oluşturabilirsiniz.
29.2 Çıktı seçenekleri
Her çıktı biçimi bir R fonksiyonu ile ilişkilidir. foo
ya da pkg::foo
yazabilirsiniz. Eğer pkg
’yi atlarsanız, varsayılan kurulum aracı rmarkdown olur. Çıktıyı yapan fonksiyonun adını bilmek önemlidir çünkü buradan yardım alabilirsiniz. Çıktıyı oluşturan fonksiyonun adını bilmek önemlidir çünkü buradan yardım alırsınız. Örneğin, html_document
ile hangi parametreleri ayarlayabileceğinizi anlamak için ?rmarkdown::html_document
dosyasına bakın.
Varsayılan parametre değerlerini geçersiz kılmak için genişletilmiş bir output
(çıktı) alanı kullanmanız gerekir. Örneğin, bir içindekiler tablosu içeren bir html_document
oluşturmak istiyorsanız, şunları kullanırsınız:
output:
html_document:
toc: true
toc_float: true
Hatta bir format listesi sağlayarak birden çok çıktıya dönüştürebilirsiniz:
output:
html_document:
toc: true
toc_float: true
pdf_document: default
Varsayılan seçeneklerden herhangi birini geçersiz kılmak istemiyorsanız kullandığınız argümanlara dikkat edin.
29.3 Dökümanlar
Önceki bölüm varsayılan ayarlar ile html_document
çıktısına odaklanmıştı. Bu alanda farklı türde belgeler oluşturan bir dizi temel seçenek vardır:
pdf_document
önceden yüklenmesi gereken LaTeX (açık kaynaklı bir belge düzeni sistemi) ile bir PDF oluşturur. LaTeX’e sahip değilseniz, RStudio zaten size soracaktır.word_document
Microsoft Word dosyaları icin (.docx
) kullanılır.odt_document
OpenDocument Metin dosyaları icin (.odt
) kullanılır.rtf_document
Rich Text Format (.rtf
) dosyaları içinmd_document
bir Markdown dosyası için kullanılır. Bu genellikle tek başına kullanışlı değildir, ancak örneğin kurumsal CMS’niz veya laboratuvar wiki’niz markdown kullanıyorsa çalıştırabilirsiniz.github_document
GitHub’da paylaşmak için tasarlanmıştır. Uyarlanmış birmd_document
versiyonu vardır.
Karar vericilerle paylaşmak üzere bir belge oluştururken, kurulum bölümünde genel seçenekleri ayarlayarak varsayılan kod görüntüsünü kapatabileceğinizi unutmayın:
::opts_chunk$set(echo = FALSE) knitr
html_document
dosyaları için başka bir seçenek de kod parçalarını varsayılan olarak gizli, ancak tek tıklama ile görünür kılmaktır:
output:
html_document:
code_folding: hide
29.4 Not defterleri
Not defteri olan html_notebook
, html_document
ilişkili bir tür dosyadır. İşlenen çıktılar çok benzer, ancak amaçları farklıdır. Bir html_document
karar vericilerle iletişim kurmaya odaklanırken, bir not defteri diğer veri bilimcilerle iş birliği yapmaya odaklanır. Bu farklı amaçlar, HTML çıktısının farklı şekillerde kullanılmasına yönlendirir. Her iki HTML çıktısı da tüm oluşturulmuş çıktıyı içerecektir, ancak not defteri ayrıca tam kaynak kodunu da içerir. Bu, not defteri tarafından oluşturulan .nb.html
dosyasını iki şekilde kullanabileceğiniz anlamına gelir:
Bir web tarayıcısında görüntüleyebilir ve oluşturulan çıktıyı görebilirsiniz.
html_document
türünden farklı olarak her zaman onu oluşturan kaynak kodun gömülü bir kopyasını içerir.RStudio’da düzenleyebilirsiniz. Bir
.nb.html
dosyasını açtığınızda, RStudio onu oluşturan.Rmd
dosyasını otomatik olarak yeniden oluşturacaktır. Gelecekte, gerektiğinde otomatik olarak ayıklanacak olan destekleyici dosyaları da (örn;.csv
veri dosyaları) dahil edebilirsiniz.
.nb.html
dosyalarını e-postayla göndermek, analizlerinizi iş arkadaşlarınızla paylaşmanın kolay bir yoludur. Ancak, değişiklik yapmak istedikleri anda işler zorlaşabilir. Bunu yaşarsanız Git ve GitHub’ı öğrenmenin zamanı gelmiştir. Git ve GitHub’ı öğrenmek ilk başta kesinlikle acı vericidir, ancak iş birliği getirisi çok büyüktür. Daha önce belirtildiği gibi Git ve GitHub bu kitabın kapsamı dışında ancak bunları zaten kullanıyorsanız işinize yarayacak bir ipucu var: Hem html_notebook
hem de github_document
çıktılarını birlikte kullanın:
output:
html_notebook: default
github_document: default
html_notebook
size yerel bir ön izleme ve e-posta yoluyla paylaşabileceğiniz bir dosya sunar. github_document
ise Git’te kontrol edebileceğiniz minimal bir md dosyası oluşturur. Bununla analizinizin (sadece kodun değil) sonuçlarının zaman içinde nasıl değiştiğini kolayca görebilirsiniz. Ayrıca GitHub çıktıyı sizin için çevrimiçi olarak güzel bir şekilde oluşturacaktır.
29.5 Sunumlar
R Markdown’ı sunum oluşturmak için de kullanabilirsiniz. Keynote veya PowerPoint gibi bir araca göre daha az görsel kontrole sahip olursunuz fakat R kodunuzun sonuçlarını bir sunuma otomatik olarak eklemek size uzun zaman kazandırabilir. Sunumlar, içeriğinizi her birinci (#
) veya ikinci (##
) düzey başlığında başlayan yeni bir slaytla slaytlara bölerek çalışır. Başlıksız yeni bir slayt oluşturmak için yatay bir (***
) kuralı da ekleyebilirsiniz.
R Markdown, yerleşik üç sunum biçimiyle birlikte gelir:
ioslides_presentation
- ioslides ile HTML sunumuslidy_presentation
- W3C Slidy ile HTML sunumubeamer_presentation
- LaTeX Beamer ile PDF sunumu
Paketler tarafından sağlanan diğer iki popüler format ise:
revealjs::revealjs_presentation
- HTML sunumu, revealjs gerektirir.rmdshower, https://github.com/MangoTheCat/rmdshower, shower etrafında bir çerçeve sağlar, shower bir sunum aracıdır. https://github.com/shower/shower
29.6 Panolar
Gösterge tabloları büyük miktarda veri bilgisini görsel ve hızlı bir şekilde iletmenin kullanışlı bir yoludur. Flexdashboard paketi R Markdown ile başlıkların düzeni nasıl etkilediğine ilişkin bir aracı kullanarak gösterge panoları oluşturmayı özellikle kolaylaştırır:
- Her 1. düzey başlık (
#
), gösterge tablosunda yeni bir sayfa başlatır. - Her 2. düzey başlık (
##
) yeni bir sütun başlatır. - Her 3. düzey başlık (
###
) yeni bir satır başlatır.
Örneğin aşağıdaki bu panoyu oluşturabilirsiniz:
Bu kodu kullanarak:
---
title: "Diamonds distribution dashboard"
output: flexdashboard::flex_dashboard
---
```{r setup, include = FALSE}
library(ggplot2)
library(dplyr)
knitr::opts_chunk$set(fig.width = 5, fig.asp = 1/3)
```
## Column 1
### Carat
```{r}
ggplot(diamonds, aes(carat)) + geom_histogram(binwidth = 0.1)
```
### Cut
```{r}
ggplot(diamonds, aes(cut)) + geom_bar()
```
### Colour
```{r}
ggplot(diamonds, aes(color)) + geom_bar()
```
## Column 2
### The largest diamonds
```{r}
diamonds %>%
arrange(desc(carat)) %>%
head(100) %>%
select(carat, cut, color, price) %>%
DT::datatable()
```
Flexdashboard ayrıca kenar çubukları, sekme seti, değer kutuları ve göstergeler oluşturmak için basit araçlar sağlar. Flexdashboard hakkında daha fazla bilgi edinmek için http://rmarkdown.rstudio.com/flexdashboard/ adresini ziyaret edin.
29.7 Etkileşim
Herhangi bir HTML biçimi (belge, not defteri, sunum veya pano) etkileşimli bileşenler içerebilir.
29.7.1 htmlwidgets
HTML etkileşimli bir biçimdir ve bir R fonksiyonu olan etkileşimli HTML görselleştirmeleri üreten htmlwidgets’dan yararlanabilirsiniz. Örneğin, aşağıdaki broşür haritasını deneyin. Bu sayfayı web’de görüntülüyorsanız, haritayı sürükleyebilir, yakınlaştırabilir ve uzaklaştırabilirsiniz, vb. Bunu bir kitapta doğal olarak yapamayacağınız için rmarkdown size otomatik olarak statik bir ekran görüntüsü ekler.
library(leaflet)
leaflet() %>%
setView(174.764, -36.877, zoom = 16) %>%
addTiles() %>%
addMarkers(174.764, -36.877, popup = "Maungawhau")
Htmlwidget’ların en güzel yanı onları kullanmak için HTML veya JavaScript hakkında hiçbir şey bilmenize gerek olmamasıdır. Tüm detaylar paketin içinde bulunur, bu yüzden endişelenmenize gerek yoktur.
Aşağıdakiler dahil htmlwidget’ları sağlayan birçok paket vardır:
dygraphs, http://rstudio.github.io/dygraphs/, etkileşimli zaman serisi görselleştirmeleri için kullanılır.
DT, http://rstudio.github.io/DT/, etkileşimli tablolar için kullanılır.
threejs, https://github.com/bwlewis/rthreejs etkileşimli 3d tablolar içindir.
DiagrammeR, http://rich-iannone.github.io/DiagrammeR/ diyagramlar içindir (akış şemaları ve basit düğüm-bağ diyagramları gibi).
Html widget’ları hakkında daha fazla bilgi edinmek ve bunları sağlayan paketlerin daha eksiksiz bir listesini görmek için: http://www.htmlwidgets.org/.
29.7.2 Shiny
htmlwidget’lar kullanıcı taraflı etkileşim sağlar, tüm etkileşim R’dan bağımsız olarak tarayıcıda gerçekleşir. Bu harikadır çünkü HTML dosyasını R ile herhangi bir bağlantı olmadan dağıtabilirsiniz. Ancak bu HTML ve JavaScript’te yapabileceğiniz şeyleri sınırlar. Alternatif bir yaklaşım, JavaScript yerine R kodunu kullanarak etkileşim oluşturmanıza izin veren bir paket olan Shiny’yi kullanmaktır.
Bir R Markdown belgesinden Shiny kodunu çağırmak için başlığa runtime: shiny
ekleyin:
title: "Shiny Web App"
output: html_document
runtime: shiny
Ardından, belgeye etkileşimli bileşenler eklemek için “input” girdi işlevlerini kullanabilirsiniz:
library(shiny)
textInput("name", "What is your name?")
numericInput("age", "How old are you?", NA, min = 0, max = 150)
Daha sonra girdi ismi (input$name
) ve girdi yaşı (input$age
) gibi değerlere başvurabilirsiniz. Bunları kullanan kod her değiştiğinde otomatik olarak yeniden çalıştırılacaktır.
Burada size shiny ile bir uygulama gösteremem çünkü shiny etkileşimleri sunucuda gerçekleşiyor. Bu, JavaScript bilmeden etkileşimli uygulamalar yazabileceğiniz, ancak bunları çalıştırmak için bir sunucuya ihtiyacınız olduğu anlamına gelir. Bu, lojistik bir sorunu ortaya çıkarır: Shiny uygulamalarının çevrimiçi olarak çalıştırılması için bir Shiny sunucusuna ihtiyacı vardır. Kendi bilgisayarınızda Shiny uygulamaları çalıştırdığınızda, shiny sizin için otomatik olarak bir sunucu kurar, ancak bu tür bir etkileşimi çevrimiçi yayınlamak istiyorsanız herkese açık bir Shiny sunucusuna ihtiyacınız vardır. Shiny kullanmanın temel risk getiri dengesi budur: bir Shiny belgesinde R’da yapabileceğiniz her şeyi yapabilirsiniz, ancak birinin R’ı çalıştırması gerekir.
Shiny ile ilgili diğer ayrıntılar için http://shiny.rstudio.com/.
29.8 Web siteleri
Biraz altyapı eklemesi ile eksiksiz bir web sitesi oluşturmak için R Markdown’ı kullanabilirsiniz:
.Rmd
dosyalarınızı tek bir dizine koyun. Ana sayfaindex.Rmd
olacaktır.
Örneğin;
```
name: "my-website"
navbar:
title: "My Website"
left:
- text: "Home"
href: index.html
- text: "Viridis Colors"
href: 1-example.html
- text: "Terrain Colors"
href: 3-inline.html
```
Bağımsız bir statik web sitesi olmaya hazır bir dosya dizini olan _site
oluşturmak için, veya web siteniz için bir RStudio Projesine sahipseniz, rmarkdown::render_site()
ile yürütün. RStudio, sitenizi oluşturmak ve ön izlemek için kullanabileceğiniz IDE’ye sekme ekleyecektir.
Daha fazlası için: http://rmarkdown.rstudio.com/rmarkdown_websites.html.
29.9 Diğer formatlar
Paketler daha da fazla çıktı seçeneği sunar.:
bookdown paketi, https://github.com/rstudio/bookdown, bu elinizdeki gibi kitapları yazmayı kolaylaştırır. Daha fazla bilgi e dinmek için tabii ki Bookdown ile yazılmış, Yihui Xie’nin Authoring Books with R Markdown kitabını okuyun. R toplulukları tarafından Bookdown kullanarak yazılmış diğer kitapları görmek için: http://www.bookdown.org
prettydoc paketi, https://github.com/yixuan/prettydoc/, bir dizi çekici tema ile belge formatları sağlar.
rticles paketi, https://github.com/rstudio/rticles, belirli bilimsel dergiler için uyarlanmış bir dizi formatı derler.
Daha fazla format listesi için http://rmarkdown.rstudio.com/formats.html adresine bakın. Ayrıca http://rmarkdown.rstudio.com/developer_custom_formats.html adresindeki talimatları izleyerek kendiniz de oluşturabilirsiniz.
29.10 Daha fazlası
Farklı formatlar kullanarak etkili iletişim hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları öneriyorum:
Sunum becerilerinizi geliştirmek için Neal Ford, Matthew McCollough ve Nathaniel Schutta yazarlığında hazırlanmış Presentation Patterns öneririm. Sunumlarınızı geliştirmek için uygulayabileceğiniz bir dizi etkili kalıp (hem düşük hem de yüksek düzeyde) sağlar.
Akademik konuşma yapacaksanız, Leek group guide to giving talks’ı okumanızı tavsiye ederim.
Kendim katılmadım ama Matt McGarrity’nin topluluk önünde konuşma konusundaki çevrimiçi kursu hakkında iyi şeyler duydum: https://www.coursera.org/learn/public-speaking.
Çok sayıda pano oluşturuyorsanız, Stephen Few’in Information Dashboard Design: The Effective Visual Communication of Data bölümünü okuduğunuzdan emin olun. Sadece güzel görünmekle kalmayıp gerçekten kullanışlı olan panolar oluşturmanıza yardımcı olacaktır.
Fikirlerinizi etkili bir şekilde iletmek genellikle grafik tasarım bilgisi gerektirir. The Non-Designer’s Design Book kitabi başlamak için harika bir yerdir.