Skip to content

Commit 26cdafe

Browse files
committed
Add benchmark based on C++'s DataFrame library
1 parent 3121178 commit 26cdafe

2 files changed

Lines changed: 33 additions & 2 deletions

File tree

benchmark/DataFrameBenchmark.hs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,31 @@
1-
main = putStrLn "Hello, benchmark"
1+
{-# LANGUAGE NumericUnderscores #-}
2+
{-# LANGUAGE OverloadedStrings #-}
3+
4+
import qualified Data.DataFrame as D
5+
import qualified Data.DataFrame.Internal as D
6+
import qualified Data.Vector.Unboxed as VU
7+
8+
import Control.Monad (replicateM)
9+
import Criterion.Main
10+
import System.Random (randomRIO)
11+
12+
stats :: Int -> IO ()
13+
stats n = do
14+
ns <- VU.replicateM n (randomRIO (-20.0 :: Double, 20.0))
15+
xs <- VU.replicateM n (randomRIO (-20.0 :: Double, 20.0))
16+
ys <- VU.replicateM n (randomRIO (-20.0 :: Double, 20.0))
17+
let df = D.fromList [("first", D.UnboxedColumn ns),
18+
("second", D.UnboxedColumn xs),
19+
("third", D.UnboxedColumn ys)]
20+
21+
print $ D.mean "first" df
22+
print $ D.variance "second" df
23+
print $ D.correlation "second" "third" df
24+
print $ D.select ["first"] df D.|> D.take 10
25+
26+
main = defaultMain [
27+
bgroup "stats" [ bench "300_000" $ nfIO (stats 100_000)
28+
, bench "3_000_000" $ nfIO (stats 1_000_000)
29+
, bench "30_000_000" $ nfIO (stats 30_000_000)
30+
]
31+
]

dataframe.cabal

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ benchmark dataframe-benchmark
9797
main-is: DataFrameBenchmark.hs
9898
hs-source-dirs: benchmark
9999
build-depends: base >= 4.17.2.0 && < 4.21,
100+
criterion >= 1,
100101
text >= 2.0,
101-
time >= 1.12,
102+
random >= 1,
102103
vector ^>= 0.13,
103104
dataframe-lib-dev
104105
default-language: Haskell2010

0 commit comments

Comments
 (0)