Rとインターフェースのあるアプリ?

RODBC

いろいろな種類のデータベースに対して、アプリケーションからは共通したプロトコルでアクセスできるようにするための規格としてODBCがあります。RODBCではRからODBCを使うことで、各種のデータベース上に格納されたテーブルをデータフレームに読み込む、データフレームをデータベースに格納するなどのことができます。

使用方法

library(rodbc)

Windows以外の環境でのメモ

ODBCというとWindowsだけのもののように思えますが、データベースを抽象化して交換が可能にすること自体はどのOSでも有用なアプローチなので、LinuxやMacOS Xなどのunix系OSでも利用されることがあります。MacOS X では標準でiODBCというODBCドライバマネージャがインストールされるので、あとはiODBC用の各種データベース向けドライバをインストールすれば、RODBCが利用可能となります。

*MacOSX10.4.8現在:ODBCアドミニストレータという名称になっており、マネージャのインストールは不要。(しかし、ODBC Driver は何にも入っていませんので、ネットから見つけてくるしかありません)

MacOSX10.6(Snow Leopard) ではODBCアドミニストレータが標準で用意されていないため、Appleのサポートページからダウンロードしてくる必要があります。

Windows + MySQL(5.0) + RODBC + MyODBC(3.51) のチューンアップ

デフォルトでは遅いのでチューンアップをしましょう。 GUIのMySQL Administratorで設定してもよいし、MySql?のディレクトリにあるmy.iniを直接変更しても大丈夫。

GUIの場合:"Startup Variables"を開いて、

1. InnoDB ParametersのFlush Log at: で、選択肢が3つありますが真ん中以外に変更します。下のほうがちょっと早いようです。正直、これが一番パフォーマンスに影響すると思います(thanks to なかまさん)。

2. General ParametersのKey Bufferをでっかくします(適当に)。少し早くなりました。

3. Advanced NetworkingのMax Packet Sizeをでっかくします。少し早くなりました。

4. AdvancedのJoin file sizeをでっかくします。ほんの少し早くなりました。

ローカルでのみつかう場合(TCP/IPではなく名前付きパイプの利用)

5. General ParametersのEnable Named Pipeのチェックをオンにします。

名前付きパイプを使う場合、MyODBCの"Server"は"."にします(ピリオドひとつ)。 MyODBC 5.0では名前付きパイプがなぜか上手くいきませんでした。

## 以下のデータで
> dim(d)
[1] 8640   22
channel <- odbcConnect("R3", uid="R", case="tolower")
#sqlQuery(channel,"USE rdata")
sqlSave(channel, d)
sqlDrop(channel, "d")
close(channel)
}
print(r<-system.time(f()))
## これを実行しました。


## デフォルト
[1]   2.66   0.70 375.40     NA     NA

## 1-4まで変更
[1] 1.18 0.15 3.91   NA   NA

## 1-4+5,6でNamed Pipeを使用
[1] 1.08 0.05 2.95   NA   NA

大げさにではなく、100倍速くなりました。掲示板で文句言ってほんとにごめんなさい。 また、かかる時間は試行によって結構ばらつきます。平均すると、名前付きパイプを使ったほうが速いと思います。

チューンアップの方法はこれで全部ではないと思うので、気が付いたら書き加えていってください。

ちなみに

> print(system.time(write.table(d,"tmp.tsv")))
[1] 1.97 0.02 2.05   NA   NA

でした。

Mac or Linux + RODBC + EXCEL

  • Mac 版 R や Linux 版 R で、RODBC を介して EXCEL ファイルを読み込むにはどうすればよいのでしょう?例えば MAC では odbcConnect() を使っても読み込むことができません。。。 -- 2007-02-11 (日) 02:54:37
  • ↓は読みました?
    http://cran.r-project.org/doc/manuals/R-data.html#RODBC -- 2007-02-11 (日) 10:38:38
  • 答え、「できない」 -- okinawa 2007-02-11 (日) 12:06:00
  • 「できない」 ⇒ あらら・・・。やっぱり出来ないですか。。。諦めます。ご解答どうもありがとうございました。 -- 2007-02-13 (火) 10:14:33
  • 何故「できない」かというと、Mac,LinuxのExcel ODBC Driverを見つけられなかったから。Mac,LinuxでもMySQLなどの「本来のRDB」ならば「2バイトコード問題」があるにせよODBC Driverがあるので、RODBCでつなぐことはできる。ちなみにAccess.mdbはサードパーティ製のMac版有料AccessODBCDriverを使えば(2バイトコード部分は化けるが)インポートすることは可能だった。Excel->CSV->R(read.table)を一発でやりたいのなら、MacならAppleScript?を書けばバッチでできるのでは? -- okinawa 2007-02-13 (火) 11:10:06


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Google
WWW を検索 OKADAJP.ORG を検索
Last-modified: 2015-03-01 (日) 01:15:59 (1727d)