00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00048
#ifndef SDBWithStats_INC
00049
#define SDBWithStats_INC
00050
00051
00052
#include "SimpleDB.h"
00053
#include <map>
00054
00055
namespace PLearn {
00056
using namespace std;
00057
00058 class FieldStat
00059 {
00060
friend class SDBWithStats;
00061
00062
protected:
00063
00065 int nonmissing_;
00066 int missing_;
00067
00069 double sum_;
00070 double sumsquare_;
00071
00072 double min_;
00073 double max_;
00074 double mean_;
00075 double stddev_;
00076
00077
public:
00078
00080 map<string,int>
symbolcount;
00081 mutable map<string,int>
symbolid;
00082 int nsymbols() {
return (
int)
symbolcount.size(); }
00083
static int max_nsymbols;
00084
00085 FieldStat()
00086 :
nonmissing_(0),
missing_(0),
00087
sum_(0.),
sumsquare_(0),
min_(FLT_MAX),
max_(-FLT_MAX)
00088 {}
00089
00090 int ntotal()
const {
return missing_+
nonmissing_; }
00091 int missing()
const {
return missing_; }
00092 int nonmissing()
const {
return nonmissing_; }
00093 real mean()
const {
return real(
mean_); }
00094 real stddev()
const {
return real(
stddev_); }
00095 real min()
const {
return real(
min_); }
00096 real max()
const {
return real(
max_); }
00097
00098
void updateString(
const string& sym);
00099
void updateNumber(
double d);
00100 void updateMissing() { ++
missing_; }
00101
00102
void clear();
00103
void finalize();
00104 };
00105
00106 class SDBWithStats:
public SDB
00107 {
00108
public:
00109 vector<FieldStat> fieldstat;
00110 int nfields() {
return (
int)
getSchema().size(); }
00111 string fieldname(
int i) {
return getSchema()[i].name; }
00112
00113
public:
00114
SDBWithStats(
string basename,
string path=
".", AccessType access = readwrite,
00115
bool verbose=
true);
00116
00117
void forgetStats();
00118
void computeStats(
unsigned int nrows);
00119 void computeStats() {
computeStats(
size()); }
00120
00121
bool hasStats();
00122
void saveStats();
00123
void loadStats();
00124
00125
FieldStat& getStat(
int i);
00126
const FieldStat& getStat(
int i)
const;
00127
FieldStat& getStat(
const string& fieldname);
00128
const FieldStat& getStat(
const string& fieldname)
const;
00129 };
00130
00131 }
00132
00133
#endif