R を SQL で操るRDB をつかってる人でも R がとっつきやすくなる。                              簑田 高志
目次1 .自己紹介2. Sqldf パッケージの紹介3.ちょっと応用…03/05/11            2
自己紹介 ● ●   Twitter       aad34210 ●                 http://pracmper.blogspot.com/ ● ● ●                                   ...
質問   まずは…ちょっとみなさんに質問。03/05/11               4
質問   まずは…ちょっとみなさんに質問。    ・ R を使ったことがある人03/05/11               5
質問   まずは…ちょっとみなさんに質問。    ・ R を使ったことがある人    ・ RDB を SQL を使って操作したこ   とがある人03/05/11                    6
質問   まずは…ちょっとみなさんに質問。    ・ R を使ったことがある人    ・ RDB を SQL を使って操作したこ     とがある人    ・ R で集計作業がめんどくさい!      ( ・ д ・ ) チッ     って思っ...
sqldf パッケージ   R で集計作業するときには…     head(diamonds)       carat        cut color clarity depth table price    x    y    z     ...
Sqldf パッケージ     ●      R を使ってて     ●      集計がめんどくさい ( ・ д ・ ) チッ     ●      SQL を使ったことがある方。     そんなあなたに今日は     sqldf   パッケ...
sqldf パッケージ sqldf sqldf is an R package for runing SQL statements on R data frames, optimized for convenience. The user si...
sqldf パッケージ   #sqldf   install.packages("sqldf")   library(sqldf)    sqldf(”          SQL         ”    #    #iris      sql...
sqldf パッケージ    #    #           .        iris2 <- iris        colnames(iris2) <- c("Sepal_Length" , "Sepal_Width" , "Petal...
sqldf パッケージ    #    #Petal.Length    #            WHERE    >sqldf("SELECT   * FROM iris2 WHERE Petal_Length >= (select avg...
sqldf パッケージ    #    #    #Species    var <- "setosa"    sql_head <- "SELECT * FROM iris2 WHERE Species = "    sql_str <- p...
sqldf パッケージ    #    #    #R                  sqldf    # R Code    R_Code <- function(){         price_sum <- aggregate(dia...
sqldf パッケージ    #      #R aggregate ,merge      system.time(R_Code())         user system elapsed        0.468   0.041   0....
まとめ1.R                                  sqldf            SQL2.     sqldf(“[SQL]”)                 R3.                Funct...
m(__)m03/05/11       18
Upcoming SlideShare
Loading in...5
×

Tokyo r sqldf

4,012

Published on

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,012
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
39
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Tokyo r sqldf

  1. 1. R を SQL で操るRDB をつかってる人でも R がとっつきやすくなる。 簑田 高志
  2. 2. 目次1 .自己紹介2. Sqldf パッケージの紹介3.ちょっと応用…03/05/11 2
  3. 3. 自己紹介 ● ● Twitter aad34210 ● http://pracmper.blogspot.com/ ● ● ● Web ● ●03/05/11 3
  4. 4. 質問 まずは…ちょっとみなさんに質問。03/05/11 4
  5. 5. 質問 まずは…ちょっとみなさんに質問。 ・ R を使ったことがある人03/05/11 5
  6. 6. 質問 まずは…ちょっとみなさんに質問。 ・ R を使ったことがある人  ・ RDB を SQL を使って操作したこ とがある人03/05/11 6
  7. 7. 質問 まずは…ちょっとみなさんに質問。 ・ R を使ったことがある人  ・ RDB を SQL を使って操作したこ   とがある人  ・ R で集計作業がめんどくさい!    ( ・ д ・ ) チッ   って思ったことことがある人03/05/11 7
  8. 8. sqldf パッケージ R で集計作業するときには… head(diamonds) carat cut color clarity depth table price x y z 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 #Price Cut price_sum <- aggregate(diamonds[,c(7)] , list(cut = diamonds$cut) , sum) Cut other_mean <- aggregate(diamonds[,c(5:10)] , list(cut = diamonds$cut) , mean) Merge merge(price_sum , other_mean , by = c("cut")) ( ・ д ・ ) チッ>計算したい関数ごとでコード書かなきゃいけない…               DataFrame を簡単に集計したい。03/05/11 8
  9. 9. Sqldf パッケージ ● R を使ってて ● 集計がめんどくさい ( ・ д ・ ) チッ ● SQL を使ったことがある方。 そんなあなたに今日は sqldf パッケージ を紹介します。03/05/11 9
  10. 10. sqldf パッケージ sqldf sqldf is an R package for runing SQL statements on R data frames, optimized for convenience. The user simply specifies an SQL statement in R using data frame names in place of table names and a database with appropriate table layouts/schema is automatically created, the data frames are automatically loaded into the database, the specified SQL statement is performed, the result is read back into R and the database is deleted all automatically behind the scenes making the databases existence transparent to the user who only specifies the SQL statement. Surprisingly this can at times be even faster than the corresponding pure R calculation (although the purpose of the project is convenience and not speed). http://code.google.com/p/sqldf/ ( sqldf R SQL DB SQL R DB03/05/11 10
  11. 11. sqldf パッケージ #sqldf install.packages("sqldf") library(sqldf) sqldf(” SQL ” # #iris sqldf("SELECT COUNT(*) as iris_count FROM iris") iris_count 1 150 #iris Secies >sqldf("SELECT Species , COUNT(*) as iris_count FROM iris GROUP BY Species") Species iris_count 1 setosa 50 2 versicolor 50 3 virginica 5003/05/11 11
  12. 12. sqldf パッケージ # # . iris2 <- iris colnames(iris2) <- c("Sepal_Length" , "Sepal_Width" , "Petal_Length" ,"Petal_Width" , "Species") head(iris2) #Specis sqldf(" SELECT Species , COUNT(Species) as Species_num, AVG(Sepal_Length) as average_Lentgh, AVG(Sepal_Width) as average_width FROM iris2 GROUP BY Species ") Species Species_num average_Lentgh average_width 1 setosa 50 5.006 3.428 2 versicolor 50 5.936 2.770 3 virginica 50 6.588 2.97403/05/11 12
  13. 13. sqldf パッケージ # #Petal.Length # WHERE >sqldf("SELECT * FROM iris2 WHERE Petal_Length >= (select avg(Petal_Length) from iris2)") Sepal_Length Sepal_Width Petal_Length Petal_Width Species 1 7.0 3.2 4.7 1.4 versicolor 2 6.4 3.2 4.5 1.5 versicolor 3 6.9 3.1 4.9 1.5 versicolor 4 5.5 2.3 4.0 1.3 versicolor 5 6.5 2.8 4.6 1.5 versicolor 6 5.7 2.8 ・ ・ 4.5 1.3 versicolor ・ ・ ・ avg(Petal_Length) =3.758 
03/05/11 13
  14. 14. sqldf パッケージ # # #Species var <- "setosa" sql_head <- "SELECT * FROM iris2 WHERE Species = " sql_str <- paste(sql_head , "", var ,"" , collapse = "" , sep = "") sqldf(sql_str) 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 ・ ・ ・ ・ ・ # Function Sepal_search <- function(var){ sql_head <- "SELECT * FROM iris2 WHERE Species = " sql_str <- paste(sql_head , "", var ,"" , collapse = "" , sep = "") print(sqldf(sql_str)) } # Sepal_search(var = "versicolor")03/05/11 14
  15. 15. sqldf パッケージ # # #R sqldf # R Code R_Code <- function(){ price_sum <- aggregate(diamonds[,c(7)] , list(cut = diamonds$cut) , sum) other_mean <- aggregate(diamonds[,c(5,7:10)] , list(cut = diamonds$cut) , mean) merge(price_sum , other_mean , by = c("cut")) } system.time(R_Code()) # sqldf sql_df_code <- function(){ sqldf(" SELECT cut, SUM(price), avg(depth), avg(price), avg(x), avg(y), avg(z) FROM diamonds GROUP BY cut ") } # system.time(R_Code()) system.time(sql_df_code())03/05/11 15
  16. 16. sqldf パッケージ # #R aggregate ,merge system.time(R_Code()) user system elapsed 0.468 0.041 0.541 #sqldf system.time(sql_df_code()) user system elapsed 0.841 0.036 0.895 ・ R のコードと、 sqldf のコードとでは、 R のコードのほうが早かった! ・コードの書きやすさとスピードのトレードオフですかね…03/05/11 16
  17. 17. まとめ1.R sqldf SQL2. sqldf(“[SQL]”) R3. Function paste SQL sqldf4. R …03/05/11 17
  18. 18. m(__)m03/05/11 18
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×