timeseries
9 changed files+15−14
README.mdmodified+3−3View file
@@ -1,12 +1,12 @@
11 # benchcompress
22
3-A benchmarking framework for evaluating compression algorithms on numeric array datasets, with a focus on scientific data.
3+A benchmarking framework for evaluating compression algorithms on numeric timeseries datasets, with a focus on scientific data.
44
55 Latest benchmark results: https://magland.github.io/benchcompress/
66
77 ## Overview
88
9-Benchcompress is a comprehensive benchmarking framework for evaluating compression algorithms on numeric array datasets. The system follows an automated workflow:
9+Benchcompress is a comprehensive benchmarking framework for evaluating compression algorithms on numeric timeseries datasets. The system follows an automated workflow:
1010
1111 1. **Defining Components**
1212 - Algorithms are implemented in `benchcompress/src/benchcompress/algorithms/`
@@ -91,7 +91,7 @@ H(X) = -\sum_{i} p(x_i) \log p(x_i).
9191 $$
9292 Here, $p(x_i)$ represents the probability of occurrence of the $i$-th symbol $x_i$ in the discrete distribution.
9393
94-In practice, achieving this theoretical compression ratio often requires sophisticated encoding techniques. While arithmetic encoding provides one such method, it is challenging to implement and can be computationally inefficient. A more modern and efficient alternative is Asymmetric Numeric Systems (ANS), which closely approaches the theoretical limit and is incorporated into state-of-the-art compressors such as ZStandard. However, these algorithms are primarily optimized for structured data types, such as text, rather than for scientific numerical data.
94+In practice, achieving this theoretical compression ratio often requires sophisticated encoding techniques. While arithmetic encoding provides one such method, it is challenging to implement and can be computationally inefficient. A more modern and efficient alternative is Asymmetric Numeric Systems (ANS), which closely approaches the theoretical limit and is incorporated into state-of-the-art compressors such as ZStandard. However, these algorithms are primarily optimized for structured data types, such as text, rather than for scientific numerical timeseries data.
9595
9696 In our benchmarks, we evaluate a simple implementation of ANS using a Python package we developed, called \texttt{simple\_ans}. As anticipated, ANS demonstrates superior performance when compressing i.i.d. samples from a discrete distribution. However, its efficiency diminishes when handling more structured data, such as continuous signals (e.g., voltage traces in electrophysiology).
9797
benchcompress/pyproject.tomlmodified+1−1View file
@@ -5,7 +5,7 @@ build-backend = "scikit_build_core.build"
55 [project]
66 name = "benchcompress"
77 version = "0.1.0"
8-description = "Benchmarking compression methods for numeric arrays"
8+description = "Benchmarking compression methods for numeric timeseries data"
99 readme = "README.md"
1010 requires-python = ">=3.8"
1111 authors = [
benchcompress/setup.pymodified+1−1View file
@@ -61,7 +61,7 @@ setup(
6161 ],
6262 },
6363 author="Jeremy Magland",
64- description="Benchmarking compression methods for numeric arrays",
64+ description="Benchmarking compression methods for numeric time series data",
6565 long_description=open("README.md").read(),
6666 long_description_content_type="text/markdown",
6767 keywords="compression, signal processing",
benchcompress/src/benchcompress/cli.pymodified+1−1View file
@@ -59,7 +59,7 @@ def validate_datasets(ctx, param, value):
5959
6060 @click.group()
6161 def cli():
62- """Benchmark compression algorithms for numeric arrays"""
62+ """Benchmark compression algorithms for numeric timeseries data"""
6363 pass
6464
6565
web-ui/src/App.tsxmodified+2−1View file
@@ -107,7 +107,8 @@ function App() {
107107 <span className="app-header-subtitle">
108108 {" · "}
109109 <span style={{ fontSize: "1rem", color: "#777" }}>
110- Comparing compression algorithms for numeric arrays
110+ Comparing compression algorithms for numeric time series
111+ data
111112 </span>
112113 </span>
113114 </span>
web-ui/src/hooks/useTagFilter.tsmodified+1−1View file
@@ -1,4 +1,4 @@
1-import { useState, useMemo } from "react";
1+import { useMemo } from "react";
22
33 interface TaggableItem {
44 tags: string[];
web-ui/src/pages/About.tsxmodified+3−3View file
@@ -13,9 +13,9 @@ const About: React.FC = () => {
1313 style={{ fontSize: "1.1rem", lineHeight: "1.6", marginBottom: "2rem" }}
1414 >
1515 Benchcompress is a benchmarking framework for evaluating compression
16- algorithms on numeric array datasets, with a focus on scientific data.
17- It measures compression ratios and performance metrics across various
18- algorithms and datasets.
16+ algorithms on numeric timeseries datasets, with a focus on scientific
17+ data. It measures compression ratios and performance metrics across
18+ various algorithms and datasets.
1919 </p>
2020
2121 <p>
web-ui/src/pages/paper.mdmodified+2−2View file
@@ -8,7 +8,7 @@
88
99 ## Abstract
1010
11-*Benchcompress* is a benchmarking framework designed to evaluate the performance of various compression algorithms on numeric array datasets, with a particular focus on scientific data. The framework automates the benchmarking process, measuring compression ratio, encoding throughput, and decoding throughput for each algorithm-dataset pair. Results are verified through decompression and comparison with the original data, ensuring accuracy and reliability. The benchmark results are stored and visualized through an interactive web interface, allowing users to filter, sort, and explore the data. This paper presents the design, implementation, and preliminary results of Benchcompress, highlighting its utility in identifying optimal compression techniques for scientific datasets.
11+*Benchcompress* is a benchmarking framework designed to evaluate the performance of various compression algorithms on numeric timeseries datasets, with a particular focus on scientific data. The framework automates the benchmarking process, measuring compression ratio, encoding throughput, and decoding throughput for each algorithm-dataset pair. Results are verified through decompression and comparison with the original data, ensuring accuracy and reliability. The benchmark results are stored and visualized through an interactive web interface, allowing users to filter, sort, and explore the data. This paper presents the design, implementation, and preliminary results of Benchcompress, highlighting its utility in identifying optimal compression techniques for scientific datasets.
1212
1313 ## Introduction
1414
@@ -37,7 +37,7 @@ H_{\text{Bernoulli, p=0.5}} = -0.5 \log_2 0.5 - 0.5 \log_2 0.5 = 1
3737 $$
3838 bits per sample. This means that the optimal compression ratio for such a dataset is 8, assuming the samples are stored as 8-bit integers. On the other hand, if $p\neq 0.5$, the entropy becomes lower and we can achieve compression at a rate of less than 1 bit per sample (e.g., for $p=0.1$, the entropy is around 0.47 bits per sample, so the compression ratio would be around 17).
3939
40-In practice, achieving this theoretical compression ratio requires sophisticated encoding techniques. Arithmetic encoding [ref] is one such method, but it is challenging to implement and can be computationally inefficient. A more modern and efficient alternative is Asymmetric Numeric Systems (ANS) [ref], which closely approaches the theoretical limit and is incorporated into state-of-the-art compressors such as ZStandard [ref]. However, these algorithms are primarily optimized for structured data types, such as text, rather than for scientific numerical data.
40+In practice, achieving this theoretical compression ratio requires sophisticated encoding techniques. Arithmetic encoding [ref] is one such method, but it is challenging to implement and can be computationally inefficient. A more modern and efficient alternative is Asymmetric Numeric Systems (ANS) [ref], which closely approaches the theoretical limit and is incorporated into state-of-the-art compressors such as ZStandard [ref]. However, these algorithms are primarily optimized for structured data types, such as text, rather than for scientific numeric data.
4141
4242 In our benchmarks, we evaluate a simple implementation of ANS using a Python package we developed, called `simple_ans`. As anticipated, ANS demonstrates superior performance when compressing i.i.d. samples from a discrete distribution. However, its efficiency diminishes when handling more structured data, such as continuous signals (e.g., voltage traces in electrophysiology).
4343
web-ui/tsconfig.app.tsbuildinfomodified+1−1View file
@@ -1 +1 @@
1-{"root":["./src/App.tsx","./src/main.tsx","./src/types.ts","./src/vite-env.d.ts","./src/components/BenchmarkTable.tsx","./src/components/TagFilter.tsx","./src/components/benchmark/charts/BenchmarkCharts.tsx","./src/components/benchmark/export/csvExport.ts","./src/components/benchmark/table/BenchmarkTable.tsx","./src/components/benchmark/table/columns.tsx","./src/components/benchmark/utils/formatters.ts","./src/components/dataset/TimeseriesView.tsx","./src/components/dataset/TimeseriesViewWorker.ts","./src/components/dataset/WorkerTypes.ts","./src/components/dataset/timeseriesViewReducer.ts","./src/hooks/TimeseriesDataClient.ts","./src/hooks/useMarkdownContent.ts","./src/hooks/useMarkdownPosts.ts","./src/hooks/useTagFilter.ts","./src/hooks/useTimeseriesData.ts","./src/hooks/useTimeseriesDataClient.ts","./src/pages/About.tsx","./src/pages/Algorithm.tsx","./src/pages/Algorithms.tsx","./src/pages/Dataset.tsx","./src/pages/Datasets.tsx","./src/pages/Home.tsx"],"version":"5.6.3"}
1+{"root":["./src/App.tsx","./src/main.tsx","./src/types.ts","./src/vite-env.d.ts","./src/components/BenchmarkTable.tsx","./src/components/ScrollToTop.tsx","./src/components/TagFilter.tsx","./src/components/algorithm/AlgorithmContent.tsx","./src/components/benchmark/charts/BenchmarkCharts.tsx","./src/components/benchmark/export/csvExport.ts","./src/components/benchmark/table/BenchmarkTable.tsx","./src/components/benchmark/table/columns.tsx","./src/components/benchmark/utils/formatters.ts","./src/components/dataset/DatasetContent.tsx","./src/components/dataset/TimeseriesView.tsx","./src/components/dataset/TimeseriesViewWorker.ts","./src/components/dataset/WorkerTypes.ts","./src/components/dataset/timeseriesViewReducer.ts","./src/components/tables/DatasetAlgorithmTables.tsx","./src/hooks/TimeseriesDataClient.ts","./src/hooks/useBenchmarkChartData.ts","./src/hooks/useMarkdownContent.ts","./src/hooks/useMarkdownPosts.ts","./src/hooks/useTagFilter.ts","./src/hooks/useTimeseriesData.ts","./src/hooks/useTimeseriesDataClient.ts","./src/pages/About.tsx","./src/pages/Algorithm.tsx","./src/pages/Dataset.tsx","./src/pages/Home.tsx","./src/pages/Paper.tsx","./src/reducers/tabsReducer.ts"],"version":"5.6.3"}