目次 #contents ---- &color(black){論文引用・書籍等に引用する場合の著作権についての連絡>>[[okinawa]]};~ ~ *目的 [#c74284a1] R言語とデータベースとの連携についての情報の集積。(データベースごとに分類)~ 参考:[[Rとインターフェースのあるアプリ]] *COLOR(blue){SIZE(20){利用するパッケージ}} [#q1b9efb5] [sqldf]~ [SQLiteDF]~ [RODBC]~ マイクロソフトが提唱したODBCを用いてRからDBへの接続を行うパッケージ。接続のためには、ODBCドライバとデータソース(DSN)の設定が別途必要になるが、ODBCに対応しているDBが多数あるため利用しやすい~ [RJDBC]~ [DBI]~ [RSQLite]~ [ROracle]~ [RMySQL]~ [RPgSQL]~ [R(D)COM]~ *[[SQL: Data munging with SQL and R (Josh Reich):http://blog.revolutionanalytics.com/2010/01/the-r-rosetta-stone.html]] SQL と R の比較 [#o2b01a04] *コメント欄 [#ne4dfd4e] #comment(below) - SAS server 追加 -- [[okinawa]] &new{2009-09-16 (水) 08:31:16}; - ようやくCache'とRODBCを直接つなぐことができました。 -- [[okinawa]] &new{2009-09-15 (火) 14:52:44}; - [[Cache'とR]]公開 -- [[okinawa]] &new{2007-12-24 (月) 10:16:21}; - rcomを使ってRからCache'へダイレクト接続することに成功した。そのうちパッケージを作ってみようかな。 -- [[okinawa]] &new{2007-10-13 (土) 16:24:48}; - sqldfでのDBの永続化のことですが、こまめにsave.image()すれば可能なような気がしてきました。SQLを実行するたびにsave.imageすればとりあえずRのみで永続化できますね。 -- [[okinawa]] &new{2007-08-15 (水) 16:34:26}; - RJDBCの資料が少ない。情報求む!また、DBの種類も増やしたいので、載ってないDBとRとの連携の情報があれば投稿お願いします。 -- [[okinawa]] &new{2007-07-25 (水) 15:28:44}; *データベース(及びデータベースに類するもの) [#c60a5434] **Rデータフレーム [#ld99e35d] [解説]~ R言語のデータ構造のひとつ。Rのコマンドを使って操作を行う。~ [sqldf]~ sqldfパッケージを利用して、Rデータフレームに対してSQL文を発行できる。(selectのみ?)Rのデータフレームをデータベースのテーブルとして利用する。~ (たぶん)メモリ上でSQLクエリが実行されるので、スピードは速いと思われるが、データフレームの永続化の問題があるので、キャッシュ的に使うのがいいかも。~ http://cran.md.tsukuba.ac.jp/src/contrib/Descriptions/sqldf.html~ [リサーチ]~ データフレームを含むRObjectを拡張するパッケージが存在する。R.huge,R.cache~ - データフレーム操作の実例:[[Rで学ぶデータマイニング I:http://www.amazon.co.jp/dp/4861671760]] データ・ハンドリング - sqldfの実例:[[Rで学ぶデータマイニング II:http://www.amazon.co.jp/exec/obidos/ASIN/4861671981/]] SQL超入門 **SQLite [#wf4d0840] [解説]~ 組込用のRDBMS。SQL92のサブセットをサポートするCライブラリ。OracleやPostgreSQL、 MySQLのようにサーバ・クライアント構成ではなく、Microsoft Accessのようなファイルを直接読み書きするタイプでサーバを必要としない。~ http://www.sqlite.org/~ [SQLiteDF]~ Rから透過的にSQLiteを利用できる。sdfという中間オブジェクトを利用して、RデータフレームとSQLiteデータベースのやりとりを行う。SQLiteDFではSQL文は使えないので注意。Select=sdfSelect(),insert=rbindSdf(),Update&Deleteは見当たらない。sqldfと組み合わせて使う?~ http://cran.md.tsukuba.ac.jp/src/contrib/Descriptions/SQLiteDF.html~ [RSQLite]~ DBIパッケージを用いてSQLiteに直接つなげることができる。SQL文を用いた一通りの操作が可能。~ http://cran.md.tsukuba.ac.jp/src/contrib/Descriptions/RSQLite.html~ [ツール]~ SQLite Database Browser:http://sourceforge.net/projects/sqlitebrowser/ GUIでSQLiteの操作が可能。~ [リサーチ]~ SQLiteは(ひそかに)アプリケーションに組込まれている。特にMacOSXの標準アプリに多数利用されている。MailやSpotlightはSQLiteを利用して構築されている。また、GoogleGearsでも利用されているため、GoogleGearsで作成したDBとRを連携させることが可能になると思われる。また、Adobe AIRにも搭載される予定。~ - RSQLiteの実例:[[Rで学ぶデータマイニング II:http://www.amazon.co.jp/exec/obidos/ASIN/4861671981/]] SQL超入門 **Cache' (キャシエ) [#y04d99f2] [解説]~ Cache'はポストリレーショナルデータベースを自称する、マルチプラットホームのオブジェクトデータベース。古くはM言語(MUMPS)に起源を持つが、一般的なRDBとは異なったデータ管理方式にて発展してきたDBであり、高速性・Javaとの親和性が売り。データベースのコアはスパース配列にて管理されており、データ配置はB-TREE方式などRDBとは根本的に異なり、どちらかというとOLAP用DBの構造に近い。ODBC/SQLが実装されている。標準プログラム言語は、Cashe'ObjectScriptでM言語の文法を継承している。他にCashe'BasicというVBScriptコンパチの言語も持っている。~ http://www.intersystems.co.jp/index.html~ [RODBC]~ RODBCからCache'に対して直接クエリをかけるためには以下のパラメータで接続すること~ channel<-odbcConnect(dsn,believeNRows = FALSE) これでAccessのトリックが必要なくなった!~ ///20070725現在、RODBCからCache'に対して直接クエリをかけることができない。(テーブルリストの取得がうまくできないため)Accessのmdb経由であればうまく作動する。(RODBCでDBに上手く接続できない場合のトリック参照)~ [リサーチ]~ Cache'内のActivateウイザードを利用することにより、R(D)COMをCache'のクラスに変換できるため、Cache'からRを直接操作することができる。(WINのみ)~ [[Cache'とR]]で rcomを使ってRからダイレクトにCache'を操作する方法を公開しています。~ **SAS server [#tf39aa37] [RODBC]~ SAS's 9.1 ODBC driverでRODBCからSAS serverに対して直接クエリをかけるためには以下のパラメータで接続すること~ channel<-odbcConnect(dsn,believeNRows = FALSE) **Microsoft Access [#cd3c4d04] [解説]~ マイクロソフトが、Microsoft Windows向けに販売しているリレーショナルデータベース。データはmdbという単一のファイルに格納される。大規模なDB開発には向かない。Access2007では新しいファイル形式に変更されている。~ [RODBC]~ **FileMakerPro [#kf2ee399] [解説]~ ファイルメーカー社が開発しているデータベース。当初はカード型であったが、バージョンアップ毎に様々な機能を追加し、現在ではODBC/SQLにも対応している。大規模なDB開発には向かないが、データベースと画面の作成が非常に簡単に行えるため根強い人気がある。~ [RODBC]~ **MySQL [#c51b41b8] [解説]~ 有名なマルチプラットフォーム・オープンソース・データベース。 他のフリーRDBMSと比較して高速性に定評があり、特に更新よりも参照の頻度の高いWebアプリケーションに向く。~ [RODBC]~ [RMySQL]~ [リンク]~ [[RMySQL]]~ **PostgreSQL [#e0ec79d4] [解説]~ BSDライセンスにより配布されているフリーのデータベース。その名称は Ingres の後継を意味する「Post-Ingres」に由来している。また、PostGIS(GIS用)やPL/R(R言語の呼び出し)といった特別な仕組みも持つ。大規模なDB開発向き。~ [RODBC]~ [RPgSQL]~ [リンク]~ [[R と PostgreSQL]]~ [[RとPostGIS]]~ **Microsoft SQLServer [#u4589ad8] [解説]~ もともとはUNIX上で稼動していたSybaseの製品で、WindowsOSに移植されたデータベース。Sybaseとの提携解消後、マイクロソフト独自にバージョンアップを行うようになり、現在に至っている。大規模なDB開発向き。Windowsでしか動かないのが辛い。~ [RODBC]~ **Oracle [#y504dd97] [解説]~ 言わずと知れたデータベース界の雄、米国Oracle社が開発・販売しているリレーショナルデータベース。Oracleは世界初の商用RDBMSであり、メインフレームからパーソナルコンピュータまで、幅広いプラットフォームをサポートしている。大規模なDB開発向き。メインフレーム優位の時代をUNIX&Oracleで切り開いてきたが、最近は殿様商売が過ぎるんじゃないかい?~ [RODBC]~ [ROracle]~ **Microsoft Excel [#c09e05f8] [解説]~ マイクロソフトがWindows及びMac OS向けに販売している表計算(スプレッドシート)ソフト。(つまり、データベースではない。)Excelは当初MacOS用に開発され、その後WindowsOS上に移植された。表形式の操作性の良さが定評であるが、統計学者からは計算精度の低さから嫌われる向きもある。~ [RODBC] **OpenOffice.org Base(HSQLDB) [#efec4f7f] **LibreOffice Base(HSQLDB) [#efec4f7f] [解説]~ OpenOffice.org 2.* Baseは、Javaで作成されたHSQLDBをコアにしたリレーショナルデータベース。一般的に作られるサイズは小さくなる特徴がある。画面構成は、比較的Microsoft Accessと似ている。大規模なDB開発には向かない。~ LibreOffice Baseは、Javaで作成されたHSQLDBをコアにしたリレーショナルデータベース。一般的に作られるサイズは小さくなる特徴がある。画面構成は、比較的Microsoft Accessと似ている。大規模なDB開発には向かない。~ [RJDBC]?未確認~ **H2 [#pc8a85ad] -RH2: DBI/RJDBC interface to H2 Database *Amazon [#g4208b20] **[[RAmazonS3:http://www.omegahat.org/RAmazonS3/]] S3 アマゾンストレッジサーバー用インターフェース [#pc2592ab] **[[RAmazonDBREST:http://www.omegahat.org/RAmazonDBREST/]] Amazon's Simple DB API 用 REST インターフェース [#acc4cf69] *NoSQL [#d2b5f0da] [[R と NoSQL]] [#i19f7a7d] *RODBCでDBに上手く接続できない場合のトリック [#ld1dda8c] Cache'の項にも書いたのだが、RODBCでうまく接続できないDBも存在する。~ その時に用いる回避策として、Microsoft Accessのmdbを介して接続する方法がある。~ R => mdb => Cache' という接続形態である。 設定は、~ (1)AccessでCache'対して、テーブルのリンクを張る。(AccessにSQLserverのテーブルのリンクを張る方法と同じ)~ (2)作成されたmdbに対して、RからODBCの設定を行う。~ (3)RODBCからmdbへ接続すると、リンクされたCach醇Pのテーブルも見える。~ (4)SQL文を発行すると、Cache'のテーブルの中身がきちんと表示される。~ (5)RのdataframeをSQLsaveすると、mdbにテーブルが作られる。~ この方法の利点は~ DBならば、一般にAccessからの接続を考慮して作られているので、RODBCとODBCドライバの相性の善し悪しに左右されないこと、DBサーバーに直接接続しないため間違ってdataframeをDBサーバーに保存してしまうことが防げること。セキュリティの設定がmdbでできることや、複数のDBを利用する場合mdb側でリンクを吸収することで、Rのコードが複雑になることを防げたりする。~ 欠点として、mdb経由なので大規模なデータのやり取りに不安があること。基本的にAccessが必要なこと(つまりWindowsでしか使えない方法であること)がある。~ (注)あくまでも、RODBCでうまく接続できない場合の代替え案として考えてください。~ *アクセス数: [#m25cab31] &counter; 人 *参考リンク [#ve6c8aa6] -[[Which RDMS or NOSQL database do you use for R? MySQL, Cassandra, HBase, MongoDB, Oracle, PostgreSQL, CouchDB, SQLite?:http://quantlabs.net/r-blog/2012/06/which-rdms-or-nosql-database-do-you-use-for-r-mysql-cassandra-hbase-mongodb-oracle-postgresql-couchdb-sqlite/]]