一所懸命に手抜きする

監査の仕事をしています。ITを利用し、良い意味で「手抜き」することは効率化と精度アップに役立つと思うんです。部下への引き継ぎのためにまずは諸々頭から引っ張り出そうとブログを始めました。

[ Main ]  [ 別館 ]
当ブログで取り上げられている事案やデータベース、人物等はすべてフィクションです。

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.
広告を非表示にする