数据科学家们,请补齐你的短板,如何提升R语言编程能力
前言
這個世界每天都在源源不斷地生產數據,而人們尤其是商界往往希望從這些數據中獲取到有價值的信息。而這一點也促使很多試圖從數據中提取有用信息的數據科學家們(或被叫做數據分析師、數據挖掘者等等聽起來不錯的稱謂)不斷地進行探索。
在文章初始,先喂自己袋鹽,最近一直在更新R語言系列的博文,喜歡的小伙伴可選擇請閱。
R語言實戰應用精講50篇
https://blog.csdn.net/wenyusuran/category_10388726.html
很多身邊的數據科學家畢業于統計學、數學、物理學或生物學專業。他們在研究過程中,往往只關注于獨立的模型方法或者漂亮的可視化效果,卻沒人嘗試通過學習計算機科學的相關課程提高自身掌握編程語言的能力,幫助他們敲出更優化和專業的代碼——具有良好的易讀性,可重復使用,運行高效,內存占用合理,容易移植,最重要的是可以產出可信的結果。
實踐中,我們總是把注意力放在選取最優的模型,調整參數,解決與違背模型假設相關的問題和其他理論概念等等方面上。因此,博主在工作之初不得不去學習如何處理有缺陷的輸入數據,寫出每天都能夠正常運行的代碼,擬合最優的模型,以數據集的方式存儲預測結果,或是直接使用它們解決在線客戶的問題。
我們從八個方面進行闡述,希望對你的工作有所幫助,喜歡的小伙伴一鍵三連喲,你的支持是我最大的動力:
1. 參數、常量和函數
?
如果你在寫代碼的時候就已經考慮過用它來解決相似的問題,那么寫出來的代碼是很容易被移植的。這個想法雖然簡單,實踐起來卻并不容易。而“參數、常量和函數”便是你實現這點的基礎。
參數可用于改變重要變量的值和完成一些設置。寫代碼的時候,注意不要以常量的形式去設定參數。而常量則可以用來定義不會改變的靜態量,舉例來說,當你需要比較字符串時就可以用到常量。
函數是編程中的重要一環,我們往往以函數的方式處理重復性工作。通常情況下,函數應當能夠解決某種特定的問題并足以應用于相似的情況,其被推廣的程度取決于你想實現什么樣的目標。
函數需要附上解釋說明部分,最起碼要說明函數可以解決什么問題和各個輸入參數的意義。博主一般使用 R 包構建時的注釋方式,以便于函數可以直接用于 R 包中,而不需要額外的處理。更多注釋的細節可在?”如何編寫 R 包的說明文檔“?網頁中查看。
你需要檢驗所編寫的函數是否能夠正常運行,因此,將檢驗的流程自動化處理會便于日后對函數的改動。當你需要?構建 R 包?時創建函數,這點尤其重要。
testthat?包可以很方便的解決這個問題,你可以在?"如何檢驗 R 包中代碼的有效性"?網頁中看到如何自動檢驗你的代碼。
好在我們不需要自己編寫所有的函數, R 語言的好處就在于在它大量的包里已經有很多可用的函數了。為了避免出現載入的兩個包中有相同名稱函數的重名問題,你可以通過?
packagename::functionname ( )?的方式指定想使用的包名。比如說,在載入的?plyr?和?dplyr?包中都含有summarise函數。
2. 樣式
?
你以后還是需要重新閱讀你自己的代碼,因此,代碼需要保持一個連貫的樣式,便于自己和其他閱讀的人能夠理解。很多人使用?谷歌的 R 編程規范?或是?Hadley Wickham 的 R 語言編程樣式。
給代碼加上注釋是非常重要的,特別是在你認為構建思路很好的時候方便日后查看。同時,也不要忘了加上~~看似有些冗長的~~函數和變量名解釋。
3. 版本控制
?
項目管理中,版本控制也很重要,它可以節省你大量的精力。版本控制具有很多好處,你可以在?"使用版本控制的原因"?網頁中看到。對于博主而言,最重要的好處在于:
-
能夠回溯到之前版本的代碼
-
管理項目文件,不用擔心誤操作
-
便于與同事協作
你可以使用?git?進行版本控制,特別是在?RStudio?中。
4. 優化
?
優化代碼的過程不一定就是雜亂無章的。
如果代碼運行出故障,就需要快速定位到問題并解決它。好在 RStudio 擁有很多?內置調試工具?,你可以在認為代碼出現問題的地方創建一個斷點,然后重新運行代碼,重復這個過程來找出問題所在。
你需要知道,每種編程語言都有它的優點和不足。你也不希望代碼運行得太慢或者占用太多內存。分析代碼的結構可以幫助解決這個問題,而 RStudio 也提供了這方面的?解決方案?。分析代碼結構能夠監測到運行代碼最耗時和最占用內存的地方。在優化代碼的時候不要過度依賴自己的直覺。
在數據集增大時,你需要檢查其對于運行時間和內存占用需求的影響,這點有助于你理解應當選擇什么樣的數據集和在數據集規模改變時會引發什么樣的后果。
代碼優化過程中,你會面對很多問題。每次問題出現,尤其需要關注數據類型和遺漏的參數,你就應當能夠從中提升解決代碼錯誤的能力,并認識到這種警告或錯誤的成因。
5. 部署
?
部署意味著你的代碼需要實現自動運行的功能,至少不需要你的干預,代碼就可以一行行運行下去。明確了解代碼輸出的內容和運行是否順利是非常重要的。futile.logger?包可以實現代碼的部署,它是一個輕量級解決方案,并且能夠通過屏幕輸出或導出文件記錄下代碼的運行過程。你所要做的僅僅是在合適的位置寫下便于理解的相關信息。
代碼的自動運行通??梢允褂?Cron 計劃任務程序運行 foo.r 的 R 語言腳本。這個命令將會運行 foo.r 代碼。但往往你需要設定這個腳本里的一些參數來分析不同的數據,如果想重新訓練模型的話還需要指定想使用的機器學習方法。因此,博主使用?argparse?包,下列代碼可以輸入命令Rscript my_code.r -if latest_data.csv實現通過輸入文件名指定讀入的 csv 文件:
6. 繪圖
?
數據可視化可以稱得上是數據分析中的“櫥窗柜”了,因此你可能會花費大量時間調整每個輸出圖。最好的操作方案如下:
在每個腳本中,定義樣式,調色板和其他參數;
編寫輸出圖的函數;
使用另一個函數展示輸出圖或保存成文件。
下面是一個基礎的實例:
?
7. 復現性
?
確保你的代碼可以被復現。由于很多數據分析的步驟中包含隨機的取樣或優化,因此我們需要確保重新運行代碼可以得到同樣的結果。這也是為什么我們需要使用set.seed()函數。
8. 組合工具
?
一旦你在 R 語言編程中小有所成,你會希望盡可能多地使用 R 中的工具。但請別忘了還有很多其他的可用工具,而且通過接口,它們可以與 R 實現共通。
總結
以上是生活随笔為你收集整理的数据科学家们,请补齐你的短板,如何提升R语言编程能力的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tableau必知必会之使用参数操作在同
- 下一篇: 听说你想去大厂看妹子,带你看看字节跳动技