版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國(guó)]-R代碼

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏
簡(jiǎn)介

R代碼是指使用R語(yǔ)言時(shí)書(shū)寫(xiě)的代碼。R是一套完整的數(shù)據(jù)處理、計(jì)算和制圖軟件系統(tǒng)。其功能包括:數(shù)據(jù)存儲(chǔ)和處理系統(tǒng);數(shù)組運(yùn)算工具(其向量、矩陣運(yùn)算方面功能尤其強(qiáng)大);完整連貫的統(tǒng)計(jì)分析工具;優(yōu)秀的統(tǒng)計(jì)制圖功能;簡(jiǎn)便而強(qiáng)大的編程語(yǔ)言:可操縱數(shù)據(jù)的輸入和輸出,可實(shí)現(xiàn)分支、循環(huán),用戶可自定義功能。

歷史

R是統(tǒng)計(jì)領(lǐng)域廣泛使用的誕生于1980年左右的S語(yǔ)言的一個(gè)分支??梢哉J(rèn)為R是S語(yǔ)言的一種實(shí)現(xiàn)。而S語(yǔ)言是由貝爾實(shí)驗(yàn)室開(kāi)發(fā)的一種用來(lái)進(jìn)行數(shù)據(jù)探索、統(tǒng)計(jì)分析和作圖的解釋型語(yǔ)言。最初S語(yǔ)言的實(shí)現(xiàn)版本主要是S-PLUS。S-PLUS是一個(gè)商業(yè)軟件,它基于S語(yǔ)言,并由MathSoft公司的統(tǒng)計(jì)科學(xué)部進(jìn)一步完善。后來(lái)新西蘭奧克蘭大學(xué)的Robert Gentleman和Ross Ihaka及其他志愿人員開(kāi)發(fā)了一個(gè)R系統(tǒng)。由“R開(kāi)發(fā)核心團(tuán)隊(duì)”負(fù)責(zé)開(kāi)發(fā)。R可以看作貝爾實(shí)驗(yàn)室(AT&T BellLaboratories)的RickBecker,JohnChambers和AllanWilks開(kāi)發(fā)的S語(yǔ)言的一種實(shí)現(xiàn)。當(dāng)然,S語(yǔ)言也是S-Plus的基礎(chǔ)。所以,兩者在程序語(yǔ)法上可以說(shuō)是幾乎一樣的,可能只是在函數(shù)方面有細(xì)微差別,程序十分容易地就能移植到一程序中,而很多一的程序只要稍加修改也能運(yùn)用于R。

特點(diǎn)

R作為一種統(tǒng)計(jì)分析軟件,是集統(tǒng)計(jì)分析與圖形顯示于一體的。它可以運(yùn)行于UNIX,Windows和Macintosh的操作系統(tǒng)上,而且嵌入了一個(gè)非常方便實(shí)用的幫助系統(tǒng),相比于其他統(tǒng)計(jì)分析軟件,R還有以下特點(diǎn):

1、R是自由軟件。這意味著它是完全免費(fèi),開(kāi)放源代碼的??梢栽谒木W(wǎng)站及其鏡像中下載任何有關(guān)的安裝程序、源代碼、程序包及其源代碼、文檔資料。標(biāo)準(zhǔn)的安裝文件身自身就帶有許多模塊和內(nèi)嵌統(tǒng)計(jì)函數(shù),安裝好后可以直接實(shí)現(xiàn)許多常用的統(tǒng)計(jì)功能。

2、R是一種可編程的語(yǔ)言。作為一個(gè)開(kāi)放的統(tǒng)計(jì)編程環(huán)境,語(yǔ)法通俗易懂,很容易學(xué)會(huì)和掌握語(yǔ)言的語(yǔ)法。而且學(xué)會(huì)之后,我們可以編制自己的函數(shù)來(lái)擴(kuò)展現(xiàn)有的語(yǔ)言。這也就是為什么它的更新速度比一般統(tǒng)計(jì)軟如SPSS,SAS等快得多。大多數(shù)最新的統(tǒng)計(jì)方法和技術(shù)都可以在R中直接得到。

3.、所有R的函數(shù)和數(shù)據(jù)集是保存在程序包里面的。只有當(dāng)一個(gè)包被載入時(shí),它的內(nèi)容才可以被訪問(wèn)。一些常用、基本的程序包已經(jīng)被收入了標(biāo)準(zhǔn)安裝文件中,隨著新的統(tǒng)計(jì)分析方法的出現(xiàn),標(biāo)準(zhǔn)安裝文件中所包含的程序包也隨著版本的更新而不斷變化。在另外版安裝文件中,已經(jīng)包含的程序包有:base-R的基礎(chǔ)模塊、mle-極大似然估計(jì)模塊、ts-時(shí)間序列分析模塊、mva-多元統(tǒng)計(jì)分析模塊、survival-生存分析模塊等等。

4、R具有很強(qiáng)的互動(dòng)性。除了圖形輸出是在另外的窗口處,它的輸入輸出窗口都是在同一個(gè)窗口進(jìn)行的,輸入語(yǔ)法中如果出現(xiàn)錯(cuò)誤會(huì)馬上在窗口口中得到提示,對(duì)以前輸入過(guò)的命令有記憶功能,可以隨時(shí)再現(xiàn)、編輯修改以滿足用戶的需要。輸出的圖形可以直接保存為JPG,BMP,PNG等圖片格式,還可以直接保存為PDF文件。另外,和其他編程語(yǔ)言和數(shù)據(jù)庫(kù)之間有很好的接口。

5、如果加入R的幫助郵件列表一,每天都可能會(huì)收到幾十份關(guān)于R的郵件資訊??梢院腿蛞涣鞯慕y(tǒng)計(jì)計(jì)算方面的專家討論各種問(wèn)題,可以說(shuō)是全世界最大、最前沿的統(tǒng)計(jì)學(xué)家思維的聚集地。

優(yōu)勢(shì)

21 世紀(jì)人類進(jìn)入信息社會(huì),傳感器和社會(huì)網(wǎng)絡(luò)產(chǎn)生海量數(shù)據(jù),數(shù)據(jù)累積的量變引發(fā)質(zhì)變,越來(lái)越多的企業(yè)、行業(yè)和國(guó)家以數(shù)據(jù)為資源進(jìn)行知識(shí)和智力開(kāi)發(fā),挖掘了數(shù)據(jù)內(nèi)在的階值,逐步形成了大數(shù)據(jù)的概念。由于 R 語(yǔ)言并行計(jì)算存在令人詬病的“吃內(nèi)存”弱點(diǎn),所以很多觀點(diǎn)認(rèn)為 R 語(yǔ)言處理不了大數(shù)據(jù)。這里先不論大數(shù)據(jù)究竟是 GB 級(jí)還是 TB 或 PB 級(jí)的,甚至說(shuō)處理不了的數(shù)據(jù)集才叫大,R 語(yǔ)言在處理 TB 級(jí)以上的數(shù)據(jù)集的確不是強(qiáng)項(xiàng),可以說(shuō)效率很低。

R 語(yǔ)言的優(yōu)勢(shì)在于其眾多優(yōu)秀的數(shù)據(jù)挖掘軟件包,以及諸多非常強(qiáng)大的繪圖軟件包,如 ggplot2 之類,深得各行業(yè)數(shù)據(jù)分析人士的青睞。近些年數(shù)據(jù)挖掘和大數(shù)據(jù)等概念的流行,R 作為數(shù)據(jù)分析工具正逐漸被重視。借助于越來(lái)越多并行計(jì)算及大數(shù)據(jù)處理相關(guān)的 R 程序包,R 可以結(jié)合并行計(jì)算框架 Hadoop 來(lái)做大數(shù)據(jù)處理。R 語(yǔ)言的模型算法優(yōu)勢(shì)加上 Hadoop 處理大數(shù)據(jù)的優(yōu)勢(shì),這種結(jié)合正慢慢地成為數(shù)據(jù)挖掘技術(shù)的主流1。

可視化應(yīng)用

今天,隨著數(shù)據(jù)量的不斷增加,數(shù)據(jù)可視化成為將數(shù)字變成可用的信息的一個(gè)重要方式。R語(yǔ)言提供了一系列的已有函數(shù)和可調(diào)用的庫(kù),通過(guò)建立可視化的方式進(jìn)行數(shù)據(jù)的呈現(xiàn)。在使用圖表分析的時(shí)候,常用的有7種圖表:散點(diǎn)圖,直方圖,柱狀圖和條形圖,箱線圖,面積圖,熱點(diǎn)圖,相關(guān)圖2。我們以超市的數(shù)據(jù)作為舉例來(lái)介紹。

散點(diǎn)圖

使用場(chǎng)景:散點(diǎn)圖通常用于分析兩個(gè)連續(xù)變量之間的關(guān)系。在超市數(shù)據(jù)中,如果我們想根據(jù)他們的成本數(shù)據(jù)來(lái)可視化商品的知名度,我們可以用散點(diǎn)圖,兩個(gè)連續(xù)的變量這里我們命名為Item_Visibility和Item_MRP。

這里使用R中的ggplot()和geom_point()函數(shù)。

library(ggplot2) // ggplot2 是R中的一個(gè)函數(shù)庫(kù)

ggplot(train, aes(Item_Visibility, Item_MRP)) + geom_point() + scale_x_continuous("Item

Visibility", breaks = seq(0,0.35,0.05))+ scale_y_continuous("Item MRP", breaks = seq(0,270,by =

30))+ theme_bw()

直方圖

使用場(chǎng)景:直方圖用于連續(xù)變量的可視化分析。將數(shù)據(jù)劃分,并用概率的形式呈現(xiàn)數(shù)據(jù)的規(guī)律。我們可以將分類根據(jù)需求進(jìn)行組合和拆分,從而通過(guò)這種方式看到數(shù)據(jù)的變化。

繼續(xù)使用上面我們引入的超市數(shù)據(jù)的例子,如果我們需要知道不同成本段的商品的數(shù)量,我們可以將所有數(shù)據(jù)畫(huà)出一個(gè)直方圖,Item_MRP作為橫坐標(biāo)。如下圖所示:

下面是一個(gè)簡(jiǎn)單的畫(huà)直方圖的例子,使用的是R中的ggplot()和geom_histogram()函數(shù)。

ggplot(train, aes(Item_MRP)) + geom_histogram(binwidth = 2)+

scale_x_continuous("Item MRP", breaks = seq(0,270,by = 30))+

scale_y_continuous("Count", breaks = seq(0,200,by = 20))+

labs(title = "Histogram")

柱狀圖和條形圖

使用場(chǎng)景:柱狀圖一般用于表現(xiàn)分類的變量或者是連續(xù)的分類變量的組合。

在超市數(shù)據(jù)的例子中,如果我們需要知道在每一年新開(kāi)的超市的門(mén)店數(shù)量,那么柱狀圖就是一個(gè)很好的圖形分析的方式。用“年”的信息作為坐標(biāo),如下圖所示:

下面是一個(gè)簡(jiǎn)單的畫(huà)柱狀圖的例子,使用的是R中的ggplot()函數(shù)。

ggplot(train, aes(Outlet_Establishment_Year)) + geom_bar(fill = "red")+theme_bw()+

scale_x_continuous("Establishment Year", breaks = seq(1985,2010)) +

scale_y_continuous("Count", breaks = seq(0,1500,150)) +

coord_flip()+ labs(title = "Bar Chart") + theme_gray()

箱線圖

使用場(chǎng)景:箱線圖一般用于相對(duì)復(fù)雜的場(chǎng)景,通常是組合分類的連續(xù)變量。這種圖表應(yīng)用于對(duì)數(shù)據(jù)延伸的可視化分析和檢測(cè)離值群。主要包含數(shù)據(jù)的5個(gè)重要節(jié)點(diǎn),最小值,25%,50%,75%和最大值。

在我們的案例中,如果我們想要找出每個(gè)折扣店每個(gè)商品銷售的價(jià)格的情況,包括最低價(jià),最高價(jià)和中間價(jià),箱線圖就大有用處。除此之外,箱線圖還可以提供非正常價(jià)格商品銷售的情況,如下圖所示。

圖中,黑色的點(diǎn)為離值群。離值群的檢測(cè)和剔除是數(shù)據(jù)挖掘中很重要的環(huán)節(jié)。

下面是一個(gè)簡(jiǎn)單的畫(huà)箱線圖的例子,使用的是R中的ggplot()和geom_boxplot函數(shù)。

ggplot(train, aes(Outlet_Identifier, Item_Outlet_Sales)) + geom_boxplot(fill = "red")+

scale_y_continuous("Item Outlet Sales", breaks= seq(0,15000, by=500))+

labs(title = "Box Plot", x = "Outlet Identifier")

面積圖

使用場(chǎng)景:面積圖通常用于顯示變量和數(shù)據(jù)的連續(xù)性。和線性圖很相近,是常用的時(shí)序分析方法。另外,它也被用來(lái)繪制連續(xù)變量和分析的基本趨勢(shì)。

超市案例中,當(dāng)我們需要知道隨著時(shí)間的推移,折扣店商品的品種走勢(shì),我們可以畫(huà)出如下的面積圖,圖中呈現(xiàn)了折扣店商品的成交量的變化。

下面是一個(gè)簡(jiǎn)單的畫(huà)面積圖的例子,用于分析折扣店商品成交數(shù)量的走勢(shì),使用的是R中的ggplot()和geom_area函數(shù)。

ggplot(train, aes(Item_Outlet_Sales)) + geom_area(stat = "bin", bins = 30, fill = "steelblue") +

scale_x_continuous(breaks = seq(0,11000,1000))+

labs(title = "Area Chart", x = "Item Outlet Sales", y = "Count")

熱點(diǎn)圖

使用場(chǎng)景:熱點(diǎn)圖用顏色的強(qiáng)度(密度)來(lái)顯示二維圖像中的兩個(gè)或多個(gè)變量之間的關(guān)系??蓪?duì)圖表中三個(gè)部分的進(jìn)行信息挖掘,兩個(gè)坐標(biāo)和圖像顏色深度。

超市案例中,如果我們需要知道每個(gè)商品在每個(gè)折扣店的成本,如下圖中所示,我們可以用三個(gè)變量Item_MRP,Outlet_Identifier和Item_type進(jìn)行分析。

暗的數(shù)據(jù)表示Item_MRP低于50,亮的數(shù)據(jù)表示Item_MRP接近250。

下面是R代碼,使用了ggplot()函數(shù)做簡(jiǎn)單的熱點(diǎn)圖。

ggplot(train, aes(Outlet_Identifier, Item_Type))+

geom_raster(aes(fill = Item_MRP))+

labs(title ="Heat Map", x = "Outlet Identifier", y = "Item Type")+

scale_fill_continuous(name = "Item MRP")

關(guān)系圖

使用場(chǎng)景:關(guān)系圖用作表示連續(xù)變量之間的關(guān)聯(lián)性。每個(gè)單元可以標(biāo)注成陰影或顏色來(lái)表明關(guān)聯(lián)的程度。顏色越深,代表關(guān)聯(lián)程度越高。正相關(guān)用藍(lán)色表示,負(fù)相關(guān)用紅色表示。顏色的深度隨著關(guān)聯(lián)程度的遞增而遞增。

超市案例中,用下圖可以展現(xiàn)成本,重量,知名度與折扣店開(kāi)業(yè)的年份和銷售價(jià)格之間的關(guān)系??梢园l(fā)現(xiàn),成本和售價(jià)成正相關(guān),而商品的重量和知名度成負(fù)相關(guān)。

下面是用作簡(jiǎn)單關(guān)系圖的R代碼,使用的是corrgram()函數(shù)。

install.packages("corrgram")

library(corrgram)

corrgram(train, order=NULL, panel=panel.shade, text.panel=panel.txt,

main="Correlogram")

R包介紹

R語(yǔ)言的使用,很大程度上是借助各種各樣的R包的輔助,從某種程度上講,R包就是針對(duì)于R的插件,不同的插件滿足不同的需求,截至2013年3月6日,CRAN已經(jīng)收錄了各類包4338個(gè)。例如用于經(jīng)濟(jì)計(jì)量、財(cái)經(jīng)分析、人文科學(xué)研究以及人工智能。

安裝包

1、通過(guò)選擇菜單:

程序包->安裝程序包->在彈出的對(duì)話框中,選擇你要安裝的包,然后確定。

2、使用命令

install.packages("package_name","dir")

package_name:是指定要安裝的包名,請(qǐng)注意大小寫(xiě)。

dir:包安裝的路徑。默認(rèn)情況下是安裝在..\library 文件夾中的??梢酝ㄟ^(guò)本參數(shù)來(lái)進(jìn)行修改,來(lái)選擇安裝的文件夾。

3、本地來(lái)安裝

如果你已經(jīng)下載的相應(yīng)的包的壓縮文件,則可以在本地來(lái)進(jìn)行安裝。請(qǐng)注意在windows、unix、macOS操作系統(tǒng)下安裝文件的后綴名是不一樣的:

1)linux環(huán)境編譯運(yùn)行:tar.gz文件

2)windows 環(huán)境編譯運(yùn)行 :.zip文件

3)MacOS環(huán)境編譯運(yùn)行:.tgz文件

加載包

包安裝后,如果要使用包的功能。必須先把包加載到內(nèi)存中(默認(rèn)情況下,R啟動(dòng)后默認(rèn)加載基本包),加載包命令:

Library(“包名”)

Require(“包名”)

查看包的相關(guān)信息

1、查看包幫忙

library(help="package_name")

主要內(nèi)容包括:例如:包名、作者、版本、更新時(shí)間、功能描述、開(kāi)源協(xié)議、存儲(chǔ)位置、主要的函數(shù)

help(package = "package_name")

主要內(nèi)容包括:包的內(nèi)置所有函數(shù),是更為詳細(xì)的幫助文檔

2、查看當(dāng)前環(huán)境哪些包加載

find.package() 或者 .path.package()

3、移除包出內(nèi)存

detach()

4、把其它包的數(shù)據(jù)加載到內(nèi)存中

data(dsname, package="package_name")

5、查看這個(gè)包里的包有數(shù)據(jù)

data( package="package_name")

6、列出所有安裝的包

library()