官术网_书友最值得收藏!

1.6 R語言的劣勢以及如何克服這些劣勢

在與經(jīng)驗豐富的技術(shù)人員討論R語言時,技術(shù)人員通常會指出該語言存在的兩大劣勢。

陡峭的學(xué)習(xí)曲線。

難以處理大型數(shù)據(jù)集。

上述兩個劣勢確實是這門語言的兩大缺點。本書作者不會刻意地美化R語言,而是給出克服這些劣勢的方法。事實上,可以認(rèn)為第一大劣勢是暫時性的,至少針對不同個體是這樣的。因為讀者一旦邁過了R語言學(xué)習(xí)的“絕望谷”,就再也不會被這一劣勢所困擾。什么是絕望谷呢?此處用圖1-11來進(jìn)行說明。

圖1-11

眾所周知,個體在學(xué)習(xí)全新且足夠復(fù)雜的事物的過程中,都會經(jīng)歷3個階段。

蜜月期:在這個階段,學(xué)習(xí)者會喜歡上這樣的新事物,并且非常有信心能夠掌握它。

絕望谷:在這個階段,所有事情都變得困難重重,讓人陷入絕望。

接下來的階段:學(xué)習(xí)者開始對新事物有更深入的理解,對它的掌控能力提高,自信心也越來越強(qiáng)。

在談到第二大劣勢時,不得不說,R語言在處理大型數(shù)據(jù)集方面存在的困難實際上是這門語言本身具有的結(jié)構(gòu)性問題。因此需要在結(jié)構(gòu)上對其做出一些改變,需要將其與其他工具進(jìn)行戰(zhàn)略性合作。在1.6.1節(jié)和1.6.2節(jié)中,將針對這兩大劣勢進(jìn)行更加詳細(xì)的討論。

1.6.1 高效學(xué)習(xí)R語言,最小化精力投入

首先,R語言為什么會被視為一門很難學(xué)的語言呢?對于這個問題,沒有一個普遍統(tǒng)一的答案,不過可以嘗試推理一下其中的原因。R語言通常是進(jìn)行數(shù)據(jù)分析的首選語言,它是從事數(shù)據(jù)統(tǒng)計的人員為他們自己,尤其是學(xué)習(xí)數(shù)據(jù)統(tǒng)計的學(xué)生創(chuàng)建的一門語言。這就決定了這門語言的兩大特點。

R語言沒有很好地考慮編程體驗。

R語言具有其他語言所沒有的統(tǒng)計技術(shù),并且具有前所未有的創(chuàng)新的交互方式。

大家可以找到R語言學(xué)習(xí)曲線陡峭的原因,具體歸納如下。首先,相較于Julia和Swift這樣的語言,R語言并不是一個對程序員友好的語言。正如1.2節(jié)所提到的,R語言是誕生于學(xué)術(shù)領(lǐng)域的一種工具。其創(chuàng)造者可能也沒有想到,如今R語言可以被用于開發(fā)網(wǎng)站(更多內(nèi)容請見第13章,看一看這個令人眼前一亮的應(yīng)用)。

其次,學(xué)習(xí)過其他統(tǒng)計語言的人學(xué)習(xí)R語言時,會有一種暈頭轉(zhuǎn)向的感覺。在R語言中應(yīng)用數(shù)據(jù)模型時,會體驗到一種令人驚艷的交互過程:讀者將數(shù)據(jù)輸入模型,得到結(jié)果,并對結(jié)果進(jìn)行分析判斷;然后迭代執(zhí)行上述過程,或者進(jìn)行交叉驗證。在該過程中,所有的操作都具有非常高的靈活性。這完全不是統(tǒng)計分析系統(tǒng)(SAS)和統(tǒng)計分析軟件(SPSS)的用戶所能夠體驗到的。在SAS及SPSS中,用戶只能將數(shù)據(jù)提交給執(zhí)行函數(shù),然后得到一個大而全的結(jié)果集。

這就是最終結(jié)論了?難道只能被動接受歷史原因所導(dǎo)致的陡峭的R語言學(xué)習(xí)曲線嗎?當(dāng)然不是。實際上,R語言社區(qū)一直在積極地參與平緩這條曲線的工作,主要的工作內(nèi)容有以下兩點。

改善R語言的編程體驗。

編寫高質(zhì)量的學(xué)習(xí)資料。

1.tidyverse程序包

現(xiàn)如今在談?wù)揜語言的時候,一定會提到tidyverse程序包,因為tidyverse程序包在R社區(qū)中非常流行。tidyverse是由哈德利·威克姆開發(fā)的一個框架,該框架包含很多概念和函數(shù)。由于tidyverse程序包的存在,使用R語言的編程體驗更加貼近現(xiàn)代的編程體驗。有關(guān)tidyverse程序包的介紹已經(jīng)超出了本書的范圍,但是本書作者還是想簡單地介紹一下這個框架的組成部分,它通常至少包含以下4個程序包。

reader:用于數(shù)據(jù)導(dǎo)入。

dplyr:用于數(shù)據(jù)操作。

tidyr:用于數(shù)據(jù)清洗。

ggplot2:用于數(shù)據(jù)可視化。

tidyverse取得了很大的成功,因此出現(xiàn)了很多關(guān)于tidyverse主題的學(xué)習(xí)資料。在后文中,將介紹這些學(xué)習(xí)資料。

2.利用R語言社區(qū)來學(xué)習(xí)R語言

R語言最令人欣賞的特點之一就是它擁有一個生機(jī)勃勃的社區(qū)。起初,R語言社區(qū)主要由在其研究過程中偶遇R語言這一強(qiáng)大工具的統(tǒng)計人員和學(xué)術(shù)研究人員組成。如今,除了統(tǒng)計人員和學(xué)術(shù)研究人員,其他領(lǐng)域的專業(yè)人士也紛紛加入了R語言社區(qū),包括金融學(xué)、化學(xué)及遺傳學(xué)等領(lǐng)域。對于每個初學(xué)者來說,R語言社區(qū)都是一筆巨大的“財富”,社區(qū)中的人都非常友好且樂于幫助初學(xué)者邁出學(xué)習(xí)這門語言的第一步。但是讀者可能會感到疑惑,要如何利用R語言社區(qū)呢?答案是,首先要找到這個社區(qū)并體驗它;接下來要做的就是,看看如何利用社區(qū)主導(dǎo)的內(nèi)容來切實可行地學(xué)習(xí)R語言。

(1)如何找到R語言社區(qū)

R語言社區(qū)存在很多種交流方式(包括各種線上和線下方式),要與R語言社區(qū)進(jìn)行交流,可以通過其中的任意一種方式。下面列出的是部分線上和線下方式。

線上方式:

R-bloggers。

Twitter主題標(biāo)簽#rstats。

Google+社區(qū)。

Stack Overflow上被標(biāo)記了R的問題。

R-help郵件列表。

線下方式:

R語言年度研討會。

RStudio開發(fā)者大會。

R線下聚會。

(2)通過與R語言社區(qū)互動來學(xué)習(xí)R語言

既然已經(jīng)知道如何找到R語言社區(qū),那么接下來就看看如何利用社區(qū)進(jìn)行學(xué)習(xí)。通常有3種可選的方式(非單選)。

查閱社區(qū)主導(dǎo)的學(xué)習(xí)資料。

向社區(qū)尋求幫助。

及時跟進(jìn)R語言的最新進(jìn)展。

查閱社區(qū)主導(dǎo)的學(xué)習(xí)資料:學(xué)習(xí)資料主要有以下兩種。

論文、手冊和圖書。

在線交互式課程。

論文、手冊和圖書:雖然這種學(xué)習(xí)資料是比較傳統(tǒng)的,但讀者不應(yīng)因此而忽視它們,因為這些學(xué)習(xí)資料總是能夠讓讀者對所探討的問題獲得更加結(jié)構(gòu)性而且系統(tǒng)性的理解。讀者也可以在網(wǎng)絡(luò)上找到論文、手冊和圖書形式的資料。

向讀者推薦以下比較有幫助的期刊和圖書。

Advanced R

R for Data Science

An Introduction to Statistical Learning

OpenIntro Statistics。

The R Journal。

在線交互式課程:這類課程應(yīng)該是當(dāng)前非常常見的學(xué)習(xí)資料了。在很多不同的平臺上都能找到非常不錯的R語言學(xué)習(xí)資料,其中知名的可能是DataCamp、Udemy和Packt。這些平臺上分享的是一種實用的交互方式,讀者可以通過練習(xí)和實踐,直接掌握相關(guān)的主題知識,而不是被動地看著別人解釋復(fù)雜的理論。

向社區(qū)尋求幫助:當(dāng)開始編寫第一行R語言代碼時(甚至在編寫代碼之前),讀者可能會遇到一些與編碼工作相關(guān)的問題。在這種情況下,最好的方法就是向社區(qū)求助,在社區(qū)的幫助下解決這些問題。讀者很可能并不是第一個提出相關(guān)問題的人。所以,在提出問題之前,可以先在網(wǎng)上尋找一下之前是否有人提出過類似的問題,并查看問題答案。

應(yīng)該在哪里尋找答案呢?在大部分情況下,讀者可以通過以下幾處找到答案(按可能找到答案的概率先后列出)。

Stack Overflow。

R-help郵件列表。

R程序包的文檔。

但是,不建議讀者在社交網(wǎng)絡(luò)或者其他類似網(wǎng)站上尋找答案,因為它們并不是專注于處理這類問題的網(wǎng)站。在這些網(wǎng)站上,答案沒有經(jīng)過任何專業(yè)的審核,因此,在這類網(wǎng)站上查找到的答案可能是過時的,或者根本就是不正確的。

如果讀者提出的是一個從未有人問到過的新問題,那么讀者可以在前面尋找問題答案的地方進(jìn)行提問。

及時跟進(jìn)R語言的最新進(jìn)展:由于存在很多熱心用戶的貢獻(xiàn),R語言的世界才得以不斷更新、不斷進(jìn)步。如何緊跟這些變化呢?社交網(wǎng)絡(luò)可以派上用場。通過關(guān)注社交網(wǎng)絡(luò)或者類似網(wǎng)站的#rstats主題標(biāo)簽,讀者就可以不斷地了解R語言的動態(tài)。另外,還可以在R-bloggers上訂閱每日新聞,這些新聞是由前一天發(fā)布的與R語言相關(guān)的博客文章組成的,都很實用。最后,讀者可以通過R語言年度研討會或者類似會議接觸到著名的R專家,聽取他們的獨(dú)特見解,以及他們關(guān)于R語言未來發(fā)展的演講。

1.6.2 使用R語言操作大型數(shù)據(jù)集

前面提到,R語言的第二大劣勢與大型數(shù)據(jù)集的處理有關(guān)。那么,這個劣勢來自哪里呢?實際上,這個劣勢與R語言的核心機(jī)制有關(guān),R語言是一個內(nèi)存軟件。也就是說,在R語言腳本中創(chuàng)建和管理的每一個對象都存儲在計算機(jī)的RAM中。這意味著數(shù)據(jù)的總大小不能超過RAM的總大?。ㄇ疤崾瞧渌浖]有占用RAM,但這是不切實際的)。那么,如何克服這個劣勢呢?答案實際上超出了本書所要講解的范圍。盡管如此,作者在此簡單地總結(jié)出3種應(yīng)對策略。

優(yōu)化代碼,使用profvis等程序包對代碼進(jìn)行分析,并遵循R語言編程最佳實踐。

使用外部數(shù)據(jù)存儲和整理工具,如Spark、MongoDB和Hadoop。在后文中,會對此做進(jìn)一步介紹。

使用ff、filehash、R.huge或者bigmemory等程序包來改變R語言內(nèi)存處理行為,以盡量避免內(nèi)存過載。

作為作者,我想要強(qiáng)調(diào)的是,這個劣勢實際上是可以克服的。對于剛剛開始R語言學(xué)習(xí)之旅的初學(xué)者,在遇到這個劣勢時不必?fù)?dān)心。

最后補(bǔ)充說明:隨著獲取計算能力的成本越來越低,與大型數(shù)據(jù)集處理相關(guān)的問題就會顯得越來越微不足道。

主站蜘蛛池模板: 剑河县| 遂溪县| 清徐县| 化德县| 康马县| 通化县| 咸宁市| 汉阴县| 阳城县| 舟山市| 湖北省| 那坡县| 遵义县| 墨脱县| 礼泉县| 兖州市| 云龙县| 营口市| 崇仁县| 攀枝花市| 峨山| 梨树县| 靖江市| 新疆| 郎溪县| 深圳市| 阳新县| 喀什市| 盐亭县| 分宜县| 文昌市| 涞水县| 新丰县| 本溪市| 南充市| 迁西县| 高要市| 滦南县| 繁昌县| 西昌市| 临西县|