R筋

プログラミング、金融、育児

【R】SQLiteと連携

sqliteのDBへのデータ入出力についてです。

まず、sqlite本体からデータベースを作成して見ます。

https://sqlite.org/index.html
download→Precompiled Binaries for Windowssqlite-tools-win32-x86-3190300.zi
作業フォルダに解答。
コマンドプロンプトを起動→作業フォルダに移動

database1をデータベースとして作成し、
日次でドル円レートを入れるFXテーブルを作成
カラムは日付、始値、高値、安値、終値とする。

sqlite database1
CREATE TABLE FX(date,open,high,low,close);
.exit

rから接続してみます。

install.packages("RSQLite")
library("RSQLite")
con = dbConnect(SQLite(), "database1", synchronous="off")
dbListTables(con)#テーブル"FX"が取得できる

マネースクエアジャパンが同じ形式のデータを公開していますので、
こちらの、csvファイルをダウンロードして入れてみます。
[ヒストリカルデータ | マーケット情報(FX) | FX - マネースクウェア・ジャパン(M2J)]
http://www.m2j.co.jp/market/historical.php
ドル円日足ファイルcsvをダウンロード

usdjpy <- read.csv("USDJPY.csv",header=T)
sql <- paste("insert into FX values('",usdjpy[1,1],"',",usdjpy[1,2],",",usdjpy[1,3],",",usdjpy[1,4],",",usdjpy[1,5],");",sep="")
#"insert into FX values('2007/04/02',117.84,118.08,117.46,117.84);"
dbSendQuery(con,sql)

これで一行目を入力できました。

dbGetQuery(con,"select * from FX")
dbReadTable(con,"FX")

で、今insertしたデータを確認できます。
dbReadTableは、テーブル名でアクセスができるのでSQLを発行する必要がありません。
この作業をループで全行に行えば全てのデータがinsertできますが、
データフレーム全てを入力できる便利な関数があります。

dbWriteTable(con, "USDJPY", usdjpy)
#新たに"USDJPY"テーブルを作成して、データフレームusdjpyを一括挿入できる

最後は、切断します。

dbDisconnect(con)#切断