UNPKG

@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
"use strict"; 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