130 lines
2.8 KiB
Plaintext
130 lines
2.8 KiB
Plaintext
#pragma once
|
||
/**
|
||
* @file approximate_data.h
|
||
* @brief 存储大概分布的类
|
||
* @author Cat (null.null.null@qq.com)
|
||
* @version 0.1
|
||
* @date 2021-08-24
|
||
*
|
||
* Copyright: Baosight Co. Ltd.
|
||
* DO NOT COPY/USE WITHOUT PERMISSION
|
||
*
|
||
*/
|
||
|
||
#include <dlib/statistics.h>
|
||
|
||
#include <eqpalg/table_struct/t_rule_sample_1d_flatten.h>
|
||
|
||
#include <array>
|
||
#include <vector>
|
||
#include <type_traits>
|
||
#include <string>
|
||
#include <map>
|
||
#include <utility>
|
||
#include <random>
|
||
|
||
#include "mix_cc/type/range.h"
|
||
#include "mix_cc/sql.h"
|
||
#include "mix_cc/sql/database/db2_t.h"
|
||
|
||
#include <eqpalg/data_handler/base.h>
|
||
|
||
#include <eqpalg/gb_logger.h>
|
||
#include <eqpalg/define/dlib.h>
|
||
|
||
namespace data_handler {
|
||
namespace policy {
|
||
|
||
using std::string;
|
||
|
||
using namespace mix_cc;
|
||
using namespace mix_cc::sql;
|
||
/**
|
||
* @brief 大约数据分布
|
||
* @tparam dims
|
||
*/
|
||
|
||
struct FlattenData : public Base {
|
||
struct RS {
|
||
public:
|
||
TimePoint sample_date;
|
||
double avg;
|
||
double stddev;
|
||
double skewness;
|
||
double ex_kurtosis;
|
||
double min;
|
||
double max;
|
||
};
|
||
|
||
using TmpRS = dlib::running_stats<double>; ///< 数据类型
|
||
|
||
using Dim1Table = T_RULE_SAMPLE_1D_FLATTEN;
|
||
|
||
using InData = SampleWindow;
|
||
|
||
using DumpedMetaData = RS; ///< 导出的元数据类型
|
||
|
||
using DumpedData = std::map<TimePoint, DumpedMetaData>; ///< 导出的数据类型
|
||
|
||
using OutData = DumpedData;
|
||
|
||
protected:
|
||
std::chrono::system_clock::duration storage_interval_;
|
||
|
||
InData tmp_data_;
|
||
DumpedData dumped_data_;
|
||
|
||
bool is_first_sampling_ = true;
|
||
|
||
std::unique_ptr<GbLogger> gb_logger_;
|
||
|
||
public:
|
||
FlattenData(const std::string& ruleId, size_t dims);
|
||
|
||
int first_sampling_batch(const InData& first_runing_info, TimePoint Tp);
|
||
/**
|
||
* @brief 与approximate_data一致,保证编译通过
|
||
* @param first_runing_infoMy Param doc
|
||
* @param Tp My Param doc
|
||
* @param running_state My Param doc
|
||
* @return int
|
||
*/
|
||
int first_sampling_batch(const InData& first_runing_info, TimePoint Tp,
|
||
Rs running_state) {
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* @brief
|
||
* 是否是第一次采样
|
||
* @return true
|
||
* @return false
|
||
*/
|
||
bool is_first_sampling() { return this->is_first_sampling_; }
|
||
|
||
int load();
|
||
|
||
int store(const SamplePoint& i_value);
|
||
|
||
int commit();
|
||
|
||
SampleWindow extract();
|
||
/**
|
||
* @brief 获取采样数据的大小
|
||
* @return size_t
|
||
*/
|
||
size_t get_sampling_size() { return this->sampling_size_; }
|
||
// 均值方差 2021-11-29 没有意义,为了编译
|
||
int put_data_to_rs(const SampleWindow& input_data);
|
||
vector<double> get_rs_means();
|
||
vector<double> get_rs_variances();
|
||
vector<double> get_rs_stddev();
|
||
vector<double> get_rs_skewness();
|
||
vector<double> get_rs_kurtosis();
|
||
vector<double> get_rs_max();
|
||
vector<double> get_rs_min();
|
||
};
|
||
|
||
} // namespace policy
|
||
} // namespace data_handler
|