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

如何使用Pandas将时间戳序列可视化为活动条图表

实现思路

通过Pandas内置的时间处理能力完成数据清洗和格式转换,结合Matplotlib的热力图能力渲染活动条,全程无需手动逐像素计算,代码量少易维护。

  • 仅读取时间戳字段,自动忽略last_activity数值
  • 自动完成时间戳分钟级舍入、去重
  • 单/多日数据都可适配,自动生成对应行数的活动条

完整代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 1. 数据读取与处理
# 仅读取date列,自动忽略last_activity字段
df = pd.read_csv("你的文件路径.csv", usecols=["date"])
# 转换为datetime格式并按分钟四舍五入
df["datetime"] = pd.to_datetime(df["date"]).dt.round("min")
# 提取日期和当日分钟偏移量(0-1439对应全天1440分钟)
df["date"] = df["datetime"].dt.date
df["minute_offset"] = df["datetime"].dt.hour * 60 + df["datetime"].dt.minute
# 同一分钟的重复记录去重
df = df.drop_duplicates(subset=["date", "minute_offset"])

# 2. 生成活动矩阵
all_dates = sorted(df["date"].unique())
day_count = len(all_dates)
# 矩阵每行对应一天,每列对应一分钟,1=有活动,0=无活动
activity_matrix = np.zeros((day_count, 1440), dtype=int)
for idx, date in enumerate(all_dates):
    active_mins = df[df["date"] == date]["minute_offset"].values
    activity_matrix[idx, active_mins] = 1

# 3. 绘图
plt.figure(figsize=(16, 1 * day_count))  # 高度随天数自动调整
# 渲染活动条,红色对应有活动的分钟,白色为无活动
plt.imshow(activity_matrix, aspect="auto", cmap="Reds", vmin=0, vmax=1)

# X轴设置:显示小时刻度
plt.xticks(ticks=np.arange(0, 1440, 60), labels=[f"{h}:00" for h in range(24)])
plt.xlabel("时间")
# Y轴设置:显示日期,单天数据可注释掉下两行隐藏Y轴
plt.yticks(ticks=np.arange(day_count), labels=all_dates)
plt.ylabel("日期")

# 自定义图表标题
plt.title("设备活动时间分布", fontsize=14)
# 隐藏多余边框
plt.gca().spines[["top", "right", "left", "bottom"]].set_visible(False)

plt.tight_layout()
plt.show()

自定义调整说明

  • 时间取整规则:如果需要向下取整到分钟而非四舍五入,将dt.round("min")替换为dt.floor("min")即可
  • 若不需要显示Y轴日期,注释掉Y轴设置对应的两行代码即可
  • 修改plt.title的参数即可更换图表标题
  • 若需要调整时间显示粒度,修改plt.xticks的步长参数即可,比如步长设为30就是每30分钟一个刻度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:48:01