
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ù)可視化的進化已經(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所描繪的Napoleon’s 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ù)可視化。Leaflet是JavaScript開源庫中最受歡迎的一個庫,用于互動地圖。有關(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)代碼的圖,我們是如何使用xlab和ylab來傳遞軸標(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包。RCcommander和KMggplot及Rattle用于數(shù)據(jù)
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03