謝佳標:R語言初學者必須要知道的事兒

      網友投稿 639 2025-03-31

      2017年1月24日晚8點半,樂逗游戲挖掘團隊負責人、資深R語言用戶謝佳標帶來了主題為“數據分析利器:R語言快速入門”的Chat交流。以下是主持人孫莫默整理的實錄,記錄了謝佳標與讀者之間交流的精彩問答。

      問:常用的數據分析工具有哪些?為什么選擇R語言作為分析工具?

      答: 常用的數據分析工具有很多,包括大家平時一直在用的excel,這就是個不錯的分析工具,我們可以實現常用的數據分析、繪圖功能。但是涉及到復雜的模型時,excel就顯得很吃力,此時就需要運用專業的數據分析挖掘工具,比如spss、sas、R、Python等等。

      下面給大家看一個2013年的分析工具排名,最近幾年R和python的熱度有增無減:

      因為R語言是開源的,所以很多互聯網企業在用,還有一些通迅行業的咨詢公司,不過上手還是需要長期的學習;SPSS界面友好些,不過企業用正版也要很大一些數,不過一般是市場研究用的比較多,如果你會用SPSS編程其實功能還是比較強大的,建議如果想先練手可以學這個,上手快;SAS一般是金融企業,特別是銀行業和醫學統計用,銀行業人員有一些是用SAS做統計,一般是銀行業內部人做的,另一種是給銀行業做數據挖掘的公司,不過正版一年也要上百萬,不是土豪也用不起,聽說支付寶都不用,而是用R語言,而且SAS學習沒人指導很難學;所以看小伙伴的選擇,想在傳統或者咨詢公司做的SPSS比較合適,想去金融特別是銀行業SAS不錯,想進互聯網公司學R語言可能是比較明智。我們互聯網、游戲公司很多數據分析師都是使用R語言和Python進行分析挖掘工作。

      另外,R語言也可以跟Python結合,也能與其他專業的挖掘工具接觸集成,比如下圖:

      可以利用R語言調出rattle,幫助對代碼不熟悉的新手利用圖形化界面快速完成數據分析工作。右上角這個工具是非常不錯的工具,大家如果感興趣可以通過install.packages("rattle")在R內安裝此包,然后利用:library(rattle);rattle()命令就可以調出那個界面,由于R的極大靈活性和擴展性,也使得R是近幾年數據分析師的首選工具。

      問:R語言與Python的對比?優勢劣勢?

      答: Python和R是統計學中兩種最流行的的編程語言,R的功能性主要是統計學家在開發時考慮的(R具有強大的可視化功能),而Python因為易于理解的語法被大家所接受。

      起初R主要是在學術和研究使用,但近來企業界發現R也很不錯,這使得R成為企業中使用的全球發展最快的統計語言之一。如果有了解過中國R語言會議的讀者應該知道,這幾年參加R會的人數越來越多,有不少是來自企業界。我在演講后都有很多企業界的數據分析師與我交流,都對R在企業中的實戰很感興趣。如果大家對R語言運用在實際工作中感興趣,可以查詢R會的一些資料。

      R的主要優勢是它有一個龐大的社區,通過郵件列表,用戶貢獻的文檔和一個非常活躍的堆棧溢出組提供支持。還有CRAN鏡像,一個用戶可以很簡單地創造的一個包含R包的知識庫。這些包有R里面的函數和數據,各地的鏡像都是R網站的備份文件,完全一樣,用戶可以選擇離你最近的鏡像訪問最新的技術和功能,而無需從頭開發。

      所以我們數據分析師如果選擇R語言,是為了讓自己更專注數據,不是花太多時間去想想怎么實現某種算法,因為這些都是有現成的包。如果現成的算法不能滿足你的分析需求,甚至我們可以通過修改源碼來完成你的數據工作。

      接下來,我們從數據科學行業的表現來對比下R和Python。如果你們看一下最近的民意調查,在數據分析的編程語言方面,R是明顯的贏家。但也有越來越多的人從研發轉向Python。此外,有越來越多的公司使用這兩種語言來進行組合。如果你打算從事數據行業,你用好學會這兩種語言。招聘趨勢顯示這兩個技能的需求日益增加,而工資遠高于平均水平。

      我們來看下R的優缺點。

      優點是:

      可視化能力強。可視化通常讓我們更有效地理解數字本身,R和可視化是絕配。一些必看的可視化軟件包是ggplot2,ggvis,googleVis和rCharts。

      完善的生態系統。R具有活躍的社區和一個豐富的生態系統。R包在CRAN,Bioconductor的和Github上。您可以通過Rdocumentation搜索所有的R包。

      用于數據科學。R由統計學家開發,他們可以通過R代碼和包交流想法和概念,你不一定需要有計算機背景。此外企業界也越來越接受R。最先進的算法一般在R中都能找到相應的包實現。

      R的缺點就是基于內存,運算比較緩慢,但是這幾年計算機性能的提升和很多擴展包的出現,很好地解決了這個問題。例如跟RHadoop、sparkR等包,還有與數據庫的鏈接也實現了R能專心做數據分析和建模、可視化的工作。R語言的書好像也是不溫不火,一直長銷。

      以上是R的優缺點,接下來我們簡單了解下Python方面的優缺點。

      Python的在數據分析方面的第一個優點是:IPython Notebook。IPython Notebook使我們更容易使用Python進行數據工作,你可以輕松地與同事共享Notebook,而無需他們安裝任何東西。這大大減少了組織代碼,輸出和注釋文件的開銷。可以花更多的時間做實際的工作。

      第二點是Python是通用語言。Python語言容易、直觀,在學習上會比較簡單,它可以加快你寫一個程序的速度。此外,Python測試框架是一個內置的,這樣可以保證你的代碼是可重復使用和可靠的。

      第三點是Python是一個多用途的語言,這也是廣受程序員喜愛的原因之一。Python把不同背景的人集合在一起。作為一種常見的、容易理解,大部分程序員都懂的編程語言,可以很容易地和統計學家溝通,你可以使用一個簡單的工具就把你每一個工作伙伴都整合起來。

      Python的主要缺點之一是可視化方面。可視化是選擇數據分析軟件的一個重要的標準。雖然Python有一些不錯的可視化庫,如Seaborn,Bokeh和Pygal。但相比于R,呈現的結果并不總是那么順眼。這幾年Python一直在數據分析方面一直在趕超R語言,但是還不夠。

      對于我們數據分析人員,該如何選擇R和Python。下面給幾點建議:

      你想解決什么問題?

      什么是你的領域中常用的工具?

      其他可用工具是什么以及如何做這些涉及到的常用工具?

      所以工具的選擇跟你做事情的目的有直接的關系,如果你是想快速實現數據分析和模型,做一些分析專項和可視化時,可以考慮使用R。如果是為了想實現數據弗恩系平臺開發,可以考慮工程應用能力較強的Python。一般讀數學和統計學的童靴偏好R,計算機出生的童靴偏好Python。如果有時間,最好兩個都會。我們團隊在工作中也是兩種工具都有使用。

      問:我的主要工作平臺是win,想要愉快地使用R,完整的工具鏈及配置是怎樣的?

      答: R是一個跨平臺的工具,可以完美在windows、unix和Mac上運行。我們在win上也是可以實現整個數據分析流程工作。

      比如說利用RODBC包鏈接公司環境中的數據庫,從數據庫中直接讀入或進行數據查詢匯總,并將部分基礎數據處理的統計工作交給數據庫,然后R執行數據分析和挖掘的工作,完成后并將結果返回給數據庫,或者利用與java、c++等語言的結合直接進行結果利用,也可以結合html、php進行數據模型和結果可視化。

      對于數據分析師來說,如果對其他語言不熟,我們也可以利用shiny包實現快速開發數據分析平臺原型的目的。接下來,我們重點聊聊數據分析之前的數據采集和數據分析結果之后的展示環節,尤其側重聊下R與數據庫的鏈接和快速開發web平臺。

      很多傳統企業現在都還是用oracle、mysql進行數據存儲。所以我們先以R與MYSQL的鏈接為例進行解釋這部分的知識。在R中通過RODBC包訪問一個數據庫也許是最流行的方式。這種方式允許R連接到任意一種擁有ODBC驅動的數據庫,其實幾乎就是市面上的所有數據庫。大家要留意的一點就是,你的R位數必須與數據庫的位數一致。這點千萬別忽視。

      由于服務器上的MySQL是32位,計算機系統是64位,所以需要在C:\Windows\SysWOW64文件夾下找到odbcad32.exe,雙擊打開ODBC數據源管理器界面。這個32位的ODBC數據源管理器界面存放的地方大家可以先記下。

      如果你們的mysql是32位,就需要在C盤的那個文件夾找到它,雙擊打開界面如圖:

      點擊添加,選擇MySQL ODBC驅動,點擊完成之后彈出一個數據庫配置窗口。

      此處需要說明一下,如果你們在驅動中沒有找到關于mysql驅動,就需要先下載個mysql odbc驅動進行安裝即可。

      大家選中mysql驅動以后的界面如上,我們可以填寫你的DSN名稱(這個可以隨意),然后是ip地址和端口、mysql的登錄賬號和密碼,都填寫完畢后,點擊test進行測試。

      如果出現鏈接成功的提示,說明你們的ODBC數據源管理器已經設置成功了。接下來,我們就要回到R中進行后面的操作。在32位的R中利用install.packages(“RODBC”)命令進行RODBC包的安裝。大家要留意,我們要利用32位的R來安裝RODBC包。這也是我在文章中為什么建議大家同時安裝兩個位數的R軟件的原因。如我計算機的截圖,i386是32位的 x64是64位的。

      我們RStuido一般是關聯64位的,也可以自己進行修改,在options里面進行設置。

      這個是RStudio進行設置的截圖。

      進去后,點擊change。

      此處可以修改關聯的R。

      繼續回來我們的問題。RODBC包安裝好后,我們就可以實現R與MYSQL的鏈接了。包下載安裝好后,就可以利用包中的odbcConnect(dsn, uid = "", pwd ="", ...)函數進行數據庫連接,并繼續數據的傳輸及分析工作。

      這個是本機mysql的一些信息,daniel是剛才ODBC數據源管理器里面設置的DSN,root是mysql的登錄賬號,123456是登錄密碼。如果你們能看到數據庫信息,說明已經連通了。

      我們先嘗試如果將R的數據插入到數據庫中。可以使用sqlSave(channel,dat,tablename=NULL,append=FALSE)命令將R中的數據框寫入或更新(append=TRUE)到MySQL數據庫的某個表中。比如我們想把R自帶的mtcars數據寫入到MySQL中,在數據庫中生成新表mydata。

      大家看到了,我們在MYSQL已經新生成一個表mydata。現在,嘗試將數據庫中的數據傳入到R中。可以利用sqlFetch(channel, sqtable, ..., colnames = FALSE, rownames = TRUE)命令讀取MySQL數據庫中的mydata表到一個數據框中。

      以上截圖sqlFetch中的第一個參數是剛才建立的鏈接channel,第二個參數是數據庫中存在的表mydata。我們運行命令后就將mysql中的mydata表全部讀取到R中。有時候,我們并不想將原始表讀入到R中,只想利用數據庫中表的一些問題:可以利用sqlQuery(channel, query, errors = TRUE, ..., rows_at_time)命令向mysql數據庫提交一個查詢并返回結果。比如相對mydata表,統計按照vs和am進行分組,統計mpg的平均組,執行以下代碼可以完成該操作。

      以上是在win中實現R與數據庫的鏈接。接下來,給大家快速過一下shiny包快速開發web app應用的過程。

      Shiny是R中的一種Web開發框架,使得R的使用者不必太了解CSS、JS,只需要了解一些HTML的知識就可以快速完成Web開發,且Shiny包集成了Bootstrap、jQuery、Ajax等特性,極大解放了作為統計語言的R的生產力。使得非傳統程序員的R使用者不必依賴于前端、后端工程師就可以自己依照業務完成一些簡單的數據可視化工作,快速驗證想法的可靠性。

      Shiny應用包含兩個基本的組成部分:一個是用戶界面腳本(a user-interface script),另一個是服務器腳本(a server script)。

      用戶界面(ui)腳本控制應用的布局與外表;服務器(server)腳本包含構建應用所需要的一些重要指示。shiny包也自帶了一些app應用例子幫助新手快速上手,比如我們想看一個交互直方圖。執行以下代碼:

      if(!require(shiny)?install.packages(“shiny”) runExample(“01_hello”)

      執行命令會得到一個web app應用界面:

      以上截圖就是一個網頁,我們可以拖動滑動條,直方圖會立即發生變化。我們只需要在服務器上進行部署就可以實現網頁共享,一個數據分析平臺的應用就開發完成了。

      以上是關于在win下做數據分析的一些經驗分享。

      問:除了Java,R還可以把展示結果輸出到什么語言中呢?

      答: R語言可以跟很多語言、工具實現完美集成。比如C++、Java這些底層編程語言,也能與PHP、JS、html等前端展示語言進行很好地結合,直接將R的結果進行展示。比如前面提到的shiny包的ui.R其實就是承擔了客戶端的html頁面設計工作,我們也可以直接在ui.R直接編寫html腳本來實現自定義的網頁布局。比如大家剛剛看到的前端的展示,其實可以ui.R完全用html來寫。

      大家如果對各種工具集成感興趣,可以看看張丹的那本《R的極客理想-——工具篇》,對于一位偏數據開發的童鞋會有很大的啟發。

      問:之前沒有接觸過R語言這塊,但是明年可能要了解使用數據分析這塊,可以推薦下可以循序漸進的學習流程嗎?

      答: 嗯,對于新手,我個人建議還是一步一個腳印,打好基礎。做數據分析師沒有捷徑,只能一步一個腳印,循序漸進。但是有一些標準的流程可以參考,你平時的工作就有個方向,知道針對什么業務用什么方法實現。 給大家分享一個通用的行業流程。 跨行業的數據挖掘標準流程CRISP-DM方法論,是一種業界認可的用于指導數據挖掘工作的方法。按照CRISP-DM方法論,一個數據分析的完整流程包括6個階段:分別是業務理解、數據理解、數據準備、建立模型、模型評估和模型發布。這6個階段的順序并不是固定不變的,在不同的業務場景中,可以有不同的流轉方向。

      拿我所在游戲行業的數據來說,我總結了以下幾點:

      業務理解: 該階段的核心內容包括正確理解業務背景和業務需求,同時能把業務需求有效轉化成合理的分析需求,并設計指標體系和擬定實施計劃。

      數據理解:該階段從數據收集開始,并對可用的數據進行數據探索和評估,識別數據質量問題,發現數據不同屬性間的關系。

      數據準備:這個階段屬于數據清洗和轉換工作,包含數據缺失值和異常值的處理,保證建模前的數據質量;數據的重組、轉換以及衍生等處理,比如對數據進行標準化處理、對某些指標進行分箱操作以便達到建模需求。

      建立模型:該環節是游戲數據分析流程中技術含量最高的階段,數據分析師應該根據項目需求和數據特點選擇適合的算法,并使用專業的數據挖掘工具建立模型。

      然后是模型評估和發布,評估這幾年常用的是混淆矩陣和ROC曲線,還有多重交叉驗證。

      以上方法論對于一個初學者我覺得是非常重要的,你們需要知道你現在做的事情是屬于哪個階段,才能選擇相應的工具和方法去實現。如果大家對數據分析整個流程感興趣,可以關注我今年初將要出版的新書《R語言游戲數據分析》,這本書會詳細介紹了各種階段的知識和技巧。

      這篇文章總結的很到位,大家可以看看。

      以上是個人的一些建議,希望學任何東西都是多看多想多練,這次才能培養自己的分析思維。

      謝佳標:R語言初學者必須要知道的事兒

      問:擴展包的安裝除了在線安裝,還有其他方式嗎?如果有些包不在cran上,通過什么命令進行安裝?

      答: 很多時候,大家安裝包時會出現無法安裝的情況,此時我們可以進行另外一種安裝方式,就是可以下載壓縮包進行本地安裝。cran上的安裝包可以直接去官網下載,如下截圖。

      大家可以看到,側邊欄有個叫Packages的菜單,我們點擊即可進入cran所有包的頁面。此時也是提供了windows、linux和mac不同系統的壓縮包下載。如果大家用的是win,請下載后綴為zip的文件。下載后,我們就可以實現本地安裝,以RStudio為例。

      點擊install 彈窗如下。

      默認是在線安裝,我們改為zip的本地安裝即可。選中你需要安裝的壓縮包,然后點擊Install就可以完成包的本地安裝。不過,有一點需要注意的地方就是,此種安裝方式會造成依賴包不能一并進行安裝。所以如果進行本地安裝時留意一下包所依賴的其他包。此外,我們有很多處于開發狀態包放在github上面。此時不能用install.packages()命令進行安裝,需要利用install_github()命令進行安裝。

      該命令在devtools包中,故需要先install.packages(“devtools”)進行devtools包的安裝。包安裝完后,就可以利用library或require命令進行包的加載,就可以利用包實現很多擴展功能了。如果是RStuido,也可以直接點擊包名前面的小框√即可完成包的加載。

      包的安裝時很講技巧的,今天就先簡單分享到這里。比如rCharts、recharts等交互包就是在github上,大家有興趣可以嘗試下載安裝。

      問:如何將excel數據導入到R中?

      答: 有多個包可以實現EXCEL數據的導入,不過最簡單的方式是將其轉化為csv再通過read.table或read.csv命令導入。給大家介紹幾個專門導入excel數據的包。

      例如,RODBC包中的odbcConnectExcel2007函數、xlsx包中的read.xlsx函數、XLConnect包中的loadworkbook和readWorksheet函數訪問Excel2007文件。其中,RODBC、xlsx、XLConnect包都需要依賴于rJava包,也需要依賴于計算機的jre環境才行。

      相對來說比較麻煩,給大家簡單解釋下。

      先看看我們計算機的jre環境,先調出cmd窗口,輸入java - version查看java版本。如下圖所示。

      大家可以看到,我這邊的裝好的是1.8 64位的java,此時需要利用64位的R來安裝那幾個擴展包來進行excel的讀取。以下給大家演示下這幾個包的加載。

      大家看到的截圖,是利用64位的R可以將這兩個包加載到R中,接下來就可以完成excel數據的導入了。

      大家如果以后遇到此錯誤,就說明你的rJava位數與本機的jre位數不一樣。

      這些包的安裝比較麻煩,如果真要從excel中導入數據到R中,給大家介紹一個不需要依賴java環境的包:readxl包。直接通過install.packages("readxl")進行安裝,然后read_excel函數進行excel數據的讀取,具體大家有時間可以去嘗試下,我就不進行案例演示了。

      問:R語言能創建哪些數據挖掘模型?如何對模型效果進行評估?

      答: 算法模型一般分為兩種:有監督模型、無監督模型。比如我們常聽到的聚類分析、關聯規則就是非常出名的無監督模型。聚類分析用在用戶分群業務領域,在R中可以利用kmeans函數實現K均值聚類,通過hclust實現層次聚類。例如無監督模型中的關聯規則,R實現是非常方便的。我們利用arules包實現apriori算法,利用arulesViz包對規則進行可視化。這個也是我覺得R強大之一,可以把枯燥的模型結果進行可視化展示,讓你的分析結果更具體更形象。

      舉一個道具銷售的例子來說明,假如說我們數據庫有這樣的數據。

      第一列是用戶id、第二列是道具名稱、第三列是購買數量。關聯關系,我們想從這堆數據里面發現一些購買偏好和道具的關聯慣性。 首先是數據重組:

      然后是數據轉換:

      可以看到,實現了數據轉換,為建模做好了準備,現在就可以建模和查看結果了。

      rules?<- apriori(data_class,parameter=list(support=0.005,confidence=0.1,target="rules"))

      此行就是建模代碼,R只需要一行命令就可以完成關聯規則建模的工作。

      這個是關聯規則的結果,我們也可以進行可視化。

      通過arulesViz包的plot函數實現的。以上就是無監督模型的一些介紹。

      接下來,我們簡單聊下有監督模型。經典的線性回歸、Logitic回歸、決策樹、樸素貝葉斯、KNN近鄰分類,還有這幾年非常流行的袋裝、隨機森林、神經網絡、支持向量機等等,這些都屬于有監督模型,R都有相應的包可以實現,非常簡單。決策樹文章中已經分享過,我們就簡單來了解下隨機森林的R實現吧。

      使用隨機森林和袋裝的目的是:實際中,只使用單一模型決定一組數據的分類常常并不可行,因為對數據分類描述比較清晰的一個模型也許異常復雜,只使用一種準則建立的模型很難避免不出現過度擬合。因而,一個更好的方法是采用投票方法從這些分類器的結果中選擇最優的模型,換句話說,如果我們對不同算法的預測結果取平均,相比只使用一個分類器,可能會得到更好的分類模型。

      R的randomForest包中的randomForest函數實現隨機森林算法,并提供了importance和varImpPlot兩個函數用來評估每個屬性的重要性,其中importance函數將列表展示模型中的每個屬性的重要性,而varImpPlot函數則可以通過繪制平均精確率下降及平均基尼下降曲線實現屬性重要性的可視化。

      > library(randomForest) > randomForest.model?<-?randomForest(accept~.,data=carTR)

      以上語句就構建了隨機森林模型。

      這個是通過可視化的手段查看各個自變量(X)對因變量(Y)的重要性。可見,登錄次數和活躍度是對是否付費影響最重要的因素。我們可以通過這種方式對內在規則也進行一定的探索。建立模型后,就可以predict對其他數據進行預測;利用table函數可以構建混淆矩陣查看模型的預測效果,對模型進行評估等等;里面有很多復雜的東西,大家可以查看相關資料。以上就是關于一個隨機算法的實現例子的簡單分享。

      最后,感謝人民郵電出版社為本場Chat獲獎讀者提供《R語言初學指南》一書。

      (以上內容轉自GitChat,版權歸GitChat所有,轉載請聯系GitChat,微信號:GitChat,原文:《曹園:八段錦是一種什么樣的運動方式?》)

      本文轉載自異步社區。

      應用與數據集成平臺 ROMA Connect Python 數據挖掘

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Word2019中自定義功能區的方法(word2003自定義功能區在哪里)
      下一篇:Linux C編程】第十二章 信號1 【Linux C編程】第十二章 信號2
      相關文章
      亚洲AV无码一区二区三区在线观看| 亚洲av无码专区在线| 亚洲成a∧人片在线观看无码| 亚洲国色天香视频| 亚洲人成亚洲精品| 亚洲成人在线网站| 亚洲国产综合专区在线电影| 亚洲AV无码专区电影在线观看| 亚洲精品中文字幕乱码三区| 国产成人综合亚洲亚洲国产第一页| 亚洲天堂在线视频| 亚洲小说区图片区另类春色| 亚洲色精品vr一区二区三区| 精品国产亚洲一区二区三区 | 亚洲国产日韩综合久久精品| 狠狠色香婷婷久久亚洲精品| 国产99在线|亚洲| 涩涩色中文综合亚洲| 亚洲欧美熟妇综合久久久久| 亚洲aⅴ无码专区在线观看春色 | 亚洲视频一区在线播放| 337p日本欧洲亚洲大胆色噜噜| 亚洲日产2021三区在线 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久影院亚洲一区| 亚洲精品无码鲁网中文电影| 亚洲成A∨人片在线观看不卡| 亚洲综合精品香蕉久久网97| 亚洲天堂福利视频| 亚洲综合av一区二区三区| 亚洲GV天堂无码男同在线观看| 国产成人亚洲综合a∨| 亚洲视频在线一区二区| 亚洲成色www久久网站夜月| 亚洲综合一区二区精品导航| 亚洲专区一路线二| 亚洲欧美日韩综合俺去了| 亚洲乱码国产一区网址| 亚洲VA中文字幕无码毛片| 亚洲欧洲日产专区| 亚洲欧美乱色情图片|