全棧 - 13 ggplot2 在 R 中進行可視化

這是全棧數據工程師養成攻略系列教程的第十三期:13 ggplot2 在R中進行可視化。

我們已經具備了一定的代碼基礎,現在不妨來了解下數據可視化,從生動的圖形中更好地感受數據之美。R是一門統計分析語言,和Python一樣,語法簡單並且有非常豐富的功能包,其中的ggplot2包便可以用簡潔的語法繪製出美觀多樣的圖形。

下載和安裝

如果沒有R的話需要去下載並安裝,在R的官網中找到下載鏈接,選擇最近的鏡像地址下載即可,The R Project for Statistical Computing。安裝完畢後即可運行R,軟體如下圖所示,界面比較簡單,提供的用戶圖形化介面十分有限。

因此可以再安裝一個叫作RStudio的軟體,它基於R的內核提供了更佳豐富的用戶圖形化操作界面,使用起來更方便,用戶體驗更好。可以在RStudio的官網找到下載鏈接,下載並安裝RStudio,Home。安裝完畢後運行RStudio,軟體界面如下圖所示。

左上角的兩個按鈕分別用於新建各種文件和打開已有文件,左邊是一個交互命令行,可以互動式地執行代碼。右邊上半部分是環境窗口(Environment)和歷史窗口(History),分別可以查看當前編程環境中已有的變數,以及查看歷史命令記錄。右邊下半部分包括文件(Files)、繪圖(Plots)、包(Packages)、幫助(Help)等標籤頁,分別用於查看文件目錄、查看繪圖結果、查看引用的包、查看幫助文檔。

例如,在左邊的交互命令行中輸入?plot並回車,即可在右邊的Help中查看plot函數的使用文檔。再輸入a <- 1並回車,即可在右邊的Environment中看到已有的變數,同時在History中也可以看到之前執行的兩條命令記錄。

R基礎

安裝包和載入包

R和Python一樣,功能之所以強大是因為它具備豐富多樣的功能包。在R中使用以下命令即可安裝一個新的包,例如ggplot2,包的名字需要用引號括起來。

install.packages("ggplot2")n

功能包安裝完畢之後,即可載入並使用其提供的數據集、函數和功能,使用以下命令載入一個功能包,包的名字不需要用引號括起來。

library(ggplot2)n

數據結構

R中的數據結構主要有向量、矩陣、數組、數據框、因子和列表。

向量是用於存儲數值型、字元型或邏輯型數據的一維數組,單個向量中的數據必須擁有相同的類型或模式,即要麼都是數值型,要麼都是字元型,要麼都是邏輯型。可以發現,R中的賦值使用箭頭符號<-,而不是其他語言常用的=。

# 數值型na <- c(1, 2, 5, 3, 6, -2, 4)n# 字元型nb <- c("one", "two", "three")n# 邏輯型nc <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)n

用方括弧可以訪問向量中的元素,例如訪問向量a中的第二個和第四個元素,可以用a[c(2, 4)]。向量也支持支持冒號語法,a[2:6]將返回a的第二至第六個元素。所以向量的用法和Python中list有相似又不同,Python中list的下標從0開始,而且冒號語法只包括開始下標但不包括結束下標。另外Python中負號下標表示從後往前數,而向量中負號表示排除,例如a[-1]返迴向量a中除了第一個以外的其他全部元素。

矩陣是一個二維數組,每個元素都擁有相同的類型,必須都為數值型、字元型或邏輯型,可通過函數matrix創建矩陣。

mymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=FALSE, dimnames=list(rownames, colnames))n

其中vector向量包含了全部矩陣元素,nrow和ncol為行數和列數,byrow默認為FALSE表示按列填充,否則TRUE為按行填充,dimnames為行名和列名。使用時,只有前三個參數是必須的。

y <- matrix(1:20, nrow=5, ncol=4)ncell <- c(1, 26, 24, 68)nrnames <- c("R1", "R2")ncnames <- c("C1", "C2")nmymatrix <- matrix(cell, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames, cnames))nmymatrix <- matrix(cell, nrow=2, ncol=2, byrow=FALSE, dimnames=list(rnames, cnames))n

x[i,]表示矩陣x中的第i行,x[,j]表示矩陣x中的第j列,x[i, j]表示矩陣x中的第i行第j個元素,或者使用數值型向量代替i、j以同時選擇多行或多列。

數組和矩陣類似,但是維度可以大於2,通過array函數創建。

myarray <- array(vector, dimensions, dimnames)n

其中vector包含數組中的數據,dimensions是一個數值型向量,給出了各個維度下標的最大值,dimnames可選,以向量形式指定各個維度的名稱。

dim1 <- c("A1", "A2")ndim2 <- c("B1", "B2", "B3")ndim3 <- c("C1", "C2", "C3", "C4")nz <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3))n

數據框可以理解成資料庫中的表,即每一行表示一條記錄,每一列表示一項欄位。不同列可以包含不同類型,例如某一列為數值型而另一列為字元型,但每列所有行的數據類型必須相同。數據框通過data.frame創建,是R中最為重要的一種數據結構。

patientID <- c(1, 2, 3, 4)nage <- c(25, 34, 28, 52)ndiabetes <- c("Type1", "Type2", "Type1", "Type1")nstatus <- c("Poor", "Improved", "Excellent", "Poor")npatientdata <- data.frame(patientID, age, diabetes, status)n

訪問數據框中的數據可以通過以下三種方式:

# 訪問第一列和第二列npatientdata[1:2]n# 按列名訪問,使用方括弧和向量npatientdata[c("diabetes","status")]n# 按列名訪問,使用$npatientdata$agen

無序類別型變數和有序類別型變數在R中都稱為因子。簡單來說,因子就是一種離散值,例如性別只能是male和female,對應兩個字元型因子,或者分別用0和1來表示,對應兩個數值型因子。如果因子的不同水平之間存在排序關係,則稱為有序因子。以下代碼中,diabetes對於不同的人只能取Type1或Type2,因此是一個因子。

diabetes <- factor(c("Type1", "Type2", "Type1", "Type1"))n

以下代碼中,status對於不同的人只能取Poor、Improved或Excellent

,同時三者之間存在排序關係,因此使用orderded=TRUE指定為一個有序因子。

status <- factor(c("Poor", "Improved", "Excellent", "Poor"), ordered=TRUE)n# 或者手動指定排序的順序nstatus <- factor(c("Poor", "Improved", "Excellent", "Poor"), ordered=TRUE, levels=c("Poor", "Improved", "Excellent"))n

列表和向量一樣,同樣是多個元素的排列,但每個元素可以是以上提及的任何數據結構,甚至是其他列表的組合,即嵌套列表。使用list定義一個列表,並可以為各個元素進行命名。

g <- "My First List"nh <- c(25, 26, 18, 39)nj <- matrix(1:10, nrow=5)nk <- c("one", "two", "three")nmylist <- list(title=g, ages=h, j, k)nmylistn

可以看到mylist包括四個元素,使用mylist[[2]]、mylist$age或者mylist[["ages"]]訪問其中的第二個元素。

最後需要注意的是,R中的變數名、行名、列名等名稱,都盡量使用純英文,避免使用中文導致錯誤。

數據集

R中提供了很多數據集,安裝包也會提供一些額外的數據集,這些數據集大多以數據框的形式給出,例如mtcars數據集提供了32款車型的11項參數值,所有參數值都為數值型。

head(mtcars)nnrow(mtcars)nnames(mtcars)nsummary(mtcars)n

另外,也可以從csv、txt等文件中讀取數據為數據框,使用data.table包的fread()函數讀取數據,例如之前提供的douban_movie_clean.txt。讀取之前需要在Files標籤頁中找到數據文件,然後點擊齒輪中的Set As Working Directory,將當前目錄設為工作路徑。

# 沒有包則安裝n# install.packages("data.table")nlibrary(data.table)ndouban_movie_clean <- fread("douban_movie_clean.txt", header=TRUE, sep="^", encoding="UTF-8")n

R腳本

除了在交互命令行中編寫R代碼,一種更方便的選擇是使用R腳本,就如同新建一個.py代碼,在Sublime中編輯完畢後再運行一樣。點擊左上角的新建文件按鈕,選擇R Script,在新建的R腳本中可以自由地編寫多行代碼。編寫完畢後,選中全部或者部分代碼,點擊R腳本右上方的Run按鈕,即可運行選中的代碼。

ggplot2

ggplot2是R中的一個功能包,可以用簡潔統一的語法繪製出美觀多樣的圖形。安裝好ggplot2之後,讓我們通過一個簡單的例子感受下ggplot2的魅力。

# 如果沒有則安裝n# install.packages("ggplot2")n# 載入包nlibrary(ggplot2)nggplot(douban_movie_clean) + geom_histogram(aes(x=length))n

以上代碼對豆瓣電影數據集的片長這一欄位繪製直方圖,橫軸為電影片長,縱軸為每個片長區間的電影數量。繪圖結果將顯示在Plots標籤頁中,可以點擊Zoom按鈕放大圖像,可以發現大多數電影的片長集中在90至120分鐘之間。

R學習筆記

如果對R感興趣、希望進一步了解更多內容,可以訪問我的博客,生命不息 | r,以上鏈接以r為標籤搜索相關文章,搜索結果中會有一個《R學習筆記》系列,共14篇文章,可作為進一步學習R的參考資料。

視頻鏈接:在R中進行可視化


推薦閱讀:

數字冰雹丁冬:數據可視化,把重點行業做深才能走得更遠 | 愛分析訪談
y=x^x 的图像大概是什么样的?
zzz 周刊 - 第 1022 期 - 尼爾
人際關係可視化圖譜相關軟體求推薦?

TAG:数据可视化 | R | ggplot |