99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀R語言數(shù)據(jù)可視化綜合指南
R語言數(shù)據(jù)可視化綜合指南
2015-11-24
收藏

R語言數(shù)據(jù)可視化綜合指南

編譯|崔浩 校對|高航,姚佳靈

 

讓我們快速瀏覽一下這張圖表:

 


 

這張可視化數(shù)據(jù)圖(最初用Tableau軟件創(chuàng)建 )是如何利用數(shù)據(jù)可視化來幫助決策者的一個很好的例子。想象一下,如果這些信息通過表格來告訴投資者,你認(rèn)為你會花多長時間來向他解釋?

 

如今的世界里,隨著數(shù)據(jù)量的不斷增長,很難不用可視化的形式來呈現(xiàn)你數(shù)據(jù)里的全部信息。雖然有專門的工具,如Tableau, QlikView d3.js,但沒有任何東西能代替有很好可視化能力的建模/統(tǒng)計工具。尤其是它有助于做若干探索性數(shù)據(jù)分析和特征化工程。這就是R語言,它提供了令人難以置信的幫助。

 

R語言提供了令人滿意的一套內(nèi)置函數(shù)和庫(如 ggplot2, leaflet, lattice)用來建立可視化效果以呈現(xiàn)數(shù)據(jù)。在本文中,我已經(jīng)涉及了用R語言編程來創(chuàng)建既常見又先進的可視化效果的步驟。但是,在介紹那些之前,讓我們快速瀏覽一下數(shù)據(jù)可視化簡史。如果您對歷史不感興趣,沒問題,您可以跳到下一節(jié)。

 

數(shù)據(jù)可視化簡史

 

從歷史來看,數(shù)據(jù)可視化的進化已經(jīng)被著名的從業(yè)者在工作中完成了。威廉.普萊菲(William Playfair)是統(tǒng)計圖形化方法的創(chuàng)始人。威廉.普萊菲發(fā)明了四種類型的圖表:線圖、經(jīng)濟學(xué)數(shù)據(jù)的柱狀圖、餅狀圖和圓圖。約瑟夫·普里斯特利(Joseph Priestly)創(chuàng)建了第一個劃時代的時間線圖,其中的每一個柱形是用來顯示一個人的壽命(1765)。沒錯,時間線圖被發(fā)明于250年前,而不是Facebook發(fā)明的!

 

最著名的早期可視化數(shù)據(jù)是由Charles Minard所描繪的Napoleons March(俄法戰(zhàn)爭)??梢暬瘮?shù)據(jù)中包含了隨著時間的變化,氣溫對拿破侖入侵俄國產(chǎn)生廣泛影響的信息。在圖形中,值得注意的是,在二個維度上的六種類型數(shù)據(jù),分別表示:拿破侖軍隊的數(shù)量,距離,溫度,緯度和經(jīng)度,行軍方向和跟特定日期有關(guān)的位置。

 

弗洛倫斯·南丁格爾(Florence Nightangle)也是數(shù)據(jù)可視化的先驅(qū)。她用數(shù)據(jù)圖表的方式描述了疾病對軍隊的死亡率的影響(1858)。瓊恩·雪諾(John Snow)(不是《權(quán)力的游戲》里的人物)是把地圖用在圖表和空間分析的先驅(qū)。在1854年的倫敦,用這地圖發(fā)現(xiàn)了霍亂疫情的源頭與公共水泵有關(guān),信息圖幫助精確定位爆發(fā)源到某一個泵的位置。

 

R語言進行數(shù)據(jù)可視化

 

在這篇文章中,我們將創(chuàng)建以下可視化效果:

 

基本可視化效果

 

1. 直方圖

2. 條形圖/線型圖

3. 箱式圖

4. 散點圖

 

高級可視化效果

 

1. 熱點圖

2. 影像鑲嵌圖

3. 地圖可視化

4. 3維圖

5. 相關(guān)圖

 

R語言 小竅門:

 

HistData軟件包提供了一個小數(shù)據(jù)集,它很有趣并且在統(tǒng)計和數(shù)據(jù)可視化的歷史上很重要。

 

 

基本可視化效果

 

便簽:

 

1.基本圖形可以很容易地用R語言進行創(chuàng)建。繪圖(plot)命令是要關(guān)注的命令。

 

2. 它的參數(shù)有x軸數(shù)據(jù)、y軸數(shù)據(jù)、x軸標(biāo)簽、y軸標(biāo)簽、顏色和標(biāo)題。要創(chuàng)建線圖,只需簡單地使用參數(shù),類型選擇為l。

 

3. 如果你想要箱式圖,你可以選用箱式圖(boxplot),要條形圖就用條形圖函數(shù)。

 

1.直方圖

 

基本上,直方圖是將數(shù)據(jù)分解為一個個的小格子(或間隔),并顯示它們的頻率分布。您可以更改間隔,看看這樣做對數(shù)據(jù)可視化可理解性的影響。

 

給您舉個例子。

 

注意:我們使用的par(mfrow=c(2,5))命令,為的是清晰地把多個圖放在同一頁上(參看下面的代碼)。

 

library(RColorBrewer)

 

data(VADeaths)

 

par(mfrow=c(2,3))

 

hist(VADeaths,breaks=10 col=brewer.pal(3,"Set3"),main="Set3 3 colors")

 

hist(VADeaths,breaks=3 col=brewer.pal(3,"Set2")main="Set2 3 colors")

 

hist(VADeaths,breaks=7 col=brewer.pal(3,"Set1"),main="Set1 3 colors")

 

hist(VADeaths,,breaks= 2, col=brewer.pal(8"Set3"),main="Set3 8 colors")

 

hist(VADeaths,col=brewer.pal(8,"Greys")main="Greys 8 colors")

 

hist(VADeaths,col=brewer.pal(8,"Greens"),main="Greens 8 colors")

 

 

請注意,如果間隔數(shù)少于被指定的顏色數(shù),顏色會變成極值,如上圖中的“Set3 8 colors”圖。如果間隔數(shù)目超過了顏色的數(shù)目,則顏色會開始像在第一行中一樣地重復(fù)出現(xiàn)。

 

2.條形圖/線型圖

 

線型圖

 

下面的折線圖顯示了在給定時間內(nèi)飛機乘客數(shù)的增長情況。折線圖通常是分析一段時間內(nèi)延伸趨勢的首選。此外,當(dāng)我們需要比較數(shù)量隨著某種變量(例如時間)的相對變化時,線型圖也是適用的。下面是代碼:

 

plot(AirPassengers,type="l")  #Simple Line Plot

 

 

條形圖

 

條形圖適用于顯示跨幾個組別的累計匯總之間的比較。層疊圖用于跨類別的條形圖。下面是代碼:

 

barplot(iris$Petal.Length) #Creating simple Bar Graph

 

barplot(iris$Sepal.Length,col  = brewer.pal(3,"Set1"))

 

barplot(table(iris$Species,iris$Sepal.Length),col  = brewer.pal(3,"Set1")) #Stacked Plot

 

 

3. 箱式圖

 

箱式圖顯示5個有統(tǒng)計學(xué)意義的數(shù)字,分別是最小數(shù)、第一四分?jǐn)?shù)位、中位數(shù)、第三四分位數(shù)和最大數(shù)。因此,它在數(shù)據(jù)延伸的可視化上非常有用,還能得出相應(yīng)的推論。下面是簡單的代碼:

 

boxplot(iris$Petal.Length~iris$Species) #Creating Box Plot between two variable

 

讓我們來理解下面的代碼:

 

在下面的例子中,我在屏幕上顯示了4個圖。通過使用~符號,我可以將(萼片的長度)的伸展是如何跨各種類別(的物種)進行可視化。我在最后的兩個圖中演示了調(diào)色板。調(diào)色板是一組顏色,用來使圖標(biāo)更有吸引力,而且能幫助在數(shù)據(jù)中創(chuàng)建醒目的區(qū)別。

 

data(iris)

 

par(mfrow=c(2,2))

 

boxplot(iris$Sepal.Length,col="red")

 

boxplot(iris$Sepal.Length~iris$Species,col="red")

 

oxplot(iris$Sepal.Length~iris$Species,col=heat.colors(3))

 

boxplot(iris$Sepal.Length~iris$Species,col=topo.colors(3))

 

 

要了解更多關(guān)于R語言中調(diào)色板的使用,請參看http//decisionstats.com/2011/04/21/using-color-palettes-in-r/

 

4. 散點圖(包括3D等功能)

 

散點圖有助于輕松地把數(shù)據(jù)可視化和進行簡單的數(shù)據(jù)檢查。這里有簡單散點圖和多元散點圖的代碼:

 

plot(x=iris$Petal.Length) #Simple Scatter Plot

 

plot(x=iris$Petal.Length,y=iris$Species) #Multivariate Scatter Plot

 

 

散點圖矩陣可以幫助將彼此交叉的多個變量可視化。

 

plot(iris,col=brewer.pal(3,"Set1"))

 

 

您可能會想,我還沒有把餅圖列表成基本圖形。這不是失誤,而是我故意這么做的。這是因為,數(shù)據(jù)可視化專業(yè)人員不贊成使用餅圖來表示數(shù)據(jù)。因為人的眼睛不能像目測線性距離那樣精確地目測出圓的距離。只需要簡單地把任何可用餅圖表示的東西都用線圖表示。但是,如果你喜歡餅圖,可使用:

 

pie(table(iris$Species))

 

到這里為止,我們已經(jīng)學(xué)過的所有圖表列表如下:

 

 

您可能已經(jīng)注意到,在一些圖表中,他們的標(biāo)題已被截斷,因為我把太多圖表放在同一個屏幕上。要改變這一點,你只需要改變par函數(shù)的‘mfrow’參數(shù)。

 

高級可視化效果

 

什么是Hexbin Binning?

 

如果在同一個地方有很多點(overplotting),我們可以使用Hexbin包。六邊形面元劃分是一種二元直方圖,對大數(shù)量級結(jié)構(gòu)的數(shù)據(jù)集的可視化非常有用。下面是代碼:

 

>library(hexbin)

 

>a=hexbin(diamonds$price,diamonds$carat,xbins=40)

 

>library(RColorBrewer)

 

>plot(a)

 

 

我們也可以創(chuàng)建一個調(diào)色板,然后用Hexbin繪圖功能以獲得更好的視覺效果。下面是代碼:

 

>library(RColorBrewer)

 

>rf <- colorRampPalette(rev(brewer.pal(40,'Set3')))

 

>hexbinplot(diamonds$price~diamonds$carat, data=diamonds, colramp=rf)

 

 

馬賽克拼圖

 

馬賽克拼圖可以通過數(shù)據(jù)所占據(jù)的面積大小來有效地顯示分類數(shù)據(jù)的相對比例。

 

> data(HairEyeColor)

 

> mosaicplot(HairEyeColor)

 

 

熱圖

 

熱圖使你能夠以兩個維度為軸,顏色的強度為第三個維度來進行探索性的數(shù)據(jù)分析。然而,你需要將數(shù)據(jù)集轉(zhuǎn)化成矩陣形式。下面是代碼:

 

> heatmap(as.matrix(mtcars))

 

您也可以使用image()命令做這種類型的可視化:

 

> image(as.matrix(b[2:7]))

 

 

如何匯總大量數(shù)據(jù)?

 

您可以使用tabplot包中的tableplot功能,快速匯總大量數(shù)據(jù)

 

 

地圖可視化

 

R語言中最新的東西是通過Javascript庫來進行數(shù)據(jù)可視化。LeafletJavaScript開源庫中最受歡迎的一個庫,用于互動地圖。有關(guān)它的內(nèi)容,請參考https//rstudio.github.io/leaflet/。

 

您可以用下面的代碼直接從github安裝Leaflet。

 

devtools::install_github("rstudio/leaflet")

 

 

制作上述地圖的代碼是非常簡單的:

 

library(magrittr)

 

library(leaflet)

 

m <- leaflet() %>%

 

addTiles() %>%  # Add default OpenStreetMap map tiles

 

addMarkers(lng=77.2310, lat=28.6560, popup="The delicious food of chandni chowk")

 

m  # Print the map

 

3維圖

 

R語言的的功能讓人閃瞎眼的最簡單的方法之一是通過創(chuàng)建一張3維圖,而不需要用R語言寫一行代碼,并且在3分鐘內(nèi)就能完成。這樣要求是不是太過分呢?

 

我們使用R Commander包作為圖形用戶界面(GUI)。操作步驟如下:

 

1. 只需安裝Rcmdr

 

2. 使用來自圖中的3D繪圖選項

 

下面的代碼不是用戶輸入的,是自動生成的。

 

便簽:當(dāng)我們交換圖的坐標(biāo)軸時,您應(yīng)該看到有著相應(yīng)代碼的圖,我們是如何使用xlabylab來傳遞軸標(biāo)簽,圖標(biāo)題用Main函數(shù),顏色是col參數(shù)。

 

>data(iris, package="datasets")

 

>scatter3d(Petal.Width~Petal.Length+Sepal.Length|Species, data=iris fit="linear"

 

>residuals=TRUE, parallel=FALSE, bg="black", axis.scales=TRUE, grid=TRUE, ellipsoid=FALSE)

 

 

您還可以使用Lattice包來做3維圖。Lattice也可以用于xyplot。下面是代碼:

 

>attach(iris)# 3d scatterplot by factor level

 

>cloud(Sepal.Length~Sepal.Width*Petal.Length|Species, main="3D Scatterplot by Species")

 

>xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species pch= 20)

 


相關(guān)圖(GUIs

 

相關(guān)圖幫助我們把相關(guān)矩陣內(nèi)的數(shù)據(jù)可視化。下面是代碼:

 

> cor(iris[1:4])

 

Sepal.Length Sepal.Width Petal.Length Petal.Width

 

Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411

 

Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259

 

Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654

 

Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000

 

> corrgram(iris)

 

 

R語言有三個主要的GUI包。RCcommanderKMggplotRattle用于數(shù)據(jù)

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }