生成一定范围内日期的正态分布

Jef*_*eff 4 python numpy date normal-distribution gaussian

我有一个日期范围 - 比如说1925-01-01和 之间1992-01-01。我想生成x该范围之间的日期列表,并让x生成的这些日期遵循“正常”(钟形曲线 - 参见图片)分布。

stackoverflow 上有很多关于使用整数执行此操作的答案(使用numpyscipy等),但我找不到带有日期的可靠示例

在此输入图像描述

Chr*_*erC 5

根据 @sascha 的评论,从日期到时间值的转换可以完成这项工作:

#!/usr/bin/env python3

import time
import numpy

_DATE_RANGE = ('1925-01-01', '1992-01-01')
_DATE_FORMAT = '%Y-%m-%d'
_EMPIRICAL_SCALE_RATIO = 0.15
_DISTRIBUTION_SIZE = 1000

def main():
    time_range = tuple(time.mktime(time.strptime(d, _DATE_FORMAT))
                       for d in _DATE_RANGE)
    distribution = numpy.random.normal(
        loc=(time_range[0] + time_range[1]) * 0.5,
        scale=(time_range[1] - time_range[0]) * _EMPIRICAL_SCALE_RATIO,
        size=_DISTRIBUTION_SIZE
    )
    date_range = tuple(time.strftime(_DATE_FORMAT, time.localtime(t))
                       for t in numpy.sort(distribution))
    print(date_range)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

_EMPIRICAL_SCALE_RATIO请注意,您可以(应该?)使用scipy.stats.truncnorm来生成截断的正态分布 ,而不是。