standardizes how attributes can be asked for (by index or name)

This commit is contained in:
Ben Mabey 2010-12-07 14:14:20 -07:00
parent 99048715f1
commit 652c54aaf7
2 changed files with 34 additions and 12 deletions

View file

@ -30,13 +30,6 @@
(instance? weka.core.Instances dataset))
(defn attribute-name-at
"Returns the name of an attribute situated at the provided position in
the attributes definition of an instance or class"
[dataset-or-instance pos]
(let [class-attr (.attribute dataset-or-instance pos)]
(.name class-attr)))
(defn index-attr
"Returns the index of an attribute in the attributes definition of an
instance or dataset"
@ -46,6 +39,19 @@
(let [attr-name (name attr-name)]
(find-first #(= attr-name (.name (.attribute dataset %))) (range (.numAttributes dataset))))))
(defn attribute-at
"Returns the name of an attribute situated at the provided position in
the attributes definition of an instance or class"
[dataset-or-instance index-or-name]
(.attribute dataset-or-instance (index-attr dataset-or-instance index-or-name)))
(defn attribute-name-at
"Returns the name of an attribute situated at the provided position in
the attributes definition of an instance or class"
[dataset-or-instance index-or-name]
(let [^Attribute class-attr (attribute-at dataset-or-instance index-or-name)]
(.name class-attr)))
(defn attributes
"Returns the attributes (weka.core.Attribute) of the dataset or instance"
[dataset-or-instance]
@ -196,17 +202,32 @@
(conj acum {(keyword val) index})))
acum))))
(defn dataset-labels-at [dataset-or-instance pos]
(defn dataset-labels-at [dataset-or-instance index-or-name]
"Returns the lables (possible values) for a nominal attribute at the provided position"
(let [class-attr (.attribute dataset-or-instance pos)
values (.enumerateValues class-attr)]
(let [attr (attribute-at dataset-or-instance index-or-name)
values (.enumerateValues attr)]
(if (nil? values)
:not-nominal
(loop [continue (.hasMoreElements values)
acum {}]
(if continue
(let [val (.nextElement values)
index (.indexOfValue class-attr val)]
index (.indexOfValue attr val)]
(recur (.hasMoreElements values)
(conj acum {(keyword val) index})))
acum)))))
#_(defn dataset-labels-at [dataset-or-instance index-or-name]
"Returns the lables (possible values) for a nominal attribute at the provided position"
(let [attr (attribute-at dataset-or-instance index-or-name)
values (.enumerateValues attr)]
(if (nil? values)
:not-nominal
(loop [continue (.hasMoreElements values)
acum {}]
(if continue
(let [val (.nextElement values)
index (.indexOfValue attr val)]
(recur (.hasMoreElements values)
(conj acum {(keyword val) index})))
acum)))))

View file

@ -136,6 +136,7 @@
(let [ds (make-dataset "test" [:a :b {:c [:d :e]}] [{:a 1 :b 2 :c :d} [4 5 :e]])
attrs (attributes ds)]
(is (every? #(instance? weka.core.Attribute %) attrs))
(is (= (first attrs) (attribute-at ds 0) (attribute-at ds :a)))
(is (= '("a" "b" "c") (map #(.name %) attrs)))
(is (= '("a" "b" "c") (map #(.name %) (attributes (dataset-at ds 0)))))
(is (= [(.attribute ds 2)] (nominal-attributes ds)))
@ -151,4 +152,4 @@
(let [ds (make-dataset "test" [:a :b {:c [:d :e]}]
[{:a 1 :b 2 :c :d} [4 5 :e]])]
(dataset-set-class ds :c)
(is (= {:d 0 :e 1} (dataset-class-labels ds) (dataset-labels-at ds 2)))))
(is (= {:d 0 :e 1} (dataset-class-labels ds) (dataset-labels-at ds :c)))))