22 #include "jubatus/util/system/time_util.h"
25 using jubatus::util::system::time::clock_time;
26 using jubatus::util::system::time::get_clock_time;
33 : window_size_(window_size),
36 if (!(1 <= window_size)) {
45 void stat::get_diff(std::pair<double, size_t>& ret)
const {
49 for (jubatus::util::data::unordered_map<std::string, stat_val>::
50 const_iterator p =
stats_.begin(); p !=
stats_.end(); ++p) {
51 double pr = p->second.n_;
52 ret.first += pr * std::log(pr);
57 bool stat::put_diff(
const std::pair<double, size_t>& e) {
64 const std::pair<double, size_t>& lhs,
65 std::pair<double, size_t>& ret)
const {
66 ret.first += lhs.first;
67 ret.second += lhs.second;
70 void stat::push(
const std::string& key,
double val) {
72 clock_time ct = get_clock_time();
73 window_.push_back(make_pair((uint64_t) ct, make_pair(key, val)));
77 string key =
window_.front().second.first;
78 double val =
window_.front().second.second;
81 st.
rem(val, key, *
this);
89 jubatus::util::data::unordered_map<std::string, stat_val>::const_iterator p =
94 return p->second.sum_;
97 double stat::stddev(
const std::string& key)
const {
98 jubatus::util::data::unordered_map<std::string, stat_val>::const_iterator p =
107 double stat::max(
const std::string& key)
const {
108 jubatus::util::data::unordered_map<std::string, stat_val>::const_iterator p =
117 double stat::min(
const std::string& key)
const {
118 jubatus::util::data::unordered_map<std::string, stat_val>::const_iterator p =
127 double stat::entropy()
const {
131 for (jubatus::util::data::unordered_map<std::string, stat_val>::
132 const_iterator p =
stats_.begin(); p !=
stats_.end(); ++p) {
133 total += p->second.n_;
136 for (jubatus::util::data::unordered_map<std::string, stat_val>::
137 const_iterator p =
stats_.begin(); p !=
stats_.end(); ++p) {
138 double pr = p->second.n_ /
static_cast<double>(total);
139 ret += pr * std::log(pr);
144 return std::log(n) -
e_ /
n_;
147 double stat::moment(
const std::string& key,
int n,
double c)
const {
151 jubatus::util::data::unordered_map<std::string, stat_val>::const_iterator p =
163 return (st.
sum_ - c * st.
n_) / st.
n_;
167 return (st.
sum2_ - 2 * st.
sum_ * c) / st.
n_ + c * c;
172 for (
size_t i = 0; i <
window_.size(); ++i) {
173 if (
window_[i].second.first != key) {
176 ret += std::pow(
window_[i].second.second - c, n);
189 void stat::unpack(msgpack::object o) {
192 std::string stat::type()
const {
void rem(double d, const std::string &key, stat &st)
std::deque< std::pair< uint64_t, std::pair< std::string, double > > > window_
#define JUBATUS_EXCEPTION(e)
double moment(const std::string &key, int n, double c) const
msgpack::packer< jubatus_packer > packer
double sum(const common::sfv_t &p)
jubatus::util::data::unordered_map< std::string, stat_val > stats_