如何将进程时序数据转换为供Highcharts绘图的活跃进程列表
实现方法
核心逻辑
每条进程启动记录的活跃时间范围为 [Started At, Started At + Taken Time - 1],我们只需要对每个时间点的活跃进程数做区间累加即可得到目标结果。
对应你给出的示例:
- 第一条记录活跃区间为 1~12,该区间每个时间点加1
- 第二条记录活跃区间为 8~10,该区间每个时间点加2
- 最终计算结果和你给出的期望输出完全匹配
代码实现(Python示例)
import csv from collections import defaultdict # 读取原始分号分隔数据 raw_data = [] with open('raw.csv', newline='') as f: reader = csv.DictReader(f, delimiter=';') for row in reader: started_at = int(row['Started At']) taken_time = int(row['Taken Time']) proc_num = int(row['Number of started processes']) raw_data.append((started_at, taken_time, proc_num)) # 计算需要覆盖的时间范围 min_time = min(item[0] for item in raw_data) max_time = max(item[0] + item[1] for item in raw_data) # 初始化所有时间点的活跃进程数为0 active_count = defaultdict(int) for t in range(min_time, max_time + 1): active_count[t] = 0 # 按活跃区间累加进程数 for started_at, taken_time, proc_num in raw_data: end_at = started_at + taken_time - 1 for t in range(started_at, end_at + 1): active_count[t] += proc_num # 输出目标格式结果 print("Time; Active processes") for t in sorted(active_count.keys()): print(f"{t}; {active_count[t]}") # 如需输出示例中13对应的0值,额外加一行 print(f"{max_time + 1}; 0") 即可
Highcharts适配
输出结果可以直接转换为[[1,1],[2,1],...,[13,0]]格式的二维数组,传入Highcharts的series.data配置项即可直接用于绘图。
内容的提问来源于stack exchange,提问作者FieryCat
相关产品推荐
相关产品推荐

