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
|