@designliquido/delegua-estatistica
Version:
Biblioteca de manejo de operações de estatística em português, para JavaScript e Delégua
140 lines • 5.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.max = max;
exports.min = min;
exports.media = media;
exports.ve = ve;
exports.covar = covar;
exports.mediana = mediana;
exports.moda = moda;
const delegua_matematica_1 = require("@designliquido/delegua-matematica");
const algebra_linear_1 = require("@designliquido/delegua-matematica/algebra-linear");
const excecoes_1 = require("./excecoes");
/**
* Encontra o elemento máximo em um vetor.
* @param {any} _ O visitante da instrução, normalmente um interpretador.
* @param {inteiro[]} vetor Um vetor de números inteiros.
* @returns O maior número encontrado em um vetor.
*/
function max(_, vetor) {
return Math.max.apply(null, vetor);
}
/**
* Encontra o elemento mínimo em um vetor.
* @param {any} _ O visitante da instrução, normalmente um interpretador.
* @param {inteiro[]} vetor Um vetor de números inteiros.
* @returns O menor número encontrado em um vetor.
*/
function min(_, vetor) {
return Math.min.apply(null, vetor);
}
/**
* Calcula a média dos elementos da lista.
* @param {any} _ O visitante da instrução, normalmente um interpretador.
* @param {numero[]} vetores Um vetor de números.
* @returns O cálculo da média dos elementos.
*/
function media(_, ...vetores) {
const larguraArgumentos = Object.keys(arguments).length;
if (larguraArgumentos <= 0) {
throw new excecoes_1.EstatisticaErroEmTempoDeExecucao(null, //this.token,
"Você deve fornecer um parâmetro para a função.");
}
if (larguraArgumentos > 2) {
throw new excecoes_1.EstatisticaErroEmTempoDeExecucao(null, //this.token,
"A função recebe apenas um parâmetro.");
}
if (!Array.isArray(vetores)) {
throw new excecoes_1.EstatisticaErroEmTempoDeExecucao(null, //this.token,
"Você deve fornecer um parâmetro do tipo vetor.");
}
if (vetores.length <= 0) {
throw new excecoes_1.EstatisticaErroEmTempoDeExecucao(null, //this.token,
"Vetor vazio. Você deve fornecer ao menos um valor ao vetor.");
}
const vetorCombinado = vetores.reduce((acc, curr) => acc.concat(curr), []);
// Valida se o array contém apenas valores do tipo número.
vetorCombinado.forEach((item) => {
if (typeof item !== "number") {
throw new excecoes_1.EstatisticaErroEmTempoDeExecucao(null, //this.token,
"Você deve fornecer um vetor contendo apenas valores do tipo número.");
}
});
// Soma todos os itens.
const valoresSomados = vetorCombinado.reduce((acumulador, itemAtual) => acumulador + itemAtual, 0);
// Faz o cáculo da média em si e retorna.
return valoresSomados / vetorCombinado.length;
}
/**
* Calcula a média aritimética de uma matriz.
* @param {any} _ O visitante da instrução, normalmente um interpretador.
* @param {number[] | Array<number[]>} vetor Um vetor de vetores ou um vetor de números.
* @returns O valor da média aritimética.
*/
function ve(_, vetor) {
if (vetor.length === 1) {
return (0, delegua_matematica_1.aprox)(_, (0, algebra_linear_1.somaElementosMatriz)(_, vetor) / vetor[0].length, 4);
} // a is a row array
if (vetor[0].length === 1) {
return (0, delegua_matematica_1.aprox)(_, (0, algebra_linear_1.somaElementosMatriz)(_, vetor) / vetor.length, 4);
} // a is a column array
if (vetor[0] && vetor.length) {
return (0, delegua_matematica_1.aprox)(_, (0, algebra_linear_1.somaElementosMatriz)(_, vetor) / vetor.length, 4);
}
}
/**
* Calcula a covariância de duas matrizes.
* @param {any} _ O visitante da instrução, normalmente um interpretador.
* @param {numero[]} array1 Um vetor de números.
* @param {numero[]} array2 Um vetor de números.
* @returns O valor da coariância das duas matrizes.
*/
function covar(_, array1, array2) {
var u = ve(_, array1);
var v = ve(_, array2);
var arr1Len = array1.length;
var sq_dev = new Array(arr1Len);
for (var i = 0; i < arr1Len; i++)
sq_dev[i] = (array1[i] - u) * (array2[i] - v);
return (0, algebra_linear_1.somaElementosMatriz)(_, sq_dev) / (arr1Len - 1);
}
/**
* Calcula a mediana de um vetor ou matriz.
* @param {any} _ O visitante da instrução, normalmente um interpretador.
* @param {numero[]} vetor Vetor de números.
* @returns Número com o valor da mediana.
*/
function mediana(_, vetor) {
vetor.sort(function (a, b) {
return a - b;
});
const meio = vetor.length / 2;
return meio % 1 ? vetor[meio - 0.5] : (vetor[meio - 1] + vetor[meio]) / 2;
}
/**
* Calcula a moda de um vetor. A moda é o valor, ou valores, que mais são
* presentes em um conjunto.
* @param {any} _ O visitante da instrução, normalmente um interpretador.
* @param {numero[]} vetor O conjunto a ser avaliado.
* @returns O novo conjunto com os valores da moda.
* @see https://pt.wikipedia.org/wiki/Moda_(estat%C3%ADstica)
*/
function moda(_, vetor) {
const vetorDeObjetos = vetor.reduce(function (acc, curr) {
return acc[curr] ? ++acc[curr] : (acc[curr] = 1), acc;
}, {});
const counter = [];
Object.keys(vetorDeObjetos).filter(function (posicao) {
counter.push(vetorDeObjetos[posicao]);
});
const max = Math.max.apply(null, counter);
if (max === 1) {
return [];
}
return Object.keys(vetorDeObjetos)
.filter(function (posicao) {
return vetorDeObjetos[posicao] === max ? vetorDeObjetos[posicao] : null;
})
.map((item) => Number(item));
}
//# sourceMappingURL=estatistica.js.map