在这里插入图片描述

在数据处理和分析中,我们经常遇到这样的问题:

如何将大量数据分组处理?
如何对每组数据进行聚合统计?
如何压缩数据量,便于分析和可视化?

数据分组与聚合分析 (Data Grouping and Aggregation Analysis) 是数据处理的基础工具,通过将数据分组并对每组进行聚合统计(求和、平均值、最大值、最小值等),帮助我们压缩数据量,识别数据特征,进行高效的数据分析。
本案例基于 Kotlin Multiplatform(KMP)与 OpenHarmony,实现了一个数据分组与聚合分析器

  • 数据分组:按指定大小将数据序列分组;
  • 聚合统计:支持求和、平均值、最大值、最小值、计数等聚合方法;
  • 分组详情:展示每个分组的数据和聚合值;
  • 统计摘要:提供聚合结果的统计信息;
  • 通过 ArkTS 单页面展示原始序列、分组详情、聚合结果和统计摘要,帮助你直观理解数据分组和聚合效果。

一、问题背景与典型场景

典型场景包括:

  1. 时间窗口聚合
    对时序数据按时间窗口分组,计算每个窗口的聚合值(如每小时的平均响应时间、每分钟的总请求数),用于趋势分析。

  2. 数据压缩
    将大量细粒度数据压缩为更少的聚合值,减少存储空间和计算量,便于分析和可视化。

  3. 批量处理
    对批量数据进行分组处理,计算每组的统计量,用于批量分析和报告生成。

  4. 数据降维
    通过分组聚合,将高维数据降为低维数据,便于可视化和分析。

  5. 性能优化
    在数据查询和分析中,通过预聚合减少实时计算量,提高查询性能。

相比直接处理原始数据,数据分组与聚合分析的优势在于:

  • 压缩数据量,减少存储和计算成本;
  • 识别数据特征,便于趋势分析;
  • 提高查询性能,支持快速分析;
  • 便于可视化,支持图表展示。

二、Kotlin 数据分组与聚合引擎

1. 输入格式设计

本案例支持分组大小和聚合方法配置:

group_size=3
aggregate=sum
series=10,12,11,13,15,18,20,19,17

支持聚合方法:

  • sum:求和
  • avgmean:平均值
  • max:最大值
  • min:最小值
  • count:计数
2. 核心算法实现

App.kt 中,我们实现了 dataGroupingAggregationAnalyzer 函数:

@JsExport
fun dataGroupingAggregationAnalyzer(inputData: String): String {
    // 1. 解析输入序列、分组大小和聚合方法
    val values = parseSeries(inputData)
    val groupSize = parseGroupSize(inputData)
    val aggregateMethod = parseAggregateMethod(inputData)
    
    // 2. 分组
    val groups = mutableListOf<List<Double>>()
    for (i in 0 until values.size step groupSize) {
        val group = values.subList(i, minOf(i + groupSize, values.size))
        groups += group
    }
    
    // 3. 聚合计算
    val aggregated = groups.map { group ->
        when (aggregateMethod) {
            "sum" -> group.sum()
            "avg", "mean" -> group.average()
            "max" -> group.maxOrNull() ?: 0.0
            "min" -> group.minOrNull() ?: 0.0
            "count" -> group.size.toDouble()
            else -> 0.0
        }
    }
    
    // 4. 生成报告
    return buildReport(...)
}
3. 关键处理逻辑

分组处理

  • 按指定大小将数据序列分组
  • 最后一组可能不足指定大小
  • 时间复杂度:O(n),空间复杂度:O(n)

聚合计算

  • 根据聚合方法计算每组的聚合值
  • 支持求和、平均值、最大值、最小值、计数
  • 时间复杂度:O(n),空间复杂度:O(k),k 为分组数量

三、OpenHarmony ArkTS 前端集成

1. 导入 Kotlin/JS 函数

index.ets 中导入:

import { dataGroupingAggregationAnalyzer } from './hellokjs'
2. 状态变量定义
@State groupSizeInput: string = "3"
@State aggregateInput: string = "sum"
@State seriesInput: string = "10,12,11,13,15,18,20,19,17"
@State result: string = ""
@State isLoading: boolean = false
3. 执行分析逻辑
executeDemo() {
  this.isLoading = true
  
  const groupSizeLine = `group_size=${this.groupSizeInput}`
  const aggregateLine = `aggregate=${this.aggregateInput}`
  const seriesLine = this.seriesInput.includes('series=') 
    ? this.seriesInput 
    : `series=${this.seriesInput}`
  const payload = `${groupSizeLine}\n${aggregateLine}\n${seriesLine}`
  
  setTimeout(() => {
    try {
      this.result = dataGroupingAggregationAnalyzer(payload)
    } catch (e) {
      this.result = "❌ 执行失败: " + e.message
    }
    this.isLoading = false
  }, 100)
}
4. UI 布局设计
  • 顶部标题栏:使用渐变背景(蓝色-紫色主题),展示"数据分组与聚合分析"标题
  • 输入区域
    • 分组大小输入(group_size=3)
    • 聚合方法选择(aggregate=sum/avg/max/min/count)
    • 序列输入框,支持 series=... 格式或直接输入数值序列
  • 执行按钮:运行分析按钮和重置按钮
  • 结果展示区:使用 Scroll 组件展示分析报告,包括原始序列、分组详情、聚合结果和统计摘要

四、算法复杂度分析

  • 时间复杂度:O(n),其中 n 为序列长度。需要遍历序列一次进行分组和聚合。
  • 空间复杂度:O(n),需要存储原始序列、分组和聚合结果。

五、工程化应用建议

  1. 时间窗口聚合
    对时序数据按时间窗口分组,计算每个窗口的聚合值,用于趋势分析。

  2. 数据压缩
    将大量细粒度数据压缩为更少的聚合值,减少存储空间和计算量。

  3. 批量处理
    对批量数据进行分组处理,计算每组的统计量,用于批量分析和报告生成。

  4. 聚合方法选择

    • 求和:适合累加型指标(如总请求数、总错误数)
    • 平均值:适合分析型指标(如平均响应时间、平均 CPU 使用率)
    • 最大值:适合峰值分析(如峰值响应时间、峰值内存使用率)
    • 最小值:适合低值分析(如最低响应时间、最低资源使用率)
    • 计数:适合计数型指标(如事件数量、请求数量)
  5. 分组大小调整

    • 分组越大,压缩率越高,但可能丢失细节信息
    • 分组越小,保留更多细节,但压缩率较低
    • 建议根据数据特征和业务需求调整分组大小

六、总结

数据分组与聚合分析是数据处理的基础工具,通过将数据分组并对每组进行聚合统计,帮助我们压缩数据量,识别数据特征,进行高效的数据分析。本案例展示了如何在 KMP + OpenHarmony 架构下实现一个轻量级的数据分组与聚合分析器,适用于时间窗口聚合、数据压缩、批量处理等场景。

核心优势

  • 支持多种聚合方法:求和、平均值、最大值、最小值、计数
  • 实现简单,计算高效
  • 结果直观,易于理解
  • 适用广泛,可用于多种场景

适用场景

  • 时间窗口聚合
  • 数据压缩
  • 批量处理
  • 数据降维
  • 性能优化

通过本案例,你可以快速掌握数据分组与聚合分析的核心思想,并在实际项目中灵活应用。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐