現在Rstudio已經成為R社區使用最廣泛的集成編輯器,其在配合Rstudio公司開發的軟體包使用上有天然的優勢,如knitr、bookdown、blogdown、sparklyr、tidyverse等,讓我們在數據導入、清洗、可視化、分析過程中少踩了不少坑。
然而,有時候我們也會發現,利用Rmarkdown進行探索性數據分析時,尤其是初學者,總是不斷花費時間在文檔編譯上,而壓縮了真正數據探索的時間。很多時候,我很羨慕python用戶,因為他們擁有Ipython、jupyter notebook等工具,讓我們一邊分析數據,一邊插入markdown文本,並且還能實時看到結果,這些特性R用戶也可以實現嗎?當然,這就是我今天推薦的jupyterlab 編輯器。
安裝jupyterLab首先我們要明白,jupyterLab是一個python包,所以要使用jupyterLab首先要配置python環境。對於普通用戶,包括linux、win和Mac用戶,建議直接下載anaconda發行版進行安裝,這樣免去了既要安裝python又要安裝其他包的麻煩,是最簡潔的方法。
對於平時很少使用python的人來說,可能無法忍受anaconda全家桶式的安裝模式,想更輕便的安裝使用,那也很容易。
1. 安裝
Mac 和 Linux用戶系統自帶了python,可以直接使用pip install jupyterlab安裝jupyterLab包。
win用戶先在python官網下載安裝python,然後使用pip install jupyterlab安裝jupyterLab包。
2. 運行
在終端輸入jupyter lab即可以在默認瀏覽器中打開編輯器界面,若不能,請檢查下python路徑配置是否正確。
「咦,怎麼只能選擇python,R去哪了」,各位看官莫急,這是因為R端缺少必要的包,還不能和jupyter進行通信,等把這些包安裝好進行配置後就可以了。
3. 配置R
⚠️ 要把先前打開的jupyterLab程序全部關閉後再進行以下操作
#安裝必要的依賴包
install.packages(c('repr', 'IRdisplay',
'evaluate', 'crayon',
'pbdZMQ', 'devtools',
'uuid', 'digest'))
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec()
4. 再次在終端運行`jupyter lab`,選擇R圖標打開,你就可以在jupyterLab進行數據分析啦
options(repr.plot.width=7, repr.plot.height=5)
library(WDI)
library(ggplot2)
# 獲取數據
dat <- WDI(indicator='NY.GNP.PCAP.CD',
country=c('CL','HU','UY'), start=1960, end=2012)
p <- ggplot(dat, aes(year, NY.GNP.PCAP.CD, color=country)) +
geom_line() +
xlab('Year') +
ylab('GDI per capita (Atlas Method USD)') +
labs(title <- "GNI Per Capita ($USD Atlas Method)")
p
library(plotly)
ggplotly(p)
也可以直接插入plotly包官網示例,這裡需要用到IRdisplay包提供的函數。其核心思想是使用display_html()函數將示例網頁封裝為iframe進行輸出。
這一方法可以用來插入任何網頁,包含視頻、音頻等等。當然,相應地高度、寬度需要進行針對性調整。
library(IRdisplay)
plotly_iframe <- function(url) {
w <- "750"
h <- "600"
html <- paste("<center><iframe height=\"", h,
"\" id=\"igraph\" scrolling=\"no\"
seamless=\"seamless\"\n\t\t\t\tsrc=\"",
url, "\" width=\"", w,
"\" frameBorder=\"0\"></iframe></center>",
sep="")
return(html)
}
display_html(plotly_iframe("https://plot.ly/~ggplot2examples/98"))
library(leaflet)
library(leafletCN)
m <- leaflet() %>%
amap() %>%
addMarkers(lng=121.48024, lat=31.23631, popup="Shanghai")
htmlwidgets::saveWidget(m, 'leaflet.html', selfcontained = FALSE)
display_html(paste("<center>","\n",'<iframe src="leaflet.html"
width="960" height="500",align="absmiddle"></iframe>',"\n","</center>"))
data(iris)
head(iris)
matrix(1:15,nrow=3)
m <- DT::datatable(iris[1:20, c(5,1:4)], rownames = FALSE)
htmlwidgets::saveWidget(m, 'demo.html', selfcontained = FALSE)
display_html(
paste("<center>","\n",
'<iframe src="demo.html" width="1050" height="600">
</iframe>',
"\n","</center>"))
library(stargazer)
library(IRdisplay)
library(magrittr)
m <- capture.output(stargazer(attitude,type='html'))
display_html(paste("<center>","\n",m,"\n","</center>"))
linear.1 <- lm(rating ~ complaints + privileges + learning + raises + critical,
data=attitude)
linear.2 <- lm(rating ~ complaints + privileges + learning, data=attitude)
attitude$high.rating <- (attitude$rating > 70)
probit.model <- glm(high.rating ~ learning + critical + advance, data=attitude,
family = binomial(link = "probit"))
outreg <- capture.output(
stargazer(linear.1, linear.2, probit.model,
title="Regression Results", align=TRUE,
dep.var.labels=c("Overall Rating","High Rating"),
covariate.labels=c("Handling of Complaints",
"No Special Privileges",
"Opportunity to Learn",
"Performance-Based Raises",
"Too Critical","Advancement"),
omit.stat=c("LL","ser","f"),
no.space=TRUE,type='html')
)
display_html(paste("<center>","\n",outreg,"\n","</center>"))
jupyterLab 數學公式本質上是調用的MathJax宏包進行處理的,因此要使用數學公式需要把單元格設置為markdown模式。可以通過下拉菜單進行手動設置,也可以選中單元格,按esc退出編輯模式,然後按m進行設置。
1. 行內公式
行內公式樣式為$行內公式$,公式內容通過兩個美元符號包裹起來。例如,這裡是行內公式$\sum_{k=1}^\infty\frac{x^n}{n!}$,編譯後顯示為∑k=1∞xnn!∑k=1∞n!xn。
2. 行間公式
行間公式樣式為$$行間公式$$,公式內容前後各兩個美元符號。例如,這裡是行間公式$$x^n+y^n=z^n$$,編譯後顯示為:
更複雜的數學公式解決辦法很多時候需要寫條件函數,需要使用cases環境。
$$
f(n) =
\begin{cases}
n/2, & \text{if $n$ is even} \\
3n+1, & \text{if $n$ is odd}
\end{cases}
$$
公式組使用array環境。
\left\{
\begin{array}{c}
a_1x+b_1y+c_1z=d_1 \\
a_2x+b_2y+c_2z=d_2 \\
a_3x+b_3y+c_3z=d_3
\end{array}
\right.
矩陣代數直接使用matrix環境。
X=\left(
\begin{matrix}
x_{11} & x_{12} & \cdots & x_{1d}\\
x_{21} & x_{22} & \cdots & x_{2d}\\
\vdots & \vdots & \ddots & \vdots\\
x_{m1} & x_{m2} & \cdots & x_{md}\\
\end{matrix}
\right)
=\left(
\begin{matrix}
x_1^T \\
x_2^T \\
\vdots\\
x_m^T \\
\end{matrix}
\right)
對齊使用align環境。
\begin{align}
\frac{\partial J(\theta)}{\partial\theta_j}
& = -\frac1m\sum_{i=0}^m(y^i-h_\theta(x^i)) \frac{\partial}{\partial\theta_j}(y^i-h_\theta(x^i)) \\
& = -\frac1m\sum_{i=0}^m(y^i-h_\theta(x^i)) \frac{\partial}{\partial\theta_j}(\sum_{j=0}^n\theta_jx_j^i-y^i) \\
& = -\frac1m\sum_{i=0}^m(y^i-h_\theta(x^i))x^i_j
\end{align}
最後還說下公式自動編號。我在測試時直接使用equation環境並沒有得到編號的公式。具體原因我還不清楚。
\begin{equation}
a+b = 1 \\
c+d = 2
\end{equation}
要熟悉jupyter快捷鍵,必須要要清楚jupyter單元格(cell)分編輯模式和非編輯模式,快捷鍵都是在非編輯模式下才能起作用。
Shift + Enter:運行本單元,選中下個單元
Ctrl + Enter:運行本單元
Esc:切換單元格為非編輯模式
Enter:切換單元格為編輯模式
dd:刪除選中單元格
A:在上方插入單元格
B:在下方插入單元格
M:切換單元格為markdown模式
R:切換單元格為raw模式
Y:切換單元格為code模式
jupyter 提供了大量的快捷鍵方便使用,平時我用的最多的就上面一些,其他的可以參照lawme的專欄文章。
寫在最後的話
jupyterLab比較適合進行探索性數據分析和學習,在使用過程中最大的缺點是當文檔過大,或者涉及很多動態頁面生成時容易卡頓。與之相對的,使用Rstudio結合Rmarkdown生成最終報告文檔可能更合適,兩者各有優缺點,需要結合使用。
PS:第一次寫,有什麼疏忽各位磚輕點拍