mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-28 20:50:49 +00:00
Make it less wrong
This commit is contained in:
parent
4a094c2efd
commit
cf66716cd6
@ -1,7 +1,6 @@
|
|||||||
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
||||||
#include <AggregateFunctions/CrossTab.h>
|
#include <AggregateFunctions/CrossTab.h>
|
||||||
#include <AggregateFunctions/FactoryHelpers.h>
|
#include <AggregateFunctions/FactoryHelpers.h>
|
||||||
#include <AggregateFunctions/Helpers.h>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
@ -12,31 +11,29 @@ namespace DB
|
|||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
struct ContingencyData : CrossTabData
|
struct ContingencyData : CrossTabData
|
||||||
{
|
|
||||||
static const char * getName()
|
|
||||||
{
|
{
|
||||||
return "contingency";
|
static const char * getName() { return "contingency"; }
|
||||||
}
|
|
||||||
|
|
||||||
Float64 getResult() const
|
Float64 getResult() const
|
||||||
{
|
|
||||||
if (count < 2)
|
|
||||||
return std::numeric_limits<Float64>::quiet_NaN();
|
|
||||||
|
|
||||||
Float64 phi = 0.0;
|
|
||||||
for (const auto & [key, value_ab] : count_ab)
|
|
||||||
{
|
{
|
||||||
Float64 value_a = count_a.at(key.items[0]);
|
if (count < 2)
|
||||||
Float64 value_b = count_b.at(key.items[1]);
|
return std::numeric_limits<Float64>::quiet_NaN();
|
||||||
|
|
||||||
phi += value_ab * value_ab / (value_a * value_b) * count - 2 * value_ab + (value_a * value_b) / count;
|
Float64 phi = 0.0;
|
||||||
|
for (const auto & [key, value_ab] : count_ab)
|
||||||
|
{
|
||||||
|
Float64 value_a = count_a.at(key.items[0]);
|
||||||
|
Float64 value_b = count_b.at(key.items[1]);
|
||||||
|
|
||||||
|
phi += value_ab * value_ab / (value_a * value_b) * count - 2 * value_ab + (value_a * value_b) / count;
|
||||||
|
}
|
||||||
|
phi /= count;
|
||||||
|
|
||||||
|
return sqrt(phi / (phi + count));
|
||||||
}
|
}
|
||||||
phi /= count;
|
};
|
||||||
|
}
|
||||||
return sqrt(phi / (phi + count));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void registerAggregateFunctionContingency(AggregateFunctionFactory & factory)
|
void registerAggregateFunctionContingency(AggregateFunctionFactory & factory)
|
||||||
{
|
{
|
||||||
@ -49,5 +46,3 @@ void registerAggregateFunctionContingency(AggregateFunctionFactory & factory)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
||||||
#include <AggregateFunctions/CrossTab.h>
|
#include <AggregateFunctions/CrossTab.h>
|
||||||
#include <AggregateFunctions/FactoryHelpers.h>
|
#include <AggregateFunctions/FactoryHelpers.h>
|
||||||
#include <AggregateFunctions/Helpers.h>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
||||||
#include <AggregateFunctions/CrossTab.h>
|
#include <AggregateFunctions/CrossTab.h>
|
||||||
#include <AggregateFunctions/FactoryHelpers.h>
|
#include <AggregateFunctions/FactoryHelpers.h>
|
||||||
#include <AggregateFunctions/Helpers.h>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
||||||
#include <AggregateFunctions/CrossTab.h>
|
#include <AggregateFunctions/CrossTab.h>
|
||||||
#include <AggregateFunctions/FactoryHelpers.h>
|
#include <AggregateFunctions/FactoryHelpers.h>
|
||||||
#include <AggregateFunctions/Helpers.h>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
@ -40,12 +39,14 @@ struct TheilsUData : CrossTabData
|
|||||||
dep += (value_ab / count) * log(value_ab / value_b);
|
dep += (value_ab / count) * log(value_ab / value_b);
|
||||||
}
|
}
|
||||||
|
|
||||||
dep -= h_x;
|
dep -= h_a;
|
||||||
dep /= h_x;
|
dep /= h_a;
|
||||||
return dep;
|
return dep;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void registerAggregateFunctionTheilsU(AggregateFunctionFactory & factory)
|
void registerAggregateFunctionTheilsU(AggregateFunctionFactory & factory)
|
||||||
{
|
{
|
||||||
factory.registerFunction(TheilsUData::getName(),
|
factory.registerFunction(TheilsUData::getName(),
|
||||||
@ -57,5 +58,3 @@ void registerAggregateFunctionTheilsU(AggregateFunctionFactory & factory)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -113,12 +113,12 @@ public:
|
|||||||
this->data(place).merge(this->data(rhs));
|
this->data(place).merge(this->data(rhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
void serialize(ConstAggregateDataPtr __restrict place, WriteBuffer & buf) const override
|
void serialize(ConstAggregateDataPtr __restrict place, WriteBuffer & buf, std::optional<size_t>) const override
|
||||||
{
|
{
|
||||||
this->data(place).serialize(buf);
|
this->data(place).serialize(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserialize(AggregateDataPtr __restrict place, ReadBuffer & buf, Arena *) const override
|
void deserialize(AggregateDataPtr __restrict place, ReadBuffer & buf, std::optional<size_t>, Arena *) const override
|
||||||
{
|
{
|
||||||
this->data(place).deserialize(buf);
|
this->data(place).deserialize(buf);
|
||||||
}
|
}
|
||||||
|
@ -263,7 +263,7 @@ public:
|
|||||||
return it->getMapped();
|
return it->getMapped();
|
||||||
}
|
}
|
||||||
|
|
||||||
typename Cell::Mapped & ALWAYS_INLINE at(const Key & x) const
|
const typename Cell::Mapped & ALWAYS_INLINE at(const Key & x) const
|
||||||
{
|
{
|
||||||
if (auto it = this->find(x); it != this->end())
|
if (auto it = this->find(x); it != this->end())
|
||||||
return it->getMapped();
|
return it->getMapped();
|
||||||
|
Loading…
Reference in New Issue
Block a user