統計解析ツールRとMySQLを連携させる

RとMySQLの連携

まず、Rを起動させてDBIとRMySQLのパッケージをインストールさせます。

$ sudo R

R version 2.15.2 (2012-10-26) -- "Trick or Treat"
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-suse-linux-gnu (64-bit)

Rは、自由なソフトウェアであり、「完全に無保証」です。 
一定の条件に従えば、自由にこれを再配布することができます。 
配布条件の詳細に関しては、'license()'あるいは'licence()'と入力してください。 

Rは多くの貢献者による共同プロジェクトです。 
詳しくは'contributors()'と入力してください。 
また、RやRのパッケージを出版物で引用する際の形式については 
'citation()'と入力してください。 

'demo()'と入力すればデモをみることができます。 
'help()'とすればオンラインヘルプが出ます。 
'help.start()'でHTMLブラウザによるヘルプがみられます。 
'q()'と入力すればRを終了します。 

> install.packages("DBI")
 --- このセッションで使うために、CRANのミラーサイトを選んでください --- 
CRAN mirror 

 1: 0-Cloud                       2: Argentina (La Plata)       
 3: Argentina (Mendoza)           4: Australia (Canberra)       
 5: Australia (Melbourne)         6: Austria                    
 7: Belgium                       8: Brazil (PR)                
 9: Brazil (RJ)                  10: Brazil (SP 1)              
11: Brazil (SP 2)                12: Canada (BC)                
13: Canada (NS)                  14: Canada (ON)                
15: Canada (QC 1)                16: Canada (QC 2)              
17: Chile                        18: China (Beijing 1)          
19: China (Beijing 2)            20: China (Guangzhou)          
21: China (Hefei)                22: China (Xiamen)             
23: Colombia (Bogota)            24: Colombia (Cali)            
25: Denmark                      26: Ecuador                    
27: France (Lyon 1)              28: France (Lyon 2)            
29: France (Montpellier)         30: France (Paris 1)           
31: France (Paris 2)             32: Germany (Berlin)           
33: Germany (Bonn)               34: Germany (Goettingen)       
35: Greece                       36: Hungary                    
37: India                        38: Indonesia                  
39: Iran                         40: Ireland                    
41: Italy (Milano)               42: Italy (Padua)              
43: Italy (Palermo)              44: Japan (Hyogo)              
45: Japan (Tsukuba)              46: Japan (Tokyo)              
47: Korea (Seoul 1)              48: Korea (Seoul 2)            
49: Mexico (Mexico City)         50: Mexico (Texcoco)           
51: Netherlands (Amsterdam)      52: Netherlands (Utrecht)      
53: New Zealand                  54: Norway                     
55: Philippines                  56: Poland                     
57: Portugal                     58: Russia                     
59: Singapore                    60: Slovakia                   
61: South Africa (Cape Town)     62: South Africa (Johannesburg)
63: Spain (Madrid)               64: Sweden                     
65: Switzerland                  66: Taiwan (Taichung)          
67: Taiwan (Taipei)              68: Thailand                   
69: Turkey                       70: UK (Bristol)               
71: UK (London)                  72: UK (St Andrews)            
73: USA (CA 1)                   74: USA (CA 2)                 
75: USA (IA)                     76: USA (IN)                   
77: USA (KS)                     78: USA (MD)                   
79: USA (MI)                     80: USA (MO)                   
81: USA (OH)                     82: USA (OR)                   
83: USA (PA 1)                   84: USA (PA 2)                 
85: USA (TN)                     86: USA (TX 1)                 
87: USA (WA 1)                   88: USA (WA 2)                 
89: Venezuela                    90: Vietnam                    


 選択: 45
 URL 'http://cran.md.tsukuba.ac.jp/src/contrib/DBI_0.2-7.tar.gz' を試しています 
Content type 'application/x-gzip' length 194699 bytes (190 Kb)
 開かれた URL 
==================================================
downloaded 190 Kb

* installing *source* package ‘DBI’ ...
**  パッケージ ‘DBI’ の解凍およびMD5サムの検証に成功しました 
** R
** inst
** preparing package for lazy loading
Creating a generic function for ‘summary’ from package ‘base’ in package ‘DBI’
** help
*** installing help indices
** building package indices
** installing vignettes
   ‘DBI.Rnw’ 
** testing if installed package can be loaded

* DONE (DBI)

 ダウンロードされたパッケージは、以下にあります 
        ‘/tmp/RtmprMJAAl/downloaded_packages’ 
 '.Library' 中のパッケージの HTML 索引を更新します 
 packages.htmlの作成   完了 
> install.packages("RMySQL")
 URL 'http://cran.md.tsukuba.ac.jp/src/contrib/RMySQL_0.9-3.tar.gz' を試しています 
Content type 'application/x-gzip' length 165363 bytes (161 Kb)
 開かれた URL 
==================================================
downloaded 161 Kb

* installing *source* package ‘RMySQL’ ...
**  パッケージ ‘RMySQL’ の解凍およびMD5サムの検証に成功しました 
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -E
checking for compress in -lz... yes
checking for getopt_long in -lc... yes
checking for mysql_init in -lmysqlclient... yes
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking mysql.h usability... no
checking mysql.h presence... no
checking for mysql.h... no
checking /usr/local/include/mysql/mysql.h usability... no
checking /usr/local/include/mysql/mysql.h presence... no
checking for /usr/local/include/mysql/mysql.h... no
checking /usr/include/mysql/mysql.h usability... yes
checking /usr/include/mysql/mysql.h presence... yes
checking for /usr/include/mysql/mysql.h... yes
configure: creating ./config.status
config.status: creating src/Makevars
** libs
gcc -std=gnu99 -I/usr/lib64/R/include -DNDEBUG -I/usr/include/mysql -I/usr/local/include    -fpic  -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g  -c RS-DBI.c -o RS-DBI.o
RS-DBI.c: In function ‘RS_na_set’:
RS-DBI.c:1219:11: warning: variable ‘c’ set but not used [-Wunused-but-set-variable]
gcc -std=gnu99 -I/usr/lib64/R/include -DNDEBUG -I/usr/include/mysql -I/usr/local/include    -fpic  -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g  -c RS-MySQL.c -o RS-MySQL.o
RS-MySQL.c: In function ‘RS_MySQL_fetch’:
RS-MySQL.c:657:13: warning: variable ‘fld_nullOk’ set but not used [-Wunused-but-set-variable]
RS-MySQL.c: In function ‘RS_DBI_invokeBeginGroup’:
RS-MySQL.c:1137:30: warning: variable ‘val’ set but not used [-Wunused-but-set-variable]
RS-MySQL.c: In function ‘RS_DBI_invokeNewRecord’:
RS-MySQL.c:1158:20: warning: variable ‘val’ set but not used [-Wunused-but-set-variable]
RS-MySQL.c: In function ‘RS_MySQL_dbApply’:
RS-MySQL.c:1219:38: warning: variable ‘fld_nullOk’ set but not used [-Wunused-but-set-variable]
gcc -std=gnu99 -shared -L/usr/local/lib64 -o RMySQL.so RS-DBI.o RS-MySQL.o -lmysqlclient -lz -L/usr/lib64/R/lib -lR
 以下にインストール中:  /usr/lib64/R/library/RMySQL/libs
** R
** inst
** preparing package for lazy loading
Creating a generic function for ‘format’ from package ‘base’ in package ‘RMySQL’
Creating a generic function for ‘print’ from package ‘base’ in package ‘RMySQL’
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded

* DONE (RMySQL)

 ダウンロードされたパッケージは、以下にあります 
        ‘/tmp/RtmprMJAAl/downloaded_packages’ 
 '.Library' 中のパッケージの HTML 索引を更新します 
 packages.htmlの作成   完了 </code></pre>

これでパッケージのインストールは完了です。

<h2>RからMySQLへ接続</h2>

Rの中でユーザーやパスワードを指定してMySQLに接続します(ここではテストでWordPressのwp_postmetaに接続)。

[r]
> library(RMySQL)
 要求されたパッケージ DBI をロード中です
> dbconnector <- dbConnect(dbDriver("MySQL"),dbname="blog", user="******", password="********")
> test.table <- dbGetQuery(dbconnector, "select * from wp_postmeta")
> dbDisconnect(dbconnector)
[1] TRUE

これでtest.tableにwp_postmetaのカラムが格納されていることが確認できます。

> names(test.table)
[1] "meta_id"    "post_id"    "meta_key"   "meta_value"