一所懸命に手抜きする

デスクワークばかりのスポーツ嫌いで50歳も過ぎ、いよいよ足腰に衰えを感じつつある昨今。

CSVからSQLでデータを取得する sqldf::read.csv.sql() 関数(R言語)

 前回は R に取り込んだデータフレームを SQL で取り扱う sqldf ( RデータフレームからSQLでデータを取得するsqldfライブラリ - 一所懸命に手抜きする )というパッケージの中の sqldf() 関数を紹介しました。今回は sqldf パッケージの中の read.csv.sql() 関数についてです。
read.csv.sql | RDocumentationを参照。

sqldfライブラリの read.csv.sql() 関数はSQLCSVを読み込める

 RではCSVからデータを取り込むことが多いですが、何万レコードものデータを全件取り込んでから処理するのではなく、最初からSQLで条件抽出したいことがあります。
 sqldfライブラリには read.csv.sql() があり、これによりSQLを用いてCSVを読み込めます。Rのデータフレームにする前にデータを間引いていますので普通に全レコードを読む場合よりはたくさんのレコードを読めるようです。SQliteには取り込んでいるのですから、無制限ではありませんが。
CSV サンプル Rtest.csv(「支店名簿」CSV)作成Rコード

CSV サンプル Rtest.csv
支社番号支社名支店番号支店名
10札幌11札幌
20東京21大手町
20東京22秋葉原
20東京23横浜

read.csv.sql()使用法

read.csv.sql()使い方
library(sqldf)
  #  最低限の指定 
read.csv.sql(" File Name ",sql =" SQL statement ")
  #  オプション
read.csv.sql(" File Name ",sql =" SQL statement ", header = TRUE,
 sep = ",",row.names, eol, skip, filter, nrows, field.types, 
 colClasses, dbname = tempfile(), drv = "SQLite", ...)

CSVからSQL(select)

 実際の使い方は・・・、

上記サンプルCSVから関数 read.csv.sql()で抽出する例
library(sqldf)
read.csv.sql("C:/Wrk/Rtest.csv",sql ="select *  from file where 支社番号=20")
##   支社番号 支社名  支店番号 支店名
##1       20   東京       21 大手町
##2       20   東京       22 秋葉原
##3       20   東京       23   横浜

 select 文において必ず from file とすることがポイントです。

CSVからSQL(select以外)

 sqldfはSQLiteを呼び出しているわけですから、select以外のコマンドも使えるものがあります。

上記サンプルCSVから関数 read.csv.sql()でSQLの例
library(sqldf)
 read.csv.sql("C:/Wrk/Rtest.csv",sql ="PRAGMA TABLE_INFO(file)")
##  cid    name    type notnull     dflt_value pk
##1   0 支社番号 INTEGER       0       &ltNA&gt  0
##2   1   支社名    TEXT       0       &ltNA&gt  0
##3   2 支店番号 INTEGER       0       &ltNA&gt  0
##4   3   支店名    TEXT       0       &ltNA&gt  0
Using sqldf::sqldf , we can import data from CSV files via SQL.
 1. set SQL statement in Excel .
 2. Excel VBA in this article connects to AS400 DB2.
 3. execute SQL and get recordset.
 4. extract recordset into Excel sheet.