weighted_statistics
针对稀疏数据的高性能加权统计量计算
仓库
schmidni/pg_weighted_statistics
https://github.com/schmidni/pg_weighted_statistics
源码
pg_weighted_statistics-1.0.0.tar.gz
pg_weighted_statistics-1.0.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_weighted_statistics | 1.0.0 | FUNC | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4680 | weighted_statistics | 否 | 是 | 否 | 是 | 否 | 是 | - |
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.0.0 | 1817161514 | pg_weighted_statistics | - |
| RPM | PIGSTY | 1.0.0 | 1817161514 | pg_weighted_statistics_$v | - |
| DEB | PIGSTY | 1.0.0 | 1817161514 | postgresql-$v-weighted-statistics | - |
构建
您可以使用 pig build 命令构建 pg_weighted_statistics 扩展的 RPM / DEB 包:
pig build pkg pg_weighted_statistics # 构建 RPM / DEB 包
安装
您可以直接安装 pg_weighted_statistics 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_weighted_statistics; # 当前活跃 PG 版本安装
pig ext install -y pg_weighted_statistics -v 18 # PG 18
pig ext install -y pg_weighted_statistics -v 17 # PG 17
pig ext install -y pg_weighted_statistics -v 16 # PG 16
pig ext install -y pg_weighted_statistics -v 15 # PG 15
pig ext install -y pg_weighted_statistics -v 14 # PG 14
dnf install -y pg_weighted_statistics_18 # PG 18
dnf install -y pg_weighted_statistics_17 # PG 17
dnf install -y pg_weighted_statistics_16 # PG 16
dnf install -y pg_weighted_statistics_15 # PG 15
dnf install -y pg_weighted_statistics_14 # PG 14
apt install -y postgresql-18-weighted-statistics # PG 18
apt install -y postgresql-17-weighted-statistics # PG 17
apt install -y postgresql-16-weighted-statistics # PG 16
apt install -y postgresql-15-weighted-statistics # PG 15
apt install -y postgresql-14-weighted-statistics # PG 14
创建扩展:
CREATE EXTENSION weighted_statistics;
用法
高性能 C 扩展,提供加权统计函数,具有自动稀疏数据处理能力(当 sum(weights) < 1.0 时)。
CREATE EXTENSION weighted_statistics;
函数
| 函数 | 描述 |
|---|---|
weighted_mean(values[], weights[]) | 加权平均值 |
weighted_variance(values[], weights[], ddof) | 加权方差(ddof:0=总体,1=样本) |
weighted_std(values[], weights[], ddof) | 加权标准差 |
weighted_quantile(values[], weights[], quantiles[]) | 经验 CDF 分位数 |
wquantile(values[], weights[], quantiles[]) | 第 7 类(Hyndman-Fan)分位数 |
whdquantile(values[], weights[], quantiles[]) | Harrell-Davis 分位数 |
weighted_median(values[], weights[]) | 第 50 百分位数快捷方式(经验 CDF) |
示例
-- 加权平均值
SELECT weighted_mean(ARRAY[1.0, 2.0, 3.0], ARRAY[0.2, 0.3, 0.5]);
-- 2.3
-- 加权分位数
SELECT weighted_quantile(ARRAY[10.0, 20.0, 30.0], ARRAY[0.3, 0.4, 0.3], ARRAY[0.25, 0.5, 0.75]);
-- {15.0, 20.0, 25.0}
-- 稀疏数据(当 sum(weights) < 1.0 时自动添加隐式零值)
SELECT weighted_mean(ARRAY[10, 20], ARRAY[0.2, 0.3]);
-- 8.0(等价于 weighted_mean(ARRAY[10, 20, 0, 0], ARRAY[0.2, 0.3, 0.25, 0.25]))
-- 多种统计量
SELECT weighted_mean(vals, weights),
weighted_std(vals, weights, 1),
weighted_quantile(vals, weights, ARRAY[0.05, 0.95])
FROM (SELECT array_agg(val) AS vals, array_agg(weight) AS weights FROM data) t;