數據分析探索之旅(二):R 的基本操作與數據結構

R 是什麼

R 是一種為統計計算和繪圖而設計的語言及環境。

安裝 R 與 RStudio

首先,我們先來看看 R 與 RStudio 有著什麼樣的關係。

簡單來講, R 是一個運行環境,而 RStudio 是 R 的一個開發工具,它可以有效地提高 R 的開發效率。需要注意的一個點是:必須在安裝好 R 的情況下才能安裝 RStudio。

R 可以在 R的官網 上下載,安裝過程十分簡單,這裡不進行詳述。同樣地,RStudio 也是在 RStudio 官網 上下載安裝即可。如果打不開上述鏈接,請自行科學上網。

RStudio 的使用

進入 RStudio 後會看到這個界面:

  • 控制台:用於輸入 R 語言的命令以及輸出結果的顯示。

  • 工作空間:用來記錄目前變數的數值,方便查看目前變數的狀況。

  • 目錄:顯示當前目錄下的文件、文件夾。

新建 RStudio 項目:

創建腳本:

運行腳本代碼:

RStudio 需要注意的兩個問題

1. 修改 RStudio 的編碼為 UTF-8,否則會出現中文亂碼現象。

2. 打開項目失敗

其原因在於項目文件保存的路徑長度太長,可將項目文件拷貝到路徑長度較短的目錄下再打開。

數據結構

在說數據結構之前,我們通過類比蓋房子的步驟來看看一個數據分析系統是怎麼搭建的。

  1. 挖掘用戶的需求,設計數據分析系統的架構。這一步相當於設計房子的藍圖。

  2. 選擇數據分析系統的運行環境。相當於選擇一塊合適的地來蓋房子。

  3. 創建數據分析系統中存儲數據的容器 - 數據結構,相當於蓋房子中的木頭、磚頭等材料。

  4. 組合、處理數據結構,相當於將木頭、磚頭等材料以一定的組合方式來蓋房子。

數據結構的類型

1. 向量

向量是用於存儲數值型、字元型或邏輯性數據的一維數組。執行組合功能的函數 c() 可用來創建向量。

> a <- c(1, 2, 3)n> an[1] 1 2 3n> b <- c("one", "two", "three")n> bn[1] "one" "two" "three"n> c <- c(TRUE, FALSE, TRUE)n> cn[1] TRUE FALSE TRUEn

通過在方括弧中給定元素所處位置的數值來訪問向量中的元素:

> a <- c(1, 2, 3)n> a[1]n[1] 1n> a[3]n[1] 3n> a[1:3]n[1] 1 2 3n> a[c(1, 3)]n[1] 1 3n

注意:單個向量中的數據必須擁有相同的類型或模式。

2. 矩陣

矩陣是一個二維數組,只是每個元素都擁有相同的模式(數值型、字元型或邏輯型)。可通過matrix() 函數創建矩陣。

> cells <- c(1, 26, 24, 68) --創建矩陣的元素n> rnames <- c("R1", "R2") --創建矩陣的行名n> cnames <- c("C1", "C2") --創建矩陣的列名n> mymatrix <- matrix(cells, nrow = 2, ncol = 2, byrow = TRUE,n dimnames = list(rnames, cnames))n --byrow表示矩陣應當按行填充還是按列填充n> mymatrixn C1 C2nR1 1 26nR2 24 68n

查找矩陣中的數據:

> x <- matrix(1:20, nrow = 5, ncol = 4, byrow = TRUE)n> xn [,1] [,2] [,3] [,4]n[1,] 1 2 3 4n[2,] 5 6 7 8n[3,] 9 10 11 12n[4,] 13 14 15 16n[5,] 17 18 19 20n> x[2, ]n[1] 5 6 7 8n> x[, 2]n[1] 2 6 10 14 18n> x[1, 4]n[1] 4n> x[1, c(2,4)]n[1] 2 4n

3. 數組

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

> dim1 <- c("A1", "A2")n> dim2 <- c("B1", "B2", "B3")n> dim3 <- c("C1", "C2", "C3", "C4")n> z <- array(1:24, c(2, 3, 4), dimnames = list(dim1, dim2, dim3))n> zn, , C1nn B1 B2 B3nA1 1 3 5nA2 2 4 6nn, , C2nn B1 B2 B3nA1 7 9 11nA2 8 10 12nn, , C3nn B1 B2 B3nA1 13 15 17nA2 14 16 18nn, , C4nn B1 B2 B3nA1 19 21 23nA2 20 22 24n

查找數組中的數據:

> zn, , C1nn B1 B2 B3nA1 1 3 5nA2 2 4 6nn, , C2nn B1 B2 B3nA1 7 9 11nA2 8 10 12nn, , C3nn B1 B2 B3nA1 13 15 17nA2 14 16 18nn, , C4nn B1 B2 B3nA1 19 21 23nA2 20 22 24nn> z[2, 1, 4]n[1] 20n

4. 數據框

數據框由觀測和變數組成,變數就是列,觀測就是行,數據框不同的列可以包含不同類型的數據,但是同一列的元素的數據類型必須一樣。

> name <- c("張三", "李四", "王五", "趙六")n> age <- c(21, 24, 38, 45)n> gender <- c("男", "男", "女", "女")n> height <- c(167.5, 177.3, 167.5, 170.0)n> mydataframe <- data.frame(name, age, gender, height, stringsAsFactors = FALSE)n> mydataframen name age gender heightn1 張三 21 男 167.5n2 李四 24 男 177.3n3 王五 38 女 167.5n4 趙六 45 女 170.0n

讀取數據框中的元素:

> mydataframen name age gender heightn1 張三 21 男 167.5n2 李四 24 男 177.3n3 王五 38 女 167.5n4 趙六 45 女 170.0n> mydataframe[1:2]n name agen1 張三 21n2 李四 24n3 王五 38n4 趙六 45n> mydataframe[1, ]n name age gender heightn1 張三 21 男 167.5n> mydataframe[, 1]n[1] "張三" "李四" "王五" "趙六"n> mydataframe[1, c(3, 4)]n gender heightn1 男 167.5n

5. 列表

列表就是一些對象的有序集合,什麼數據都可以在列表裡面存儲,列表主要是用於函數調用和返回。

# 將前面創建的向量、矩陣、數據框放入列表n> mylist <- list(a, x, mydataframe) n> mylistn[[1]]n[1] 1 2 3nn[[2]]n [,1] [,2] [,3] [,4]n[1,] 1 2 3 4n[2,] 5 6 7 8n[3,] 9 10 11 12n[4,] 13 14 15 16n[5,] 17 18 19 20nn[[3]]n name age gender heightn1 張三 21 男 167.5n2 李四 24 男 177.3n3 王五 38 女 167.5n4 趙六 45 女 170.0n

查詢列表中的數據:

> mylistn[[1]]n[1] 1 2 3nn[[2]]n [,1] [,2] [,3] [,4]n[1,] 1 2 3 4n[2,] 5 6 7 8n[3,] 9 10 11 12n[4,] 13 14 15 16n[5,] 17 18 19 20nn[[3]]n name age gender heightn1 張三 21 男 167.5n2 李四 24 男 177.3n3 王五 38 女 167.5n4 趙六 45 女 170.0nn> mylist[[2]]n [,1] [,2] [,3] [,4]n[1,] 1 2 3 4n[2,] 5 6 7 8n[3,] 9 10 11 12n[4,] 13 14 15 16n[5,] 17 18 19 20nn> mylist[[2]][3, 2]n[1] 10n> mylist[[3]][2, 4]n[1] 177.3n

6. 因子

因子用來存儲類別變數和有序變數,這類變數不能用來計算而只能用來分類或者計數,可以把因子理解成整數向量 + 標籤(labels),因子決定了數據的分析方式以及如何進行視覺呈現。在創建任何數據框文本數據的列時,R語言會自動將文本列作為分類數據,並在其上創建因子,除非在創建數據框中加上 stringsAsFactors = FALSE 。

> status <- c("Poor", "Improved", "Excellent", "Poor")n> statusn[1] "Poor" "Improved" "Excellent" "Poor" n> str(status)n chr [1:4] "Poor" "Improved" "Excellent" "Poor"n> status <- factor(status) --將向量轉化為無序因子n> statusn[1] Poor Improved Excellent Poor nLevels: Excellent Improved Poorn> str(status)n Factor w/ 3 levels "Excellent","Improved",..: 3 2 1 3n> status <- factor(status, order = TRUE) --將向量轉化為有序因子n> statusn[1] Poor Improved Excellent Poor nLevels: Excellent < Improved < Poorn> str(status)n Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3n> status <- factor(status, order = TRUE, levels = c("Poor", "Improved", "Excellent")) --定義因子的水平級別n> statusn[1] Poor Improved Excellent Poor nLevels: Poor < Improved < Excellentn> str(status)n Ord.factor w/ 3 levels "Poor"<"Improved"<..: 1 2 3 1n> status <- factor(status, order = TRUE, levels = c("Poor", "Improved", "Excellent"), labels = c("窮", "一般", "富")) --定義因子的標籤n> statusn[1] 窮 一般 富 窮 nLevels: 窮 < 一般 < 富n> str(status)n Ord.factor w/ 3 levels "窮"<"一般"<"富": 1 2 3 1n

推薦閱讀:

如何假裝成一個頂級的數據分析師?
日留存、周留存、月留存,怎麼讓更多用戶留下來
太多選擇——如何選擇合適的BI工具?

TAG:数据分析 | R编程语言 |