square1 / laravel-collection-rolling-average
扩展集合以支持滚动平均功能。
2.0.0
2024-03-21 08:46 UTC
Requires
- php: ^8.2
- illuminate/support: ^8.71|^9.0|^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.14
- phpunit/phpunit: ^11.0
README
将滚动平均功能添加到集合中
此包向Laravel的Collection
外观添加了滚动平均功能。滚动平均(也称为移动平均)是一种统计方法,用于捕捉数据范围随时间变化的平均值。例如,查看每日温度图或股市走势图,图可能看起来非常嘈杂和波动。可以通过用前N天的平均值替换每个每日数据点来平滑图表,以显示更长期的趋势。
以下是一个示例,其中我们想要过去5天的滚动平均
这是集合中所有值的滚动平均。虽然在这个例子中我们想要最新的5个值的滚动平均,但在有少于5个条目时,平均将是可用条目的平均值。
可以强制此函数更加严格,只有在获得我们想要的最小条目数(在这种情况下为5)时才开始计算平均值。这意味着结果数据会有所变化
安装
通过Composer
$ composer require square1/laravel-collection-rolling-average
包将被自动注册。
用法
滚动平均
这将显示到目前日期为止的平均值。每个返回值应是在集合中该点的所有值的平均值。这意味着早期值在平均值真正开始之前会保留一些“嘈杂性”。
$data = new Collection([1, 2, 3, 4, 5]); $averages = $data->rollingAverage(); /** * 1, // 1 * 1.5, // 1+2 / 2 (only 2 entries seen so far) * 2, // 1+2+3 / 3 * 2.5, // 1+2+3+4 / 4 * 3 // 1+2+3+4+5 / 5 */
带有限制的滚动平均
根据每个数据点的N个之前的条目计算滚动平均。返回的集合将与提供的集合大小相同。这意味着在集合中的N个值之前的位置,滚动平均是到目前日期为止看到的所有值的平均值。如果您想排除所有N个条目之前的价值,请参阅带有限制的回溯滚动平均部分。
$data = new Collection([1, 2, 3, 4, 5, 6]); // How many entries should we consider in our average? $lookback = 2; $averages = $data->rollingAverage($lookback); /** * Looking back over last 2 entries, averages should be: * 1, // 1 * 1.5, // 1+2 / 2 * 2.5, // 2+3 / 2 * 3.5, // 3+4 / 2 * 4.5, // 4+5 / 2 * 5.5 // 5+6 / 2 */
带有限制的回溯滚动平均
默认情况下,包将返回一个与提供给它的值数量相同的集合。这可能导致集合开头的一些嘈杂性。例如,如果我们有一个包含30个条目的数据集,并想要过去5个值的滚动平均,则前4个值将是前N个值的平均值,其中N < 5。为了避免这种情况,可以将参数$includeAll
设置为false
。这将返回一个比原始值少的集合。这将消除集合开头的一些嘈杂性,但将导致返回值数量的不匹配。
$data = new Collection([1, 2, 3, 4, 5, 6]); $averages = $data->rollingAverage(4, $enforceLimitedLookback = true); /** * 2.5, * 3.5, * 4.5 */
应用权重
添加权重以增加或减少最新条目的相关性。
$data = new Collection([1, 2, 2, 4, 5, 6]); // Weights will be applied in the order of current data point N, then N-1, and so on. // Where no weighting exists, a default of 1 is used. $weights = new Collection([5, 2]); $averages = $data->rollingAverage(4, $enforceLimitedLookback = false, $weights); /** * collect([ * 5, // 1 * 5 * 6, // (2 * 5) + (1 * 2) / 2 * 5, // (2 * 5) + (2 * 2) + 1 / 3 * 6.75, // (4 * 5) + (2 * 2) + 2 + 1 / 4 * 9.25, // (5 * 5) + (4 * 2) + 2 + 2 / 4 * 11.5, // (6 * 5) + (5 * 2) + 4 + 2 / 4 * ]); */
测试
$ composer test
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。