《R語言遊戲數據分析與挖掘》一2.1 開發環境準備和快速入門
2.1 開發環境準備和快速入門
2.1.1 R語言簡介
R語言的前身是S語言,S語言是由AT &T Bell實驗室的Rick Becker、John Chambers和Allan Wilks開發的一種用來進行數據探索、統計分析、作圖的解釋型語言。最初S語言的實現版本主要是S-PLUS。S-PLUS是一個商業軟件,它基於S語言,並由MathSoft公司的統計科學部進一步完善。而R語言最初由來自新西蘭大學的Ross Ihaka和Robert Gentleman開發(由於他們的名字都以R開頭,所以該軟件被命名為R)。因為R語言是基於S語言的一個GNU項目,所以也可以當作S語言的一種實現,通常用S語言編寫的代碼都可以不做修改地在R語言環境下運行。
R語言是一套開源的數據分析解決方案,幾乎可以獨立完成數據處理、數據可視化、數據建模及模型評估等工作,而且可以完美配合其他工具進行數據交互。具體來說,R語言具有以下優勢:
1)R語言作為一種GNU項目,開放了全部源代碼,用戶可以免費下載使用和修改。
2)R語言可以運行在多種平台上,包括Windows、UNIX和Mac OS。
3)R語言可以輕鬆地從各種類型的數據源導入數據,包括文本文件、數據庫管理係統、統計係統乃至Hadoop、Spark等。它同樣可以將數據輸出並寫入這些係統中。
4)R語言內置多種統計學及數據分析功能。因為有S的血緣,所以R比其他統計學或數學專用的編程語言有更強的麵向對象的功能。
5)R語言擁有頂尖的製圖功能。不僅有 lattcie包、ggplot2包對複雜數據進行可視化,更有rCharts包、recharts包、plotly包實現數據交互可視化,甚至可以利用功能強大的shiny包實現R與Web整合部署,構建網頁應用,幫助不懂CSS、HTML的用戶利用R快速搭建自己的數據分析App應用。
當然,R語言也存在一些固有的缺點,目前主要的問題有如下三點:
1)R語言是一種解釋型語言,和編程語言相比,速度顯得略慢一些,但是隨著硬件和R自身的發展,這個問題已經被慢慢弱化了,而且如果能夠熟練運用向量化運算,可以大大提高速度,並且若使用R內置的分析函數,效率高很多,因為很多函數都是由C或者Fortran編寫的。
2)R所有的計算實際是基於內存進行的,這就意味著,在處理數據的過程中,數據必須完整地裝入內存當中,這在處理小型數據是沒有任何問題的,但是當遇到大數據時,問題就會變得很嚴重。但是,這個問題也得到了一定的解決,可以利用並行包提升R的性能,或者利用R結合Hadoop的方式進行大數據分析工作。
3)由於R語言的自由,各種包的編寫者來自不同的領域,所以在一定程度上是比較混亂的,沒有統一的命名格式,參數格式不一,源代碼和文檔質量良莠不齊。
2.1.2 R的安裝
截至目前(撰寫本書時),R的最新版本是3.4.0,可以在CRAN(Comprehensive R Archive Network)獲取最新版本。在https://www.r-project.org/頁麵點擊download R可以進入CRAN鏡像站地址https://cran.r-project.org/mirrors.html,其中包含中國大陸地區的7個鏡像地址,你可以選擇距離最近的地址進入其鏡像的詳細頁麵。此外,通過該頁麵可以下載Linux、MacOS和Windows操作係統的安裝包。如果需要安裝舊版的R,可以到https://cran.r-project.org/bin/下載對應的版本。
本書使用的是Windows操作係統下的R 3.2.2版本。直接雙擊下載好的R-3.2.2-win.exe進行安裝即可。安裝完成後,雙擊桌麵圖標啟動R,打開如圖2-1所示的界麵。
R的界麵相當簡潔,隻有為數不多的幾個菜單欄和快捷按鈕。快捷按鈕下麵是主控製台,它是輸入腳本和執行結果窗口。
2.1.3 其他輔助工具
與傳統的數據挖掘工具SAS、SPSS和IBM SPSS Modeler等軟件相比,R的缺點在於沒有友好的操作菜單,這會使很多熟悉其他工具的用戶起初會覺得很困難。幸好,R自由的特性得到很好的發揮,有用戶貢獻的R包實現了很多功能的菜單化操作。下麵介紹一個比較友好的編輯器和一個可以實現菜單化操作完成數據挖掘工作的包。
雖然現在有很多可用的IDE,但是現在最好用的應該是Rstudio,它是專門用於R語言環境的IDE。Rstudio可用於Windows、Mac和Linux,並且可以在Linux環境中安裝Rstudio-Server,它允許用戶通過一個Web瀏覽器的標準Rstudio界麵來對RStudio進行多人協同操作。
RStudio可以從其官網https://www.rstudio.com/免費下載安裝。一般情況下,下載安裝桌麵版即可。安裝完啟動RStudio的基本界麵如圖2-2所示。
左上方的窗口是文本編輯器,具有強大的功能,可以在文本編輯器寫好腳本,單擊Run按鈕(或者利用Ctrl+R快捷鍵)批量運行代碼;右上方的窗口包括當前環境下的信息、曆史命令;左下方的窗口是標準的R控製台;右下方的窗口包括文件路徑、繪圖窗口、已經在本地安裝的包信息、幫助文檔以及交互繪圖時的圖形瀏覽界麵。
Rattle是一個用於數據挖掘的R的圖形交互界麵(GUI),可用於快捷處理常見的數據挖掘問題。從數據的整理到模型的評價,Rattle給出了完整的解決方案。Rattle和R平台良好的交互性,又為用戶使用R語言解決複雜問題開啟了方便之門。Rattle易學易用,不要求很多的R語言基礎,如今已被廣泛應用於數據挖掘實踐和教學之中。
Rattle初始界麵如圖2-3所示。
> library(rattle)
Rattle: A free graphical interface for data mining with R.
XXXX 4.1.0 Copyright (c) 2006-2015 Togaware Pty Ltd.
鍵入'rattle()'去輕搖、晃動、翻滾你的數據。
> rattle()
Rattle的標簽欄已經集成數據導入、數據探索、數據檢驗、數據轉化、數據建模及模型評估功能,可以通過鼠標單擊的方式完成一整套的數據挖掘工作,並且可以利用Log日誌查看每個操作的R腳本實現,借此來學習R語言的代碼規範及編寫。
2.1.4 R快速入門
R是一種區分大小寫的解釋型語言,程序內置的函數可以滿足基本的數據分析需求,並有豐富的幫助文檔幫助新手快速上手。此外,也有很多用戶貢獻了高質量的包,極大地擴展了R的功能,例如,用來進行數據處理的resharp2包、用來畫圖的ggplot2包和R與Web整合部署的shiny包。
1.新手上路
可以在命令提示符(>)後每次輸入一條命令,或者一次性執行腳本文件裏的一組命令。R語言是解釋型語言,輸入命令後可以實時響應,就好像計算器一樣。
> 1+1
[1] 2
如果R監測到輸入的命令行未結束,就會給出一個提示符“+”,提示要在下一行繼續輸入未完的命令,直到從語法角度來講命令已經輸入完整為止,不然R會有“unexpected end of input”的錯誤提示。
> 1+
+
錯誤: unexpected end of input
> 1+
+ 1
[1] 2
R語言的標準賦值符號是<-,也可以用=。例如,將序列1:10賦予對象a,可以執行如下操作。
> a = 1:10
此時,如果想查看對象a,直接輸入小寫a即可,但由於R是一種區分大小寫的解釋型語言,此時如果輸入大寫A,則會報錯:
> a
[1] 1 2 3 4 5 6 7 8 9 10
> A
錯誤: 找不到對象'A'
不僅僅針對數據對象,對於其他對象,R也是區分大小寫的。例如,R自帶的一個求相關係數的cor函數,如果我們錯寫為Cor函數,則會出現“沒有"Cor"這個函數”的錯誤提示。
> cor(iris[,1:4])
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.0000000 -0.1175698 0.8717538 0.8179411
Sepal.Width -0.1175698 1.0000000 -0.4284401 -0.3661259
Petal.Length 0.8717538 -0.4284401 1.0000000 0.9628654
Petal.Width 0.8179411 -0.3661259 0.9628654 1.0000000
> Cor(iris[,1:4])
錯誤: 沒有"Cor"這個函數
2.獲得幫助
R提供了大量的幫助文檔,學會如何使用這些幫助文檔可以讓你快速上手。如果想知道某個函數或者數據集的信息,可以輸入一個問號?,後麵加上函數名。如果想查找某個函數,可以輸入兩個問號??,後麵加上與此函數相關的關鍵詞。函數help及help.search分別等同於?及??。例如:
?median # 等價於help("median"),查看中位數函數的幫助文檔
??median # 等價於help.serach("median") 搜索包含median的幫助信息
如果使用的是RStudio,也可以在Help中右上角的搜索框中輸入median,查看該函數的幫助文檔,如圖2-4所示。
默認情況下,help隻能查找已經加載到內存中擴展包的函數和數據,如果想查找那些未加載到內存擴展包中的函數和數據,需要指定help函數的package參數中的具體包名或者將try.all.package參數設置為TRUE。例如,想查找shiny包中的runExample函數:
> help("runExample")
No documentation for 'runExample' in specified packages and libraries:
you could try '??runExample'
> help("runExample",package = "shiny")
> help("runExample",try.all.packages = TRUE)
appropos函數能找出所有名字中含有“關鍵字”的函數,隻在載入的包中搜索。例如:
> apropos("plot")
[1] ".__C__recordedplot" "assocplot" "barplot"
[4] "barplot.default" "biplot" "boxplot"
[7] "boxplot.default" "boxplot.matrix" "boxplot.stats"
[10] "cdplot" "coplot" "fourfoldplot"
[13] "interaction.plot" "lag.plot" "matplot"
[16] "monthplot" "mosaicplot" "plot"
[19] "plot.default" "plot.design" "plot.ecdf"
[22] "plot.function" "plot.new" "plot.spec.coherency"
[25] "plot.spec.phase" "plot.stepfun" "plot.ts"
[28] "plot.window" "plot.xy" "preplot"
[31] "qqplot" "recordPlot" "replayPlot"
[34] "savePlot" "screeplot" "spineplot"
[37] "sunflowerplot" "termplot" "ts.plot"
大多數函數都已經有相應的例子幫助我們了解該函數的工作原理。可以通過example函數來查看它們。例如:
> example("median")
median> median(1:4) # = 2.5 [even number]
[1] 2.5
median> median(c(1:3, 100, 1000)) # = 3 [odd, robust]
[1] 3
可以通過data函數查看datasets包中的數據集,如果要查看本地安裝包的所有數據集,可以用命令data(package = .packages(all.available = TRUE))查看。
> data()
> data(package = .packages(all.available = TRUE))
3.工作空間
工作空間(workspace)就是當前R的工作環境,它儲存所有用戶定義的對象(向量、矩陣、函數、數據框、列表、模型、圖形等)。例如,通過以下代碼創建幾個對象。
> # 創建數據對象a,b
> a <- 1:10
> b <- 10:1
> # 創建模型對象fit
> fit <- lm(Sepal.Length~Sepal.Width,data=iris)
> # 創建圖形對象q、p
> library(ggplot2)
> q <- qplot(mpg, wt, data = mtcars)
> library(rCharts)
> p <- rPlot(Sepal.Length ~ Sepal.Width | Species, data = iris,
+ type = 'point', color = 'Species')
對象創建完以後,可以通過ls函數查看當前工作空間中的對象。結果如下。
> ls()
[1] "a" "b" "fit" "iris" "p" "q"
如果使用的是RStudio,可以直接在右上角查看當前工作空間的對象,如圖2-5所示。
因為對象是儲存在內存中的,所以可以刪除不需要的對象及時釋放內存,提高效率。通過rm()函數移除一個或多個對象,比如想刪除對象fit,執行以下命令。
> rm(list="fit")
> ls()
[1] "a" "b" "p" "q"
如果需要刪除剩下的全部對象,可以利用list=ls()實現。
> rm(list=ls())
> ls()
character(0)
當前的工作目錄(working directory)是R用來讀取文件和保存結果的默認目錄,可以使用函數getwd()來查看當前的工作目錄。
> getwd()
[1] "C:/Users/Think/Documents"
如果想改變當前的工作目錄,可以使用setwd()函數或通過“文件”菜單下的“改變工作目錄”命令實現。
4.包
包是R函數、數據、預編譯代碼以一種定義完善的格式組成的集合。R語言的使用,很大程度上是借助各種各樣的R包的輔助,從某種程度上講,R包就是針對R的插件,不同的插件滿足不同的需求,截至2016年5月18日,CRAN已經收錄了各類包8417個。計算機上存儲包的目錄稱為庫(library),該庫位於R軟件的安裝目錄/library目錄下。可以通過函數.libPaths()查看庫所在的位置,通過函數library()可以顯示庫中已安裝的包。
第一次安裝一個包,使用命令install.packages("package_name","dir")即可。dir為包安裝的路徑。默認情況下安裝在..\library 文件夾中。
例如,要安裝一個可以快速讀取大數據集的擴展包data.table,隻需要執行install.packages( "data.table")即可完成安裝。
> install.packages("data.table")
試開URL’
https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/contrib/3.2/data.table_1.9.6.zip'
Content type 'application/zip' length 1883523 bytes (1.8 MB)
downloaded 1.8 MB
程序包'data.table'打開成功,MD5和檢查也通過
下載的二進製程序包在
C:\Users\Think\AppData\Local\Temp\Rtmpoltpbz\downloaded_packages裏
也可以選擇R的菜單:程序包→安裝程序包,在彈出的對話框中,選擇要安裝的包,然後確定。如果使用的是RStudio,可以選擇菜單Tools→Install Packages,調出窗口,包括在線安裝和本地安裝兩種方式。這裏我們選擇在線安裝,隻需要在Packages中輸入包名後單擊Install按鈕進行安裝即可,如圖2-6所示。
包安裝後,如果要使用包的功能。必須先把包加載到內存中(默認情況下,R啟動後會自動加載基本包),加載包命令:library("包名")或者require("包名")。也可以通過RStudio右下窗口中的Packages加載包。默認情況下,擴展包是未加載到內存中的,如圖2-7所示。
直接選中data.table,即可完成包的加載,如圖2-8所示。
通過find.package()或者path.package()查看當前環境加載了哪些包。
>find.package() # or path.package()
[1] "C:/Program Files/R/R-3.2.2/library/stringi"
[2] "C:/Program Files/R/R-3.2.2/library/tidyr"
[3] "C:/Program Files/R/R-3.2.2/library/stats"
[4] "C:/Program Files/R/R-3.2.2/library/graphics"
[5] "C:/Program Files/R/R-3.2.2/library/grDevices"
[6] "C:/Program Files/R/R-3.2.2/library/utils"
[7] "C:/Program Files/R/R-3.2.2/library/datasets"
[8] "C:/Program Files/R/R-3.2.2/library/methods"
[9] "C:/PROGRA~1/R/R-32~1.2/library/base"
可以通過detach()函數將已加載的包移出內存。例如,要將ada包從內存中移除,執行detach("package:ada")或取消選中RStudio右下角Packages選項卡中的ada包即可,如圖2-9所示。
通過函數remove.packages()將包從本機刪除。例如,要從計算機中刪除data.table包,需執行以下命令或者單擊RStudio右下角Packages選項卡中的data.table包版本號右邊的叉,如圖2-10所示。
> remove.packages("data.table")
Removing package from 'C:/Program Files/R/R-3.2.2/library'
(as ‘lib’ is unspecified)
最後更新:2017-09-19 11:03:06