R 語言資料分析實務 (1)

資料科學 Data Science 系列

從資料大海中,提煉出有價值的資料

姓名:羅左欣

日期:2016/10/3 (一)

Agenda

(一) Prepare:預備工作

(二) Basic:基本介紹與操作

(三) 學習資源

(一) Prepare:

預備工作

(一) Prepare:預備工作

(一) Prepare:預備工作

安裝工作環境

請參照上方影片 0:00 - 0:37 處

(一) Prepare:預備工作

在這個系列的簡報中,主要以 "RStudio" 做為主要軟體。

啟動 RStudio

(二) Basic:基本介紹與操作

(二) Basic:

基本介紹與操作

(二) Basic:什麼是資料探勘?

1. 什麼是資料探勘?

資料探勘 = 資料庫之知識發掘

(Knowledge Discovery in Databases,KDD)

亦可稱作

A. 數據挖掘

B. 資料挖掘

C. 資料採礦

它是"資料分析"技術裡的一個環節。

目的:從大量的資料中提取"有價值的資訊"

基本概念

(二) Basic:什麼是資料探勘?

知識發掘(Knowledge Discovery)由現有的資料中,得知一些我們不知道的事情。

假設檢定(Hypothesis Testing):嘗試去證實或舉反證來驗證預設的想法。

資料探勘技術

分類

(Classification)

根據對象的屬性,分門別類

加以定義。

預測

(Predication)

根據屬性之過去觀察值

來推估該屬性未來之值。

估計

(Estimation)

根據現有屬性的資料,

獲得新屬性未知的數值。

集群

(Clustering)

將相關資料聚集於各群組之中,

並分析群組間的差異。

關聯分析

(Association)

從所有物件中決定那些相關物件

應該放在一起。

(二) Basic:什麼是資料探勘?

工作流程

STEP1:收集資料

STEP2:處理資料

STEP3:輸出結果

訂立目標及問題之後,

進行資料蒐集及前置處理。

使用適當的工具,

進行資料分析。

觀察者從分析後的結果得知資料代表的意義,並思考出目標及問題的處理方案。

(二) Basic:什麼是資料探勘?

(二) Basic:軟體基礎

2. 軟體基礎

(二) Basic:軟體基礎

專有名詞

(1) 向量(Vectors)

(2) 因子(Factors)

(3) 陣列(Arrays)、矩陣(Matrices)

(4) 資料框(DataFrame)

以上名詞是在資料處理中,重要的概念。

(5) 列表(Lists)

(二) Basic:軟體基礎

基本算術運算

> 1 + 1
[1] 2
> 
> 1 + 2 + 3
[1] 6
> 
> 3 * 7 * 2
[1] 42
> 
> 4 / 2
[1] 2
> 
> 4 / 3
[1] 1.333333
> 
> 4 * 6 + 5
[1] 29
> 
> (4 * 6) + 5
[1] 29
> 
> 4 * (6 + 5)
[1] 44
> 

運算次序:括號 > 指數 > 乘法 > 除法 > 加減法

(二) Basic:軟體基礎

物件的操作

> # 指派物件(可以使用"<-"或"="),建議使用"<-"
> x <- 2
> 
> x        # 顯示"x"的值
[1] 2
> 
> y = 5
> y        # 顯示"y"的值
[1] 5
> 
> 
> # 可以連續指派
> a <- b <- 7
> a
[1] 7
> b
[1] 7
> 
> # 移除物件
> a    # 查看變數"a"
[1] 7
> 
> rm(a)    # 移除變數"a"
> 
> a        # 現在變數"a"被移除了,所以"a"不存在
錯誤: 找不到物件 'a'
> 

"指派"物件

"移除"物件

(二) Basic:軟體基礎

向量(Vectors)

(1) 向量(Vectors)

1. "同型別"元素的集合:不能涵蓋不同型別的元素

2. 向量(Vectors)沒有維度沒有"行(colume)"跟"列(row)"

3. 最基礎的"物件(Objects)"

常見的"型別":邏輯(logical)、整數(integer)、數值(numeric)、複數(complex)、字元(character)

> # 把幾個元素結合在一起,形成 "向量(vectors)"
> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
> 
> # 顯示"x"的內容
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> 

(二) Basic:軟體基礎

向量(Vectors)

(1) 向量(Vectors)

向量的運算(1)

> x <- c(1, 2, 3, 4, 5)    # 建立向量 "x"
> 
> x * 3     # 把每一個元素乘以 3
[1]  3  6  9 12 15
> 
> x + 2     # 把每一個元素都加上 2
[1] 3 4 5 6 7
> 
> x - 4     # 把每一個元素都扣掉 4
[1] -3 -2 -1  0  1
>  
> x / 10    # 把每一個元素都除以 10
[1] 0.1 0.2 0.3 0.4 0.5
> 
> x ^ 2     # 把每一個元素都平方
[1]  1  4  9 16 25
> 

(二) Basic:軟體基礎

向量(Vectors)

(1) 向量(Vectors)

向量的運算(2)

> # 使用 ":" 產生連續的數字
> 1:10
 [1]  1  2  3  4  5  6  7  8  9 10
> -5:4
 [1] -5 -4 -3 -2 -1  0  1  2  3  4
> 
> # 製造兩個相同長度的向量
> x <- 1:10
> y <- -5:4
> x + y    # 相加
 [1] -4 -2  0  2  4  6  8 10 12 14
> x - y    # 相減
 [1] 6 6 6 6 6 6 6 6 6 6
> x * y    # 相乘
 [1] -5 -8 -9 -8 -5  0  7 16 27 40
> x / y    # 相除
 [1] -0.2 -0.5 -1.0 -2.0 -5.0  Inf  7.0  4.0  3.0  2.5
> x ^ y    # 指數型態
 [1] 1.000000e+00 6.250000e-02 3.703704e-02 6.250000e-02 2.000000e-01 1.000000e+00
 [7] 7.000000e+00 6.400000e+01 7.290000e+02 1.000000e+04

(二) Basic:軟體基礎

向量(Vectors)

(1) 向量(Vectors)

向量的處理

1. 查看向量的型態和長度

2. 用中括號查看向量裡的特定元素

> x <- 1:10    # 建立一個1 ~ 10的向量
>
> # 使用中括號"[]"查看特定元素
> x[1]
[1] 1
> 
> x[1:2]
[1] 1 2
> 
> x[c(1, 4)]   # 查看"第1個元素"和"第4個元素"的值
[1] 1 4
> 
> x <- 1:10    # 建立一個1 ~ 10的向量
> 
> # 使用"mode()"來查看向量的型態
> mode(x)
[1] "numeric"
> 
> # 使用"length()"來查看向量的長度
> length(x)
[1] 10
> 

(二) Basic:軟體基礎

因子(Factors)

(2) 因子(Factors)

屬於「類別」資料的例子:

  • 性別:「男、女」
  • 地區:「台北、台中、台南、高雄」
  • 血型:「A、B、AB、O」

1. 儲存"類別型態"的資料

2. 具有"level"屬性

3. 分為"無順序"或"有順序"的

註1:在 R 中,預設是以"字母順序"排列 levels;可使用 ordered = TRUE,讓 Factor 變成"有序")

註2:因子(Factors)像是"經過分級"後的向量(Vectors)

> x <- c(1, 2, 4, 3, 1, 2, 3, 4, 1)
> 
> factor(x)
[1] 1 2 4 3 1 2 3 4 1
Levels: 1 2 3 4
> 
>
> # 自訂 Level 的名稱。
> factor(x, labels = c("一", "二", "三", "四"))
[1] 一 二 四 三 一 二 三 四 一
Levels: 一 二 三 四
> factor(x, ordered = TRUE)    # 進行排序
[1] 1 2 4 3 1 2 3 4 1
Levels: 1 < 2 < 3 < 4
> 

(二) Basic:軟體基礎

陣列(Array)、矩陣(Matrices)

(3) 陣列(Array)、矩陣(Matrices)

> # 建立一個 2x3x2 的陣列
> theArray <- array(1:12, dim = c(2, 3, 2))
> theArray
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12
> # 建立一個 3x4 的矩陣
> theMatrix <- matrix(1:12, 3, 4)
> theMatrix
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> 

1. "同型別"元素的集合

2. 有"列(row)"、"行(colume)"

一種"多維度"的向量(vectors)

1. "同型別"元素的集合

2. 有"列(row)"、"行(colume)"

一種只有"二維"的向量(vectors)

陣列(Array)

矩陣(Matrices)

(二) Basic:軟體基礎

資料框(DataFrame)

(4) 資料框(DataFrame)

> a <- data.frame(id = 1:10, scores = matrix(c(80:99), nrow = 10, ncol = 2 ) )
> a
   id scores.1 scores.2
1   1       80       90
2   2       81       91
3   3       82       92
4   4       83       93
5   5       84       94
6   6       85       95
7   7       86       96
8   8       87       97
9   9       88       98
10 10       89       99
> 

◎ 有"列(row)"、"行(colume)"

1. "行":代表"變數"

2. "列":代表"觀測值"

註:行與行之間可儲存不同的資料型別

(二) Basic:軟體基礎

列表(Lists)

(5) 列表(Lists)

> x <- list(iris = iris, cars = cars, n = 2)
> x
$iris
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
3            4.7         3.2          1.3         0.2     setosa
4            4.6         3.1          1.5         0.2     setosa
5            5.0         3.6          1.4         0.2     setosa
6            5.4         3.9          1.7         0.4     setosa
7            4.6         3.4          1.4         0.3     setosa
8            5.0         3.4          1.5         0.2     setosa
9            4.4         2.9          1.4         0.2     setosa
10           4.9         3.1          1.5         0.1     setosa
11           5.4         3.7          1.5         0.2     setosa
12           4.8         3.4          1.6         0.2     setosa
13           4.8         3.0          1.4         0.1     setosa
14           4.3         3.0          1.1         0.1     setosa
15           5.8         4.0          1.2         0.2     setosa
16           5.7         4.4          1.5         0.4     setosa
17           5.4         3.9          1.3         0.4     setosa
18           5.1         3.5          1.4         0.3     setosa
19           5.7         3.8          1.7         0.3     setosa
20           5.1         3.8          1.5         0.3     setosa
21           5.4         3.4          1.7         0.2     setosa
22           5.1         3.7          1.5         0.4     setosa
23           4.6         3.6          1.0         0.2     setosa
24           5.1         3.3          1.7         0.5     setosa
25           4.8         3.4          1.9         0.2     setosa
26           5.0         3.0          1.6         0.2     setosa
27           5.0         3.4          1.6         0.4     setosa
28           5.2         3.5          1.5         0.2     setosa
29           5.2         3.4          1.4         0.2     setosa
30           4.7         3.2          1.6         0.2     setosa
31           4.8         3.1          1.6         0.2     setosa
32           5.4         3.4          1.5         0.4     setosa
33           5.2         4.1          1.5         0.1     setosa
34           5.5         4.2          1.4         0.2     setosa
35           4.9         3.1          1.5         0.2     setosa
36           5.0         3.2          1.2         0.2     setosa
37           5.5         3.5          1.3         0.2     setosa
38           4.9         3.6          1.4         0.1     setosa
39           4.4         3.0          1.3         0.2     setosa
40           5.1         3.4          1.5         0.2     setosa
41           5.0         3.5          1.3         0.3     setosa
42           4.5         2.3          1.3         0.3     setosa
43           4.4         3.2          1.3         0.2     setosa
44           5.0         3.5          1.6         0.6     setosa
45           5.1         3.8          1.9         0.4     setosa
46           4.8         3.0          1.4         0.3     setosa
47           5.1         3.8          1.6         0.2     setosa
48           4.6         3.2          1.4         0.2     setosa
49           5.3         3.7          1.5         0.2     setosa
50           5.0         3.3          1.4         0.2     setosa
51           7.0         3.2          4.7         1.4 versicolor
52           6.4         3.2          4.5         1.5 versicolor
53           6.9         3.1          4.9         1.5 versicolor
54           5.5         2.3          4.0         1.3 versicolor
55           6.5         2.8          4.6         1.5 versicolor
56           5.7         2.8          4.5         1.3 versicolor
57           6.3         3.3          4.7         1.6 versicolor
58           4.9         2.4          3.3         1.0 versicolor
59           6.6         2.9          4.6         1.3 versicolor
60           5.2         2.7          3.9         1.4 versicolor
61           5.0         2.0          3.5         1.0 versicolor
62           5.9         3.0          4.2         1.5 versicolor
63           6.0         2.2          4.0         1.0 versicolor
64           6.1         2.9          4.7         1.4 versicolor
65           5.6         2.9          3.6         1.3 versicolor
66           6.7         3.1          4.4         1.4 versicolor
67           5.6         3.0          4.5         1.5 versicolor
68           5.8         2.7          4.1         1.0 versicolor
69           6.2         2.2          4.5         1.5 versicolor
70           5.6         2.5          3.9         1.1 versicolor
71           5.9         3.2          4.8         1.8 versicolor
72           6.1         2.8          4.0         1.3 versicolor
73           6.3         2.5          4.9         1.5 versicolor
74           6.1         2.8          4.7         1.2 versicolor
75           6.4         2.9          4.3         1.3 versicolor
76           6.6         3.0          4.4         1.4 versicolor
77           6.8         2.8          4.8         1.4 versicolor
78           6.7         3.0          5.0         1.7 versicolor
79           6.0         2.9          4.5         1.5 versicolor
80           5.7         2.6          3.5         1.0 versicolor
81           5.5         2.4          3.8         1.1 versicolor
82           5.5         2.4          3.7         1.0 versicolor
83           5.8         2.7          3.9         1.2 versicolor
84           6.0         2.7          5.1         1.6 versicolor
85           5.4         3.0          4.5         1.5 versicolor
86           6.0         3.4          4.5         1.6 versicolor
87           6.7         3.1          4.7         1.5 versicolor
88           6.3         2.3          4.4         1.3 versicolor
89           5.6         3.0          4.1         1.3 versicolor
90           5.5         2.5          4.0         1.3 versicolor
91           5.5         2.6          4.4         1.2 versicolor
92           6.1         3.0          4.6         1.4 versicolor
93           5.8         2.6          4.0         1.2 versicolor
94           5.0         2.3          3.3         1.0 versicolor
95           5.6         2.7          4.2         1.3 versicolor
96           5.7         3.0          4.2         1.2 versicolor
97           5.7         2.9          4.2         1.3 versicolor
98           6.2         2.9          4.3         1.3 versicolor
99           5.1         2.5          3.0         1.1 versicolor
100          5.7         2.8          4.1         1.3 versicolor
101          6.3         3.3          6.0         2.5  virginica
102          5.8         2.7          5.1         1.9  virginica
103          7.1         3.0          5.9         2.1  virginica
104          6.3         2.9          5.6         1.8  virginica
105          6.5         3.0          5.8         2.2  virginica
106          7.6         3.0          6.6         2.1  virginica
107          4.9         2.5          4.5         1.7  virginica
108          7.3         2.9          6.3         1.8  virginica
109          6.7         2.5          5.8         1.8  virginica
110          7.2         3.6          6.1         2.5  virginica
111          6.5         3.2          5.1         2.0  virginica
112          6.4         2.7          5.3         1.9  virginica
113          6.8         3.0          5.5         2.1  virginica
114          5.7         2.5          5.0         2.0  virginica
115          5.8         2.8          5.1         2.4  virginica
116          6.4         3.2          5.3         2.3  virginica
117          6.5         3.0          5.5         1.8  virginica
118          7.7         3.8          6.7         2.2  virginica
119          7.7         2.6          6.9         2.3  virginica
120          6.0         2.2          5.0         1.5  virginica
121          6.9         3.2          5.7         2.3  virginica
122          5.6         2.8          4.9         2.0  virginica
123          7.7         2.8          6.7         2.0  virginica
124          6.3         2.7          4.9         1.8  virginica
125          6.7         3.3          5.7         2.1  virginica
126          7.2         3.2          6.0         1.8  virginica
127          6.2         2.8          4.8         1.8  virginica
128          6.1         3.0          4.9         1.8  virginica
129          6.4         2.8          5.6         2.1  virginica
130          7.2         3.0          5.8         1.6  virginica
131          7.4         2.8          6.1         1.9  virginica
132          7.9         3.8          6.4         2.0  virginica
133          6.4         2.8          5.6         2.2  virginica
134          6.3         2.8          5.1         1.5  virginica
135          6.1         2.6          5.6         1.4  virginica
136          7.7         3.0          6.1         2.3  virginica
137          6.3         3.4          5.6         2.4  virginica
138          6.4         3.1          5.5         1.8  virginica
139          6.0         3.0          4.8         1.8  virginica
140          6.9         3.1          5.4         2.1  virginica
141          6.7         3.1          5.6         2.4  virginica
142          6.9         3.1          5.1         2.3  virginica
143          5.8         2.7          5.1         1.9  virginica
144          6.8         3.2          5.9         2.3  virginica
145          6.7         3.3          5.7         2.5  virginica
146          6.7         3.0          5.2         2.3  virginica
147          6.3         2.5          5.0         1.9  virginica
148          6.5         3.0          5.2         2.0  virginica
149          6.2         3.4          5.4         2.3  virginica
150          5.9         3.0          5.1         1.8  virginica

$cars
   speed dist
1      4    2
2      4   10
3      7    4
4      7   22
5      8   16
6      9   10
7     10   18
8     10   26
9     10   34
10    11   17
11    11   28
12    12   14
13    12   20
14    12   24
15    12   28
16    13   26
17    13   34
18    13   34
19    13   46
20    14   26
21    14   36
22    14   60
23    14   80
24    15   20
25    15   26
26    15   54
27    16   32
28    16   40
29    17   32
30    17   40
31    17   50
32    18   42
33    18   56
34    18   76
35    18   84
36    19   36
37    19   46
38    19   68
39    20   32
40    20   48
41    20   52
42    20   56
43    20   64
44    22   66
45    23   54
46    24   70
47    24   92
48    24   93
49    24  120
50    25   85

$n
[1] 2

> 

1. 能儲存任意物件

2. 可包含任何型別和長度的資料

◎ 例如:numeric、character、DataFrame、list...

(二) Basic:軟體基礎

名詞之間的關係

名詞之間的關係如下...

(二) Basic:簡易視覺化

小型成果實作

簡易視覺化

(二) Basic:簡易視覺化

空間資料視覺化

繪製地圖與資料分佈圖

(二) Basic:簡易視覺化

本範例應用之素材如下

(二) Basic:簡易視覺化

使用素材(1)

台灣地圖

(二) Basic:簡易視覺化

使用素材(2)

政府資料開放平臺 - 紫外線即時監測資料

(二) Basic:簡易視覺化

地圖搭配開放資料,進行視覺化

(二) Basic:簡易視覺化

STEP1:繪製基本地圖(1)

  • 必備套件:ggmap、mapproj

# 安裝套件(如果沒有才需要安裝)
> install.packages("ggmap")   # 安裝"ggmap"套件
> install.packages("mapproj") # 安裝"mapproj"套件


# 載入套件
> library(ggmap)              # 載入"ggmap"套件
> library(mapproj)            # 載入"mapproj"套件


# 取得台灣地圖
> map <- get_map(location = 'Taiwan', zoom = 7, language = "zh-TW")

# 顯示地圖
> ggmap(map)

(二) Basic:簡易視覺化

STEP1:繪製基本地圖 (執行結果)

(二) Basic:簡易視覺化

STEP2:取得資料(1)

  • 先取得目前的工作目錄
> getwd()    # 輸入"getwd()"取得目前的工作目錄

(二) Basic:簡易視覺化

STEP2:取得資料(2)

  • 變更目前的工作目錄
> setwd()    # 輸入"setwd()"變更目前的工作目錄

# 範例:將工作目錄變更到"r_test"這個資料夾底下
> setwd(".../r_test")

(二) Basic:簡易視覺化

STEP2:取得資料(3)

  • 將資料存進工作目錄

紫外線即時監測資料:http://data.gov.tw/node/6076

(二) Basic:簡易視覺化

STEP2:取得資料(4)

  • 載入並檢視資料
> # 載入要檢視的資料檔
> uv <- read.csv("UV_20160906115527.csv")
>
> head(uv)    # 檢視資料檔的前半段資料
  SiteName UVI PublishAgency County     WGS84Lon    WGS84Lat      PublishTime
1     屏東   0    環境保護署 屏東縣 120,29,16.92 22,40,23.09 2016-09-06 11:00
2     橋頭   1    環境保護署 高雄市 120,18,20.48 22,45,27.02 2016-09-06 11:00
3     新營   6    環境保護署 臺南市  120,19,2.10 23,18,20.28 2016-09-06 11:00
4     朴子   7    環境保護署 嘉義縣 120,14,50.46 23,27,55.11 2016-09-06 11:00
5   塔塔加   6    環境保護署 嘉義縣 120,52,50.06 23,28,14.19 2016-09-06 11:00
6   阿里山   2    環境保護署 嘉義縣 120,48,05.02 23,30,30.82 2016-09-06 11:00
> 

(二) Basic:簡易視覺化

STEP2:處理資料

A. 進行經緯度的轉換

       原始的經緯度資料是以度分秒表示,在使用前要轉換為度數表示。

> lon.deg <- sapply((strsplit(as.character(uv$WGS84Lon), ",")), as.numeric)
> uv$lon <- lon.deg[1, ] + lon.deg[2, ]/60 + lon.deg[3, ]/3600
> lat.deg <- sapply((strsplit(as.character(uv$WGS84Lat), ",")), as.numeric)
> uv$lat <- lat.deg[1, ] + lat.deg[2, ]/60 + lat.deg[3, ]/3600
> 
> ggmap(map) + geom_point(aes(x = lon, y = lat, size = UVI), data = uv)

B. 把資料加入地圖中

(二) Basic:簡易視覺化

從結果圖中,我們可以得知全台灣

在取得資料當下的紫外線分佈情況。

紫外線強度越大,點就會越大。

STEP3:輸出結果

(三) Reference:

學習資源

(三) Reference:學習資源

1. R 語言翻轉教室 - Wush Wu、Chih Cheng Liang、Johnson Hsieh

一、中文教材

2. 手把手教你 R 語言資料分析實務 - 張毓倫&陳柏亨

3. R 軟體與資料探勘之開發與應用 - 陳志華

二、英文教材

1. DataCamp

線上教材

2. R for Data Science

(三) Reference:學習資源

推薦書籍

R 軟體資料分析基礎與應用

作者: Jared P. Lander  
譯者:鍾振蔚
出版社:旗標

(三) Reference:學習資源

相關社群

Taiwan R User Group

台灣資料科學年會

資料視覺化 / Data Visualization

(三) Reference:學習資源

Q & A