jupyterLab+R,讓你更優雅的探索數據

2021-03-02 泥板書房
jupyterLab 是神馬東西?

現在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進行數據分析啦

jupyterLab的主要特性繪圖函數自動插入圖片ggplot2繪圖完美支持

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"))


leaflet地圖也很容易

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) 

Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies5.1 3.5 1.4 0.2 setosa4.9 3.0 1.4 0.2 setosa4.7 3.2 1.3 0.2 setosa4.6 3.1 1.5 0.2 setosa5.0 3.6 1.4 0.2 setosa5.4 3.9 1.7 0.4 setosa

matrix(1:15,nrow=3) 

1 4 7 10132 5 8 11143 6 9 1215更複雜的表格輸出

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>")) 

Regression Results

latex數學公式支持添加公式的方法

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:第一次寫,有什麼疏忽各位磚輕點拍

相關焦點

  • 利器 | JupyterLab 數據分析必備IDE完全指南
    相對於 Jupyter Notebook,它的集成性更強,更靈活並且更易擴展。它支持100種多種語言[2],支持多種文檔相互集成,實現了交互式計算的新工作流程^1[3]。如果說 Jupyter Notebook 像是一個交互式的筆記本,那麼 Jupyter Lab 更像是一個交互式的 VSCode。
  • JupyterLab Server 搭建與使用筆記
    # condaconda install -c conda-forge jupyterlab# pippip install jupyterlabnb_conda_kernels 是一個 Jupyter 的擴展功能(extension),可以管理多個 Conda 環境下的 Jupyter 核心(kernels),整合多 Conda
  • 氣象人的JupyterLab
    使用截圖簡單來說,這就是一個部署在伺服器上的Anaconda,用的的Jupyterlab的界面,您可以隨時隨地在任意電腦上打開一個瀏覽器(IE除外),輸入伺服器的網址,用戶密碼就能打開,還能下載數據,計算,繪圖,整合了常用的Grads,Fortran的內核,安裝了Basemap,Metpy,Siphon,Atmos,ecmwf_api,NCL_to_Python
  • JupyterLab 3.0,極其強大的下一代Notebook!
    JupyterLab 3.0 的安裝方式有 3 種,第一種採用 pip 方式進行安裝,代碼如下:pip install jupyterlab==3第 2 種採用 mamba(快速跨平臺軟體包管理器)方式進行安裝,代碼如下:mamba install -c conda-forge jupyterlab=3第 3 種採用
  • Python系列特別篇-Conda和JupyterLab
    如果你希望同時擁有超過7500個開源的軟體包,那麼請安裝Anaconda。官方建議安裝conda到本地用戶,而不是管理員。通過conda安裝jupyterlab,命令:conda install -c conda-forge jupyterlab(py37) mybook@h2r ~ % conda install -c conda-forge jupyterlabjupyterlab安裝後就可以通過jupyter命令來啟動lab
  • JupyterLab 3.0,極其強大的下一代notebook!
    JupyterLab 3.0 的安裝方式有 3 種,第一種採用 pip 方式進行安裝,代碼如下:pip install jupyterlab==3第 2 種採用 mamba(快速跨平臺軟體包管理器)方式進行安裝,代碼如下:mamba install -c conda-forge jupyterlab=3第 3 種採用 conda 方式進行安裝
  • JupyterLab 3.0,極其強大的下一代 notebook!
    JupyterLab 3.0 的安裝方式有 3 種,第一種採用 pip 方式進行安裝,代碼如下:pip install jupyterlab==3第 2 種採用 mamba(快速跨平臺軟體包管理器)方式進行安裝,代碼如下:mamba install -c conda-forge jupyterlab=3第 3 種採用 conda 方式進行安裝
  • JupyterLab最全詳解,如果你還在使用Notebook,那你就out了!
    Jupyter內核中運行的任何文本文件(Markdown,Python,R等)中啟用代碼模塊化界面:可以在同一個窗口同時打開好幾個notebook或文件(HTML, TXT, Markdown等等),都以標籤的形式展示,更像是一個IDE鏡像notebook輸出:讓你可以輕易地創建儀錶板同一文檔多視圖:使你能夠實時同步編輯文檔並查看結果支持多種數據格式
  • JupyterLab 與 Google Drive的完美融合!
    說到雲存儲選項,有太多的選項可供選擇:Google Drive、OneDrive和Dropbox適用於普通用戶,如果你想要更安全的服務但你可能對這些都不太感興趣,主要原因是我們想知道我的數據在哪裡,而「在某個遙遠的地方」並不能讓我們很滿意。這就是我們更熱衷於家庭雲解決方案的原因。今天我們將看到如何用JupyterLab設置Google Drive。
  • JupyterLab 簡介
    安裝JupyterLab需要預先安裝4.3或更新版本的Jupyter Notebook,可以用下面的命令查看當前版本:jupyter notebook --version通過conda安裝conda install -c conda-forge jupyterlab
  • 利器|JupyterLab 數據科學開發生產工具
    JupyterLab是一個基於web的交互式開發環境,是Jupyter的下一代Notebook界面,你可以用它編寫Jupyter notebook、輸入並運行代碼
  • 超強下一代 Jupyter Notebook :JupyterLab 3.0 正式發布
    JupyterLab 3.0 的安裝方式有 3 種,第一種採用 pip 方式進行安裝,代碼如下:pip install jupyterlab==3第 2 種採用 mamba(快速跨平臺軟體包管理器)方式進行安裝,代碼如下:mamba install -c conda-forge jupyterlab
  • 手把手教你配置JupyterLab 環境
    對於大型代碼庫,最好還是用傳統的 IDE 比較靠譜,但是數據分析等需要可視化操作的場景下,Jupyter Notebook比較適合。老胡比較喜歡的是JupyterLab,這是Jupyter目前主打的最新數據科學生產工具,你可以使用它編寫notebook、操作終端、編輯markdown文本、打開交互模式、查看csv文件及圖片等。
  • JupyterLab史上最全詳解,全網都在看,趕緊收藏
    Jupyter內核中運行的任何文本文件(Markdown,Python,R等)中啟用代碼模塊化界面:可以在同一個窗口同時打開好幾個notebook或文件(HTML, TXT, Markdown等等),都以標籤的形式展示,更像是一個IDE鏡像notebook輸出:讓你可以輕易地創建儀錶板同一文檔多視圖:使你能夠實時同步編輯文檔並查看結果支持多種數據格式
  • 首款 Jupyter 官方可視化 Debug 工具,JupyterLab 未來可默認支持 Debug
    如果讀者想要安裝這個新工具,那麼首先你需要為 JupyterLab 裝前端插件:jupyter labextension install @jupyterlab/debugger至於後端 Kernel,Jupyter 團隊表示目前 kernel 需要實現 Jupyter Debug Protocol,因此暫時只能用xeus-python:
  • 超強一代JupyterLab 3.0發布,兼具可視化調試、中文顯示、簡單交互界面等功能
    JupyterLab 3.0 的安裝方式有 3 種,第一種採用 pip 方式進行安裝,代碼如下:pip install jupyterlab==3第 2 種採用 mamba(快速跨平臺軟體包管理器)方式進行安裝,代碼如下:mamba install -c conda-forge jupyterlab
  • JupyterLab 3.0 發布:支持中文界面,安裝插件無需 Node.js
    當然,更簡單的方法是用pip安裝。例如,可以使用以下命令安裝簡體中文語言包:pip install jupyterlab-language-pack-zh-CN然後,你就會得到一個全中文的顯示界面:要使用可視調試器,你將需要一個支持調試的內核。例如第一個支持調試的Python Jupyter內核xeus-python。
  • JupyterLab 3.0發布:支持中文界面,安裝插件無需Node.js
    當然,更簡單的方法是用pip安裝。例如,可以使用以下命令安裝簡體中文語言包:pip install jupyterlab-language-pack-zh-CN然後,你就會得到一個全中文的顯示界面:要使用可視調試器,你將需要一個支持調試的內核。例如第一個支持調試的Python Jupyter內核xeus-python。
  • 8 款超級實用的 JupyterLab 插件,提升你的開發效率!
    JupyterLab  是數據科學界使用最廣泛的 IDEs 之一。在探索性分析方面,它是許多數據科學家的首選工具。JupyterLab 巧妙地將許多功能捆綁在一起,實現高效協作。它具有極強的擴展性,豐富的插件顯著提升編碼體驗,大大提高工作效率。
  • JupyterLab:數據分析程式設計師的必備筆記神器
    在 JupyterLab 中用 jupyterlab-drawio 擴展繪圖JupyterLab 是廣受歡迎的 Jupyter Notebook「新」界面。它是一個交互式的開發環境,可用於筆記本、代碼或數據,因此它的擴展性非常強。使用相關的擴展,可以添加一整套新功能,或者完全改變界面的運行方式。這些擴展是基於 TypeScript 火 JavaScript 寫的,它們在瀏覽器裡運行。經典的 Jupyter Notebook 擴展