1. 程式人生 > >《R語言實戰》第六章學習筆記

《R語言實戰》第六章學習筆記

  感謝Robert I.Kabacoff 著作本書,同時感謝高濤、肖楠、陳鋼編譯此書。

  最近在學習《R語言實戰》,特將學習過程記錄下來,供各位朋友參考,雖說是筆記,但是90%是書中內容,另外10%是自己偶爾冒出的一點點想法的記錄和一些疑問,希望互相探討。末尾有本章的程式碼清單下載地址,與各位交流,還是提倡按照書中內容把程式碼一個個敲出來。

第六章  基本圖形

本章內容

條形圖、箱線圖和點圖

餅圖和扇形圖

直方圖與核密度圖

6.1  條形圖

  條形圖通過水平或垂直的條形展示了類別型變數的分佈(頻率)函式函式barplot()的最簡單用法是:

barplot(height)

  其中height是一個向量或一個矩陣。(問:資料框不可以嗎?親測,不可以,會有錯誤提示。)

6.1.1  一個簡單的條形圖

  載入vcd包之前,需要載入grid包。

小提示

  若要繪製的類別型變數是一個因子或有序型因子,就可以使用函式plot()快速建立一幅垂直條形圖。由於Arthritis$Improved是一個因子,所以程式碼:

plot(Arthritis$Improved, main = "Simple Bar Plot", xlab = "Improved", ylab = "Frequency")

plot(Arthritis$Improved, horiz = TRUE, main = "Horizontal Bar Plot", xlab = "Frequency", ylab = "Improved")

6.1.2  堆砌條形圖和分組條形圖

  如果hight是一個矩陣而不是一個向量,則繪圖結果將是一幅堆砌條形圖或分組條形圖。若beside=FALSE(預設),則矩陣中的每一列將都將生產圖中的一個條形,各列中的值將給出堆砌的“子條”的高度。若beside=TRUE,則矩陣中的每一了都表示一個分組,各列中的值將並列而不是堆砌。

堆砌條形圖

分組條形圖

6.1.3  均值條形圖

  條形圖並不一定要基於計數資料或頻率資料。你可以使用資料整合函式並將結果傳遞給barplot()函式,來建立表示均值、中位數、標準差等的條形圖。

均值條形圖

6.1.4  條形圖的微調

  有若干種方式可以微調條形圖的外觀。例如,隨著條數的增多,條形的標籤可能會開始重疊,你可以使用引數cex.names來減小字號。將其指定為小於1的值可以縮小標籤的大小。可選的引數names.arg允許你指定一個字元向量作為條形的標籤名。

6.1.5  棘狀圖

  在結束官途條形圖的討論之前,讓我們再來看一種特殊的條形圖,它被稱為棘狀圖(spinogram)。棘狀圖對堆砌條形圖進行了重縮放,這樣每個條形的高度為1,每一段的高度即表示比例。棘狀圖可由vcd包中的函式spine()繪製。

6.2  餅圖

  由函式pie()建立,程式碼如下:

pie(x, labls)

  餅圖讓比較各扇形的值變得困難(除非這些值被附加在標籤上)。因此出現了一種扇形圖,為使用者提供了一種同時展示相對數量和相互差異的方法。通過plotrix包中的fan.plot()函式實現。特點是以同一起點開始,分別展示不同扇形,可以理解為:按照從小到大的順序,分別從前往後繪製圖形。在這裡扇形的寬度(width)是重要的,半徑並不重要。

扇形圖

6.3  直方圖

  與條形圖和餅圖不同,直方圖描述的是連續型變數的分佈。直方圖是通過X軸上將值域分割為一定數量的組,在Y軸上顯示相應值得頻數,展示了連續型變數的分佈。使用如下程式碼建立直方圖。

hist(x)

  其中的X是一個由資料值組成的數值向量。引數freq=FALSE表示根據頻率密度而不是頻數繪製圖形。引數breaks用於控制組的數量。

程式碼清單6-6  直方圖

par(mfrow = c(2,2))

hist(mtcars$mpg)

hist(mtcars$mpg, breaks = 12, col = "red", xlab = "Miles Per Gallon", main = "Colored histogram with 12 bins")

hist(mtcars$mpg, freq = FALSE, breaks = 12, col = "red", xlab = "Miles Per Gallon", main = "Histogram ,rug plot, density curve")

rug(jitter(mtcars$mpg))
lines(density(mtcars$mpg))
lines(density(mtcars$mpg), col = "blue", lwd = 2)

x <- mtcars$mpg
h <- hist(x, breaks = 12, col = "red", xlab = "Miles Per Gallon", main = "Histogram with normal curve and box")
xfit <- seq(min(x), max(x), length = 40)
yfit <- dnorm(xfit, mean = mean(x), sd = sd(x))
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit, yfit, col = "blue", lwd = 2)
box()

  第一幅直方圖展示了未指定任何選項是的預設圖形。第二幅將組數指定為12,使用紅色填充條形,並添加了標籤和標題。

  第三幅直方圖保留了上一幅圖中的顏色、組數、標籤和標題設定,又疊加了一條密度曲線和軸須圖。這條密度曲線是一條核密度估計,它為資料的分佈提供了一種更加平滑的描述。再使用lines()函式疊加了這條藍色、雙倍預設線條寬度的曲線。最後,軸須圖是實際資料的一種一維呈現方式。如果資料中有許多結,你可以使用如下程式碼將軸須圖的資料打散:

rug(jitter(mtcars$mpg, amount = 0.01))

  這樣將向每個資料點新增一個小的隨機值(一個±amount之間的均勻分佈隨機數),以避免重疊的點產生影響。

  第四幅直方圖與第二幅類似,只是擁有一條疊加在上面的正太曲線和一個將圖形圍繞起來的盒形。

6.4  核密度圖

  用術語來說,核密度估計是用於估計隨機變數概率密度函式的一種非引數方法。核密度圖不失為一種用來觀察連續型變數分佈的有效方法。不疊加到另一幅圖上方繪製密度圖的方法為:

plot(density(x))

  其中x是一個數值型向量。若要在一幅已經存在的圖形上疊加一條密度曲線,可以使用:

lines(density(x))

  使用sm包中的sm.density()函式可向圖形疊加兩組或更多的核密度圖。使用格式為:

sm.density.compare(x, factor)

  其中的x是一個數值型向量,factor是一個分組變數。

6.5  箱線圖

  箱線圖(又稱盒須圖)通過繪製連續型變數的五數總括,即最小值、下四分位數(第25百分位數)、中位數(第50百分位數)、上四分位數(第75百分位數)以及最大值,描述了連續型變數的分佈。箱線圖能夠顯示出可能為離群點(範圍在±IQR以外的值,IQR表示四分位距,即上四分位數與下四分位數的差值)的觀測。

boxplot(mtcars$mpg,main = "Box plot", ylab = "Mles per Gallon")

6.5.1  使用並列箱線圖進行跨組比較

  箱線圖可以展示單個變數或分組變數。使用格式為:

boxplot(formula, data = dataframe)

  其中對的formula是一個公式,dataframe代表提供資料的資料庫(或列表)。一個示例公式為y ~ A,這將為類別型變數A的每個值並列地生成數值型變數y的箱線圖。公式y ~ A*B則將為類別型變數A和B所有水平的兩兩組合生成數值型變數y的箱線圖。

  箱線圖靈活多變,通過新增notch=TRUE。可以得到含凹槽的箱線圖。若兩個箱的凹槽互不重疊,則表明他們的中位數有顯著差異。

6.5.2  小提琴圖

  小提琴圖示箱線圖和核密度圖的結合。首次使用需要下載安裝vioplot包。使用格式為:

Vioplot(x1, x2, …, names = , col = )

  其中x1,x2,…表示要繪製的一個或多個數值向量(將為每個向量繪製一幅小提琴圖)。引數names是小提琴圖中標籤的字元向量,而col是一個為每幅小提琴圖指定顏色的向量。(注意:每個引數都是向量。

小提琴圖

  小提琴圖基本上是核密度圖以映象的方式在箱線圖上的疊加。在圖中,白點是中位數,黑色盒型的範圍是下四分位點到上四分位點,西黑線表示須。外部形狀即為核密度估計。

6.6  點圖

  點圖提供了一種在簡單水平刻度上繪製大量有標籤值的方法。可以用dotchart()函式建立點圖。格式為:

dotchart(x, labels)

  其中x是一個數值向量,而labels則是由每個點的標籤組成的向量。你可以通過新增引數groups來選定一個因子,用以指定x中元素的分組方式。如果這樣做,則引數groups可以控制不同組標籤的顏色,cex可控制標籤的大小。

注意:

  點圖有許多變種。Jacoby(2006)對點圖進行了非常有意義的討論,並且提供了創新型應用的R程式碼。此外,Hmisc包也提供了一個帶有許多附加功能的點圖函式(恰如其分地叫做dotchart2)。

相關推薦

R語言實戰學習筆記

  感謝Robert I.Kabacoff 著作本書,同時感謝高濤、肖楠、陳鋼編譯此書。   最近在學習《R語言實戰》,特將學習過程記錄下來,供各位朋友參考,雖說是筆記,但是90%是書中內容,另外10%是自己偶爾冒出的一點點想法的記錄和一些疑問,希望互相探討

4類Storage方案(AS開發實戰學習筆記

uil sed base 改變 查詢語句 class getc tex dcim 4.1 共享參數SharedPreferences SharedPreferences按照key-value對的方式把數據保存在配置文件中,該配置文件符合XML規範,文件路徑是/data/

菜單Menu(AS開發實戰學習筆記

開發實戰 top nbsp 改變 blog urn 第四章 格式 reat 4.5 菜單Menu Android的菜單主要分兩種,一種是選項菜單OptionMenu,通過按菜單鍵或點擊事件觸發,另一種是上下文菜單ContextMenu,通過長按事件觸發。頁面的布局文件放在r

Python基礎教程 學習筆記

作用 actor int bsp python基礎 clas 最好 col 學習 收集函數 把實際參收集到元組和字典當中 1 def print_params(*params): 2 print(params) 3 """ 4 print_parasm

R入門<三>-R語言實戰4基本資料管理摘要

入門書籍:R語言實戰 進度:1-4章 摘要: 1)實用的包 forecast:用於做時間序列預測的,有auto.arima函式 RODBC:可以用來讀取excel檔案。但據說R對csv格式適應更加良好,相應的匯入匯出均較為方便(read.table, write等) reshape:目前用到ren

Python基礎教程學習筆記——抽象

6 抽象 介紹如何將語句組織成函式,告訴計算機如何做事(只告訴一次就可以) 還會介紹引數(parameter)和作用域(scope)概念 遞迴的概念及在程式中的用途 6.1 懶惰即美德 一段程式碼可能要在多處使用,就可以把這段程式碼定義為函式,需要的時候直接呼叫就可以——抽

chmod 777 什麼意思:鳥哥的linux私房菜學習筆記

鳥哥的linux私房菜基礎學習篇:心血來潮決定看一下這本書,雖然都是講很基礎的東西,但是,絕對不是浪費時間,比如我看完了之後就終於明白了chmod777是什麼意思了。 寫這個讀書筆記也主要是想記錄一些常用的命令,方便以後查閱。從第六章開始。 第六章:linux的檔案許可權與

《機器學習實戰14學習筆記(資料約簡工具---SVD)

一、SVD基本原理 提取這些資訊的方法稱為奇異值分解(Singular Value Decomposition, SVD )。 在很多情況下,資料中的一小段攜帶了資料集中的大部分資訊,其他資訊則要麼是噪聲,要麼就是毫不相關的資訊。線上性代數中還有很多矩陣分解技術。矩陣分解可以將原始矩陣表示成新的

c++ primer plus 學習筆記

靜態、自動、動態變數: 靜態指變數在使用完後不會消失,編譯器會為其指定特定的記憶體空間;自動變數在使用完後便會消失,編譯器將其存在稱為棧的地方;動態變數指用c++運算子new或c函式malloc()分配的記憶體,不是LIPO,其分配釋放順序取決於new、delete的使用,這個記憶體空

c++ primer plus 學習筆記

1、引用變數(&左值引用)    1)必須在建立引用變數時對其初始化,且初始化後不能再將其作為另一個變數的引用變數;    2)當函式的形參為引用變數時,在函式呼叫時即將引用形參初始化為實參,傳遞方式類似於地址傳遞,該引用變數的改變將引起原始變

c++ PrimerPlus 學習筆記

防止地址傳遞時更改實參地址內容:當地址作為形參時,在定義形參時使用const關鍵字,可以防止錯誤的改變形參所傳遞的地址記憶體儲的內容;且並不要求實參地址中的資料為常量 。 需要陣列作為函式形參時,形參的兩種定義方式:a)定義兩個形參,一個用於陣列名/地址的 傳遞,一個用於陣列元素個數;b

c++ primer Plus (版)學習筆記

1、cout可以輸出表達式的值,在不特殊設定的情況下,若表示式為判斷表示式則輸出的是0/1,若為賦值表示式則將修改其中的變數值,注意在輸出表達式的值時要加將表示式加(),因為<<的優先順序高於表示式中的運算子。 例: #include<stdafx.h> #inclu

c++ Primer Plus 學習筆記

  1.輸入字串: cin將空格、製表符、換行符視為字串的結束位置,所以使用cin輸入字串時只能輸入一個單詞,而自動將後一個單詞視為下一個字串;cin.getline(字元陣列名,字串長度)和get()是面對行的字串輸入,將換行符視為字串的結束,但是前者將丟棄換行符,後者將其保留,

C++ Primer Plus 學習筆記

  1、檢視系統中各資料型別所佔的位元組數(sizeof),所能表示的最大和最小取值,標頭檔案climite中包含了關於整型限制的資訊,定義了所使用的各種符號常量 例:檢視各種整型資料型別所佔的位元組數以及所能表示的最大數值 #include "stdafx.h" #inclu

學習筆記

一、教材學習內容(6.藉口與實現&7.內部類和異常) 1、使用interface定義一個介面,介面體中包含常量的宣告和抽象方法兩個部分 interface Printable{ final int Max=100; //這裡等同於int Max=100 void add(); //這

《Java8實戰》-讀書筆記(用流收集資料-01)

用流收集資料 我們在前一章中學到,流可以用類似於資料庫的操作幫助你處理集合。你可以把Java 8的流看作花哨又懶惰的資料集迭代器。它們支援兩種型別的操作:中間操作(如 filter 或 map )和終端操作(如 count 、 findFirst 、 forEach

機器學習實戰-(支援向量機)

1 拉格朗日乘子法(等式約束): 目標函式:f(x)=b+wTxi+∑(αihi),s.t.hi=0 最優解條件:∂h∂xi=0 2 kkt(不等式約束): 目標函式:f(x)=b+wTxi+∑(αigi)+∑(βihi),s.t.hi=0,gi≤0

機器學習實戰支援向量機照葫蘆畫瓢演算法實踐

支援向量機簡要介紹 一些概念: 1.分隔超平面:在二維中直觀來說就是將資料集分隔開來的直線,三維中則是一個平面。觸類旁通。 2.超平面:分類的決策邊界,分佈在超平面一側的所有資料都屬於某個類別,另一側屬於另一個。 3.支援向量:離分隔超平面最近的那些

《Python資料分析與挖掘實戰學習拓展——偷漏稅使用者識別

本文是繼上一篇文章中上機實驗之後的拓展思考部分的練習記錄。此拓展思考部分主要目標是依據附件所提供的汽車銷售企業的部分經營指標,來評估汽車銷售行業納稅人的偷漏稅傾向,建立偷漏稅行為識別模型。 本次拓展思考練習分以下幾個步驟進行: 資料初步探索分析 資料預處理

《機器學習實戰學習筆記(AdaBoost)

一、整合學習整合學習(ensemble learning)通過構建並結合多個學習器來完成學習任務,有時也被稱為多分類器系統(multi-classifier system)、基於委員會的學習(committee-based learning)等。整合學習將多個學習器進行結合,