RStudio_R 語言_基本計算
四則運算
跟我們平時所用的加(+)、減(-)、乘(*)和除(/)一樣
大家可以參考下列範例
x = 2 + 4
y = x - 6
z = (y + 4 ) * x
z / x
餘數和商數
計算餘數所使用的符號是"%%",可計算出除法運算中的餘數。
整除所使用的符號是"%/%",是指除法運算中只保留整數部分
``` R
計算9除以6的餘數
9 %% 6
計算12除3的商數
12 %/% 3 # ```
次方或平方根
次方的符號是"**"或"^",平方根是使用函數sqrt()。
平方根的計算也可以0.5次方替代
#計算2的平方
2 ** 2
#計算2的3次方
2 ^ 3
絕對值
絕對值的函數名稱是abs(),不論函數內的值是正或負,結果皆顯示正數。
> ### R的指數與對數
exp(x)是指自然數e的x次方,其中e的近似值是2.718282。
對數有2種類型。
1.以自然數e為底的對數,,語法是log(x)
2.以一般數y的對數,語法是log( x,y )
R的科學符號 e
與我們常看到的顯示方法很像,在這須注意數字與e不可空格,不然會發生Error錯誤
pi 為系統預設值,但也是可以將其取代乘其他數字
假設不小心更改到,只需要利用函數 rm()去除變數即可
三角函數
R語言支援三角函數,有許多例如,sin(), cos() , tan() , asin() , acos() , atan() , sinh() , cosh() , tanh() , asinh() , acos() , atan()
四捨五入
四捨五入範例,第二項也可以填入負值設定為百位數
近似函數
R 語言中有3個求取近似值得函數
floor(x) #可得到小於等於 x 的最近整數, floor(12.3) 得到 12, floor(-12.3) 得到 -13
ceiling(x) #可得到大於等於 x 的最近整數, ceiling(12.3) 得到 13, ceiling(-12.3) 得到 -12
trunc(x) #可直接取得整數trunc(12.3)得到 12, trunc(-12.3) 得到 -12
階乘 n!
在數學中,正整數的階乘是所有小於及等於該數的正整數的乘積
factorial(x) 可以返回 x 的階乘
例如factorial(5) = 5 * 4 * 3 * 2 * 1 = 120
無限大 Infinity
R 語言可以處理無限大的值,使用代號值 Inf
如果是負無限大則是 -Inf
也可以將某一個數字除以 0 就可獲得無限大
若是要查詢某一變數是否為無限大的數值
可以利用 is.infinite(x)
來判斷
如果 x 是無限大則傳回邏輯值 TRUE 否則傳回 FALSE
Not a Number(NaN)
可以解釋為非數字或稱無定義數字
例如無限大除以無限大
若是有NaN值用於計算結果都會是NaN
Not Available (缺失值,NA)
常稱為缺失值或遺漏值(Missing Value)
一樣利用 is.na
我們就可以判斷是否有缺失的數值
而詳細的處理方式可以參考下面連結
>R筆記–(10)遺漏值處理(Impute Missing Value) >[name=skydome20][time=Wed, Jun 06, 2016 11:16 AM]
在進行資料科學相關活動時一定會遇到數據中有缺失值的問題
若是有缺失值對於之後資料整理(或稱資料清洗)上會有困難
如果沒有好的資料對於後續的分析就可能會有很大的偏差
下面我們先以一個簡單數列來測試
na.test <- c(1,2,3,NA,5,6,NA)
is.na(na.test)
可以看到回傳一堆 TRUE and FALSE
這時我們可以利用sum()計算遺漏值的個數
sum(is.na(na.test))```
缺失值處理
在處理遺漏值時簡單可以直接移除資料或是用平均值來填補遺漏值
但這樣的做法並不推薦:前者會讓資料減少,後者不會產生任何資訊
因此在缺失值處理上推薦==k-Nearest Neighbours==或==mice套件==
來填補遺漏值。其中,mice的全名為Multivariate Imputation via Chained Equations。
兩者的概念相同,都是先==模擬遺漏值==後進行==填補(impute)==
我們利用R內建數據集iris
來進行測試
R內建的鳶尾花(iris)資料集是非常著名的生物資訊資料集之一
資料的筆數為150筆,共有五個欄位:
1. 花萼長度(Sepal Length):計算單位是公分 2. 花萼寬度(Sepal Width):計算單位是公分 3. 花瓣長度(Petal Length) :計算單位是公分 4. 花瓣寬度(Petal Width):計算單位是公分 5. 類別(Class):可分為Setosa,Versicolor和Virginica三個品種
# 安裝missForest套件
install.packages("missForest")
require(missForest)
# 在iris資料內,隨機產生10%的遺漏值
iris.na.test <- prodNA(iris, noNA = 0.1)
#查看前6筆數據
head(iris.na.test)
直接移除有缺失值的資料
# 移除有遺漏值的資料
rm.iris.na.test <- iris.na.test[complete.cases(iris.na.test), ]
上面指令是利用complete.cases(iris.na.test)取得每一列數據中是否有缺失值
再利用中括號 []
來指定元素的索引(index)回傳
但這麼做並不太好,因為會造成資訊損失(information loss)
使用平均數填補遺漏值
# 以下用平均數,來填補某一欄位的遺漏值
# 先建立一個初始資料集
mean.iris.na.test <- iris.na.test
# 取得第一欄位的平均數,na.rm = T 則是忽略缺失值計算
mean.row1 <- mean(mean.iris.na.test[, 1], na.rm = T)
# 用第一欄位的平均數,填補第一欄位的遺漏值
na.rows <- is.na(mean.iris.na.test[, 1])
# 用第一欄位的平均數,填補第一欄位的遺漏值
mean.iris.na.test [na.rows, 1] <- mean.row1
K-Nearest Neighbours填補遺漏值
K-Nearest Neighbours(KNN演算法,又譯K-近鄰演算法)
最近鄰居法採用向量空間模型來分類,概念為相同類別的案例
彼此的相似度高,而可以藉由計算與已知類別案例之相似度
來評估未知類別案例可能的分類
下面兩張圖可以很清楚了解KNN的原理
>擷取至[Machine Learning] kNN分類演算法
>
# 安裝DMwR套件
install.packages("DMwR")
require(DMwR)
imputeData <- knnImputation(iris.na.test)
head(imputeData)
使用上非常簡單
Multivariate Imputation by Chained Equations (鍊式方程的多元插補,MICE)
mice即是基於多重填補法構造的
基本思想是對於一個具有缺失值的變量
用其他變量的數據對這個變量進行擬合
再用擬合的預測值對這個變量的缺失值進行填補
在MICE裡面,提供了很多資料探勘的模型(linear regression, logistic regression, cart, random forest, boostrap……),來針對遺漏值進行預測!
概念很簡單:現在我們有欄位V1,V2,V3……Vn,每個欄位裡面都有遺漏值。
當我們要填補V1的遺漏值時,就先把V2,V3……Vn的欄位當作自變數(X)
把V1當作應變數(Y),並且進行建模,然後用預測的結果來填補V1的遺漏值。
同理,針對V2,就用V1,V3……Vn建模,然後用預測的結果來填補V2的遺漏值。
(由於這個函式,背後有使用Gibbs sampling(一種抽樣手法)。
即使使用某個模型進行遺漏值填補,也會因為抽樣手法,造成最後填補的結果有些許不同)
# 安裝 mice 套件
install.packages("mice")
require(mice)
mice.iris.na.test <- mice(iris.na.test,
m = 3, # 產生三個被填補好的資料表
maxit = 50, # max iteration
method = "cart", # 使用CART決策樹,進行遺漏值預測
seed = 188) # set.seed(),令抽樣每次都一樣
complete(mice.iris.na.test, 1) # 1st data
complete(mice.iris.na.test, 2) # 2nd data
complete(mice.iris.na.test, 3) # 3rd data
參考文章
>R筆記–(10)遺漏值處理(Impute Missing Value) >[name=skydome20] >Missing Value Treatment | 遺失值處理 | 統計 R語言 >[name=果醬珍珍 Jam Lee] >R语言处理缺失数据的高级方法 >[name=feng_lilan] >[R语言中的缺失值处理] (https://blog.csdn.net/u011596455/article/details/79608969) >[name=HuFeiHu-Blog] >>Data prep and pattern[name=Selva Prabhakaran]
今天先分享到這邊希望大家都有收穫
網站所有文章皆為 H.B. Liu 撰寫,歡迎分享但勿轉製
也可以到粉專私訊我
喜歡我分享的內容也可以按讚追蹤一下我的粉專
幫我分享給所~~~有的朋友 \o/
有所錯誤歡迎指教
<
留言
張貼留言