Fixed saving/loading csv instances.

This commit is contained in:
Joshua Eckroth 2013-07-11 07:40:32 -04:00
parent 0da42ca0ea
commit 26a9d69c05
2 changed files with 32 additions and 5 deletions

View file

@ -10,7 +10,8 @@
(:import (weka.core.converters CSVLoader ArffLoader XRFFLoader LibSVMLoader)
(weka.core.converters CSVSaver ArffSaver XRFFSaver LibSVMSaver)
(java.io File InputStream OutputStream)
(java.net URL URI)))
(java.net URL URI))
(:use [clojure.java.io :only [input-stream output-stream]]))
;; Loading of instances
@ -21,10 +22,10 @@
(defmacro m-load-instances [loader source]
`(do
(if (= (class ~source) java.io.File)
(if (= (class ~source) java.io.File)
(.setFile ~loader ~source)
(.setSource ~loader (if (= (class ~source) java.lang.String)
(new URL ~source)
(input-stream ~source)
^InputStream ~source)))
(.getDataSet ~loader)))
@ -58,7 +59,7 @@
(defmacro m-save-instances [saver destiny instances]
`(do
(condp #(isa? %2 %1) (class ~destiny)
String (.setFile ~saver (File. (URI. ~destiny)))
String (.setDestination ~saver (output-stream ~destiny))
File (.setFile ~saver ~destiny)
OutputStream (.setDestination ~saver ~destiny))
(.setInstances ~saver ~instances)

View file

@ -2,6 +2,32 @@
(:use [clj-ml io data] :reload-all)
(:use clojure.test midje.sweet))
(deftest load-instances-iris-url
(deftest test-load-instances-iris-arff-url
(let [ds (load-instances :arff "http://repository.seasr.org/Datasets/UCI/arff/iris.arff")]
(is (= 150 (dataset-count ds)))))
(deftest test-load-instances-iris-csv-url
(let [ds (load-instances :csv "https://raw.github.com/bigmlcom/bigmler/master/data/iris.csv")]
(is (= 150 (dataset-count ds)))))
(deftest test-save-instances
(let [ds (make-dataset "test" [:a :b {:c [:m :n]}] [[1 2 :m] [4 5 :m]])]
(is (= (do (save-instances :csv "test.csv" ds)
(slurp "test.csv"))
"a,b,c
1,2,m
4,5,m
"))
(is (= (do (save-instances :arff "test.arff" ds)
(slurp "test.arff"))
"@relation test
@attribute a numeric
@attribute b numeric
@attribute c {m,n}
@data
1,2,m
4,5,m
"))))