1. 数据来源与获取风速预测的第一步是获取可靠的气象数据。公开气象平台是免费获取风速数据的主要渠道这里推荐几个常用来源NOAA美国国家海洋和大气管理局提供全球1929年至今的日汇总气象数据包含风速、温度、气压等指标。数据以CSV格式提供可直接下载。NASA EarthData涵盖卫星观测和地面站数据适合需要高时空分辨率的研究。Kaggle搜索wind speed可找到上百个数据集例如巴西东南部2000-2021年气象站数据。以Kaggle的塞格德地区气象数据为例数据集包含2006-2016年每小时记录的12个变量import pandas as pd df pd.read_csv(weatherHistory.csv) print(df.columns) # 输出[时间,温度,风速(km/h),气压...]2. 数据清洗与预处理原始数据往往存在缺失值和异常值需进行清洗2.1 缺失值处理删除缺失超过30%的字段线性插值补全连续缺失值# 删除缺失严重的列 df df.dropna(threshlen(df)*0.7, axis1) # 线性插值 df[风速] df[风速].interpolate()2.2 异常值检测使用IQR方法识别异常风速Q1 df[风速].quantile(0.25) Q3 df[风速].quantile(0.75) IQR Q3 - Q1 df df[~((df[风速] (Q1 - 1.5*IQR)) | (df[风速] (Q3 1.5*IQR)))]2.3 数据重采样将小时数据聚合为日平均数据df[时间] pd.to_datetime(df[时间]) df df.set_index(时间) daily_df df.resample(D).mean()3. 特征工程实践3.1 基础特征构造时间特征提取月份、季节、是否周末等daily_df[月份] daily_df.index.month daily_df[季节] daily_df.index.quarter滞后特征加入前3天的风速作为特征for i in [1, 2, 3]: daily_df[f滞后{i}天] daily_df[风速].shift(i)3.2 统计特征计算滑动窗口统计量daily_df[7天均值] daily_df[风速].rolling(7).mean() daily_df[7天标准差] daily_df[风速].rolling(7).std()3.3 气象相关特征温度与风速的交互特征气压梯度变化率daily_df[温风比] daily_df[温度] / daily_df[风速] daily_df[气压变化] daily_df[气压].diff()4. 特征选择方法4.1 相关性分析计算特征与目标变量的Pearson相关系数corr_matrix daily_df.corr() print(corr_matrix[风速].sort_values(ascendingFalse))4.2 特征重要性排序使用随机森林评估特征重要性from sklearn.ensemble import RandomForestRegressor X daily_df.dropna().drop(风速, axis1) y daily_df.dropna()[风速] model RandomForestRegressor() model.fit(X, y) importance pd.Series(model.feature_importances_, indexX.columns) print(importance.sort_values(ascendingFalse))4.3 递归特征消除通过RFE选择最优特征子集from sklearn.feature_selection import RFE from sklearn.linear_model import LinearRegression selector RFE(LinearRegression(), n_features_to_select10) selector.fit(X, y) selected_features X.columns[selector.support_]5. 数据标准化与分割5.1 标准化处理from sklearn.preprocessing import StandardScaler scaler StandardScaler() X_scaled scaler.fit_transform(X)5.2 数据集划分按时间顺序划分训练集和测试集split_date 2015-01-01 train daily_df.loc[daily_df.index split_date] test daily_df.loc[daily_df.index split_date]6. 滑动窗口技术将时间序列转为监督学习格式def create_dataset(data, window_size): X, y [], [] for i in range(len(data)-window_size): X.append(data[i:(iwindow_size)]) y.append(data[iwindow_size]) return np.array(X), np.array(y) window_size 7 X_train, y_train create_dataset(train[风速], window_size) X_test, y_test create_dataset(test[风速], window_size)7. 特征可视化分析7.1 趋势分解from statsmodels.tsa.seasonal import seasonal_decompose result seasonal_decompose(daily_df[风速], modeladditive, period365) result.plot()7.2 自相关分析from statsmodels.graphics.tsaplots import plot_acf plot_acf(daily_df[风速], lags30) plt.show()在实际项目中我发现特征工程的质量直接影响模型效果。曾经有个项目因忽略了气压变化特征导致预测误差比包含该特征时高出15%。建议在构造特征时多结合气象学先验知识比如风速与昼夜温差的关系往往比单纯的时间特征更有预测力。