RでMySQLを操作してみる。
RfinanceYJというYahooFinanceから任意の銘柄の時系列データをぶっこ抜けるという素敵なライブラリがRにはあります。
しかし、この素敵なライブラリの難点として、データの取得に若干時間がかかってしまうという点があり、データを取得して色々遊ぶには、どこかにデータを保存しておいた方が良いです。
取得する期間や銘柄数にもよってはcsvファイルかなんかで保存していてもいいと思いますが、自分の場合は再利用性を考えて、ローカルにMySQLをたてて、そこに銘柄毎にぶっこ抜いてきたデータを保存するということをやっています。(その部分はまたいつか書くかも)
で、DBに突っ込んだデータをRから使いたいので、そのあたりを試しました。
結論から言うと異常に簡単です。
環境はUbuntu10.10で、既にRとMySQLがインストールされている前提です。
インストール
ここを参考にしました。
参考URLの通り、R上で
>install.packages("DBI") >install.packages("RMySQL")
とすると、下記のように怒られてしまいました。
Configuration error: could not find the MySQL installation include and/or library directories. Manually specify the location of the MySQL libraries and the header files and re-run R CMD INSTALL. INSTRUCTIONS: 1. Define and export the 2 shell variables PKG_CPPFLAGS and PKG_LIBS to include the directory for header files (*.h) and libraries, for example (using Bourne shell syntax): export PKG_CPPFLAGS="-I<MySQL-include-dir>" export PKG_LIBS="-L<MySQL-lib-dir> -lmysqlclient" Re-run the R INSTALL command: R CMD INSTALL RMySQL_<version>.tar.gz 2. Alternatively, you may pass the configure arguments --with-mysql-dir=<base-dir> (distribution directory) or --with-mysql-inc=<base-inc> (where MySQL header files reside) --with-mysql-lib=<base-lib> (where MySQL libraries reside) in the call to R INSTALL --configure-args='...' R CMD INSTALL --configure-args='--with-mysql-dir=DIR' RMySQL_<version>.tar.gz ERROR: configuration failed for package ‘RMySQL’ *1302101133* removing ‘/home/shimoda/R/i686-pc-linux-gnu-library/2.11/RMySQL’ ダウンロードされたパッケージは、以下にあります ‘/tmp/RtmpkhyZwk/downloaded_packages’ 警告メッセージ: In install.packages("RMySQL") : パッケージ 'RMySQL' のインストールは、ゼロでない終了値をもちました
コンフィグエラーですね。
エラーを読む限りたぶん環境変数まわりのなんかですが、
色々設定するのがなんかめんどくさいので、別の方法を探しました。
$sudo apt-get install c-ran-rmysql
とおりました。
ところで、Rでinstall.packages()するのと、aptで入れるのは何が違うのでしょうか。
使ってみる
さて、うまくRMySQLがインストールできたので、
> library(RMySQL) 要求されたパッケージ DBI をロード中です > m <- dbDriver("MySQL") > dbconnector <- dbConnect(m, dbname="(DBname)", user="(user name)", host="(hostname or IP)", password="(password)") > query.result <- dbSendQuery(dbconnector, "select * from (TableName)") > test.table <- fetch(query.result) > dbDisconnect(dbconnector)
これで、任意のDBに接続して、SELECT分を投げてデータを取得することができます。
上記以外のことをするためには、ここを見る必要がありますね。
普通にfetchを投げただけだと、500行しか結果が返ってきませんでした。
どうやら、fetchの引数にn=(任意の値)、もしくはn=-1で全てを取得してくれるようです。
また、上のdbSendQuery+fetchと同じことをdbGetQueryで代用できるようです。
今のところRでデータをinsertやupdateすることは多分なさそうですが、RfinanceYJとRMySQLはまた時間を見つけて調べてみたいと思います。
Rの基礎とプログラミング技法 | |
U.リゲス 石田 基広 シュプリンガー・ジャパン(株) 2006-10-22 売り上げランキング : 80851 Amazonで詳しく見る by G-Tools |