Your SlideShare is downloading. ×
Tokyo r sqldf
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Tokyo r sqldf

3,812
views

Published on


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

No Downloads
Views
Total Views
3,812
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
36
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. R を SQL で操るRDB をつかってる人でも R がとっつきやすくなる。 簑田 高志
  • 2. 目次1 .自己紹介2. Sqldf パッケージの紹介3.ちょっと応用…03/05/11 2
  • 3. 自己紹介 ● ● Twitter aad34210 ● http://pracmper.blogspot.com/ ● ● ● Web ● ●03/05/11 3
  • 4. 質問 まずは…ちょっとみなさんに質問。03/05/11 4
  • 5. 質問 まずは…ちょっとみなさんに質問。 ・ R を使ったことがある人03/05/11 5
  • 6. 質問 まずは…ちょっとみなさんに質問。 ・ R を使ったことがある人  ・ RDB を SQL を使って操作したこ とがある人03/05/11 6
  • 7. 質問 まずは…ちょっとみなさんに質問。 ・ R を使ったことがある人  ・ RDB を SQL を使って操作したこ   とがある人  ・ R で集計作業がめんどくさい!    ( ・ д ・ ) チッ   って思ったことことがある人03/05/11 7
  • 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. Sqldf パッケージ ● R を使ってて ● 集計がめんどくさい ( ・ д ・ ) チッ ● SQL を使ったことがある方。 そんなあなたに今日は sqldf パッケージ を紹介します。03/05/11 9
  • 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. 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. 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. 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. 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. 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. 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. まとめ1.R sqldf SQL2. sqldf(“[SQL]”) R3. Function paste SQL sqldf4. R …03/05/11 17
  • 18. m(__)m03/05/11 18