您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關10個令人相見恨晚的R語言包分別是哪些,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
大約3年前我開始使用R,起初進展很慢,與我習慣的語言相比,語法更加直觀也比較簡單,而且需要一段時間才能習慣于細微的差別。我還不清楚語言的力量與社區和各種包的密切關系。
和其他語言(比如Python和Java)相比,R可以更模糊和麻煩。好消息是,有大量的包可以在R基礎庫上提供簡單和熟悉的界面。這篇文章是我喜歡和每天使用的10個包,并且我希望自己能早些知道他們。
1. sqldf
R語言學習曲線中最陡峭的一部分就是語法,我花了一段時間才習慣使用<-代替=。我聽到很多人問如何實現VLOOKUP?!?R 對于一般的數據粗加工任務非常有用,但需要一段時間才能掌握。可以認為sqldf是我的R”輔助輪子”。
sqldf讓你在R數據框上執行SQL查詢。來自SAS的人會發現它非常熟悉,任何具有基本SQL技能的人都可以輕松的使用它—sqldf使用SQLite語法。
install.packages("sqldf") library(sqldf) sqldf("SELECT day , avg(temp) as avg_temp FROM beaver2 GROUP BY day;") # day avg_temp #1 307 37.57931 #2 308 37.71308 #beavers1 和 beavers2 是R base 自帶的兩個數據集,記錄了兩種海貍的體溫序列 beavers <- sqldf("select * from beaver1 union all select * from beaver2;") #head(beavers) # day time temp activ #1 346 840 36.33 0 #2 346 850 36.34 0 #3 346 900 36.35 0 #4 346 910 36.42 0 #5 346 920 36.55 0 #6 346 930 36.69 0 movies <- data.frame( title=c("The Great Outdoors", "Caddyshack", "Fletch", "Days of Thunder", "Crazy Heart"), year=c(1988, 1980, 1985, 1990, 2009) ) boxoffice <- data.frame( title=c("The Great Outdoors", "Caddyshack", "Fletch", "Days of Thunder","Top Gun"), revenue=c(43455230, 39846344, 59600000, 157920733, 353816701) ) sqldf("SELECT m.* , b.revenue FROM movies m INNER JOIN boxoffice b ON m.title = b.title;") # title year revenue #1 The Great Outdoors 1988 43455230 #2 Caddyshack 1980 39846344 #3 Fletch 1985 59600000 #4 Days of Thunder 1990 157920733
如果你喜歡sqldf,可以使用pandasql包來查詢pandas中的DataFrame,通過SQL。
2. forecast
我不經常做時間序列分析,但是當我做的時候forecast包是我的選擇。forecast對ARIMA,ARMA,AR,指數平滑等時間序列模型的預測簡單的令人難以置信。
install.packages("forecast") library(forecast) # mdeaths: 英國每月死于肺病的人數 fit <- auto.arima(mdeaths) #定制你的置信區間 forecast(fit, level=c(80, 95, 99), h=3) # Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 Lo 99 Hi 99 #Jan 1980 1822.863 1564.192 2081.534 1427.259 2218.467 1302.952 2342.774 #Feb 1980 1923.190 1635.530 2210.851 1483.251 2363.130 1345.012 2501.368 #Mar 1980 1789.153 1495.048 2083.258 1339.359 2238.947 1198.023 2380.283 plot(forecast(fit), shadecols="oldstyle")
我最喜歡的特性是產生預測的時序圖。
3. plyr
當我***次使用R時,我用基本的控制運算來操縱數據(for, if, while, etc.)。我很快知道這是一個業余的做法,并且有更好的方法去實現。
在R中,apply函數族是在對列表或者向量每個元素調用函數的***方法。雖然R基礎庫中有這些函數,但它們的使用可能難以掌握。我發現plyr包 是一個對R基礎庫中諸如split,apply, combine的泛函的更好用的替代。
plyr 給予你一些函數 (ddply, daply, dlply, adply, ldply)按照常見的藍圖:將數據結構分組拆分,對每個組應用一個函數,將結果返回到數據結構中。
ddply 拆分一個數據框(data frame)并且返回一個數據框 (所以是 dd)。 daply 拆分一個數據框并且返回一個數組(array) (所以是 da)。希望你明白這個想法。
譯者注:plyr包包含了12個命名與功能相關的函數,均以..ply命名,***個.表示輸入的數據類型(a數組 d數據框 l列表),第二個.表示輸出的數據類型(_表示不輸出)
install.packages("plyr") library(plyr) # 按照 Species 拆分數據庫,匯總一下,然后轉換結果 # 到數據框 ddply(iris, .(Species), summarise, mean_petal_length=mean(Petal.Length) ) # Species mean_petal_length #1 setosa 1.462 #2 versicolor 4.260 #3 virginica 5.552 # 按照 Species 拆分數據庫,匯總一下,然后轉換結果 # 到數組 unlist(daply(iris[,4:5], .(Species), colwise(mean))) # setosa.Petal.Width versicolor.Petal.Width virginica.Petal.Width # 0.246 1.326 2.026
4. stringr
我發現R基礎庫的字符串功能使用起來非常困難和麻煩。Hadley Wickham編寫的另一個包, stringr,提供了一些非常需要的字符串運算符。很多函數使用那些做基礎分析時不常用的數據結構。
stringr 非常易于使用。幾乎所有的(和所有的重要功能)都以”str”為前綴,所以很容易記住。
install.packages("stringr") library(stringr) names(iris) #[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species" names(iris) <- str_replace_all(names(iris), "[.]", "_") names(iris) #[1] "Sepal_Length" "Sepal_Width" "Petal_Length" "Petal_Width" "Species" s <- c("Go to Heaven for the climate, Hell for the company.") str_extract_all(s, "[H][a-z]+ ") #[[1]] #[1] "Heaven " "Hell "
5. 數據庫驅動的包
install.packages("RPostgreSQL") install.packages("RMySQL") install.packages("RMongo") install.packages("RODBC") install.packages("RSQLite")
每個人(包括我自己)開始的時候都會這樣做。你剛在***的SQL編輯器中寫了一個很棒的查詢。一切都是***的—列名都是snake case(譯者注:表示單詞之間用下劃線連接。單詞要么全部大寫,要么全部小寫。),日期有正確的數據類型,***調試出了"must appear in the GROUP BY clause or be used in an aggregate function"的問題。你現在準備在R中進行一些分析,因此你可以在SQL編輯器中運行查詢,將結果復制到csv(或者……xlsx)并讀入R,你并不需要這樣做!
R對于幾乎每一個可以想到的數據庫都有好的驅動。當你在偶爾使用不具有獨立驅動程序的數據庫(SQL Server)時,你可以隨時使用RODBC。
library(RPostgreSQL) drv <- dbDriver("PostgreSQL") db <- dbConnect(drv, dbname="ncaa", user="YOUR USER NAME", password="YOUR PASSWORD") q <- "SELECT * FROM game_scores;" data <- dbGetQuery(db, q) head(data) #id school game_date spread school_score opponent opp_score was_home #1 45111 Boston College 1985-11-16 6.0 21 Syracuse 41 False #2 45112 Boston College 1985-11-02 13.5 12 Penn State 16 False #3 45113 Boston College 1985-10-26 -11.0 17 Cincinnati 24 False #4 45114 Boston College 1985-10-12 -2.0 14 Army 45 False #5 45115 Boston College 1985-09-28 5.0 10 Miami 45 True #6 45116 Boston College 1985-09-21 6.5 29 Pittsburgh 22 False nrow(data) #[1] 30932 ncol(data) #[1] 8
下次你完成了***的查詢后,只需要粘貼到R里面,即可使用 RPostgreSQL, RMySQL,RMongo, SQLite, 或 RODBC執行。不僅可以避免生成數以百計的CSV文件,在R中運行查詢還可以節省I/O和轉換數據類型的時間。日期,時間等會自動設置為R中的等價表示。它還使你的R腳本可重復,因此你或你團隊中的其他人可以輕松獲得相同的結果。
6. lubridate
在R中處理日期我從來沒有幸運過。我從來沒有完全掌握用POSIXs和R內建日期類型合作的方法。請用 lubridate。
lubridate 是那些似乎完全按照你期望的神包之一。這些函數都有易懂的名字如 year,month, ymd, 和 ymd_hms。對于熟悉javascript的人來說,它類似于Moment.js 。
install.packages("lubridate") library(lubridate) year("2012-12-12") #[1] 2012 day("2012-12-12") #[1] 12 ymd("2012-12-12") #1 按照 %Y-%m-%d 的方式解析 #[1] "2012-12-12 UTC"
這是我在一篇文章發現的非常方便的參考卡片。它涵蓋了你處理日期時可能想要做的一切事情。 我還發現了這個日期速查表也可以作為一個方便的參考。
7. ggplot2
另一個Hadley Wickham的包,也許是他最知名的一個。 ggplot2在每個人“喜愛的R包”的列表中排名很高。 它很容易使用,并且產生一些很好看的圖像。 這是介紹你的工作的好方法,有很多資源可以幫助你開始使用。
ggplot2:數據分析與圖形藝術 by Hadley Wickham (Amazon)
從Excel到ggplot的羅塞塔石碑 (Yaksis Blog)
Hadley Wickham在Google的ggplot2演講 (youtube)
R數據可視化手冊 by Winston Chang (Amazon)
8. qcc
install.packages("qcc") library(qcc) # 均值為10的序列,加上白噪聲 x <- rep(10, 100) + rnorm(100) # 測試序列,均值為11 new.x <- rep(11, 15) + rnorm(15) # qcc 會標記出新的點 qcc(x, newdata=new.x, type="xbar.one")
qcc 是用于 統計質量控制的庫。 早在上世紀五十年代,現已不復存在的西方電氣公司正在尋找一種更好檢測電話線和電線問題的方法。他們提出了一系列 規則 來幫助識別有問題的線。規則觀察一系列數據點的歷史平均值,并且基于標準差的偏差,該規則有助于判斷一組新的點是否經歷均值漂移。
典型的例子是監控生產 螺母的機器。假設機器應該生產2.5英寸長的螺母。我們測量一系列的螺母: 2.48, 2.47, 2.51, 2.52, 2.54, 2.42, 2.52, 2.58, 2.51。機器出故障了嗎?很難說,但上述規則可以幫助描述。
雖然你可能不會監控電話線,qcc可幫你監控你網站的交易量,數據庫的訪問者或者登錄名,以及其他許多流程。
9. reshape2
我經常發現,任何分析中最難的部分是把數據轉化成正確的格式。 reshape2 正是Hadley Wickham的另一個軟件包,專門用于 “寬”數據表 和“窄”數據表 的轉換。我一般會和ggplot2 及 plyr一起使用它。
install.packages("reshape2") library(reshape2) # 為每一行生成唯一的ID; 這樣我們可以稍后轉回到寬格式 iris$id <- 1:nrow(iris) iris.lng <- melt(iris, id=c("id", "Species")) head(iris.lng) # id Species variable value #1 1 setosa Sepal.Length 5.1 #2 2 setosa Sepal.Length 4.9 #3 3 setosa Sepal.Length 4.7 #4 4 setosa Sepal.Length 4.6 #5 5 setosa Sepal.Length 5.0 #6 6 setosa Sepal.Length 5.4 iris.wide <- dcast(iris.lng, id + Species ~ variable) head(iris.wide) # id Species Sepal.Length Sepal.Width Petal.Length Petal.Width #1 1 setosa 5.1 3.5 1.4 0.2 #2 2 setosa 4.9 3.0 1.4 0.2 #3 3 setosa 4.7 3.2 1.3 0.2 #4 4 setosa 4.6 3.1 1.5 0.2 #5 5 setosa 5.0 3.6 1.4 0.2 #6 6 setosa 5.4 3.9 1.7 0.4 library(ggplot2) # 為數據集中每個數值列繪制直方圖 p <- ggplot(aes(x=value, fill=Species), data=iris.lng) p + geom_histogram() + facet_wrap(~variable, scales="free")
這是一個快速查看數據集并且獲得轉接的方法。你可以使用 melt 函數將寬數據轉換為窄數據, 使用 dcast 將窄數據轉換為寬數據。
10. randomForest
如果這個列表不包括至少一個能你的朋友震驚的機器學習包就不會完整。隨機森林 是一個很好的算法。它很容易使用,可以進行監督學習或者無監督學習,它可以與許多不同類型的數據集一起使用,但最重要的是它的高效率!這是它在R中的使用方法。
install.packages("randomForest") library(randomForest) # 下載泰坦尼克號幸存者數據集 data <- read.table("http://math.ucdenver.edu/RTutorial/titanic.txt", h=T, sep="\t") # 將Survived列轉為yes/no因子 data$Survived <- as.factor(ifelse(data$Survived==1, "yes", "no")) # 拆分為訓練集和測試集 idx <- runif(nrow(data)) <= .75 data.train <- data[idx,] data.test <- data[-idx,] # 訓練一個隨機森林 rf <- randomForest(Survived ~ PClass + Age + Sex, data=data.train, importance=TRUE, na.action=na.omit) # 模型中每個變量的重要程度 imp <- importance(rf) o <- order(imp[,3], decreasing=T) imp[o,] # no yes MeanDecreaseAccuracy MeanDecreaseGini #Sex 51.49855 53.30255 55.13458 63.46861 #PClass 25.48715 24.12522 28.43298 22.31789 #Age 20.08571 14.07954 24.64607 19.57423 # 混淆矩陣 [[真反例, 假正例], [假反例, 正正例]] table(data.test$Survived, predict(rf, data.test), dnn=list("actual", "predicted")) # predicted #actual no yes # no 427 16 # yes 117 195
以上就是10個令人相見恨晚的R語言包分別是哪些,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。