Benchmarks
Performance benchmarks comparing Keel against popular data science languages. Keel is in early alpha stage and not yet optimized. These benchmarks represent baseline performance and will improve significantly in future releases.
Benchmark Results
Generated: 2026-02-25 21:00:23 +01:00
System Information:
- CPU: AMD Ryzen 9 7950X 16-Core Processor (32 cores)
- Total Memory: 93.44 GB
- OS: Linux 26.05 NixOS
Benchmark Parameters:
- Warmup runs: 5
- Measurement runs: 50
Note: Keel is in early alpha stage. No performance optimizations have been applied yet. These benchmarks represent baseline performance and are expected to improve significantly in future releases.
Performance Comparison
| Benchmark | R | julia | keel | python_pandas | python_polars | python_pypy | rust |
|---|---|---|---|---|---|---|---|
| 01_list_operations | 109.05 ± 1.34 | 0.10 ± 0.02 | 104.50 ± 0.95 | 275.90 ± 5.99 | 95.40 ± 1.47 | 0.06 ± 0.01 | 0.56 ± 0.01 |
| 02_dataframe_io | 624.80 ± 9.55 | 10.09 ± 5.44 | 37.36 ± 0.20 | 366.26 ± 5.94 | 112.24 ± 2.27 | 14.77 ± 1.79 | 11.37 ± 0.62 |
| 03_string_operations | 625.49 ± 7.86 | 208.00 ± 52.38 | 33.12 ± 0.22 | 390.33 ± 5.95 | 115.97 ± 2.02 | 182.40 ± 5.21 | 42.90 ± 0.51 |
| 04_groupby_aggregation | 552.61 ± 8.70 | 71.53 ± 2.54 | 32.59 ± 0.24 | 344.05 ± 5.97 | 109.25 ± 1.73 | - | 19.33 ± 0.37 |
| 05_dataframe_joins | 549.76 ± 6.42 | 28.63 ± 1.00 | 29.61 ± 0.20 | 314.70 ± 4.52 | 107.59 ± 2.00 | - | 14.71 ± 0.22 |
| 06_json_parsing | 949.30 ± 8.80 | 58.49 ± 29.33 | 54.83 ± 0.60 | 338.28 ± 6.28 | 126.68 ± 2.00 | - | 34.72 ± 1.33 |
| 07_window_functions | - | - | 29.95 ± 0.23 | 300.09 ± 4.43 | 105.68 ± 1.79 | 67.54 ± 0.74 | 7.43 ± 0.13 |
| 08_missing_data | 609.14 ± 8.62 | 157.49 ± 38.11 | 29.64 ± 0.23 | 331.35 ± 5.44 | 110.58 ± 1.66 | - | 18.98 ± 0.22 |
| 09_csv_parsing | 450.60 ± 7.18 | 160.36 ± 40.32 | 35.55 ± 0.22 | 408.63 ± 4.81 | 113.22 ± 1.70 | - | 18.58 ± 0.41 |
| 10_numeric_computations | 236.01 ± 3.97 | 67.43 ± 40.62 | 37.65 ± 0.27 | 346.68 ± 4.86 | 180.82 ± 2.25 | - | 36.12 ± 0.33 |
| 11_categorical_data | 610.92 ± 7.50 | 84.34 ± 32.33 | 30.30 ± 0.17 | 326.55 ± 4.05 | 116.11 ± 2.12 | - | 15.70 ± 0.15 |
| 12_pivot_reshape | 623.73 ± 13.62 | 16.41 ± 1.72 | 21.48 ± 0.20 | 309.95 ± 5.83 | 112.93 ± 2.19 | - | 6.88 ± 0.13 |
| 13_datetime_operations | 883.96 ± 22.49 | 32.67 ± 26.17 | 27.10 ± 0.27 | 373.01 ± 6.23 | 120.43 ± 2.31 | - | - |
Warmup Times (ms)
| Benchmark | R | julia | keel | python_pandas | python_polars | python_pypy | rust |
|---|---|---|---|---|---|---|---|
| 01_list_operations | 129.29 | 0.02 | 104.13 | 284.21 | 92.75 | 0.40 | 0.64 |
| 02_dataframe_io | 631.46 | 2637.94 | 37.25 | 358.02 | 111.39 | 15.35 | 10.66 |
| 03_string_operations | 620.79 | 792.94 | 32.64 | 385.50 | 113.48 | 204.82 | 44.24 |
| 04_groupby_aggregation | 561.76 | 902.27 | 33.13 | 337.21 | 108.52 | - | 18.98 |
| 05_dataframe_joins | 540.01 | 505.91 | 28.47 | 306.06 | 118.28 | - | 15.15 |
| 06_json_parsing | 961.83 | 93.25 | 55.65 | 335.19 | 124.53 | - | 36.66 |
| 07_window_functions | - | - | 30.00 | 315.29 | 103.76 | 70.95 | 7.41 |
| 08_missing_data | 615.00 | 549.32 | 29.96 | 327.77 | 108.50 | - | 19.49 |
| 09_csv_parsing | 471.67 | 440.33 | 35.87 | 405.54 | 124.72 | - | 18.74 |
| 10_numeric_computations | 233.77 | 86.21 | 38.13 | 350.92 | 181.56 | - | 35.63 |
| 11_categorical_data | 619.46 | 1023.69 | 30.87 | 322.15 | 114.87 | - | 15.89 |
| 12_pivot_reshape | 569.72 | 439.63 | 22.05 | 304.21 | 109.33 | - | 6.81 |
| 13_datetime_operations | 855.69 | 309.06 | 26.56 | 364.63 | 122.38 | - | - |
Summary
| Language | Avg Runtime (ms) | Fastest Benchmarks |
|---|---|---|
| R | 568.78 | 0 |
| julia | 74.63 | 1 |
| keel | 38.74 | 2 |
| python_pandas | 340.45 | 0 |
| python_polars | 117.45 | 0 |
| python_pypy | 66.19 | 1 |
| rust | 18.94 | 9 |