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の基礎とプログラミング技法
Rの基礎とプログラミング技法U.リゲス 石田 基広

シュプリンガー・ジャパン(株) 2006-10-22
売り上げランキング : 80851


Amazonで詳しく見る
by G-Tools