Apache Commons Math library အသံုးျပဳ ျခင္း (2)

Apache Commons Math library အသံုးျပဳ ျခင္း (2)
==============
သုေတသန (Research)၊ စာရင္းအင္း (Statistics) ဆိုင္ရာ တြက္ခ်က္မႈမ်ား ျပဳလုပ္ျခင္း
==============
Statistics ဆိုင္ရာ တြက္ခ်က္မႈေတြ ျပဳလုပ္ဖို႔ org.apache.commons.math3.stat package ကို import လုပ္ၿပီး သံုးရပါမယ္။
import org.apache.commons.math3.stat;
Mean, Standard Deviation, စတာေတြ တြက္ဖို႔ DescriptiveStatistics object ကို သံုးရပါမယ္။
အရင္ဆံုး data ေတြကို array တခုနဲ႔ ရယူထားပါ။
double[] values = new double[] {65, 51 , 16, 11 , 6519, 191 ,0 , 98, 19854, 1, 32};
ၿပီးရင္ DescriptiveStatistics object တခု ဖန္တီးပါ။
DescriptiveStatistics descriptiveStatistics = new DescriptiveStatistics();
array ထဲက data ေတြကို DescriptiveStatistics object ထဲကို for loop နဲ႔ ပတ္ၿပီး ထည့္ပါ။
for (double v : values) { descriptiveStatistics.addValue(v);
}
ၿပီးရင္ေတာ့ Stats ဆိုင္ရာ တြက္ခ်က္မႈ ရလဒ္ေတြကို DescriptiveStatistics object ကေန ထုတ္ယူႏိုင္ပါၿပီ။
Mean ရယူဖို႔
double mean = descriptiveStatistics.getMean();
Median ရယူဖို႔
double median = descriptiveStatistics.getPercentile(50);
Percentile ေတြ ရယူဖို႔ (ဥပမာ 30th Percentile)
double pct30 = descriptiveStatistics.getPercentile(30);
Standard Deviation ရယူဖို႔
double standardDeviation = descriptiveStatistics.getStandardDeviation();
=========
Data ေတြထဲက maximum နဲ႔ minimum value ေတြကို descriptiveStatistics.getMin(), descriptiveStatistics.getMax() method ေတြနဲ႔ တိုက္ရိုက္ ရယူႏိုင္တယ္။
double minValue = descriptiveStatistics.getMin();
double maxValue = descriptiveStatistics.getMax();
minimum, maximum တန္ဖိုး ၂ခုကေန range ကို တြက္ထုတ္ပါ။
double range = Math.abs(maxValue - minValue);
=========
Sample data ေတြကို List<Float> parameter အျဖစ္ ထည့္ေပးရင္ count, sum, min, max, mean, median, mode, stddev, variance အခ်က္အလက္ေတြကို HashMap တခုနဲ႔ return ျပန္ေပးတဲ့ method တခုကို ေအာက္မွာ ေရးျပထားပါတယ္။
=========
public HashMap computeStatistics(List<Float> values) {
HashMap map = new HashMap();
HashMap<Float, Integer> modeMap = new HashMap<Float, Integer>();
DescriptiveStatistics stats = new DescriptiveStatistics();
for (Float f : values) {
stats.addValue(f);
Integer current = modeMap.get(f);
if (current == null) {
modeMap.put(f, new Integer(1));
} else {
modeMap.put(f, current + 1);
}
}
Float mode = null;
Integer high = -1;
for (Iterator<Map.Entry<Float,Integer>> entries = modeMap.entrySet().iterator(); entries.hasNext();) {
Map.Entry<Float,Integer> entry = entries.next();
if (entry.getValue() > high) {
mode = entry.getKey();
high = entry.getValue();
}
}
if (!(Double.isNaN(stats.getN()))) {
map.put("count", stats.getN());
}
if (!(Double.isNaN(stats.getSum()))) {
map.put("sum", stats.getSum());
}
if (!(Double.isNaN(stats.getMin()))) {
map.put("min", stats.getMin());
}
if (!(Double.isNaN(stats.getMax()))) {
map.put("max", stats.getMax());
}
if (!(Double.isNaN((stats.getMean())))) {
map.put("mean", stats.getMean());
}
if (!(Double.isNaN((stats.apply(new Median()))))) {
map.put("median", stats.apply(new Median()));
}
if (mode != null) {
map.put("mode", mode);
}
if (!(Double.isNaN((stats.getStandardDeviation())))) {
map.put("stddev", stats.getStandardDeviation());
}
if (!(Double.isNaN((stats.getVariance())))) {
map.put("variance", stats.getVariance());
}
return map;
}
=========
Confidence Interval တြက္နည္း
private static double getConfidenceInterval(DescriptiveStatistics stats) {
double stdv = stats.getStandardDeviation();
double n = stats.getN();
double mean = stats.getMean();
double ci = (1.96 * (stdv / Math.sqrt(n)));
double rci = (ci/mean) * 100;
return rci;
}
=========
Data ေတြကို external file တခုမွာ ထည့္ထားၿပီး ဖတ္ယူႏိုင္တယ္။
=========
covariance, correlation ေတြ တြက္ဖို႔၊ statistical tests ေတြလုပ္ဖို႔ ဒီ package ထဲမွာ ပါတဲ့ TestUtils ကို သံုးႏိုင္ပါတယ္။
=========


https://www.facebook.com/groups/185208038700073/permalink/185485098672367/

Comments

Popular posts from this blog

သခ်ၤာ တြက္ခ်က္မႈ ဆိုင္ရာ နည္းလမ္းမ်ား

Software Development Library

Android Spinner (Drop Down) Example