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