module Data.HInduce.Examples.DecisionTree (
readCSV
, Iris(..), IrisClass(..), irisAttrs, irisAttrs', readIris, iris
) where
import Paths_hinduce_examples
import Data.HInduce.Classifier
import Data.HInduce.Classifier.DecisionTree
import Text.Layout
import Data.Convertible
import Data.List.HIUtils
import System.IO
import Text.CSV
import System.IO.Unsafe
readCSV x = do
f <- getDataFileName $ "data/" ++ x
parseCSVFromFile f
openDataR x = do
f <- getDataFileName $ "data/" ++ x
openFile f ReadMode
data IrisClass = Setosa | Versicolor | Virginica
deriving (Eq, Ord, Show, Read)
instance Layout IrisClass DisplayText where format = fromShow
data Iris = Iris { sepalLength :: Double
, sepalWidth :: Double
, petalLength :: Double
, petalWidth :: Double
, irisClass :: IrisClass
}
deriving (Eq, Ord, Show, Read)
irisAttrs (Iris p q r s _) = [p, q, r, s]
irisAttrs' (Iris p q r s _) = ((p, q), (r, s))
readIris = do
(Right csv) <- readCSV "iris/iris.data"
return $ map readIrisEntry $ filter (/=[""]) csv
readIrisEntry [p,q,r,s,"Iris-setosa"] =
Iris (read p) (read q) (read r) (read s) Setosa
readIrisEntry [p,q,r,s,"Iris-versicolor"] =
Iris (read p) (read q) (read r) (read s) Versicolor
readIrisEntry [p,q,r,s,"Iris-virginica"] =
Iris (read p) (read q) (read r) (read s) Virginica
iris = unsafePerformIO readIris