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

使用Pycaret与Plotly绘制空气质量时间序列图异常求助

空气质量时间序列可视化异常修复方案

问题原因

  • 核心问题1:读取数据后未按日期排序,绘制折线时前后点连接逻辑混乱,是出现异常折线的最常见诱因
  • 核心问题2:分组筛选子集时使用链式索引,会触发pandas的SettingWithCopyWarning,新增的移动平均列数据可能异常
  • 潜在问题3:未校验CO列的空值、离群异常值,以及单分组内是否存在重复日期的多条数据,会导致折线出现跳变、断点

修复后代码

import pandas as pd
import plotly.express as px

# 读取数据
data = pd.read_csv('E:/Self Learning/Djang_Dash/2019-2020_5.csv')
# 日期格式转换
data['Date'] = pd.to_datetime(data['Date'], format='%d/%m/%Y')
# 全局按日期排序,避免折线连接混乱
data = data.sort_values('Date').reset_index(drop=True)

# 处理分组标识
data['OBJECTID'] = ['Location_' + str(i) for i in data['OBJECTID']]
data['time_series'] = data[['OBJECTID']].apply(lambda x: '_'.join(x), axis=1)
data.drop(['OBJECTID'], axis=1, inplace=True)

# 日期特征衍生(替换原有列表推导式,运行效率更高)
data['month'] = data['Date'].dt.month
data['year'] = data['Date'].dt.year
data['day_of_week'] = data['Date'].dt.dayofweek
data['day_of_year'] = data['Date'].dt.dayofyear

# 前置数据清洗
# 过滤CO空值、异常值,可根据实际业务调整CO的合理范围
data = data.dropna(subset=['CO'])
data = data[(data['CO'] >= 0) & (data['CO'] <= 50)]
# 同一个分组+同一个日期如果有多条数据,取均值聚合,避免重复值导致折线跳变
data = data.groupby(['time_series', 'Date'], as_index=False).agg({
    'CO': 'mean', 
    'month': 'first',
    'year': 'first',
    'day_of_week': 'first',
    'day_of_year': 'first'
})

# 遍历每个分组绘图
for series_name in data['time_series'].unique():
    # 明确生成独立子集,避免链式索引警告
    subset = data[data['time_series'] == series_name].copy()
    # 滚动计算移动平均,添加min_periods参数避免前29天数据为空出现断点
    subset['moving_average'] = subset['CO'].rolling(window=30, min_periods=1).mean()
    fig = px.line(subset, x="Date", y=["CO","moving_average"], title=series_name, template='plotly_dark')
    fig.show()

补充校验方法

如果修改后仍有异常,可打印单分组的subset.head(50)检查日期顺序、CO列数值是否符合预期,确认原始数据本身没有格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:24:00