mod correlations;
mod descriptive;
mod distributions;
mod patterns;
mod temporal;
pub mod types;
use crate::query_result::QueryResult;
use shape_ast::error::Result;
pub use types::*;
use descriptive::calculate_basic_statistics;
use distributions::{
calculate_confidence_interval, match_rate_confidence_interval, value_confidence_interval,
};
use patterns::calculate_pattern_statistics;
use temporal::calculate_temporal_statistics;
pub struct StatisticsCalculator {
confidence_level: f64,
}
impl StatisticsCalculator {
pub fn new() -> Self {
Self {
confidence_level: 0.95,
}
}
pub fn calculate_confidence_interval(&self, values: &[f64]) -> ConfidenceInterval {
calculate_confidence_interval(values, self.confidence_level)
}
pub fn value_confidence_interval(&self, result: &QueryResult) -> ConfidenceInterval {
value_confidence_interval(result, self.confidence_level)
}
pub fn match_rate_confidence_interval(
&self,
matches: usize,
total: usize,
) -> ConfidenceInterval {
match_rate_confidence_interval(matches, total, self.confidence_level)
}
pub fn generate_report(&self, query_result: &QueryResult) -> Result<StatisticsReport> {
let basic = calculate_basic_statistics(query_result)?;
let patterns = calculate_pattern_statistics(query_result)?;
let temporal = calculate_temporal_statistics(query_result)?;
Ok(StatisticsReport {
basic,
patterns,
temporal,
})
}
}
impl Default for StatisticsCalculator {
fn default() -> Self {
Self::new()
}
}