adds tests

This commit is contained in:
Andy Eschbacher
2016-09-28 15:55:56 -04:00
parent f2bb0b496b
commit b8accb48fc
3 changed files with 97 additions and 5 deletions
+11 -5
View File
@@ -12,6 +12,7 @@ END;
$$ LANGUAGE plpgsql;
-- Find outliers by a percentage above the threshold
-- TODO: add symmetric option? `symmetric boolean DEFAULT false`
CREATE OR REPLACE FUNCTION CDB_PercentOutlier(attr numeric[], outlier_fraction numeric, ids int[])
RETURNS TABLE(outlier boolean, rowid int)
@@ -21,10 +22,15 @@ DECLARE
out_vals boolean[];
BEGIN
SELECT avg(i) INTO avg_val FROM unnest(attr) As x(i);
SELECT avg(i) INTO avg_val
FROM unnest(attr) As x(i);
SELECT array_agg( i > avg_val * outlier_fraction) INTO out_vals
FROM unnest(attr) As x(i);
SELECT array_agg(
CASE WHEN avg_val = 0 THEN null
ELSE outlier_fraction > i / avg_val
END
) INTO out_vals
FROM unnest(attr) As x(i);
RETURN QUERY
SELECT unnest(out_vals) As outlier,
@@ -45,10 +51,10 @@ DECLARE
BEGIN
SELECT stddev(i), avg(i) INTO stddev_val, avg_val
FROM unnest(attrs) As x(i);
FROM unnest(attrs) As x(i);
SELECT array_agg(abs(i - avg_val) / stddev_val > num_deviations) INTO out_vals
FROM unnest(attrs) As x(i);
FROM unnest(attrs) As x(i);
RETURN QUERY