mirror of
https://gitlab.dit.htwk-leipzig.de/computermusik-ws23/data-composition.git
synced 2025-05-18 23:01:47 +02:00
53 lines
1.3 KiB
Plaintext
53 lines
1.3 KiB
Plaintext
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
|
|
|
|
import Prelude hiding (filter)
|
|
import Data.Csv -- this is from the Cassava library
|
|
import GHC.IO.Exception
|
|
import Data.List
|
|
import Control.Exception (try)
|
|
import qualified Data.ByteString.Lazy as BL
|
|
import qualified Data.Vector as V
|
|
import Graphics.Matplotlib
|
|
|
|
data TimestampedDatum = TimestampedDatum {
|
|
timestamp :: String,
|
|
datum :: Float
|
|
} deriving Show
|
|
|
|
dataPath = "../data/weather/balcony_temperature.csv"
|
|
|
|
instance FromNamedRecord TimestampedDatum where
|
|
parseNamedRecord r =
|
|
TimestampedDatum
|
|
<$> r .: "time"
|
|
<*> r .: "C.value"
|
|
|
|
|
|
type ErrorMsg = String
|
|
type CsvData = (Header, V.Vector TimestampedDatum)
|
|
|
|
data CsvData = CsvData (Header, V.Vector TimestampedDatum)
|
|
|
|
parseCsv :: FilePath -> IO (Either ErrorMsg CsvData)
|
|
parseCsv filePath = do
|
|
result <- try $ BL.readFile filePath
|
|
return $ case result of
|
|
Left (exception :: IOException) -> Left $ show exception
|
|
Right contents -> decodeByName contents
|
|
|
|
getList :: Either ErrorMsg CsvData -> [Float]
|
|
getList maybeCsvData = case maybeCsvData of
|
|
CsvData (_, v) -> map datum v
|
|
ErrorMsg _ -> []
|
|
|
|
getList parseCsv dataPath
|
|
|
|
d1 =<< (fmap (\x -> ) (parseCsv dataPath))
|
|
|
|
-- getValue :: TimestampedDatum -> Float
|
|
-- getValue = datum
|
|
|
|
onscreen $ getList parseCsv dataPath |