datasets 0.2.0.3 → 0.2.1
raw patch · 10 files changed
+317/−1 lines, 10 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Numeric.Datasets: csvHdrDataset :: FromNamedRecord a => Source -> Dataset a
+ Numeric.Datasets: csvHdrDatasetSep :: FromNamedRecord a => Char -> Source -> Dataset a
+ Numeric.Datasets: parseCSVHdr :: FromNamedRecord a => ByteString -> [a]
+ Numeric.Datasets: parseCSVHdrSep :: FromNamedRecord a => Char -> ByteString -> [a]
+ Numeric.Datasets: yearToUTCTime :: Double -> UTCTime
+ Numeric.Datasets.CO2: CO2 :: Double -> Double -> CO2
+ Numeric.Datasets.CO2: [co2] :: CO2 -> Double
+ Numeric.Datasets.CO2: [time] :: CO2 -> Double
+ Numeric.Datasets.CO2: data CO2
+ Numeric.Datasets.CO2: instance Data.Csv.Conversion.FromNamedRecord Numeric.Datasets.CO2.CO2
+ Numeric.Datasets.CO2: instance GHC.Generics.Generic Numeric.Datasets.CO2.CO2
+ Numeric.Datasets.CO2: instance GHC.Read.Read Numeric.Datasets.CO2.CO2
+ Numeric.Datasets.CO2: instance GHC.Show.Show Numeric.Datasets.CO2.CO2
+ Numeric.Datasets.CO2: maunaLoaCO2 :: Dataset CO2
+ Numeric.Datasets.Quakes: Quake :: Double -> Double -> Double -> Double -> Int -> Quake
+ Numeric.Datasets.Quakes: [depth] :: Quake -> Double
+ Numeric.Datasets.Quakes: [lat] :: Quake -> Double
+ Numeric.Datasets.Quakes: [long] :: Quake -> Double
+ Numeric.Datasets.Quakes: [mag] :: Quake -> Double
+ Numeric.Datasets.Quakes: [stations] :: Quake -> Int
+ Numeric.Datasets.Quakes: data Quake
+ Numeric.Datasets.Quakes: instance Data.Csv.Conversion.FromNamedRecord Numeric.Datasets.Quakes.Quake
+ Numeric.Datasets.Quakes: instance GHC.Generics.Generic Numeric.Datasets.Quakes.Quake
+ Numeric.Datasets.Quakes: instance GHC.Read.Read Numeric.Datasets.Quakes.Quake
+ Numeric.Datasets.Quakes: instance GHC.Show.Show Numeric.Datasets.Quakes.Quake
+ Numeric.Datasets.Quakes: quakes :: Dataset Quake
+ Numeric.Datasets.States: StateEdu :: String -> String -> Int -> Int -> Int -> Int -> Double -> Int -> StateEdu
+ Numeric.Datasets.States: [dollarSpend] :: StateEdu -> Double
+ Numeric.Datasets.States: [population] :: StateEdu -> Int
+ Numeric.Datasets.States: [region] :: StateEdu -> String
+ Numeric.Datasets.States: [satMath] :: StateEdu -> Int
+ Numeric.Datasets.States: [satPercent] :: StateEdu -> Int
+ Numeric.Datasets.States: [satVerbal] :: StateEdu -> Int
+ Numeric.Datasets.States: [state] :: StateEdu -> String
+ Numeric.Datasets.States: [teacherPay] :: StateEdu -> Int
+ Numeric.Datasets.States: data StateEdu
+ Numeric.Datasets.States: instance Data.Csv.Conversion.FromNamedRecord Numeric.Datasets.States.StateEdu
+ Numeric.Datasets.States: instance GHC.Generics.Generic Numeric.Datasets.States.StateEdu
+ Numeric.Datasets.States: instance GHC.Read.Read Numeric.Datasets.States.StateEdu
+ Numeric.Datasets.States: instance GHC.Show.Show Numeric.Datasets.States.StateEdu
+ Numeric.Datasets.States: states :: Dataset StateEdu
+ Numeric.Datasets.Sunspots: Sunspot :: Double -> Double -> Sunspot
+ Numeric.Datasets.Sunspots: [sunspotMonth] :: Sunspot -> Double
+ Numeric.Datasets.Sunspots: [time] :: Sunspot -> Double
+ Numeric.Datasets.Sunspots: data Sunspot
+ Numeric.Datasets.Sunspots: instance Data.Csv.Conversion.FromNamedRecord Numeric.Datasets.Sunspots.Sunspot
+ Numeric.Datasets.Sunspots: instance GHC.Generics.Generic Numeric.Datasets.Sunspots.Sunspot
+ Numeric.Datasets.Sunspots: instance GHC.Read.Read Numeric.Datasets.Sunspots.Sunspot
+ Numeric.Datasets.Sunspots: instance GHC.Show.Show Numeric.Datasets.Sunspots.Sunspot
+ Numeric.Datasets.Sunspots: sunspots :: Dataset Sunspot
+ Numeric.Datasets.UN: GdpMortality :: String -> Maybe Int -> Maybe Int -> GdpMortality
+ Numeric.Datasets.UN: [country] :: GdpMortality -> String
+ Numeric.Datasets.UN: [gdp] :: GdpMortality -> Maybe Int
+ Numeric.Datasets.UN: [infantMortality] :: GdpMortality -> Maybe Int
+ Numeric.Datasets.UN: data GdpMortality
+ Numeric.Datasets.UN: gdpMortalityUN :: Dataset GdpMortality
+ Numeric.Datasets.UN: instance Data.Csv.Conversion.FromNamedRecord Numeric.Datasets.UN.GdpMortality
+ Numeric.Datasets.UN: instance GHC.Generics.Generic Numeric.Datasets.UN.GdpMortality
+ Numeric.Datasets.UN: instance GHC.Read.Read Numeric.Datasets.UN.GdpMortality
+ Numeric.Datasets.UN: instance GHC.Show.Show Numeric.Datasets.UN.GdpMortality
+ Numeric.Datasets.Vocabulary: Female :: Sex
+ Numeric.Datasets.Vocabulary: Male :: Sex
+ Numeric.Datasets.Vocabulary: Vocab :: Integer -> Sex -> Int -> Int -> Vocab
+ Numeric.Datasets.Vocabulary: [education] :: Vocab -> Int
+ Numeric.Datasets.Vocabulary: [sex] :: Vocab -> Sex
+ Numeric.Datasets.Vocabulary: [vocabulary] :: Vocab -> Int
+ Numeric.Datasets.Vocabulary: [year] :: Vocab -> Integer
+ Numeric.Datasets.Vocabulary: data Sex
+ Numeric.Datasets.Vocabulary: data Vocab
+ Numeric.Datasets.Vocabulary: instance Data.Csv.Conversion.FromField Numeric.Datasets.Vocabulary.Sex
+ Numeric.Datasets.Vocabulary: instance Data.Csv.Conversion.FromNamedRecord Numeric.Datasets.Vocabulary.Vocab
+ Numeric.Datasets.Vocabulary: instance GHC.Classes.Eq Numeric.Datasets.Vocabulary.Sex
+ Numeric.Datasets.Vocabulary: instance GHC.Generics.Generic Numeric.Datasets.Vocabulary.Sex
+ Numeric.Datasets.Vocabulary: instance GHC.Generics.Generic Numeric.Datasets.Vocabulary.Vocab
+ Numeric.Datasets.Vocabulary: instance GHC.Read.Read Numeric.Datasets.Vocabulary.Sex
+ Numeric.Datasets.Vocabulary: instance GHC.Read.Read Numeric.Datasets.Vocabulary.Vocab
+ Numeric.Datasets.Vocabulary: instance GHC.Show.Show Numeric.Datasets.Vocabulary.Sex
+ Numeric.Datasets.Vocabulary: instance GHC.Show.Show Numeric.Datasets.Vocabulary.Vocab
+ Numeric.Datasets.Vocabulary: vocab :: Dataset Vocab
+ Numeric.Datasets.WineQuality: WineQuality :: Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Int -> WineQuality
+ Numeric.Datasets.WineQuality: [alcohol] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [chlorides] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [citricAcid] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [density] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [fixedAcidity] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [freeSulfurDioxide] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [pH] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [quality] :: WineQuality -> Int
+ Numeric.Datasets.WineQuality: [residualSugar] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [sulphates] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [totalSulfurDioxide] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: [volatileAcidity] :: WineQuality -> Double
+ Numeric.Datasets.WineQuality: data WineQuality
+ Numeric.Datasets.WineQuality: instance Data.Csv.Conversion.FromNamedRecord Numeric.Datasets.WineQuality.WineQuality
+ Numeric.Datasets.WineQuality: instance GHC.Generics.Generic Numeric.Datasets.WineQuality.WineQuality
+ Numeric.Datasets.WineQuality: instance GHC.Read.Read Numeric.Datasets.WineQuality.WineQuality
+ Numeric.Datasets.WineQuality: instance GHC.Show.Show Numeric.Datasets.WineQuality.WineQuality
+ Numeric.Datasets.WineQuality: redWineQuality :: Dataset WineQuality
+ Numeric.Datasets.WineQuality: whiteWineQuality :: Dataset WineQuality
Files
- changelog.md +8/−0
- datasets.cabal +8/−1
- src/Numeric/Datasets.hs +42/−0
- src/Numeric/Datasets/CO2.hs +30/−0
- src/Numeric/Datasets/Quakes.hs +31/−0
- src/Numeric/Datasets/States.hs +43/−0
- src/Numeric/Datasets/Sunspots.hs +33/−0
- src/Numeric/Datasets/UN.hs +33/−0
- src/Numeric/Datasets/Vocabulary.hs +35/−0
- src/Numeric/Datasets/WineQuality.hs +54/−0
changelog.md view
@@ -1,3 +1,11 @@+0.2.1++* Wine quality datasets++* Vocabulary, UN, States datasets++* CO2, Sunspots and Quakes datasets+ 0.2.0.3 * Further GHC portability
datasets.cabal view
@@ -1,5 +1,5 @@ Name: datasets-Version: 0.2.0.3+Version: 0.2.1 Synopsis: Classical data sets for statistics and machine learning Description: Classical machine learning and statistics datasets from the UCI Machine Learning Repository and other sources.@@ -59,10 +59,17 @@ , Numeric.Datasets.Adult , Numeric.Datasets.BreastCancerWisconsin , Numeric.Datasets.Car+ , Numeric.Datasets.CO2 , Numeric.Datasets.Iris , Numeric.Datasets.Michelson , Numeric.Datasets.Nightingale+ , Numeric.Datasets.Quakes+ , Numeric.Datasets.States+ , Numeric.Datasets.Sunspots+ , Numeric.Datasets.UN+ , Numeric.Datasets.Vocabulary , Numeric.Datasets.Wine+ , Numeric.Datasets.WineQuality Build-depends: base >= 4.6 && < 5 , cassava
src/Numeric/Datasets.hs view
@@ -30,6 +30,8 @@ import qualified Data.Vector as V import qualified Data.Aeson as JSON import Control.Applicative+import Data.Time+import Data.Char (ord) import Data.Char (toUpper) import Text.Read (readMaybe)@@ -62,6 +64,17 @@ csvDataset :: FromRecord a => Source -> Dataset a csvDataset = csvDatasetPreprocess id +-- |Define a dataset from a source for a CSV file with a known header+csvHdrDataset :: FromNamedRecord a => Source -> Dataset a+csvHdrDataset src cacheDir = do+ parseCSVHdr <$> getFileFromSource cacheDir src++-- |Define a dataset from a source for a CSV file with a known header and separator+csvHdrDatasetSep :: FromNamedRecord a => Char -> Source -> Dataset a+csvHdrDatasetSep sepc src cacheDir = do+ parseCSVHdrSep sepc <$> getFileFromSource cacheDir src++-- |Define a dataset from a source for a JSON file -- data file must be accessible with HTTP, not HTTPS jsonDataset :: JSON.FromJSON a => Source -> Dataset a jsonDataset src cacheDir = do bs <- getFileFromSource cacheDir src@@ -84,12 +97,29 @@ BL.writeFile fnm bs return bs +-- | Parse CSV file parseCSV :: FromRecord a => (BL.ByteString -> BL.ByteString) -> BL.ByteString -> [a] parseCSV preF contents = case decode NoHeader (preF contents) of Right theData -> V.toList theData Left err -> error err +-- | Parse CSV file with known header+parseCSVHdr :: FromNamedRecord a => BL.ByteString -> [a]+parseCSVHdr contents =+ case decodeByName contents of+ Right (_,theData) -> V.toList theData+ Left err -> error err++-- | Parse CSV file with known header+parseCSVHdrSep :: FromNamedRecord a => Char -> BL.ByteString -> [a]+parseCSVHdrSep sepc contents =+ let opts = defaultDecodeOptions { decDelimiter = fromIntegral (ord sepc)} in+ case decodeByNameWith opts contents of+ Right (_,theData) -> V.toList theData+ Left err -> error err++-- | Parse JSON file parseJSON :: JSON.FromJSON a => BL.ByteString -> [a] parseJSON bs = case JSON.decode bs of Just theData -> theData@@ -139,3 +169,15 @@ chomp (' ':cs) = chomp cs chomp (c:cs) = c:cs chomp [] = []++-- * Helper functions for data analysis++-- | convert a fractional year to UTCTime with second-level precision (due to not taking into account leap seconds)+yearToUTCTime :: Double -> UTCTime+yearToUTCTime yearDbl =+ let (yearn,yearFrac) = properFraction yearDbl+ dayYearBegin = fromGregorian yearn 1 1+ (dayn, dayFrac) = properFraction $ yearFrac * (if isLeapYear yearn then 366 else 365)+ day = addDays dayn dayYearBegin+ dt = secondsToDiffTime $ round $ dayFrac * 86400+ in UTCTime day dt
+ src/Numeric/Datasets/CO2.hs view
@@ -0,0 +1,30 @@+{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}++{-|++Mauna Loa CO2 time-series+++Listed as co2 here: http://vincentarelbundock.github.io/Rdatasets/datasets.html++See <http://vincentarelbundock.github.io/Rdatasets/doc/datasets/co2.html>++-}++module Numeric.Datasets.CO2 where++import Numeric.Datasets++import Data.Csv+import GHC.Generics++data CO2 = CO2+ { time :: Double+ , co2 :: Double+ } deriving (Show, Read, Generic)++instance FromNamedRecord CO2++maunaLoaCO2 :: Dataset CO2+maunaLoaCO2 = csvHdrDataset+ $ URL "http://vincentarelbundock.github.io/Rdatasets/csv/datasets/co2.csv"
+ src/Numeric/Datasets/Quakes.hs view
@@ -0,0 +1,31 @@+{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}++{-|++Locations of Earthquakes off Fiji++Listed as quakes here: http://vincentarelbundock.github.io/Rdatasets/datasets.html+++-}++module Numeric.Datasets.Quakes where++import Numeric.Datasets++import Data.Csv+import GHC.Generics++data Quake = Quake+ { lat :: Double+ , long :: Double+ , depth :: Double+ , mag :: Double+ , stations :: Int+ } deriving (Show, Read, Generic)++instance FromNamedRecord Quake++quakes :: Dataset Quake+quakes = csvHdrDataset+ $ URL "http://vincentarelbundock.github.io/Rdatasets/csv/datasets/quakes.csv"
+ src/Numeric/Datasets/States.hs view
@@ -0,0 +1,43 @@+{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}++{-|++Data on education in US states++<http://vincentarelbundock.github.io/Rdatasets/doc/car/States.html>++-}++module Numeric.Datasets.States where++import Numeric.Datasets++import Data.Csv+import GHC.Generics+import Control.Applicative++data StateEdu = StateEdu+ { state :: String+ , region :: String+ , population :: Int+ , satVerbal :: Int+ , satMath :: Int+ , satPercent :: Int+ , dollarSpend :: Double+ , teacherPay :: Int+ } deriving (Show, Read, Generic)++instance FromNamedRecord StateEdu where+ parseNamedRecord m = StateEdu <$>+ m .: "" <*>+ m .: "region" <*>+ m .: "pop" <*>+ m .: "SATV" <*>+ m .: "SATM" <*>+ m .: "percent" <*>+ m .: "dollars" <*>+ m .: "pay"++states :: Dataset StateEdu+states = csvHdrDataset+ $ URL "http://vincentarelbundock.github.io/Rdatasets/csv/car/States.csv"
+ src/Numeric/Datasets/Sunspots.hs view
@@ -0,0 +1,33 @@+{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}++{-|++Monthly sunspots from 1749++Listed as sunspot.month here: http://vincentarelbundock.github.io/Rdatasets/datasets.html++See <http://vincentarelbundock.github.io/Rdatasets/doc/datasets/sunspot.month.html>++-}++module Numeric.Datasets.Sunspots where++import Numeric.Datasets++import Data.Csv+import GHC.Generics+import Control.Applicative++data Sunspot = Sunspot+ { time :: Double+ , sunspotMonth :: Double+ } deriving (Show, Read, Generic)++instance FromNamedRecord Sunspot where+ parseNamedRecord m = Sunspot <$>+ m .: "time" <*>+ m .: "sunspot.month"++sunspots :: Dataset Sunspot+sunspots = csvHdrDataset+ $ URL "http://vincentarelbundock.github.io/Rdatasets/csv/datasets/sunspot.month.csv"
+ src/Numeric/Datasets/UN.hs view
@@ -0,0 +1,33 @@+{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}++{-|++GDP and infant mortality++<http://vincentarelbundock.github.io/Rdatasets/doc/car/UN.html>++-}++module Numeric.Datasets.UN where++import Numeric.Datasets++import Data.Csv+import GHC.Generics+import Control.Applicative++data GdpMortality = GdpMortality+ { country :: String+ , infantMortality :: Maybe Int+ , gdp :: Maybe Int+ } deriving (Show, Read, Generic)++instance FromNamedRecord GdpMortality where+ parseNamedRecord m = GdpMortality <$>+ m .: "" <*>+ (m .: "infant.mortality" <|> return Nothing) <*>+ (m .: "gdp" <|> return Nothing)++gdpMortalityUN :: Dataset GdpMortality+gdpMortalityUN = csvHdrDataset+ $ URL "http://vincentarelbundock.github.io/Rdatasets/csv/car/UN.csv"
+ src/Numeric/Datasets/Vocabulary.hs view
@@ -0,0 +1,35 @@+{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}++{-|++Vocabulary and Education++<http://vincentarelbundock.github.io/Rdatasets/doc/car/Vocab.html>++-}++module Numeric.Datasets.Vocabulary where++import Numeric.Datasets++import Data.Csv+import GHC.Generics++data Sex = Female | Male+ deriving (Show, Read, Eq, Generic)++instance FromField Sex where+ parseField = parseReadField++data Vocab = Vocab+ { year :: Integer+ , sex :: Sex+ , education :: Int+ , vocabulary :: Int+ } deriving (Show, Read, Generic)++instance FromNamedRecord Vocab++vocab :: Dataset Vocab+vocab = csvHdrDataset+ $ URL "http://vincentarelbundock.github.io/Rdatasets/csv/car/Vocab.csv"
+ src/Numeric/Datasets/WineQuality.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}++{-|++Quality of red and white wines based on physicochemical properties++See <http://mlr.cs.umass.edu/ml/datasets/Wine+Quality>++-}++module Numeric.Datasets.WineQuality where++import Numeric.Datasets++import Data.Csv+import GHC.Generics+import Control.Applicative++data WineQuality = WineQuality+ { fixedAcidity :: Double+ , volatileAcidity :: Double+ , citricAcid :: Double+ , residualSugar :: Double+ , chlorides :: Double+ , freeSulfurDioxide :: Double+ , totalSulfurDioxide :: Double+ , density :: Double+ , pH :: Double+ , sulphates :: Double+ , alcohol :: Double+ , quality :: Int+ } deriving (Show, Read, Generic)++instance FromNamedRecord WineQuality where+ parseNamedRecord m = WineQuality <$>+ m .: "fixed acidity" <*>+ m .: "volatile acidity" <*>+ m .: "citric acid" <*>+ m .: "residual sugar" <*>+ m .: "chlorides" <*>+ m .: "free sulfur dioxide" <*>+ m .: "total sulfur dioxide" <*>+ m .: "density" <*>+ m .: "pH" <*>+ m .: "sulphates" <*>+ m .: "alcohol" <*>+ m .: "quality"++redWineQuality, whiteWineQuality :: Dataset WineQuality+redWineQuality = csvHdrDatasetSep ';'+ $ URL "http://mlr.cs.umass.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"++whiteWineQuality = csvHdrDatasetSep ';'+ $ URL "http://mlr.cs.umass.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv"