Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 8x 2x 2x 2x 2x 10x 2x 2x 2x 2x 12x 2x 12x 12x 8x 2x | import { purry } from './purry';
export interface Stats {
min: number;
max: number;
arithmetic_mean: number;
median: number;
geometric_mean: number;
middle: number;
quadratic_mean: number;
sum: number;
}
function _stats<X>(data: ReadonlyArray<X>, fn?: (q: X) => number): Stats {
const dfFn = (data: X) => {
return (data as unknown) as number;
};
const numbers = data.map(fn || dfFn);
function calcMedian(values: ReadonlyArray<number>) {
Iif (values.length === 0) return 0;
[...values].sort((a, b) => {
return a - b;
});
const half = Math.floor(values.length / 2);
Eif (values.length % 2) return values[half];
return (values[half - 1] + values[half]) / 2.0;
}
const min = Math.min(...numbers);
const max = Math.max(...numbers);
const sum = numbers.reduce((acc, c) => acc + c, 0);
return {
sum,
middle: (max + min) / 2,
min: Math.min(...numbers),
max: Math.max(...numbers),
arithmetic_mean: sum / numbers.length,
geometric_mean:
numbers.reduce((acc, c) => acc * (c === 0 ? 1 : c), 1) / numbers.length,
median: calcMedian(numbers),
quadratic_mean: Math.sqrt(
numbers.map(q => Math.pow(q, 2)).reduce((acc, c) => acc + c, 0)
),
};
}
/**
* Calculate objet numeric statistics
* @param data - Array of data
* @param fn - Function that maps to numeric data
* @signature
* P.stats(data, fn)
* @signature
* P.pipe(data,P.stats(fn))
* @example
* P.stats([{ data: 1 }, { data: 2 }, { data: 3 }], (q) => q.data) // => { sum: 6, middle: 2, min: 1, max: 3, arithmetic_mean: 2, geometric_mean: 6, median: 2, quadratic_mean: 14 }
* P.pipe([1, 2, 3], P.stats((q) => q)) // => { sum: 6, middle: 2, min: 1, max: 3, arithmetic_mean: 2, geometric_mean: 6, median: 2, quadratic_mean: 14 }
* @category Number, Pipe
*/
export function stats<T>(data: readonly T[], fn: (item: T) => number): Stats;
export function stats(data: readonly number[]): Stats;
export function stats<T>(
fn: (item: T) => number
): (array: readonly T[]) => Stats;
export function stats() {
return purry(_stats, arguments);
}
|