tdigest python工具 是一种用于高效计算近似分位数的数据结构和算法。相较于传统的分位数计算方法,tdigest可以实现以较小的内存开销和较快的计算速度,提供近似但足够精确的分位数估计。

1
pip install tdigest
  • 创建对象
1
2
3
from tdigest import TDigest

digest = TDigest()
  • 更新对象
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from numpy.random import random
import numpy as np

# (1) 逐一更新值
for x in range(100):
    digest.update(random())
digest
# <T-Digest: n=100, centroids=100>
digest.n
# 100

# (2) 批量更新值
digest.batch_update([1, 2, 3])
# <T-Digest: n=103, centroids=103>
digest.batch_update(np.random.randn(5))
# <T-Digest: n=108, centroids=108>
  • 统计分布
1
2
3
4
5
6
7
# 中位数
digest.percentile(50)
# 0.4839611675217064


# 平均数
digest.trimmed_mean(0, 100)
  • 保存并加载tdigest对象
1
2
3
4
5
6
7
# save
json.dumps(digest.to_dict())
# load
digest.update_from_dict({'K': 25, 'delta': 0.01, 
                         'centroids': [{'c': 1.0, 'm': 1.0}, 
                                       {'c': 1.0, 'm': 2.0}, 
                                       {'c': 1.0, 'm': 3.0}]})