SPSS Modelerでフォルダ内のCSVを一括で読みたいことがあります。
以前以下の記事でModelerスクリプトでこれを実現しました。
SPSS Modelerでフォルダ内のCSVを一括で読み込む(Modelerスクリプト版)
https://qiita.com/kawada2017/items/b2a3c40a919b4371eb47
今回はこれを拡張ノードをつかって実現しました。
■テスト環境
Modeler 18.2.1
R3.3.3
Rの連携のセットアップが必要です。
SPSS Modelerの拡張ノードでRを利用する
https://qiita.com/kawada2017/items/0bb68e0b577e02bb8c6a
#1.フォルダ内にcsvを配置する
以下のように一つのフォルダに同じ列を持つcsvを配置します。
#2.キャンパスを開き、拡張インプットノードを作成
拡張インプットノードを開きRシンタックスに以下のRコードを入力します。
targetPath<-'C:/data/test'
### This function automatically generates the dataModel
getMetaData <- function (data) {
if(is.null(dim(data)))
stop("Invalid data received: not a data.frame")
if (dim(data)[1]<=0) {
print("Warning : modelerData has no line, all fieldStorage fields set to strings")
getStorage <- function(x){return("string")}
} else {
getStorage <- function(x) {
x <- unlist(x)
res <- NULL
#if x is a factor, typeof will return 'integer' so we handle this case first
if(is.factor(x)) {
res <- "string"
} else {
res <- switch(typeof(x),
integer="integer",
double = "real",
"string")
}
return (res)
}
}
col = vector("list", dim(data)[2])
for (i in 1:dim(data)[2]) {
col[[i]] <- c(fieldName=names(data[i]),
fieldLabel="",
fieldStorage=getStorage(data[i]),
fieldMeasure="",
fieldFormat="",
fieldRole="")
}
mdm<-do.call(cbind,col)
mdm<-data.frame(mdm)
return(mdm)
}
### Reading multiple csv files
fnames <- list.files(targetPath, full.names = T)
head(fnames)
modelerData<-do.call(rbind, lapply(fnames, read.table, sep=",", skip=0, quote = '\'',header=T, stringsAsFactors=F, encoding="ms932"))
#head(modelerData)
modelerDataModel <- getMetaData(modelerData)
#print(modelerDataModel)
- targetPathが一括処理をするCSVが入ったフォルダになります。
- list.filesでtargetPathのファイル名をリストを取得しています。
- read.tableをdo.callで取得したファイル分実行してファイルを読み込んでいます。なお、今回はencoding="ms932"にしていますので、* ShiftJISのデータを読み込んでいます。
- getMetaData というfunctionではデータ型を判定しています。
このRコードをRシンタックスに貼り付け、プレビューをクリックします。
以下のようにすべてのCSVファイルを読み込んでまとめてくれます。
またデータ型を確認すると文字列と整数型を正しく設定しています。
Modelerスクリプト版との違いは、ファイルが増えたり変わったりしていた場合にも、毎回スクリプトを実行しなくてもよいということになります。
参考
Rで複数のCSVを1つのデータフレームに読み込む - 闘うITエンジニアの覚え書き
https://www.magata.net/memo/index.php?R%A4%C7%CA%A3%BF%F4%A4%CECSV%A4%F21%A4%C4%A4%CE%A5%C7%A1%BC%A5%BF%A5%D5%A5%EC%A1%BC%A5%E0%A4%CB%C6%C9%A4%DF%B9%FE%A4%E0