27 · Biblioteca Padrão
Estatísticas (std::stats)
Tendências centrais, dispersão, percentis, correlação e regressão linear com std::stats.
Nesta página
std::stats fornece funções estatísticas sobre arrays numéricos — desde médias
e medianas até desvio padrão, percentis e regressão linear. Todas as operações
são computações puras sobre dados em memória e rodam diretamente no sandbox.
Tendências centrais
stats.mean, stats.median e stats.mode calculam as três medidas de
tendência central. stats.min, stats.max e stats.sum completam o conjunto
de utilitários básicos sobre uma sequência.
Média, mediana, moda, min, max e soma de um array de amostras.
// Feature: stats.mean / stats.median / stats.mode — central tendencies
// When to use: data analysis, performance metrics, monitoring.
use std::stats
let sample = [10.0, 20.0, 30.0, 40.0, 50.0]
// arithmetic mean.
print(stats.mean(sample)) // expected: 30
// median (middle value once sorted).
print(stats.median(sample)) // expected: 30
// mode (most frequent value).
let bimodal = [1.0, 2.0, 2.0, 3.0, 3.0, 3.0, 4.0]
print(stats.mode(bimodal)) // expected: 3
// min, max, sum — basic utilities.
print(stats.min(sample)) // expected: 10
print(stats.max(sample)) // expected: 50
print(stats.sum(sample)) // expected: 150
Dispersão, percentis e correlação
Para séries de latências ou métricas de monitoramento, stats.variance e
stats.stddev medem a dispersão; stats.percentile(arr, p) calcula o p-ésimo
percentil (útil para p95/p99). stats.correlation retorna o coeficiente de
Pearson entre dois vetores, e stats.linear_regression ajusta uma reta
y = slope * x + intercept.
Variância, desvio padrão, p95, correlação e regressão linear simples.
// Feature: stats.variance / stats.stddev / stats.percentile / correlation
// When to use: measure dispersion, deviation-based alerts, correlations.
use std::stats
let latencies = [120.0, 130.0, 125.0, 140.0, 110.0, 135.0, 128.0, 122.0]
// variance (mean of the squared deviations).
print(stats.variance(latencies)) // expected: float ~80
// standard deviation = sqrt(variance).
let sd = stats.stddev(latencies)
print(sd > 0.0) // expected: true
// percentile(arr, p) — p in [0, 100].
print(stats.percentile(latencies, 50)) // expected: ~127 (median)
print(stats.percentile(latencies, 95)) // expected: p95 ~140
// Pearson correlation between two series (-1.0 .. 1.0).
let xs = [1.0, 2.0, 3.0, 4.0, 5.0]
let ys = [2.0, 4.0, 6.0, 8.0, 10.0]
let r = stats.correlation(xs, ys)
print(r) // expected: 1.0 (perfectly correlated)
// Simple linear regression -> { slope, intercept }.
let lr = stats.linear_regression(xs, ys)
print(lr.slope) // expected: 2.0
print(lr.intercept) // expected: 0.0
Desafio
Carregue uma lista de tempos de resposta de uma API e emita um alerta via
std::log.warn se o p95 ultrapassar 200 ms. Combine std::stats e std::log.
Veja também