R語言之圖形初階與數據分析的前夜
PART 1 圖形初階:
1、幾個繪圖函數的比較:
圖形初階會接觸到的幾個畫折現的函數是:plot(), line(), abline()。 plot()是R中作為對象作圖的一個泛型函數,用處很多,在後來的回歸裡面也可以用來分析數據。plot() 函數在調用時創建一幅新圖,覆蓋上一幅繪圖,而lines() 函數則是在已存在的圖形上添加信息,並不能自己生成圖形,因此lines()函數通常是在plot()函數生成一幅圖形以後再被調用。函數abline()可以在圖上加直線,同樣abline()需要一幅已有圖形,其使用方法有四種格式。
(1)abline(a,b)表示畫一條y=a+bx的直線;(2)abline(h=y)
表示畫出一條過所有點得水平直線;(3)abline(v=x)表示畫出一條過所有點的豎直直線;(4)abline(lm.obj)表示繪出線性模型得到的線性模型。2、圖形的設定:
有兩種方法,一個是用par()來定義,一個直接在繪圖函數如plot中指明。不同的是,par()設定的圖形參數除非被再次修改,否則將會在會話結束前一直有效;而高級繪圖函數中指定的圖形參數只對這幅圖有效。
通過par()修改的圖形參數太多,想重新開始設定,可以在用par()修改之前先把現在的圖形參數設置保存一下,格式為opar<- par(no.readonly = TRUE),其中opar只是變數,可以為其他的變數名稱。在修改par()之前都先保存一下最初默認的圖形參數是一個良好的編程習慣。不加參數地執行par()將生成當前圖形參數設置的列表。
3、圖形參數的類型:
這一部分分為 (1) 符號和線條 pch,lty,lwd ; (2) 顏色 col ; (3) 文本 cex,font ; (4) 圖形尺寸與邊界尺寸 pin,mai,mar。上面只是列舉了部分參數,具體請使用help(par)進行了解或參照相關書籍。
4、圖例:
legend( Location, title, legend, ...),我來講講Location的三種設定方法:
(1)直接給定圖標左上角那個點的坐標軸x,y;
(2)使用locator(1),這個是我比較喜歡的,滑鼠點哪兒圖例就出現在哪兒;(3)使用關鍵字:bottom、bottomleft、left、topleft、top、topright、right、bottomright、center;最後圖形部分列舉三種圖形組合的方法:
5、圖形組合:
(1)在par()中使用圖形參數par(mfrow = c(m, n))來按行填充圖形矩陣,par(mfrow = c(m, n))
按列。其中c(m,n)是指一個m行n列的矩陣。例如mfrow = c(3, 2),你可以在腦海中先想像一個3行2列的矩陣,這個矩陣也就是說有3*2個元素,也就是說有6個位置,這6個位置可以用來放6張圖,放圖的時候自然可以按行放,也可以按列放,這裡用的是mfrow,就是按行放。在這種情形下plot()就不會覆蓋原來的圖,因為放了一個一張白布上還有其他5個位置來放其他plot()出來的圖形,那麼每個圖形的大小也會相應變小。直到放滿了6張圖才會創建一幅新圖。
但這樣的幾幅圖都是一樣大小,沒有主次之分,怎樣可以讓圖形的大小不同,突出主次呢?來看下面:
(2)layout(mat),有了上面的敘述,相信你可以很好理解layout(),其中mat是一個矩陣。看個例子:layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE), 這裡的mat是一個2行2列的矩陣,由後面兩個2說明,唯一要說明的是 c(1,2,3,4)的意思,表示這個2行2列的矩陣分別按行放置第1、2、3、4幅圖。那如果是c(1,1,2,3)呢?這就是說按行放置第1、1、2、3幅圖,也就是說第1幅圖要一個人佔據第一行(圖行相對第2、3幅圖被橫向拉伸了),第2、3幅圖分別佔據第二行的第1和第2個位置。
(3)圖形的精細控制:par(fit=) ,par(fig = c(0, 0.8, 0, 0.8)) 使用fig參數時默認整個繪圖區域為(0,0) - (1,1)的一個正方形,fig = c() 裡面的四個數值分別表示 x1,x2,y1,y2。
如果要在同一幅圖上添加新的圖形,要設定參數new = TRUE,例如 par(fig = c(0, 0.8, 0.55, 1), new = TRUE),因為fig會默認新建一幅圖形。
Part2 數據分析的前夜——數據整理
實際上數據分析的時間有一半都要花在實際分析前的數據準備上,你可能需要創建新變數,或者給變數重編碼、重命名,因為錯誤輸入或者遺漏需要排除或者標記缺失值,日期值也需要進行轉化以數值形式存儲等等。這一部分不多說了,跟著R語言實戰第4章敲沒有什麼難度,下面介紹兩個函數。
一個是stringr包里的str_split_fixed,她的姐妹是str_split, 每個沒有多大區別,都是用來分解字元串用的:
str_split(string, pattern, n = Inf, simplify = FALSE)str_split_fixed(string, pattern, n)
> fruits <- c(+ "apples and oranges and pears and bananas",+ "pineapples and mangos and guavas"+ )>fruits[1] "apples and oranges and pears and bananas"[2] "pineapples and mangos and guavas" > library(stringr)> str_split(fruits, " and ")[[1]][1] "apples" "oranges" "pears" "bananas"[[2]][1] "pineapples" "mangos" "guavas" > str_split(fruits, " and ", simplify = TRUE) [,1] [,2] [,3] [,4] [1,] "apples" "oranges" "pears" "bananas"[2,] "pineapples" "mangos" "guavas" "" > is.list( str_split(fruits, " and "))[1] TRUE> is.matrix( str_split(fruits, " and ", simplify = TRUE)+ )[1] TRUE> str_split(fruits, " and ", n = 3)[[1]][1] "apples" "oranges" "pears and bananas"[[2]][1] "pineapples" "mangos" "guavas" > str_split(fruits, " and ", n = 2)[[1]][1] "apples" "oranges and pears and bananas"[[2]][1] "pineapples" "mangos and guavas"> str_split_fixed(fruits, " and ", 3) [,1] [,2] [,3] [1,] "apples" "oranges" "pears and bananas"[2,] "pineapples" "mangos" "guavas" > str_split_fixed(fruits, " and ", 4) [,1] [,2] [,3] [,4] [1,] "apples" "oranges" "pears" "bananas"[2,] "pineapples" "mangos" "guavas" "" > data<- str_split_fixed(fruits, " and ", 4)> is.na(data[2,4])[1] FALSE
注意看最後一行,data[2,4]的值雖然為「」,但不代表為na。
第二個函數是strptime, 調用格式:
strptime(x, format, tz = "")
這是一個轉換時間格式的函數,x是要轉換的東西,format表示第一個參數的格式,tz表示時區。例子:
dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92")> times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26")> x <- paste(dates, times)> x[1] "02/27/92 23:03:20" "02/27/92 22:29:56" "01/14/92 01:03:30"[4] "02/28/92 18:21:03" "02/01/92 16:56:26"> strptime(x, "%m/%d/%y %H:%M:%S")[1] "1992-02-27 23:03:20 CST" "1992-02-27 22:29:56 CST"[3] "1992-01-14 01:03:30 CST" "1992-02-28 18:21:03 CST"[5] "1992-02-01 16:56:26 CST"> z <- strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")> z[1] "2006-02-20 11:16:16 CST"
推薦閱讀:
※數據分析告訴你,韋小寶跟他七個老婆哪個最親?
※醫院銷售數據分析(數據分析第4關)
※阿里數據招人啦
※競品分析怎麼做?
※實現數據驅動的三道鴻溝