// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataquality.statistics.numeric.quantile;
import com.clearspring.analytics.stream.quantile.TDigest;
/**
* Quantile statistics bean implemented in a probability method. <br>
* Refer to <a href=
* "https://github.com/addthis/stream-lib/blob/master/src/main/java/com/clearspring/analytics/stream/quantile/TDigest.java"
* >TDigest</a>
*
* @author zhao
*
*/
public class TDigestQuantileStatistics {
private TDigest dist = null;
public TDigestQuantileStatistics() {
dist = new TDigest(100);
}
public void initTDigest(int compression) {
dist = new TDigest(compression);
}
public void add(double value) {
dist.add(value);
}
public double getMedian() {
if (dist.centroidCount() == 1) {
return dist.centroids().iterator().next().mean();
}
return dist.quantile(0.5);
}
public double getLowerQuartile() {
if (dist.centroidCount() == 1) {
return dist.centroids().iterator().next().mean();
}
return dist.quantile(0.25);
}
public double getUpperQuartile() {
if (dist.centroidCount() == 1) {
return dist.centroids().iterator().next().mean();
}
return dist.quantile(0.75);
}
/**
* Get quantile value given percentage.
*
* @param percentage the percentage of the quantile
* @return quantile value given of specified percentage.
*/
public double getQuantile(double percentage) {
if (dist.centroidCount() == 1) {
return dist.centroids().iterator().next().mean();
}
return dist.quantile(percentage);
}
}