環(huán)境與生態(tài)統(tǒng)計(jì)||探索性數(shù)據(jù)可視化

探索性數(shù)據(jù)分析(Exploratory Data Analysis, EDA)是一門學(xué)問断箫。在我們拿到數(shù)據(jù)之后的第一沖動就是拿來建模鉴裹,得出一個(gè)函數(shù)來描繪我們希望闡明的自然現(xiàn)象欠气。然而率触,這只是一個(gè)比較浪漫的想法而已抵碟。所有統(tǒng)計(jì)模型都是基于一個(gè)或多個(gè)關(guān)于數(shù)據(jù)分布和關(guān)系特征的假設(shè)豹储。學(xué)習(xí)統(tǒng)計(jì)學(xué)方法時(shí)贷盲,關(guān)鍵技巧就是有統(tǒng)計(jì)假設(shè)的意識和評價(jià)是否滿足這些假設(shè)的意識。

Exploratory data analysis is an attitude, a state of flexibility, a willingness to look for those things that we believe are not there, as well as those that we believe to be there.

任何數(shù)據(jù)分析的第一步都應(yīng)該是對數(shù)據(jù)分布剥扣,潛在關(guān)系以及數(shù)據(jù)中可能存在的問題展開探索性分析巩剖。與 EDA 區(qū)別的是傳統(tǒng)統(tǒng)計(jì)分析(Formal Analysis),傳統(tǒng)統(tǒng)計(jì)分析在假設(shè)樣本分布后钠怯,把數(shù)據(jù)套入假設(shè)模型再做分析佳魔。EDA 所做的,就是重新檢視我們對數(shù)據(jù)的理解晦炊,為之后的傳統(tǒng)統(tǒng)計(jì)分析打下基礎(chǔ)鞠鲜。

Exploratory data analysis 可以完成這些事情:

  • 讓你最大程度得到數(shù)據(jù)的直覺
  • 發(fā)掘潛在的結(jié)構(gòu)
  • 提取重要的變量
  • 刪除異常值
  • 檢驗(yàn)潛在的假設(shè)
  • 建立初步的模型
  • 決定最優(yōu)因子的設(shè)置

對于我們茫然不知所措的數(shù)據(jù),就像一個(gè)蓋著紅蓋頭的新娘断国,我們需要揭開來看一看贤姆。所以,用可視化工具進(jìn)行探索性數(shù)據(jù)分析是一個(gè)不錯(cuò)的選擇稳衬,可視化讓我們對數(shù)據(jù)有一個(gè)大致的認(rèn)識霞捡。盡管探索性數(shù)據(jù)分析和數(shù)據(jù)可視化的目標(biāo)是不同的,探索性數(shù)據(jù)分析重在「探索」薄疚,為研究者服務(wù)碧信;數(shù)據(jù)可視化重在「講故事」,為觀眾服務(wù)街夭。

1 數(shù)據(jù)可視化技術(shù)

數(shù)據(jù)可視化(Data Visualization)計(jì)算機(jī)圖形學(xué)的一個(gè)子集砰碴,是計(jì)算機(jī)科學(xué)的一個(gè)分支。 科學(xué)可視化的目的是以圖形方式說明科學(xué)數(shù)據(jù)莱坎,使科學(xué)家能夠從數(shù)據(jù)中了解衣式、說明和收集規(guī)律寸士。當(dāng)我們得到數(shù)據(jù)當(dāng)然要看看它里面有著怎樣的規(guī)律檐什,這時(shí)我們有兩種辦法:一個(gè)是把它畫出來,一個(gè)使用函數(shù)的形式寫出來弱卡。也就是要把他歸納比原始數(shù)據(jù)更簡單更容易為人們所接受的形式乃正。而對于我們的數(shù)據(jù),一下子要寫他們的函數(shù)關(guān)系式婶博,并不是一件容易的事瓮具,所以還是選擇用圖表來看一看比較好。有哪些可視化的工具呢?

R中有四大框架用于產(chǎn)生圖形:

  • 基本圖形
  • 網(wǎng)絡(luò)
  • 柵格
  • ggplot2
    本章分離散數(shù)據(jù)和連續(xù)數(shù)據(jù)介紹幾種可視化技術(shù):
1.1 分類數(shù)據(jù)的可視化技術(shù)

分類數(shù)據(jù)一般來說是離散的名党,主要可以分為以下兩種:

  • nominal 變量是指沒有自然的順序的變量叹阔。
  • ordinal 變量是指有自然的順序的變量。
  • 如果 ordinal 變量的范圍是在兩個(gè)值之間的传睹,那么他還是 interval variable耳幢。
    得到分類數(shù)據(jù)第一直覺就是看看不同類別之間有什么差別,然后分析這些差別的來源欧啤。
1.1.1 條(柱)形圖

即使你不懂分類變量睛藻,你也可能非常熟悉條形圖。條形圖可以使用graphics庫中的barplot得到邢隧,該繪圖的功能可以用example(barplot)調(diào)用店印。另外一種是lattice包中的barchart函數(shù),也可以用example(barchart)

在R中輸入example(barplot)連續(xù)點(diǎn)擊enter可以看到這個(gè)函數(shù)的幾款基本圖形:

同時(shí)給出示例代碼:

> example(barplot)

barplt> require(grDevices) # for colours

barplt> tN <- table(Ni <- stats::rpois(100, lambda = 5))

barplt> r <- barplot(tN, col = rainbow(20))
Hit <Return> to see next plot: 

barplt> #- type = "h" plotting *is* 'bar'plot
barplt> lines(r, tN, type = "h", col = "red", lwd = 2)

barplt> barplot(tN, space = 1.5, axisnames = FALSE,
barplt+         sub = "barplot(..., space= 1.5, axisnames = FALSE)")
Hit <Return> to see next plot: 

barplt> barplot(VADeaths, plot = FALSE)
[1] 0.7 1.9 3.1 4.3

barplt> barplot(VADeaths, plot = FALSE, beside = TRUE)
     [,1] [,2] [,3] [,4]
[1,]  1.5  7.5 13.5 19.5
[2,]  2.5  8.5 14.5 20.5
[3,]  3.5  9.5 15.5 21.5
[4,]  4.5 10.5 16.5 22.5
[5,]  5.5 11.5 17.5 23.5

barplt> mp <- barplot(VADeaths) # default
Hit <Return> to see next plot: 

barplt> tot <- colMeans(VADeaths)

barplt> text(mp, tot + 3, format(tot), xpd = TRUE, col = "blue")

barplt> barplot(VADeaths, beside = TRUE,
barplt+         col = c("lightblue", "mistyrose", "lightcyan",
barplt+                 "lavender", "cornsilk"),
barplt+         legend = rownames(VADeaths), ylim = c(0, 100))
Hit <Return> to see next plot: 

barplt> title(main = "Death Rates in Virginia", font.main = 4)

barplt> hh <- t(VADeaths)[, 5:1]

barplt> mybarcol <- "gray20"

barplt> mp <- barplot(hh, beside = TRUE,
barplt+         col = c("lightblue", "mistyrose",
barplt+                 "lightcyan", "lavender"),
barplt+         legend = colnames(VADeaths), ylim = c(0,100),
barplt+         main = "Death Rates in Virginia", font.main = 4,
barplt+         sub = "Faked upper 2*sigma error bars", col.sub = mybarcol,
barplt+         cex.names = 1.5)
Hit <Return> to see next plot: 

barplt> segments(mp, hh, mp, hh + 2*sqrt(1000*hh/100), col = mybarcol, lwd = 1.5)

barplt> stopifnot(dim(mp) == dim(hh))  # corresponding matrices

barplt> mtext(side = 1, at = colMeans(mp), line = -2,
barplt+       text = paste("Mean", formatC(colMeans(hh))), col = "red")

barplt> # Bar shading example
barplt> barplot(VADeaths, angle = 15+10*1:5, density = 20, col = "black",
barplt+         legend = rownames(VADeaths))
Hit <Return> to see next plot: 

barplt> title(main = list("Death Rates in Virginia", font = 4))

barplt> # border :
barplt> barplot(VADeaths, border = "dark blue") 
Hit <Return> to see next plot: 

barplt> # log scales (not much sense here):
barplt> barplot(tN, col = heat.colors(12), log = "y")
Hit <Return> to see next plot: 

barplt> barplot(tN, col = gray.colors(20), log = "xy")
Hit <Return> to see next plot: 

barplt> # args.legend
barplt> barplot(height = cbind(x = c(465, 91) / 465 * 100,
barplt+                        y = c(840, 200) / 840 * 100,
barplt+                        z = c(37, 17) / 37 * 100),
barplt+         beside = FALSE,
barplt+         width = c(465, 840, 37),
barplt+         col = c(1, 2),
barplt+         legend.text = c("A", "B"),
barplt+         args.legend = list(x = "topleft"))
Hit <Return> to see next plot: 
> 

lattice包中的barchart函數(shù)也可以這樣獲得示例:


> library(lattice)
> example("barchart")

brchrt> require(stats)

brchrt> ## Tonga Trench Earthquakes
brchrt> 
brchrt> Depth <- equal.count(quakes$depth, number=8, overlap=.1)

brchrt> xyplot(lat ~ long | Depth, data = quakes)
Hit <Return> to see next plot: 

brchrt> update(trellis.last.object(),
brchrt+        strip = strip.custom(strip.names = TRUE, strip.levels = TRUE),
brchrt+        par.strip.text = list(cex = 0.75),
brchrt+        aspect = "iso")
Hit <Return> to see next plot: 

brchrt> ## Examples with data from `Visualizing Data' (Cleveland, 1993) obtained
brchrt> ## from http://cm.bell-labs.com/cm/ms/departments/sia/wsc/
brchrt> 
brchrt> EE <- equal.count(ethanol$E, number=9, overlap=1/4)

brchrt> ## Constructing panel functions on the fly; prepanel
brchrt> xyplot(NOx ~ C | EE, data = ethanol,
brchrt+        prepanel = function(x, y) prepanel.loess(x, y, span = 1),
brchrt+        xlab = "Compression Ratio", ylab = "NOx (micrograms/J)",
brchrt+        panel = function(x, y) {
brchrt+            panel.grid(h = -1, v = 2)
brchrt+            panel.xyplot(x, y)
brchrt+            panel.loess(x, y, span=1)
brchrt+        },
brchrt+        aspect = "xy")
Hit <Return> to see next plot: 

brchrt> ## Extended formula interface 
brchrt> 
brchrt> xyplot(Sepal.Length + Sepal.Width ~ Petal.Length + Petal.Width | Species,
brchrt+        data = iris, scales = "free", layout = c(2, 2),
brchrt+        auto.key = list(x = .6, y = .7, corner = c(0, 0)))
Hit <Return> to see next plot: 

brchrt> ## user defined panel functions
brchrt> 
brchrt> states <- data.frame(state.x77,
brchrt+                      state.name = dimnames(state.x77)[[1]],
brchrt+                      state.region = state.region)

brchrt> xyplot(Murder ~ Population | state.region, data = states,
brchrt+        groups = state.name,
brchrt+        panel = function(x, y, subscripts, groups) {
brchrt+            ltext(x = x, y = y, labels = groups[subscripts], cex=1,
brchrt+                  fontfamily = "HersheySans")
brchrt+        })
Hit <Return> to see next plot: 

brchrt> ## Stacked bar chart
brchrt> 
brchrt> barchart(yield ~ variety | site, data = barley,
brchrt+          groups = year, layout = c(1,6), stack = TRUE,
brchrt+          auto.key = list(space = "right"),
brchrt+          ylab = "Barley Yield (bushels/acre)",
brchrt+          scales = list(x = list(rot = 45)))
Hit <Return> to see next plot: 

brchrt> bwplot(voice.part ~ height, data=singer, xlab="Height (inches)")
Hit <Return> to see next plot: 

brchrt> dotplot(variety ~ yield | year * site, data=barley)
Hit <Return> to see next plot: 

brchrt> ## Grouped dot plot showing anomaly at Morris
brchrt> 
brchrt> dotplot(variety ~ yield | site, data = barley, groups = year,
brchrt+         key = simpleKey(levels(barley$year), space = "right"),
brchrt+         xlab = "Barley Yield (bushels/acre) ",
brchrt+         aspect=0.5, layout = c(1,6), ylab=NULL)
Hit <Return> to see next plot: 

brchrt> stripplot(voice.part ~ jitter(height), data = singer, aspect = 1,
brchrt+           jitter.data = TRUE, xlab = "Height (inches)")
Hit <Return> to see next plot: 

brchrt> ## Interaction Plot
brchrt> 
brchrt> xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
brchrt+        type = "a",
brchrt+        auto.key =
brchrt+        list(space = "right", points = FALSE, lines = TRUE))
Hit <Return> to see next plot: 

brchrt> ## longer version with no x-ticks
brchrt> 
brchrt> ## Not run: 
brchrt> ##D bwplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
brchrt> ##D        panel = "panel.superpose",
brchrt> ##D        panel.groups = "panel.linejoin",
brchrt> ##D        xlab = "treatment",
brchrt> ##D        key = list(lines = Rows(trellis.par.get("superpose.line"),
brchrt> ##D                   c(1:7, 1)),
brchrt> ##D                   text = list(lab = as.character(unique(OrchardSprays$rowpos))),
brchrt> ##D                   columns = 4, title = "Row position"))
brchrt> ## End(Not run)
brchrt> 
brchrt> 
brchrt> 
brchrt> 
> 

是不是感覺example()很好用倒慧?
到這里我們需要知道條形圖與柱形圖有什么區(qū)別按摘?

  • 排版需要
  • 柱形圖可以和折線圖結(jié)合
1.1.1 點(diǎn)圖(dotplot)

在描述離散變量的時(shí)候我們可以稱為點(diǎn)圖纫谅,在連續(xù)變量里面叫散點(diǎn)圖院峡,顧名思義就是由一些散亂的點(diǎn)組成的圖表,這些點(diǎn)在哪個(gè)位置系宜,是由其X值和Y值確定的照激。所以也叫做XY散點(diǎn)圖。在graphics包中有dotplot函數(shù)可以來獲得點(diǎn)圖盹牧,同樣地可以用example(dotplot)獲得觀賞俩垃,這里就不再演示了。
(散)點(diǎn)圖可以用來:

  • 可以展示數(shù)據(jù)的分布和聚合情況
  • 得到趨勢線公式
  • 輔助制圖
#col=15:16用于設(shè)置顏色汰寓,lcolor設(shè)置穿過點(diǎn)的線的顏色口柳,pch=2:3,用于設(shè)置點(diǎn)的表示圖形,labels和main用于設(shè)置顯示的信息有滑,cex=1.5表示標(biāo)簽字體放大5倍
par(mfrow=c(1,2))
dotchart(Bug_Metrics_Software[,,1],gcolor=1:5,col=6:10,lcolor = "black",pch=15:19,labels=names(Bug_Metrics_Software[,,1]), main="Before Release Bug Frequency",xlab="Frequency Count")
dotchart(Bug_Metrics_Software[,,2],gcolor=1:5,col=6:10,lcolor = "black",pch=15:19,labels=names(Bug_Metrics_Software[,,2]), main="After Release Bug Frequency",xlab="Frequency Count")

Dot_plot
Dot Plot in Statistics: What it is and How to read one
散點(diǎn)圖是什么跃闹?有什么用?
數(shù)據(jù)可視化·圖表篇——散點(diǎn)圖

1.1.3脊柱圖

和條形圖不同的是毛好,脊柱圖是長度相同望艺,寬度根據(jù)頻率變化,脊柱圖可以使用spineplot函數(shù)實(shí)現(xiàn),脊柱圖是馬賽克圖的一個(gè)特例肌访,馬賽克圖可以通過mosaicplot函數(shù)實(shí)現(xiàn)找默,我們使用Titanic數(shù)據(jù)進(jìn)行舉例.

Mosaic plot常常用來展示Categorical data(分類數(shù)據(jù))(關(guān)于不同的數(shù)據(jù)類別,參照連接 更嚴(yán)謹(jǐn)英文比較好的朋友可以看[1])吼驶,mosaic plot 強(qiáng)大的地方在于它能夠很好的展示出2個(gè)或者多個(gè)分類型變量(categorical variable)的關(guān)系. 它也可以定義為用圖像的方式展示分類型數(shù)據(jù)惩激。

ShiftOperator <- matrix(c(40, 35, 28, 26, 40, 22, 52, 46, 49),nrow=3,dimnames=list(c("Shift 1", "Shift 2", "Shift 3"), c("Operator 1", "Opereator 2", "Operator 3")),byrow=TRUE)
spineplot(ShiftOperator)
abline(h=0.33,lwd=3,col="red")
abline(h=0.67,lwd=3,col="red")
abline(v=0.33,lwd=3,col="green")
abline(v=0.67,lwd=3,col="green")


# 獲得Class的頻率
> xtabs(Freq~Class,data=Titanic)
Class
 1st  2nd  3rd Crew 
 325  285  706  885 
#獲得基于class的survived的變量比率:
> prop.table( xtabs(Freq~Class+Survived,data=Titanic),margin=1)
      Survived
Class         No       Yes
  1st  0.3753846 0.6246154
  2nd  0.5859649 0.4140351
  3rd  0.7478754 0.2521246
  Crew 0.7604520 0.2395480
#重復(fù)上述步驟計(jì)算Sex 以及Age變量的頻率:
> xtabs(Freq~Sex,data=Titanic)
Sex
  Male Female 
  1731    470 
> prop.table(xtabs(Freq~Sex+Survived,data=Titanic),margin=1)
        Survived
Sex             No       Yes
  Male   0.7879838 0.2120162
  Female 0.2680851 0.7319149
> xtabs(Freq~Age,data=Titanic)
Age
Child Adult 
  109  2092 
> prop.table(xtabs(Freq~Age+Survived,data=Titanic), margin=1)
       Survived
Age            No       Yes
  Child 0.4770642 0.5229358
  Adult 0.6873805 0.3126195
> mosaicplot(Titanic,col=c("red","green"))

DataStory:

理解Titanic號船員基于變量Class店煞,Sex,Age的存活率风钻。馬賽克圖的分割過程是這樣的:

  • 依據(jù)船艙等級將方塊按比例分為四部分顷蟀,相應(yīng)部分的寬度和頻率成比例;
  • 每塊再依據(jù)性別被劃分為兩部分骡技,共8塊衩椒;
  • 再依據(jù)年齡劃分為16塊;
  • 最后依據(jù)是否存活劃分為32塊哮兰。

輸出的結(jié)果表明:高等倉的存活率比低等倉好毛萌,女性使用救生系統(tǒng)的優(yōu)先程度比男性高,小孩比成人高喝滞。

1.1.4 餅圖和四折圖

餅圖很簡單阁将,但是有時(shí)并不利于分析和觀察,餅圖使用pie()函數(shù)實(shí)現(xiàn)右遭。.四折圖是展示22k的三維列聯(lián)表的一種方式做盅,這種方法是獲得k個(gè)2*2的列聯(lián)表的餅圖,列聯(lián)表的四個(gè)子區(qū)域的頻率用四分之一圓表示窘哈,半徑和頻率的平方根成比例吹榴,和餅圖相比,四折圖的半徑是不同的滚婉。四折圖可以使用fourfoldplot函數(shù)實(shí)現(xiàn)图筹。

par(mfrow=c(1,2))
 pie(Severity_Counts[1:5])
 title("Severity Counts Post-Release of JDT Software")
 fourfoldplot(UCBAdmissions,mfrow=c(2,3),space=0.4) 
 title("四折圖")
1.2 l連續(xù)變量數(shù)據(jù)的可視化技術(shù)

連續(xù)變量是在任意兩個(gè)值之間具有無限個(gè)值的數(shù)值變量。連續(xù)變量可以是數(shù)值變量让腹,也可以是日期/時(shí)間變量远剩。例如,零件的長度骇窍,或者收到付款的日期和時(shí)間瓜晤。
如果您有離散變量而且想要將其包括在回歸或方差分析模型中,可以決定是將其視為連續(xù)預(yù)測變量(協(xié)變量)腹纳,還是類別變量(因子)痢掠。如果離散變量具有許多水平,那么最好將其視為連續(xù)變量嘲恍。將預(yù)測變量視為連續(xù)變量意味著簡單線性或多項(xiàng)式函數(shù)足以描述響應(yīng)和預(yù)測變量之間的關(guān)系足画。當(dāng)您將預(yù)測變量視為類別變量時(shí),離散響應(yīng)值將與變量的每個(gè)水平擬合蛔钙,而不必考慮預(yù)測變量水平的順序锌云。使用此信息荠医,除了可以進(jìn)行分析以外吁脱,還可以確定哪個(gè)變量最適合您的情況桑涎。

1.2.1 箱線圖

箱線圖基于最小值、下四分位數(shù)兼贡、中位數(shù)攻冷、上四分位數(shù)和最大值組成,可以使用graphics包中的boxplot函數(shù)和lattice包中的bwplot函數(shù)實(shí)現(xiàn)遍希,如

 library(RSADBE)
 data(resistivity) 
 boxplot(resistivity, range=0)
 library(lattice)
 resistivity2 <- data.frame(rep(names( resistivity),each=8),c(resistivity[,1],resistivity[,2])) 
 names(resistivity2)<- c("Process","Resistivity")
 par(mfrow=c(1,2))
 boxplot(fw$count,fw$speed,names = c("count","speed"),xlab="var",ylab="value",range = 0,col="gray90")
 boxplot(grass$rich~grass$graze,data=grass,horizontal=TRUE,range=0)
 bwplot(Resistivity~Process, data=resistivity2,notch=TRUE)

箱線圖有一個(gè)叫做notch的重要選項(xiàng)等曼,可以用來比較中位數(shù)。頂凹口和底凹口為中位數(shù)加減1.57(IQR)/n1/2.如果NOTCH不重合凿蒜,則說明在統(tǒng)計(jì)學(xué)上禁谦,幾組數(shù)據(jù)的中位數(shù)存在顯著性差異


1.1.3折線圖

折線圖對于分類數(shù)據(jù)和連續(xù)型數(shù)據(jù)都適用,如果數(shù)據(jù)為連續(xù)數(shù)據(jù)废封,則使用plot()命令就可實(shí)現(xiàn)州泊,只要設(shè)置type=選項(xiàng)即可.如果數(shù)據(jù)的順序是任意的,那么做出的折線也是任意的漂洋,這樣無法觀察趨勢遥皂,因此需要將其排序一下,使其具有某種趨勢刽漂,如:

load("D:\\Users\\Administrator\\Desktop\\RStudio\\Environmental_and_Ecological_Statistics_with_R\\DataCode\\Data\\Beginning.Rdata")
par(mfrow=c(1,3))
plot(Nile,type="l")
plot(sort(mf$Length),mf$NO3,type="l")
plot(rain,type="b",axes = FALSE,xlab="month",tlab=rain)
month=c("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec")
axis(side=1,at=1:length(rain),labels=month)
axis(side=2)
box()
week<-c(1,2,3,4,5,6)
x<-c(3,8,19,24,6,1)
y<-c(1,25,21,3,2,1)

par(mfrow=c(1,2))
plot(week,x,col="red",pch=22,bg="yellow",xlim=c(0,6),ylim=c(0,30),lwd=2,xlab="WEEK",ylab="STUDENT",main="lesson",sub="class",col.main="green",font.main=2,asp=0,cex=1.2,type="b",lty=1)
lines(week,y,col="green",pch=16,bg="yellow",xlim=c(0,6),ylim=c(0,30),lwd=2,xlab="WEEK",ylab="STUDENT",main="lesson",sub="class",col.main="green",font.main=2,asp=0,cex=1.2,type="b",lty=2)
grid(nx=6,ny=6,lwd=2)
abline(h=18,col="black",lty=1,lwd=2)

sp=spline(week,x,n=1000)
sp1=spline(week,y,n=1000)

plot(sp,col="red",type="l",xlim=c(0,6),ylim=c(0,30),lwd=2,xlab="WEEK",ylab="STUDENT",main="lesson",sub="class",col.main="green",font.main=2)
lines(sp1,col="green",type="l",xlim=c(0,6),ylim=c(0,30),lwd=2,xlab="WEEK",ylab="STUDENT",main="lesson",sub="class",col.main="green",font.main=2)
legend("topright",legend=c("x","y"),col=c("red","green"),lwd=2,lty=c(1,2))

直方圖

直方圖可以通過hist函數(shù)和histogram函數(shù)實(shí)現(xiàn)演训,我們使用galton數(shù)據(jù)作為舉例.

 data(galton)
 par(mfrow=c(2,2)) 
 hist(galton$parent,breaks="FD",xlab="Height of Parent", main="Histogram for Parent Height with Freedman-Diaconis Breaks",xlim=c(60,75))
 hist(galton$parent,xlab="Height of Parent",main= "Histogram for Parent Height with Sturges Breaks",xlim=c(60,75))
 hist(galton$child,breaks="FD",xlab="Height of Child", main="Histogram for Child Height with Freedman-Diaconis Breaks",xlim=c(60,75))
 hist(galton$child,xlab="Height of Child",main="Histogram for Child Height with Sturges Breaks",xlim=c(60,75))
3.散點(diǎn)圖

直方圖可以用來理解變量的性質(zhì)岛抄,散點(diǎn)圖可以用來理解變量間的關(guān)系龄糊,兩個(gè)變量可以使用plot(x,y)函數(shù)稳诚,x,y為兩個(gè)向量楷掉,如果數(shù)據(jù)為兩列數(shù)據(jù)框羽莺,則會默認(rèn)將第一列作為x伊佃,第二列作為y驶鹉,如果為多列數(shù)據(jù)框轰驳,則會生成散點(diǎn)圖矩陣眯娱,可以使用pairs函數(shù)做散點(diǎn)圖矩陣礁苗,例如:

library(lattice)
 data(DCD) 
 par(mfrow=c(2,3)) 
 plot(DCD$Drain_Current, DCD$GTS_Voltage,type="b",xlim=c(1,2.2),ylim=c(0.6,2.4),xlab="Current Drain", ylab="Voltage")
 points(DCD$Drain_Current,DCD$GTS_Voltage/1.15,type="b",col="green")
 # points函數(shù)用來向圖表中加入其它點(diǎn),plot()同樣可以使用xlab和ylab自定義坐標(biāo)軸標(biāo)簽。
 plot(0:25,rep(1,26),pch=0:25,cex=2)
 count<-c(9,25,15,2,14,25,24,47)
 speed<-c(2,3,5,9,14,24,29,34)
 fw<-data.frame(count,speed)
 row.names(fw)<-c("Raw","Torridge","Ouse","Exe","Lyn","Brook","Ditch","Fal")
 plot(fw$count,fw$speed,pch="+",cex=4,col="gray90")
 plot(fw$count,fw$speed,xlim=c(0,30),ylim=c(0,50))
 plot(count~speed,data=fw)
 abline(lm(count~speed,data=fw),lty=3,lwd=2,col="gray90")

如果變量較多徙缴,使用散點(diǎn)圖矩陣會將所有圖全部顯示试伙,但是散點(diǎn)圖矩陣是對稱的,我們只需顯示一半即可于样,因此需要自定義兩個(gè)函數(shù)疏叨,如:

panel.hist <- function(x, ...) { 
usr<- par("usr"); on.exit(par(usr)) 
par(usr = c(usr[1:2], 0, 1.5) ) 
h <- hist(x, plot = FALSE) 
breaks<- h$breaks; nB<- length(breaks) 
y <- h$counts; 
y <- y/max(y) 
rect(breaks[-nB], 0, breaks[-1], y, col="cyan", ...)
}  


panel.cor <- function(x, y, digits=2, prefix="", cex.cor, ...) { 
usr<- par("usr"); on.exit(par(usr)) 
par(usr = c(0, 1, 0, 1)) 
r <- abs(cor(x,y,use="complete.obs")) 
txt<- format(c(r, 0.123456789), digits=digits)[1] 
txt<- paste(prefix, txt, sep="") 
if(missing(cex.cor)) cex.cor<- 0.8/strwidth(txt) 
text(0.5, 0.5, txt, cex = cex.cor * r) 
}

data(Gasoline)
pairs(Gasoline,diag.panel=panel.hist,lower.panel=panel.smooth,upper.panel=panel.cor)


還有一種雙變量箱線圖用來展示可視化數(shù)據(jù)集的位置,擴(kuò)散穿剖,偏斜異常值( location, spread, skewness, and outliers

要理解二元箱線圖先知道Tukey depth蚤蔓,相關(guān)的解釋見:Centerpoint (geometry)。aplpack包的bagplot(x, y)功能可為單變量箱線圖提供雙變量版本糊余,包含一半的點(diǎn)秀又。雙變量中位值是近似的单寂。圍欄將其內(nèi)外的點(diǎn)分隔開。顯示離群值吐辙。

pannel.bagplot<-function(x,y){
  library(aplpack)
  bagplot(x,y,verbose = FALSE,create.plot = TRUE,add=TRUE)
}
pairs(Gasoline[-19,-c(1,4,5,13)],upper.panel=pannel.bagplot)
4.帕累托圖

帕累托法則也稱為80-20法則宣决,帕累托圖就是基于此生成的,可以使用qcc包的pareto.chart函數(shù)實(shí)現(xiàn)昏苏。

帕累托圖又叫排列圖尊沸、主次圖,是按照發(fā)生頻率大小順序繪制的直方圖,表示有多少結(jié)果是由已確認(rèn)類型或范疇的原因所造成贤惯。它是將出現(xiàn)的質(zhì)量問題和質(zhì)量改進(jìn)項(xiàng)目按照重要程度依次排列而采用的一種圖表洼专。可以用來分析質(zhì)量問題孵构,確定產(chǎn)生質(zhì)量問題的主要因素壶熏。按等級排序的目的是指導(dǎo)如何采取糾正措施:項(xiàng)目班子應(yīng)首先采取措施糾正造成最多數(shù)量缺陷的問題。從概念上說浦译,帕累托圖與帕累托法則一脈相承棒假,該法則認(rèn)為相對來說數(shù)量較少的原因往往造成絕大多數(shù)的問題或缺陷。

> library(qcc)
> Reject_Freq = c(9,22,15,40,8)
> names(Reject_Freq) = c("No Addr.", "Illegible", "Curr. Customer", "No Sign.", "Other")
> Reject_Freq
      No Addr.      Illegible Curr. Customer       No Sign.          Other 
             9             22             15             40              8 
> options(digits=2)
> pareto.chart(Reject_Freq)
                
Pareto chart analysis for Reject_Freq
                 Frequency Cum.Freq. Percentage Cum.Percent.
  No Sign.            40.0      40.0       42.6         42.6
  Illegible           22.0      62.0       23.4         66.0
  Curr. Customer      15.0      77.0       16.0         81.9
  No Addr.             9.0      86.0        9.6         91.5
  Other                8.0      94.0        8.5        100.0
5精盅,數(shù)據(jù)平滑(Smoothing)

統(tǒng)計(jì)學(xué)圖像處理中帽哑,通過建立近似函數(shù)嘗試抓住數(shù)據(jù)中的主要模式,去除噪音叹俏、結(jié)構(gòu)細(xì)節(jié)或瞬時(shí)現(xiàn)象妻枕,來平滑一個(gè)數(shù)據(jù)集。在平滑過程中粘驰,信號數(shù)據(jù)點(diǎn)被修改屡谐,由噪音產(chǎn)生的單獨(dú)數(shù)據(jù)點(diǎn)被降低,低于毗鄰數(shù)據(jù)點(diǎn)的點(diǎn)被提升蝌数,從而得到一個(gè)更平滑的信號愕掏。平滑可以兩種重要形式用于數(shù)據(jù)分析:一、若平滑的假設(shè)是合理的顶伞,可以從數(shù)據(jù)中獲得更多信息饵撑;二、提供靈活而且穩(wěn)健的分析唆貌。有許多不同的算法可用于平滑滑潘。數(shù)據(jù)平滑通常通過最簡單的密度估計(jì)或直方圖完成。

data(CT)
plot.ts(CT$Temperature,col="red",pch=1)
CT_3RSS<-smooth(CT$Temperature,kind = "3RSS")
library(LearnEDA)
CT_3RSSH<-han(CT_3RSS)
require(graphics)
lines(CT_3RSS,col="blue",pch=2)
lines(CT_3RSSH,col="green",pch=3)
legend(20,90,c("Original","CT_3RSS","CT_3RSSH"),col=c("red","blue","green"),pch="_")

數(shù)據(jù)平滑處理
數(shù)據(jù)預(yù)處理—剔除異常值锨咙,平滑處理语卤,標(biāo)準(zhǔn)化(歸一化)

參考:
數(shù)據(jù)科學(xué)導(dǎo)論:探索性數(shù)據(jù)分析
探索性數(shù)據(jù)分析
什么是數(shù)據(jù)可視化?
數(shù)據(jù)可視化概覽
UCI-STAT201B統(tǒng)計(jì)方法-分類數(shù)據(jù)分析 Lecture 1
條形圖與柱形圖有什么區(qū)別?
R語言之?dāng)?shù)據(jù)可視化
如何用R畫折線圖粹舵,散點(diǎn)圖钮孵,平滑曲線圖
數(shù)據(jù)可視化 - 馬賽克圖(mosaic plot)
Beginning R: The Statistical Programming Language

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市齐婴,隨后出現(xiàn)的幾起案子油猫,更是在濱河造成了極大的恐慌稠茂,老刑警劉巖柠偶,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異睬关,居然都是意外死亡诱担,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門电爹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔫仙,“玉大人,你說我怎么就攤上這事丐箩∫“睿” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵屎勘,是天一觀的道長施籍。 經(jīng)常有香客問我,道長概漱,這世上最難降的妖魔是什么丑慎? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮瓤摧,結(jié)果婚禮上竿裂,老公的妹妹穿的比我還像新娘。我一直安慰自己照弥,他們只是感情好腻异,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著这揣,像睡著了一般捂掰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上曾沈,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天这嚣,我揣著相機(jī)與錄音,去河邊找鬼塞俱。 笑死姐帚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的障涯。 我是一名探鬼主播罐旗,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼膳汪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了九秀?” 一聲冷哼從身側(cè)響起遗嗽,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鼓蜒,沒想到半個(gè)月后痹换,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡都弹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年娇豫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畅厢。...
    茶點(diǎn)故事閱讀 40,973評論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冯痢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出框杜,到底是詐尸還是另有隱情浦楣,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布咪辱,位于F島的核電站振劳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏梧乘。R本人自食惡果不足惜澎迎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望选调。 院中可真熱鬧夹供,春花似錦、人聲如沸仁堪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弦聂。三九已至鸟辅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莺葫,已是汗流浹背匪凉。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捺檬,地道東北人再层。 一個(gè)月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親聂受。 傳聞我的和親對象是個(gè)殘疾皇子蒿秦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 現(xiàn)在情況是這樣的,你左前方有兩個(gè)劍客正圍上來蛋济,右邊有兩個(gè)斧頭手擋住你的去路棍鳖,正前方有兩個(gè)長槍手,后方有四個(gè)弓箭手正...
    城外42閱讀 781評論 8 8
  • 很久都沒寫東西了,有總達(dá)不到期望的無力感扛芽,我來這邊也近四個(gè)月了骂蓖,可是……唉积瞒! 我的手機(jī)屏幕光亮微弱川尖,我清楚的看見四...
    煙然s閱讀 194評論 2 4
  • 跟人打交道,說話是一門必修課茫孔。我的老大經(jīng)常跟我說叮喳,一個(gè)優(yōu)秀的銷售一定是非常會說話的人$直矗總結(jié)下來馍悟,說話之道三個(gè)字:簡...
    顧小九nine閱讀 190評論 2 1