You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中按时间粒度统计CPU均值上下记录数并可视化

解决方案

一、Pandas数据处理方案

假设你的数据已加载为df,包含timestamp(时间戳列)和avg_cpu(CPU使用率列),先确保时间戳为datetime类型:

import pandas as pd

df['timestamp'] = pd.to_datetime(df['timestamp'])

1. 按粒度统计高于/低于均值的记录数

小时粒度统计

# 给每条数据匹配对应小时的均值,并标记是否高于均值
hourly_groups = df.groupby(df['timestamp'].dt.floor('H'))['avg_cpu']
df['hourly_mean'] = hourly_groups.transform('mean')
df['above_hourly_mean'] = df['avg_cpu'] > df['hourly_mean']

# 统计每小时的高低均值记录数
hourly_stats = df.groupby(df['timestamp'].dt.floor('H')).agg(
    高于均值记录数=('above_hourly_mean', 'sum'),
    低于均值记录数=('above_hourly_mean', lambda x: len(x)-x.sum()),
    小时均值=('avg_cpu', 'mean')
).reset_index()

日粒度统计

# 给每条数据匹配对应日期的均值,并标记是否高于均值
daily_groups = df.groupby(df['timestamp'].dt.date)['avg_cpu']
df['daily_mean'] = daily_groups.transform('mean')
df['above_daily_mean'] = df['avg_cpu'] > df['daily_mean']

# 统计每日的高低均值记录数
daily_stats = df.groupby(df['timestamp'].dt.date).agg(
    高于均值记录数=('above_daily_mean', 'sum'),
    低于均值记录数=('above_daily_mean', lambda x: len(x)-x.sum()),
    日均值=('avg_cpu', 'mean')
).reset_index()

二、可视化方案(Matplotlib+Seaborn)

Output1:1月21日每小时CPU使用率+当日均值线

import matplotlib.pyplot as plt
import seaborn as sns

# 筛选1月21日数据并按小时聚合均值
target_date = pd.to_datetime('2024-01-21').date()
jan21_data = df[df['timestamp'].dt.date == target_date]
jan21_hourly = jan21_data.groupby(jan21_data['timestamp'].dt.hour)['avg_cpu'].mean().reset_index()
jan21_daily_mean = jan21_data['avg_cpu'].mean()

# 绘图
plt.figure(figsize=(12,6))
sns.barplot(x='timestamp', y='avg_cpu', data=jan21_hourly, palette='Blues')
plt.axhline(y=jan21_daily_mean, color='red', linestyle='--', label=f'当日均值: {jan21_daily_mean:.2f}%')
plt.title('1月21日每小时CPU使用率')
plt.xlabel('小时')
plt.ylabel('平均CPU使用率(%)')
plt.legend()
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()

Output2:1月每日CPU使用率+当月均值线

# 聚合1月每日平均CPU使用率
jan_daily = df.groupby(df['timestamp'].dt.date)['avg_cpu'].mean().reset_index()
jan_monthly_mean = df['avg_cpu'].mean()

# 绘图
plt.figure(figsize=(14,6))
sns.lineplot(x='timestamp', y='avg_cpu', data=jan_daily, marker='o', linewidth=2, color='blue')
plt.axhline(y=jan_monthly_mean, color='red', linestyle='--', label=f'当月均值: {jan_monthly_mean:.2f}%')
plt.title('1月每日CPU使用率')
plt.xlabel('日期')
plt.ylabel('平均CPU使用率(%)')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

可选交互式方案(Plotly)

如果需要交互式图表,可替换为Plotly,以Output1为例:

import plotly.express as px

fig = px.bar(jan21_hourly, x='timestamp', y='avg_cpu', title='1月21日每小时CPU使用率')
fig.add_hline(y=jan21_daily_mean, line_dash='dash', line_color='red', annotation_text=f'当日均值: {jan21_daily_mean:.2f}%')
fig.show()

内容的提问来源于stack exchange,提问作者Mario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:12:25