hinduce-examples (empty) → 0.0.0.0
raw patch · 6 files changed
+494/−0 lines, 6 filesdep +basedep +convertibledep +csvsetup-changed
Dependencies added: base, convertible, csv, haskell98, hinduce-classifier, hinduce-classifier-decisiontree, hinduce-missingh, layout
Files
- Setup.hs +2/−0
- data/iris/bezdekIris.data +151/−0
- data/iris/iris.data +151/−0
- data/iris/iris.names +69/−0
- hinduce-examples.cabal +28/−0
- src/Data/HInduce/Examples.hs +93/−0
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ data/iris/bezdekIris.data view
@@ -0,0 +1,151 @@+5.1,3.5,1.4,0.2,Iris-setosa+4.9,3.0,1.4,0.2,Iris-setosa+4.7,3.2,1.3,0.2,Iris-setosa+4.6,3.1,1.5,0.2,Iris-setosa+5.0,3.6,1.4,0.2,Iris-setosa+5.4,3.9,1.7,0.4,Iris-setosa+4.6,3.4,1.4,0.3,Iris-setosa+5.0,3.4,1.5,0.2,Iris-setosa+4.4,2.9,1.4,0.2,Iris-setosa+4.9,3.1,1.5,0.1,Iris-setosa+5.4,3.7,1.5,0.2,Iris-setosa+4.8,3.4,1.6,0.2,Iris-setosa+4.8,3.0,1.4,0.1,Iris-setosa+4.3,3.0,1.1,0.1,Iris-setosa+5.8,4.0,1.2,0.2,Iris-setosa+5.7,4.4,1.5,0.4,Iris-setosa+5.4,3.9,1.3,0.4,Iris-setosa+5.1,3.5,1.4,0.3,Iris-setosa+5.7,3.8,1.7,0.3,Iris-setosa+5.1,3.8,1.5,0.3,Iris-setosa+5.4,3.4,1.7,0.2,Iris-setosa+5.1,3.7,1.5,0.4,Iris-setosa+4.6,3.6,1.0,0.2,Iris-setosa+5.1,3.3,1.7,0.5,Iris-setosa+4.8,3.4,1.9,0.2,Iris-setosa+5.0,3.0,1.6,0.2,Iris-setosa+5.0,3.4,1.6,0.4,Iris-setosa+5.2,3.5,1.5,0.2,Iris-setosa+5.2,3.4,1.4,0.2,Iris-setosa+4.7,3.2,1.6,0.2,Iris-setosa+4.8,3.1,1.6,0.2,Iris-setosa+5.4,3.4,1.5,0.4,Iris-setosa+5.2,4.1,1.5,0.1,Iris-setosa+5.5,4.2,1.4,0.2,Iris-setosa+4.9,3.1,1.5,0.2,Iris-setosa+5.0,3.2,1.2,0.2,Iris-setosa+5.5,3.5,1.3,0.2,Iris-setosa+4.9,3.6,1.4,0.1,Iris-setosa+4.4,3.0,1.3,0.2,Iris-setosa+5.1,3.4,1.5,0.2,Iris-setosa+5.0,3.5,1.3,0.3,Iris-setosa+4.5,2.3,1.3,0.3,Iris-setosa+4.4,3.2,1.3,0.2,Iris-setosa+5.0,3.5,1.6,0.6,Iris-setosa+5.1,3.8,1.9,0.4,Iris-setosa+4.8,3.0,1.4,0.3,Iris-setosa+5.1,3.8,1.6,0.2,Iris-setosa+4.6,3.2,1.4,0.2,Iris-setosa+5.3,3.7,1.5,0.2,Iris-setosa+5.0,3.3,1.4,0.2,Iris-setosa+7.0,3.2,4.7,1.4,Iris-versicolor+6.4,3.2,4.5,1.5,Iris-versicolor+6.9,3.1,4.9,1.5,Iris-versicolor+5.5,2.3,4.0,1.3,Iris-versicolor+6.5,2.8,4.6,1.5,Iris-versicolor+5.7,2.8,4.5,1.3,Iris-versicolor+6.3,3.3,4.7,1.6,Iris-versicolor+4.9,2.4,3.3,1.0,Iris-versicolor+6.6,2.9,4.6,1.3,Iris-versicolor+5.2,2.7,3.9,1.4,Iris-versicolor+5.0,2.0,3.5,1.0,Iris-versicolor+5.9,3.0,4.2,1.5,Iris-versicolor+6.0,2.2,4.0,1.0,Iris-versicolor+6.1,2.9,4.7,1.4,Iris-versicolor+5.6,2.9,3.6,1.3,Iris-versicolor+6.7,3.1,4.4,1.4,Iris-versicolor+5.6,3.0,4.5,1.5,Iris-versicolor+5.8,2.7,4.1,1.0,Iris-versicolor+6.2,2.2,4.5,1.5,Iris-versicolor+5.6,2.5,3.9,1.1,Iris-versicolor+5.9,3.2,4.8,1.8,Iris-versicolor+6.1,2.8,4.0,1.3,Iris-versicolor+6.3,2.5,4.9,1.5,Iris-versicolor+6.1,2.8,4.7,1.2,Iris-versicolor+6.4,2.9,4.3,1.3,Iris-versicolor+6.6,3.0,4.4,1.4,Iris-versicolor+6.8,2.8,4.8,1.4,Iris-versicolor+6.7,3.0,5.0,1.7,Iris-versicolor+6.0,2.9,4.5,1.5,Iris-versicolor+5.7,2.6,3.5,1.0,Iris-versicolor+5.5,2.4,3.8,1.1,Iris-versicolor+5.5,2.4,3.7,1.0,Iris-versicolor+5.8,2.7,3.9,1.2,Iris-versicolor+6.0,2.7,5.1,1.6,Iris-versicolor+5.4,3.0,4.5,1.5,Iris-versicolor+6.0,3.4,4.5,1.6,Iris-versicolor+6.7,3.1,4.7,1.5,Iris-versicolor+6.3,2.3,4.4,1.3,Iris-versicolor+5.6,3.0,4.1,1.3,Iris-versicolor+5.5,2.5,4.0,1.3,Iris-versicolor+5.5,2.6,4.4,1.2,Iris-versicolor+6.1,3.0,4.6,1.4,Iris-versicolor+5.8,2.6,4.0,1.2,Iris-versicolor+5.0,2.3,3.3,1.0,Iris-versicolor+5.6,2.7,4.2,1.3,Iris-versicolor+5.7,3.0,4.2,1.2,Iris-versicolor+5.7,2.9,4.2,1.3,Iris-versicolor+6.2,2.9,4.3,1.3,Iris-versicolor+5.1,2.5,3.0,1.1,Iris-versicolor+5.7,2.8,4.1,1.3,Iris-versicolor+6.3,3.3,6.0,2.5,Iris-virginica+5.8,2.7,5.1,1.9,Iris-virginica+7.1,3.0,5.9,2.1,Iris-virginica+6.3,2.9,5.6,1.8,Iris-virginica+6.5,3.0,5.8,2.2,Iris-virginica+7.6,3.0,6.6,2.1,Iris-virginica+4.9,2.5,4.5,1.7,Iris-virginica+7.3,2.9,6.3,1.8,Iris-virginica+6.7,2.5,5.8,1.8,Iris-virginica+7.2,3.6,6.1,2.5,Iris-virginica+6.5,3.2,5.1,2.0,Iris-virginica+6.4,2.7,5.3,1.9,Iris-virginica+6.8,3.0,5.5,2.1,Iris-virginica+5.7,2.5,5.0,2.0,Iris-virginica+5.8,2.8,5.1,2.4,Iris-virginica+6.4,3.2,5.3,2.3,Iris-virginica+6.5,3.0,5.5,1.8,Iris-virginica+7.7,3.8,6.7,2.2,Iris-virginica+7.7,2.6,6.9,2.3,Iris-virginica+6.0,2.2,5.0,1.5,Iris-virginica+6.9,3.2,5.7,2.3,Iris-virginica+5.6,2.8,4.9,2.0,Iris-virginica+7.7,2.8,6.7,2.0,Iris-virginica+6.3,2.7,4.9,1.8,Iris-virginica+6.7,3.3,5.7,2.1,Iris-virginica+7.2,3.2,6.0,1.8,Iris-virginica+6.2,2.8,4.8,1.8,Iris-virginica+6.1,3.0,4.9,1.8,Iris-virginica+6.4,2.8,5.6,2.1,Iris-virginica+7.2,3.0,5.8,1.6,Iris-virginica+7.4,2.8,6.1,1.9,Iris-virginica+7.9,3.8,6.4,2.0,Iris-virginica+6.4,2.8,5.6,2.2,Iris-virginica+6.3,2.8,5.1,1.5,Iris-virginica+6.1,2.6,5.6,1.4,Iris-virginica+7.7,3.0,6.1,2.3,Iris-virginica+6.3,3.4,5.6,2.4,Iris-virginica+6.4,3.1,5.5,1.8,Iris-virginica+6.0,3.0,4.8,1.8,Iris-virginica+6.9,3.1,5.4,2.1,Iris-virginica+6.7,3.1,5.6,2.4,Iris-virginica+6.9,3.1,5.1,2.3,Iris-virginica+5.8,2.7,5.1,1.9,Iris-virginica+6.8,3.2,5.9,2.3,Iris-virginica+6.7,3.3,5.7,2.5,Iris-virginica+6.7,3.0,5.2,2.3,Iris-virginica+6.3,2.5,5.0,1.9,Iris-virginica+6.5,3.0,5.2,2.0,Iris-virginica+6.2,3.4,5.4,2.3,Iris-virginica+5.9,3.0,5.1,1.8,Iris-virginica+
+ data/iris/iris.data view
@@ -0,0 +1,151 @@+5.1,3.5,1.4,0.2,Iris-setosa+4.9,3.0,1.4,0.2,Iris-setosa+4.7,3.2,1.3,0.2,Iris-setosa+4.6,3.1,1.5,0.2,Iris-setosa+5.0,3.6,1.4,0.2,Iris-setosa+5.4,3.9,1.7,0.4,Iris-setosa+4.6,3.4,1.4,0.3,Iris-setosa+5.0,3.4,1.5,0.2,Iris-setosa+4.4,2.9,1.4,0.2,Iris-setosa+4.9,3.1,1.5,0.1,Iris-setosa+5.4,3.7,1.5,0.2,Iris-setosa+4.8,3.4,1.6,0.2,Iris-setosa+4.8,3.0,1.4,0.1,Iris-setosa+4.3,3.0,1.1,0.1,Iris-setosa+5.8,4.0,1.2,0.2,Iris-setosa+5.7,4.4,1.5,0.4,Iris-setosa+5.4,3.9,1.3,0.4,Iris-setosa+5.1,3.5,1.4,0.3,Iris-setosa+5.7,3.8,1.7,0.3,Iris-setosa+5.1,3.8,1.5,0.3,Iris-setosa+5.4,3.4,1.7,0.2,Iris-setosa+5.1,3.7,1.5,0.4,Iris-setosa+4.6,3.6,1.0,0.2,Iris-setosa+5.1,3.3,1.7,0.5,Iris-setosa+4.8,3.4,1.9,0.2,Iris-setosa+5.0,3.0,1.6,0.2,Iris-setosa+5.0,3.4,1.6,0.4,Iris-setosa+5.2,3.5,1.5,0.2,Iris-setosa+5.2,3.4,1.4,0.2,Iris-setosa+4.7,3.2,1.6,0.2,Iris-setosa+4.8,3.1,1.6,0.2,Iris-setosa+5.4,3.4,1.5,0.4,Iris-setosa+5.2,4.1,1.5,0.1,Iris-setosa+5.5,4.2,1.4,0.2,Iris-setosa+4.9,3.1,1.5,0.1,Iris-setosa+5.0,3.2,1.2,0.2,Iris-setosa+5.5,3.5,1.3,0.2,Iris-setosa+4.9,3.1,1.5,0.1,Iris-setosa+4.4,3.0,1.3,0.2,Iris-setosa+5.1,3.4,1.5,0.2,Iris-setosa+5.0,3.5,1.3,0.3,Iris-setosa+4.5,2.3,1.3,0.3,Iris-setosa+4.4,3.2,1.3,0.2,Iris-setosa+5.0,3.5,1.6,0.6,Iris-setosa+5.1,3.8,1.9,0.4,Iris-setosa+4.8,3.0,1.4,0.3,Iris-setosa+5.1,3.8,1.6,0.2,Iris-setosa+4.6,3.2,1.4,0.2,Iris-setosa+5.3,3.7,1.5,0.2,Iris-setosa+5.0,3.3,1.4,0.2,Iris-setosa+7.0,3.2,4.7,1.4,Iris-versicolor+6.4,3.2,4.5,1.5,Iris-versicolor+6.9,3.1,4.9,1.5,Iris-versicolor+5.5,2.3,4.0,1.3,Iris-versicolor+6.5,2.8,4.6,1.5,Iris-versicolor+5.7,2.8,4.5,1.3,Iris-versicolor+6.3,3.3,4.7,1.6,Iris-versicolor+4.9,2.4,3.3,1.0,Iris-versicolor+6.6,2.9,4.6,1.3,Iris-versicolor+5.2,2.7,3.9,1.4,Iris-versicolor+5.0,2.0,3.5,1.0,Iris-versicolor+5.9,3.0,4.2,1.5,Iris-versicolor+6.0,2.2,4.0,1.0,Iris-versicolor+6.1,2.9,4.7,1.4,Iris-versicolor+5.6,2.9,3.6,1.3,Iris-versicolor+6.7,3.1,4.4,1.4,Iris-versicolor+5.6,3.0,4.5,1.5,Iris-versicolor+5.8,2.7,4.1,1.0,Iris-versicolor+6.2,2.2,4.5,1.5,Iris-versicolor+5.6,2.5,3.9,1.1,Iris-versicolor+5.9,3.2,4.8,1.8,Iris-versicolor+6.1,2.8,4.0,1.3,Iris-versicolor+6.3,2.5,4.9,1.5,Iris-versicolor+6.1,2.8,4.7,1.2,Iris-versicolor+6.4,2.9,4.3,1.3,Iris-versicolor+6.6,3.0,4.4,1.4,Iris-versicolor+6.8,2.8,4.8,1.4,Iris-versicolor+6.7,3.0,5.0,1.7,Iris-versicolor+6.0,2.9,4.5,1.5,Iris-versicolor+5.7,2.6,3.5,1.0,Iris-versicolor+5.5,2.4,3.8,1.1,Iris-versicolor+5.5,2.4,3.7,1.0,Iris-versicolor+5.8,2.7,3.9,1.2,Iris-versicolor+6.0,2.7,5.1,1.6,Iris-versicolor+5.4,3.0,4.5,1.5,Iris-versicolor+6.0,3.4,4.5,1.6,Iris-versicolor+6.7,3.1,4.7,1.5,Iris-versicolor+6.3,2.3,4.4,1.3,Iris-versicolor+5.6,3.0,4.1,1.3,Iris-versicolor+5.5,2.5,4.0,1.3,Iris-versicolor+5.5,2.6,4.4,1.2,Iris-versicolor+6.1,3.0,4.6,1.4,Iris-versicolor+5.8,2.6,4.0,1.2,Iris-versicolor+5.0,2.3,3.3,1.0,Iris-versicolor+5.6,2.7,4.2,1.3,Iris-versicolor+5.7,3.0,4.2,1.2,Iris-versicolor+5.7,2.9,4.2,1.3,Iris-versicolor+6.2,2.9,4.3,1.3,Iris-versicolor+5.1,2.5,3.0,1.1,Iris-versicolor+5.7,2.8,4.1,1.3,Iris-versicolor+6.3,3.3,6.0,2.5,Iris-virginica+5.8,2.7,5.1,1.9,Iris-virginica+7.1,3.0,5.9,2.1,Iris-virginica+6.3,2.9,5.6,1.8,Iris-virginica+6.5,3.0,5.8,2.2,Iris-virginica+7.6,3.0,6.6,2.1,Iris-virginica+4.9,2.5,4.5,1.7,Iris-virginica+7.3,2.9,6.3,1.8,Iris-virginica+6.7,2.5,5.8,1.8,Iris-virginica+7.2,3.6,6.1,2.5,Iris-virginica+6.5,3.2,5.1,2.0,Iris-virginica+6.4,2.7,5.3,1.9,Iris-virginica+6.8,3.0,5.5,2.1,Iris-virginica+5.7,2.5,5.0,2.0,Iris-virginica+5.8,2.8,5.1,2.4,Iris-virginica+6.4,3.2,5.3,2.3,Iris-virginica+6.5,3.0,5.5,1.8,Iris-virginica+7.7,3.8,6.7,2.2,Iris-virginica+7.7,2.6,6.9,2.3,Iris-virginica+6.0,2.2,5.0,1.5,Iris-virginica+6.9,3.2,5.7,2.3,Iris-virginica+5.6,2.8,4.9,2.0,Iris-virginica+7.7,2.8,6.7,2.0,Iris-virginica+6.3,2.7,4.9,1.8,Iris-virginica+6.7,3.3,5.7,2.1,Iris-virginica+7.2,3.2,6.0,1.8,Iris-virginica+6.2,2.8,4.8,1.8,Iris-virginica+6.1,3.0,4.9,1.8,Iris-virginica+6.4,2.8,5.6,2.1,Iris-virginica+7.2,3.0,5.8,1.6,Iris-virginica+7.4,2.8,6.1,1.9,Iris-virginica+7.9,3.8,6.4,2.0,Iris-virginica+6.4,2.8,5.6,2.2,Iris-virginica+6.3,2.8,5.1,1.5,Iris-virginica+6.1,2.6,5.6,1.4,Iris-virginica+7.7,3.0,6.1,2.3,Iris-virginica+6.3,3.4,5.6,2.4,Iris-virginica+6.4,3.1,5.5,1.8,Iris-virginica+6.0,3.0,4.8,1.8,Iris-virginica+6.9,3.1,5.4,2.1,Iris-virginica+6.7,3.1,5.6,2.4,Iris-virginica+6.9,3.1,5.1,2.3,Iris-virginica+5.8,2.7,5.1,1.9,Iris-virginica+6.8,3.2,5.9,2.3,Iris-virginica+6.7,3.3,5.7,2.5,Iris-virginica+6.7,3.0,5.2,2.3,Iris-virginica+6.3,2.5,5.0,1.9,Iris-virginica+6.5,3.0,5.2,2.0,Iris-virginica+6.2,3.4,5.4,2.3,Iris-virginica+5.9,3.0,5.1,1.8,Iris-virginica+
+ data/iris/iris.names view
@@ -0,0 +1,69 @@+1. Title: Iris Plants Database+ Updated Sept 21 by C.Blake - Added discrepency information++2. Sources:+ (a) Creator: R.A. Fisher+ (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)+ (c) Date: July, 1988++3. Past Usage:+ - Publications: too many to mention!!! Here are a few.+ 1. Fisher,R.A. "The use of multiple measurements in taxonomic problems"+ Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions+ to Mathematical Statistics" (John Wiley, NY, 1950).+ 2. Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis.+ (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218.+ 3. Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System+ Structure and Classification Rule for Recognition in Partially Exposed+ Environments". IEEE Transactions on Pattern Analysis and Machine+ Intelligence, Vol. PAMI-2, No. 1, 67-71.+ -- Results:+ -- very low misclassification rates (0% for the setosa class)+ 4. Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule". IEEE + Transactions on Information Theory, May 1972, 431-433.+ -- Results:+ -- very low misclassification rates again+ 5. See also: 1988 MLC Proceedings, 54-64. Cheeseman et al's AUTOCLASS II+ conceptual clustering system finds 3 classes in the data.++4. Relevant Information:+ --- This is perhaps the best known database to be found in the pattern+ recognition literature. Fisher's paper is a classic in the field+ and is referenced frequently to this day. (See Duda & Hart, for+ example.) The data set contains 3 classes of 50 instances each,+ where each class refers to a type of iris plant. One class is+ linearly separable from the other 2; the latter are NOT linearly+ separable from each other.+ --- Predicted attribute: class of iris plant.+ --- This is an exceedingly simple domain.+ --- This data differs from the data presented in Fishers article+ (identified by Steve Chadwick, spchadwick@espeedaz.net )+ The 35th sample should be: 4.9,3.1,1.5,0.2,"Iris-setosa"+ where the error is in the fourth feature.+ The 38th sample: 4.9,3.6,1.4,0.1,"Iris-setosa"+ where the errors are in the second and third features. ++5. Number of Instances: 150 (50 in each of three classes)++6. Number of Attributes: 4 numeric, predictive attributes and the class++7. Attribute Information:+ 1. sepal length in cm+ 2. sepal width in cm+ 3. petal length in cm+ 4. petal width in cm+ 5. class: + -- Iris Setosa+ -- Iris Versicolour+ -- Iris Virginica++8. Missing Attribute Values: None++Summary Statistics:+ Min Max Mean SD Class Correlation+ sepal length: 4.3 7.9 5.84 0.83 0.7826 + sepal width: 2.0 4.4 3.05 0.43 -0.4194+ petal length: 1.0 6.9 3.76 1.76 0.9490 (high!)+ petal width: 0.1 2.5 1.20 0.76 0.9565 (high!)++9. Class Distribution: 33.3% for each of 3 classes.
+ hinduce-examples.cabal view
@@ -0,0 +1,28 @@+Name: hinduce-examples+Version: 0.0.0.0+License: BSD3+Author: Robert Hensing+Synopsis: Example data for hInduce+Description: Example data for use with hInduce+Maintainer: hackage@roberthensing.nl+Build-Type: Simple+Cabal-Version: >= 1.2+Category: Data Mining++Data-Files:+ data/iris/iris.data+ data/iris/bezdekIris.data+ data/iris/iris.names++Library+ Build-Depends: haskell98+ , base >= 4 && < 5+ , layout >= 0.0.0.1+ , hinduce-missingh >= 0.0.0.0+ , csv >= 0.1.2+ , hinduce-classifier >= 0.0.0.0+ , hinduce-classifier-decisiontree >= 0.0.0.0+ , convertible+ Exposed-Modules: Data.HInduce.Examples+ Other-Modules: Paths_hinduce_examples+ Hs-Source-Dirs: src
+ src/Data/HInduce/Examples.hs view
@@ -0,0 +1,93 @@+{-# LANGUAGE MultiParamTypeClasses #-}+module Data.HInduce.Examples (+ -- * Re-exports+ module Data.HInduce.Classifier+ , module Data.HInduce.Classifier.DecisionTree+ , module Data.List.HIUtils+ , module Text.Layout+ , module Text.Layout.DisplayText+ , module Text.Layout.DisplayLatex+ , module Data.Convertible+ -- * Helpers (TODO move to module)+ , readCSV+ -- * Iris data set+ -- | Taken from the UCI Machine Learning Repository: <http://archive.ics.uci.edu/ml/datasets/Iris>+ -- + -- Let's build a decision tree and try it:+ --+ -- >>> let model = buildDTree (genMany autoDeciders) irisAttrs irisClass iris+ --+ -- >>> classify model [5,4,2,1]+ -- Setosa+ -- >>> iris !! 10+ -- Iris {sepalLength = 5.4, sepalWidth = 3.7, petalLength = 1.5, petalWidth = 0.2, irisClass = Setosa}+ --+ -- Seems good! But can we really know that?+ -- Let's train and test on separate data+ --+ -- >>> let model' = buildDTree (genMany autoDeciders) irisAttrs irisClass (oddIx iris)+ --+ -- >>> dt $ confusion' model' (map (irisAttrs &&& irisClass) $ evenIx iris)+ -- Table: Confusion Matrix+ -- ||-->Actual+ -- Predicted\/ Setosa Versicolor Virginica+ -- Setosa 0.3333333333333333 + -- Versicolor 0.30666666666666664 4.0e-2+ -- Virginica 2.666666666666667e-2 0.29333333333333333+ --+ -- Now we see that even though not the whole data set was available+ -- when the model was induced, only few misclassifications occur.++ , Iris(..), IrisClass(..), irisAttrs, irisAttrs', readIris, iris+ ) where+import Paths_hinduce_examples++import Data.HInduce.Classifier+import Data.HInduce.Classifier.DecisionTree+import Text.Layout+import Text.Layout.DisplayText+import Text.Layout.DisplayLatex+import Data.Convertible+import Data.List.HIUtils+import IO+import Text.CSV+import System.IO.Unsafe++test :: FilePath -> IO FilePath+test = getDataFileName++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