Python计算每日平均任务时长及年度任务时长趋势分析模型咨询
解答:计算每日平均任务时长与任务时长趋势分析
1. 计算每日平均任务时长(Python/Pandas实现)
首先得把日期字段转成datetime类型,再按日期分组算均值就行,具体步骤如下:
第一步:统一日期格式
如果你的creationdateTime列还不是datetime类型,先做转换:import pandas as pd # 假设你的DataFrame名叫df df['creationdateTime'] = pd.to_datetime(df['creationdateTime'])第二步:按日期分组计算均值
用dt.date提取纯日期(去掉时分秒),然后分组求每日的平均任务时长:# 分组计算并重置索引,让结果更易读 daily_avg_duration = df.groupby(df['creationdateTime'].dt.date)['Totaltime'].mean().reset_index() # 重命名列名更直观 daily_avg_duration.columns = ['Date', 'Average_Task_Duration']最终得到的
daily_avg_duration就是每日平均时长的数据,直接打印或者可视化都很方便。
2. 分析任务时长趋势的可选模型
针对你这全年的日度数据,推荐几种实用的模型:
ARIMA/SARIMA 时间序列模型
如果任务时长有明显的周期性波动(比如每周固定几天时长更长,或者月度季节性),SARIMA(带季节性的ARIMA)是绝佳选择。它能精准捕捉时间序列的自相关性、长期趋势和季节性规律,既适合趋势分析也能做短期预测。线性回归(量化线性趋势)
如果时长的整体变化是线性的(比如逐渐变长或变短),用线性回归可以直接量化趋势的强弱:from sklearn.linear_model import LinearRegression # 把日期转换成一年中的第几天,作为自变量 df['Day_of_Year'] = df['creationdateTime'].dt.dayofyear # 拟合线性模型 X = df[['Day_of_Year']] y = df['Totaltime'] lr_model = LinearRegression() lr_model.fit(X, y) # 斜率为正代表时长随时间增加,负则代表减少 print(f"每日任务时长的趋势斜率: {lr_model.coef_[0]:.4f}")Facebook Prophet
Prophet是专为业务场景设计的时间序列工具,对季节性、节假日的处理非常友好,而且上手简单,不需要太多专业知识。它能自动分解趋势、季节性和节假日效应,直观展示时长的变化规律:from prophet import Prophet # 转换为Prophet要求的格式:ds(日期)、y(目标值) prophet_data = df.rename(columns={'creationdateTime': 'ds', 'Totaltime': 'y'}) # 拟合模型并生成分析结果 prophet_model = Prophet() prophet_model.fit(prophet_data) forecast = prophet_model.predict(prophet_data) # 可视化趋势和季节性组件 prophet_model.plot_components(forecast)指数平滑模型(ETS)
ETS(Error-Trend-Seasonal)模型可以自动拆解时间序列的误差、趋势和季节性三个部分,适合分析有稳定趋势或季节性的序列,用statsmodels就能实现:from statsmodels.tsa.exponential_smoothing.ets import ETSModel # 先按日期排序,确保时间序列是有序的 df_sorted = df.sort_values('creationdateTime') # 假设数据有周度季节性,设置seasonal_periods=7 ets_model = ETSModel(df_sorted['Totaltime'], trend='add', seasonal='add', seasonal_periods=7) ets_result = ets_model.fit() # 查看趋势和季节性的分解详情 print(ets_result.summary())
内容的提问来源于stack exchange,提问作者Sam Joe
相关产品推荐
相关产品推荐

