成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

10個令人相見恨晚的R語言包

大數據
R語言學習曲線中最陡峭的一部分就是語法,我花了一段時間才習慣使用<-代替=。我聽到很多人問如何實現VLOOKUP?!?R 對于一般的數據粗加工任務非常有用,但需要一段時間才能掌握。可以認為sqldf是我的R”輔助輪子”。

[[192743]]

大約3年前我開始使用R,起初進展很慢,與我習慣的語言相比,語法更加直觀也比較簡單,而且需要一段時間才能習慣于細微的差別。我還不清楚語言的力量與社區和各種包的密切關系。

和其他語言(比如Python和Java)相比,R可以更模糊和麻煩。好消息是,有大量的包可以在R基礎庫上提供簡單和熟悉的界面。這篇文章是我喜歡和每天使用的10個包,并且我希望自己能早些知道他們。

1. sqldf

R語言學習曲線中最陡峭的一部分就是語法,我花了一段時間才習慣使用<-代替=。我聽到很多人問如何實現VLOOKUP?!?R 對于一般的數據粗加工任務非常有用,但需要一段時間才能掌握。可以認為sqldf是我的R”輔助輪子”。

sqldf讓你在R數據框上執行SQL查詢。來自SAS的人會發現它非常熟悉,任何具有基本SQL技能的人都可以輕松的使用它—sqldf使用SQLite語法。

  1. install.packages("sqldf"
  2. library(sqldf) 
  3.  
  4. sqldf("SELECT 
  5.         day 
  6.         , avg(tempas avg_temp 
  7.       FROM beaver2 
  8.       GROUP BY 
  9.         day;") 
  10.  
  11. #   day avg_temp 
  12. #1 307 37.57931 
  13. #2 308 37.71308 
  14.  
  15. #beavers1 和 beavers2 是R base 自帶的兩個數據集,記錄了兩種海貍的體溫序列 
  16.  
  17. beavers <- sqldf("select * from beaver1 
  18.                   union all 
  19.                   select * from beaver2;") 
  20. #head(beavers) 
  21. #  day time  temp activ 
  22. #1 346  840 36.33     0 
  23. #2 346  850 36.34     0 
  24. #3 346  900 36.35     0 
  25. #4 346  910 36.42     0 
  26. #5 346  920 36.55     0 
  27. #6 346  930 36.69     0 
  28.  
  29. movies <- data.frame( 
  30.   title=c("The Great Outdoors""Caddyshack""Fletch""Days of Thunder""Crazy Heart"), 
  31.   year=c(1988, 1980, 1985, 1990, 2009) 
  32.   ) 
  33. boxoffice <- data.frame( 
  34.   title=c("The Great Outdoors""Caddyshack""Fletch""Days of Thunder","Top Gun"), 
  35.   revenue=c(43455230, 39846344, 59600000, 157920733, 353816701) 
  36.   ) 
  37.  
  38. sqldf("SELECT 
  39.         m.* 
  40.         , b.revenue 
  41.       FROM 
  42.         movies m 
  43.       INNER JOIN 
  44.         boxoffice b 
  45.           ON m.title = b.title;") 
  46.  
  47. #               title year   revenue 
  48. #1 The Great Outdoors 1988  43455230 
  49. #2         Caddyshack 1980  39846344 
  50. #3             Fletch 1985  59600000 
  51. #4    Days of Thunder 1990 157920733 

如果你喜歡sqldf,可以使用pandasql包來查詢pandas中的DataFrame,通過SQL。

2. forecast

我不經常做時間序列分析,但是當我做的時候forecast包是我的選擇。forecast對ARIMA,ARMA,AR,指數平滑等時間序列模型的預測簡單的令人難以置信。

  1. install.packages("forecast"
  2. library(forecast) 
  3.  
  4. # mdeaths: 英國每月死于肺病的人數 
  5. fit <- auto.arima(mdeaths) 
  6. #定制你的置信區間 
  7. forecast(fit, level=c(80, 95, 99), h=3) 
  8. #         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95    Lo 99    Hi 99 
  9. #Jan 1980       1822.863 1564.192 2081.534 1427.259 2218.467 1302.952 2342.774 
  10. #Feb 1980       1923.190 1635.530 2210.851 1483.251 2363.130 1345.012 2501.368 
  11. #Mar 1980       1789.153 1495.048 2083.258 1339.359 2238.947 1198.023 2380.283 
  12.  
  13. 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列表),第二個.表示輸出的數據類型(_表示不輸出)

  1. install.packages("plyr"
  2. library(plyr) 
  3.  
  4. # 按照 Species 拆分數據庫,匯總一下,然后轉換結果 
  5. # 到數據框 
  6. ddply(iris, .(Species), summarise, 
  7.       mean_petal_length=mean(Petal.Length) 
  8. #     Species mean_petal_length 
  9. #1     setosa             1.462 
  10. #2 versicolor             4.260 
  11. #3  virginica             5.552 
  12.  
  13. # 按照 Species 拆分數據庫,匯總一下,然后轉換結果 
  14. # 到數組 
  15. unlist(daply(iris[,4:5], .(Species), colwise(mean))) 
  16. #    setosa.Petal.Width versicolor.Petal.Width  virginica.Petal.Width 
  17. #                 0.246                  1.326                  2.026 

4. stringr

我發現R基礎庫的字符串功能使用起來非常困難和麻煩。Hadley Wickham編寫的另一個包, stringr,提供了一些非常需要的字符串運算符。很多函數使用那些做基礎分析時不常用的數據結構。

stringr 非常易于使用。幾乎所有的(和所有的重要功能)都以”str”為前綴,所以很容易記住。

  1. install.packages("stringr"
  2. library(stringr) 
  3.  
  4. names(iris) 
  5. #[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species" 
  6. names(iris) <- str_replace_all(names(iris), "[.]""_"
  7. names(iris) 
  8. #[1] "Sepal_Length" "Sepal_Width"  "Petal_Length" "Petal_Width"  "Species" 
  9.  
  10. s <- c("Go to Heaven for the climate, Hell for the company."
  11. str_extract_all(s, "[H][a-z]+ "
  12. #[[1]] 
  13. #[1] "Heaven " "Hell " 

5. 數據庫驅動的包

  1. install.packages("RPostgreSQL"
  2. install.packages("RMySQL"
  3. install.packages("RMongo"
  4. install.packages("RODBC"
  5. 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。

  1. library(RPostgreSQL) 
  2.  
  3. drv <- dbDriver("PostgreSQL"
  4. db <- dbConnect(drv, dbname="ncaa"
  5.                  user="YOUR USER NAME"password="YOUR PASSWORD"
  6.  
  7. q <- "SELECT 
  8.         * 
  9.       FROM 
  10.         game_scores;" 
  11.  
  12. data <- dbGetQuery(db, q) 
  13. head(data) 
  14. #id         school  game_date spread school_score   opponent opp_score was_home 
  15. #1 45111 Boston College 1985-11-16    6.0           21   Syracuse        41    False 
  16. #2 45112 Boston College 1985-11-02   13.5           12 Penn State        16    False 
  17. #3 45113 Boston College 1985-10-26  -11.0           17 Cincinnati        24    False 
  18. #4 45114 Boston College 1985-10-12   -2.0           14       Army        45    False 
  19. #5 45115 Boston College 1985-09-28    5.0           10      Miami        45     True 
  20. #6 45116 Boston College 1985-09-21    6.5           29 Pittsburgh        22    False 
  21. nrow(data) 
  22. #[1] 30932 
  23. ncol(data) 
  24. #[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 。

  1. install.packages("lubridate"
  2. library(lubridate) 
  3.  
  4. year("2012-12-12"
  5. #[1] 2012 
  6. day("2012-12-12"
  7. #[1] 12 
  8. ymd("2012-12-12"
  9. #1 按照 %Y-%m-%d 的方式解析 
  10. #[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

  1. install.packages("qcc"
  2. library(qcc) 
  3.  
  4. # 均值為10的序列,加上白噪聲 
  5. x <- rep(10, 100) + rnorm(100) 
  6. # 測試序列,均值為11 
  7. new.x <- rep(11, 15) + rnorm(15) 
  8. # qcc 會標記出新的點 
  9. 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一起使用它。

  1. install.packages("reshape2"
  2. library(reshape2) 
  3.  
  4. # 為每一行生成唯一的ID; 這樣我們可以稍后轉回到寬格式 
  5. iris$id <- 1:nrow(iris) 
  6.  
  7. iris.lng <- melt(iris, id=c("id""Species")) 
  8. head(iris.lng) 
  9. #  id Species     variable value 
  10. #1  1  setosa Sepal.Length   5.1 
  11. #2  2  setosa Sepal.Length   4.9 
  12. #3  3  setosa Sepal.Length   4.7 
  13. #4  4  setosa Sepal.Length   4.6 
  14. #5  5  setosa Sepal.Length   5.0 
  15. #6  6  setosa Sepal.Length   5.4 
  16.  
  17. iris.wide <- dcast(iris.lng, id + Species ~ variable) 
  18. head(iris.wide) 
  19. #  id Species Sepal.Length Sepal.Width Petal.Length Petal.Width 
  20. #1  1  setosa          5.1         3.5          1.4         0.2 
  21. #2  2  setosa          4.9         3.0          1.4         0.2 
  22. #3  3  setosa          4.7         3.2          1.3         0.2 
  23. #4  4  setosa          4.6         3.1          1.5         0.2 
  24. #5  5  setosa          5.0         3.6          1.4         0.2 
  25. #6  6  setosa          5.4         3.9          1.7         0.4 
  26.  
  27. library(ggplot2) 
  28.  
  29. # 為數據集中每個數值列繪制直方圖 
  30. p <- ggplot(aes(x=value, fill=Species), data=iris.lng) 
  31. p + geom_histogram() + 
  32.   facet_wrap(~variable, scales="free"

這是一個快速查看數據集并且獲得轉接的方法。你可以使用 melt 函數將寬數據轉換為窄數據, 使用 dcast 將窄數據轉換為寬數據。

10. randomForest

如果這個列表不包括至少一個能你的朋友震驚的機器學習包就不會完整。隨機森林 是一個很好的算法。它很容易使用,可以進行監督學習或者無監督學習,它可以與許多不同類型的數據集一起使用,但最重要的是它的高效率!這是它在R中的使用方法。

  1. install.packages("randomForest"
  2. library(randomForest) 
  3.  
  4. # 下載泰坦尼克號幸存者數據集 
  5. data <- read.table("http://math.ucdenver.edu/RTutorial/titanic.txt", h=T, sep="\t"
  6. # 將Survived列轉為yes/no因子 
  7. data$Survived <- as.factor(ifelse(data$Survived==1, "yes""no"))              
  8.  
  9. # 拆分為訓練集和測試集 
  10. idx <- runif(nrow(data)) <= .75 
  11. data.train <- data[idx,] 
  12. data.test <- data[-idx,] 
  13.  
  14. # 訓練一個隨機森林 
  15. rf <- randomForest(Survived ~ PClass + Age + Sex, 
  16.              data=data.train, importance=TRUE, na.action=na.omit) 
  17.  
  18. # 模型中每個變量的重要程度 
  19. imp <- importance(rf) 
  20. o <- order(imp[,3], decreasing=T) 
  21. imp[o,] 
  22. #             no      yes MeanDecreaseAccuracy MeanDecreaseGini 
  23. #Sex    51.49855 53.30255             55.13458         63.46861 
  24. #PClass 25.48715 24.12522             28.43298         22.31789 
  25. #Age    20.08571 14.07954             24.64607         19.57423 
  26.  
  27. # 混淆矩陣 [[真反例, 假正例], [假反例, 正正例]] 
  28. table(data.test$Survived, predict(rf, data.test), dnn=list("actual""predicted")) 
  29. #      predicted 
  30. #actual  no yes 
  31. #   no  427  16 
  32. #   yes 117 195 
責任編輯:武曉燕 來源: 36大數據
相關推薦

2015-10-27 10:12:21

r語言命令相見恨晚

2021-04-14 09:22:18

Python技巧交換變量值

2021-09-28 14:40:03

Python內置庫itertools

2024-08-22 08:57:32

Python技巧參數

2024-01-29 00:51:39

前端開發利器

2021-08-19 15:02:32

科技軟件電腦

2020-05-06 09:18:56

Pandas函數大數據技術

2025-03-24 01:00:00

2024-08-20 14:25:20

2024-09-05 16:02:52

Python數據類型字符串

2019-02-12 11:22:29

Linux 系統 命令

2020-04-01 14:16:05

Pandastips數據分析

2019-08-29 09:10:11

Linux命令編程語言

2021-04-07 15:55:35

微信朋友圈技巧

2019-12-02 10:16:45

Linux 開源操作系統

2021-08-20 15:43:54

iPhone手機iOS

2018-01-25 14:53:20

iPhone技巧刪除照片

2019-08-09 14:13:22

Python知乎程序員

2021-04-20 10:47:59

手機APP科技

2009-02-20 13:12:23

unixSolaris初學者
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产色婷婷 | 精品国产乱码久久久久久牛牛 | 国产精品久久久久国产a级 欧美日韩国产免费 | 黄色a三级 | 亚洲午夜av久久乱码 | 亚洲网站在线观看 | 欧美日韩视频一区二区 | 国产目拍亚洲精品99久久精品 | 精彩视频一区二区三区 | 夜夜草av| 欧美精品综合在线 | 免费毛片在线 | 亚洲一区二区在线视频 | 日韩午夜影院 | 亚洲欧美日韩精品久久亚洲区 | 91激情视频| 久久久精| 久久久免费 | 成人在线 | 国产999精品久久久影片官网 | 欧美在线成人影院 | 一区二区三区国产精品 | 久久里面有精品 | 福利电影在线 | 亚洲a在线观看 | 欧美一级二级视频 | 国产精品高清一区二区三区 | 男女在线网站 | 人人人艹 | 国产午夜精品一区二区三区四区 | 亚洲第1页| 国产欧美一区二区精品久导航 | 国产一二区免费视频 | 国产xxxx搡xxxxx搡麻豆 | 国产高清一区二区三区 | 午夜电影福利 | 欧美男人天堂 | 国产在线精品一区 | 欧美精品在线一区二区三区 | 欧美区在线 | 鲁大师一区影视 |