packages feed

timeseries 0.4.0 → 0.4.1

raw patch · 15 files changed

+120/−20 lines, 15 files

Files

CHANGES.md view
@@ -1,4 +1,9 @@-# Version 0.4+# Version 0.5++  * Removed implicit Prelude from cabal+++# Version 0.4 (2016-12-22)    * reimplemented resampling function   * Implemented Sessions
src/Data/TimeSeries.hs view
@@ -1,7 +1,15 @@ -- | TimeSeries library-module Data.TimeSeries (module X) where-  import Data.TimeSeries.Series as X-  import Data.TimeSeries.Stats as X-  import Data.TimeSeries.Time as X-  import Data.TimeSeries.IO.CSVReader as X-  import Data.TimeSeries.IO.CSVWriter as X+module Data.TimeSeries+    ( module Data.TimeSeries.Series+    , module Data.TimeSeries.Stats+    , module Data.TimeSeries.Time+    , module Data.TimeSeries.IO.CSVReader+    , module Data.TimeSeries.IO.CSVWriter+    ) where+++import Data.TimeSeries.Series+import Data.TimeSeries.Stats+import Data.TimeSeries.Time+import Data.TimeSeries.IO.CSVReader+import Data.TimeSeries.IO.CSVWriter
src/Data/TimeSeries/IO/CSVReader.hs view
@@ -1,12 +1,21 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE OverloadedStrings #-} +{-|+Module:      Data.TimeSeries.IO.CSVReader+Copyright:   (c) 2016 Krzysztof Langner+License:     BSD3+Stability:   experimental+Portability: portable+Reading Time Series from CSV file+-} module Data.TimeSeries.IO.CSVReader     ( HasHeader(..)     , loadCSV     )where  +import Prelude import qualified Data.ByteString.Lazy as BS import qualified Data.Text as T import qualified Data.Csv as CSV@@ -18,6 +27,7 @@                                         , series                                         ) +-- | Define if csv file has header data HasHeader = HasHeader | NoHeader  -- | Load data from CSV file and create Time Series from it
src/Data/TimeSeries/IO/CSVWriter.hs view
@@ -1,4 +1,12 @@ {-# LANGUAGE OverloadedStrings #-}+{-|+Module:      Data.TimeSeries.IO.CSVWriter+Copyright:   (c) 2016 Krzysztof Langner+License:     BSD3+Stability:   experimental+Portability: portable+Write Time Series to the csv file.+-}  module Data.TimeSeries.IO.CSVWriter( saveCSV ) where 
src/Data/TimeSeries/Series.hs view
@@ -37,9 +37,10 @@ import Data.TimeSeries.Time (TimeResolution, nextTime)  --- | Data points is single index value od time series-data DataPoint a = DP { dpIndex :: !UTCTime-                      , dpValue :: a }+-- | Data points is a time indexed value+data DataPoint a = DP { dpIndex :: !UTCTime     -- ^ Get data point index.+                      , dpValue :: a            -- ^ Get data point value.+                      }                  deriving (Show, Eq)  instance Functor DataPoint where@@ -61,12 +62,12 @@     length = size  --- | Create empty series+-- | Create empty series. emptySeries :: Series a emptySeries = Series []  --- | Create series+-- | Create series from UTCTime and value. series :: [(UTCTime, a)] -> Series a series xs = Series $ map (uncurry DP) xs @@ -82,12 +83,12 @@     where idx = map (posixSecondsToUTCTime . fromIntegral) ts  --- | Convert Time Series to list+-- | Convert Time Series to the list. toList :: Series a -> [(UTCTime, a)] toList (Series xs) = map (\(DP x y) -> (x, y)) xs  --- | Get series values+-- | Get series values as list. values :: Series a -> [a] values ts = map snd (toList ts) @@ -115,7 +116,7 @@           safeHead (i:_) = Just i  --- | Return series subset+-- | Return series subset. -- Complexity O(n) -- -- >slice (Series [DP 1 41.3, DP 2 52.22, DP 3 3.0]) 2 3 == Series [DP 2 52.22, DP 3 3.0]@@ -128,7 +129,7 @@ slice start end (Series xs) = Series [DP x y | DP x y <- xs, x >= start && x <= end]  --- | Apply function to rolling window to create new Series+-- | Apply rolling window to create a new Series. -- Rolling window is also called Sliding Window. rolling ::  TimeResolution  -- ^ Window size         -> ([a] -> b)       -- ^ Function applied to each window@@ -151,7 +152,7 @@ isInTimeRange dt (DP i _) (DP j _) = j < nextTime dt i  --- | Resample Time series+-- | Resample Series. resample :: Fractional a          => UTCTime             -- ^ Starting time          -> TimeResolution      -- ^ Resampling resolution
src/Data/TimeSeries/Sessions.hs view
@@ -1,9 +1,19 @@+{-|+Module:      Data.TimeSeries.Sessions+Copyright:   (c) 2016 Krzysztof Langner+License:     BSD3+Stability:   experimental+Portability: portable+Operation on sessions.+-}  module Data.TimeSeries.Sessions     ( Session(..)     , find     ) where ++import Prelude import Data.Time (UTCTime) import Data.TimeSeries.Series (Series, toList) @@ -12,14 +22,17 @@  -- | Session is a time range of a single event --   Some examples:+-- --     * Session with web application+-- --     * Rain event+-- data Session = Session { sessionStart :: UTCTime                        , sessionEnd :: UTCTime }                        deriving (Eq, Show)  --- | Find all session in a given time series+-- | Find all session in a given Time Series find :: TimeResolution -> Series Bool -> [Session] find dt ts = map (uncurry Session) xs'     where
src/Data/TimeSeries/Stats.hs view
@@ -1,3 +1,11 @@+{-|+Module:      Data.TimeSeries.Stats+Copyright:   (c) 2016 Krzysztof Langner+License:     BSD3+Stability:   experimental+Portability: portable+Calculate Series statistics.+-}  module Data.TimeSeries.Stats     ( mean
src/Data/TimeSeries/Time.hs view
@@ -1,4 +1,11 @@--- | Helper functions operating on date and Time+{-|+Module:      Data.TimeSeries.Time+Copyright:   (c) 2016 Krzysztof Langner+License:     BSD3+Stability:   experimental+Portability: portable+Helper functions operating on date and Time+-} module Data.TimeSeries.Time     ( TimeResolution     , days@@ -8,6 +15,7 @@     , years     ) where +import Prelude (Integer, Int, fromIntegral, (*)) import Data.Time( UTCTime(..)                 , NominalDiffTime                 , addDays
test-src/Data/TimeSeries/IO/CSVSpec.hs view
@@ -1,5 +1,6 @@ module Data.TimeSeries.IO.CSVSpec (spec) where +import Prelude import Test.Hspec import Data.Text.Time (parseISODateTime) 
test-src/Data/TimeSeries/SeriesSpec.hs view
@@ -1,5 +1,6 @@ module Data.TimeSeries.SeriesSpec (spec) where +import Prelude import Test.Hspec import Control.Arrow (first) import Data.Time (UTCTime)
test-src/Data/TimeSeries/SessionsSpec.hs view
@@ -1,5 +1,6 @@ module Data.TimeSeries.SessionsSpec (spec) where +import Prelude import Test.Hspec import Data.Time.Clock.POSIX (posixSecondsToUTCTime, utcTimeToPOSIXSeconds) import Data.Time (NominalDiffTime)
+ test-src/Data/TimeSeries/StatsSpec.hs view
@@ -0,0 +1,28 @@+module Data.TimeSeries.StatsSpec (spec) where++import Prelude+import Test.Hspec+import Data.Time.Clock.POSIX (posixSecondsToUTCTime, utcTimeToPOSIXSeconds)++import qualified Data.TimeSeries as TS+++spec :: Spec+spec =++  describe "Base" $ do++    it "mean" $ do+        let idx = [1..]+        let values = [1.0, 2.0, 3.0] :: [Double]+        TS.mean (TS.tsSeries idx values) `shouldBe` 2.0++    it "variance" $ do+        let idx = [1..]+        let values = [1.0..6.0] :: [Double]+        TS.variance (TS.tsSeries idx values) `shouldBe` 35/12++    it "standard deviation" $ do+        let idx = [1..]+        let values = [1.0..6.0] :: [Double]+        TS.std (TS.tsSeries idx values) `shouldBe` sqrt (35/12)
test-src/Data/TimeSeries/TimeSpec.hs view
@@ -1,5 +1,6 @@ module Data.TimeSeries.TimeSpec (spec) where +import Prelude import Data.Time hiding (months) import Test.Hspec import Test.QuickCheck
test-src/Spec.hs view
@@ -1,3 +1,5 @@++import Prelude import Test.Hspec import qualified Data.TimeSeries.SeriesSpec import qualified Data.TimeSeries.SessionsSpec
timeseries.cabal view
@@ -1,5 +1,5 @@ name:           timeseries-version:        0.4.0+version:        0.4.1 synopsis:       Library for Time Series processing License:        BSD3 License-file:   LICENSE@@ -28,6 +28,8 @@ library   hs-source-dirs:   src   default-language: Haskell2010+  default-extensions:+                    NoImplicitPrelude   ghc-options:      -O2 -Wall -fwarn-tabs -funbox-strict-fields   build-depends:                     base >= 4.7 && < 5,@@ -52,6 +54,8 @@   type:             exitcode-stdio-1.0   main-is:          Spec.hs   default-language: Haskell2010+  default-extensions:+                    NoImplicitPrelude   ghc-options:      -threaded -rtsopts -fsimpl-tick-factor=500   build-depends:                     base >= 4 && <5,@@ -72,6 +76,7 @@                     Data.TimeSeries.Stats                     Data.TimeSeries.Time                     Data.TimeSeries.SeriesSpec+                    Data.TimeSeries.StatsSpec                     Data.TimeSeries.SessionsSpec                     Data.TimeSeries.TimeSpec                     Data.TimeSeries.IO.CSVReader