统计中指定区间按日、周、月之基础数据生成

时间:2021-11-27 16:38:50

$params['start_date'] = '2021-09-01';
$params['end_date'] = '2021-11-01';
$params['group_type'] = 1;// 分组类型(1按日、2按周、3按月)
 
// 分组类型(1按日、2按周、3按月)
if ($params['group_type'] == 1) {
    $keys = array_map(function ($item) {
        return date('Y-m-d', $item);
    }, range(strtotime($params['start_date']), strtotime($params['end_date']), 86400));
    $title = array_values($keys);
} elseif ($params['group_type'] == 2) {
    $keys = [];
    for ($i = strtotime($params['start_date']); $i <= strtotime($params['end_date']); $i += 86400) {
        $w = date('W', $i);
        if (!isset($keys[$w])) {
            $keys[$w] = date('Y-m-d', $i);
            isset($keys[$w - 1]) && $keys[$w - 1] .= ' ~ ' . date('Y-m-d', $i - 86400);
        }
    }
    $keys[max(array_keys($keys))] .= ' ~ ' . $params['end_date'];// 最后一个特殊处理
    $keys = array_flip($keys);
    $title = array_keys($keys);
} else {
    $keys = [];
    $startTime = strtotime($params['start_date']);
    $endTime = strtotime($params['end_date']);
    // 默认将开始时间添加进去,有需要的情况下自己更改;
    $keys[] = date('Y-m', $startTime);
    while (($startTime = strtotime('+1 month', $startTime)) <= $endTime) {
        $keys[] = date('Y-m', $startTime);
        // 取得递增月;
    }
    $title = array_values($keys);
}
print_r($title);

图片.png

图片.png

图片.png

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,其数据存储在三个向量,分别为 x、y 和 z。代码使用 `histogram` 函数绘制直方图,使用 `filter` 函数计算位于指定区间范围内的频数。 ```matlab % 创建数据 x = randn(1000,1); y = randn(1000,1) + 1; z = randn(1000,1) - 1; % 计算每个向量落在区间[-1,1]的数据点数 x_count = sum(filter([-1 1], 1, x) > 0); y_count = sum(filter([-1 1], 1, y) > 0); z_count = sum(filter([-1 1], 1, z) > 0); % 绘制分组频数直方图 figure; histogram([x;y;z],'BinWidth',0.2,'BinLimits',[-4 4],'Normalization','count'); hold on; plot([-1 -1],[0 max([x_count y_count z_count])],'r--','LineWidth',2); plot([1 1],[0 max([x_count y_count z_count])],'r--','LineWidth',2); text(0, max([x_count y_count z_count])+5, sprintf('Counts: %d, %d, %d', x_count, y_count, z_count), 'HorizontalAlignment', 'center'); xlabel('Value'); ylabel('Frequency'); title('Grouped Frequency Histogram'); ``` 这段代码将生成一个分组频数直方图,其红色虚线表示指定区间范围 [-1,1],文本框显示了每个向量落在该范围内的数据点数。 注意,`filter` 函数的参数 `[-1 1]` 表示计算差分,即用后一个元素减去前一个元素。因此,`filter([-1 1], 1, x)` 返回一个长度为 999 的向量,其第 i 个元素等于 x(i+1)-x(i)。通过将结果与 0 进行比较,可以得到一个逻辑向量,其 1 表示对应元素大于 0,即 x(i+1)>x(i)。这些 1 的数量即为落在指定区间范围内的数据点数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值