一、研究背景
近年来,随着全球气候变化的加剧,天气预报和气象预测变得越来越重要。准确的天气预测不仅能够帮助人们做好日常生活的安排,还能在农业生产、防灾减灾等方面起到关键作用。随着大数据技术和机器学习算法的快速发展,利用数据驱动的方法进行天气类型预测已经成为一种趋势。本研究基于历史气象数据,利用多种气象指标,如温度、湿度、风速、降水量、云量、气压、紫外线指数等,通过机器学习算法对天气类型进行预测,以期提高天气预报的准确性和实用性。
二、研究意义
本研究的意义主要体现在以下几个方面:
- 提升天气预报的准确性:通过机器学习算法对历史气象数据进行分析,可以发现数据中的潜在模式,从而提高天气预报的准确性。
- 增强防灾减灾能力:准确的天气预报可以帮助政府和相关部门提前采取防灾减灾措施,减少因恶劣天气造成的损失。
- 促进农业生产:精准的气象预测能够帮助农民合理安排播种、施肥和收获等农业活动,提高农业生产效率。
- 推动气象数据应用:通过对气象数据的深入分析和应用,可以促进气象数据在更多领域的应用,推动相关技术的发展。
三、实证分析
代码和数据集
首先导入数据包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
# Classification models
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
import warnings
warnings.filterwarnings('ignore')
读取展示数据集
data=pd.read_csv('weather_classification_data.csv')
data.head(5)
查看数据类型
描述性统计分析
data.describe()
查看分类变量汇总
接下来对数据可视化
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
sns.histplot(data['Temperature'], bins=20, kde=True, color='#835C3B', alpha=0.7)
plt.title('Distribution of Temperature')
plt.xlabel('Temperature (Celsius)')
plt.ylabel('Count')
plt.subplot(2, 2, 2)
sns.histplot(data['Humidity'], bins=20, kde=True, color='#3F000F', alpha=0.7)
plt.title('Distribution of Humidity')
plt.xlabel('Humidity (%)')
plt.ylabel('Count')
plt.subplot(2, 2, 3)
sns.histplot(data['Wind Speed'], bins=20, kde=True, color='#1F6357', alpha=0.7)
plt.title('Distribution of Wind Speed')
plt.xlabel('Wind Speed (km/h)')
plt.ylabel('Count')
plt.subplot(2, 2, 4)
sns.histplot(data['Precipitation (%)'], bins=20, kde=True, color='#3C565B', alpha=0.7)
plt.title('Distribution of Precipitation')
plt.xlabel('Precipitation (%)')
plt.ylabel('Count')
plt.tight_layout()
plt.show()
可以发现
温度:温度分布向右倾斜,这意味着对较高温度的观测值多于对较低温度的观测值。最常见的温度在 20 到 40 摄氏度之间。
湿度:最常见的湿度水平在 60% 到 100% 之间。
风速:风速分布向右倾斜,最常见的观测值在0到20(km/h)之间。
降水:最常见的降水量在0%至20%之间。
对分类变量的图进行计数
plt.figure(figsize=(16, 10))
plt.subplot(2, 2, 1)
sns.countplot(x='Cloud Cover', data=data, palette='Set2')
plt.title('Count of Cloud Cover')
plt.subplot(2, 2, 2)
sns.countplot(x='Season', data=data, palette='Set1')
plt.title('Count of Season')
plt.subplot(2, 2, 3)
sns.countplot(x='Location', data=data, palette='Set3')
plt.title('Count of Location')
plt.subplot(2, 2, 4)
sns.countplot(x='Weather Type', data=data, palette='Pastel1')
plt.title('Count of Weather Type')
plt.tight_layout()
plt.show()
接下来进行数据清洗和预处理
# # 定义标准缩放的数值特征
numeric_features = ['Temperature', 'Humidity', 'Wind Speed', 'Precipitation (%)', 'Atmospheric Pressure', 'UV Index', 'Visibility (km)']
# 标准化
scaler = StandardScaler()
X_train_scaled = X_train.copy()
X_train_scaled[numeric_features] = scaler.fit_transform(X_train[numeric_features])
用于相关性分析的独立数值特征
mask = np.triu(np.ones_like(corr_matrix, dtype=bool))
plt.figure(figsize=(8,6))
sns.heatmap(corr_matrix, mask=mask, annot=True, cmap='copper', fmt='.2f', linewidths=0.5)
plt.title('Correlation Matrix Heatmap (Numerical Features)')
plt.show()
温度与大气压力、紫外线指数和能见度呈正相关。降水量和湿度之间最正相关。最负相关的是湿度和能见度。
接下来建立模型和对模型评价
classifiers = {
'Logistic Regression': LogisticRegression(random_state=42),
'Decision Tree': DecisionTreeClassifier(random_state=42),
'Random Forest': RandomForestClassifier(random_state=42),
'Gradient Boosting': GradientBoostingClassifier(random_state=42),
'SVM': SVC(random_state=42),
'KNN': KNeighborsClassifier(),
'Naive Bayes': GaussianNB()
}
for clf_name, clf in classifiers.items():
print(f"Training {clf_name}...")
clf.fit(X_train_scaled, y_train)
y_pred = clf.predict(X_test_scaled)
逻辑回归
决策树
随机森林
梯度提升
支持向量机
KNN
朴素贝叶斯
决策树、随机森林和梯度提升分类器可实现最高的准确度和 F1 分数,表明在所有天气类型下都具有强大的性能。大多数分类器在不同类别(多云、雨天、下雪、晴天)中表现出平衡的精度和召回率,这表明它们可以很好地泛化到数据集中的所有天气类型。
接下来查看特征重要性
importance = rf_classifier.feature_importances_
feature_names = X.columns
feature_importance_df = pd.DataFrame({'Feature': feature_names, 'Importance': importance})
feature_importance_df = feature_importance_df.sort_values(by='Importance', ascending=False)
print("Feature Importance (Random Forest):")
feature_importance_df
画出特征重要性图
plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=feature_importance_df, palette='copper')
plt.title('Feature Importance - Random Forest Classifier')
plt.xlabel('Importance')
plt.ylabel('Feature')
plt.show()
温度的重要性最高,表明它对天气类型的预测有很大影响。这与温度在决定天气条件方面起着关键作用的常识相一致。 能见度(km)和降水量(%)的重要性紧随其后,表明这些因素对天气分类有重大贡献,特别是在确定降水的清晰度和存在方面。 紫外线指数和大气压力也显示出显着的重要性,表明它们在预测某些天气模式中的作用。 与此模型中的其他要素相比,云量、湿度、季节、风速和位置的重要性值相对较低。这并不一定意味着它们总体上不那么重要,但表明它们对这个特定模型的预测影响较小。
四、结论
通过本研究,我们利用包含温度、湿度、风速、降水量、云量、气压、紫外线指数、能见度等多个气象指标的数据集,采用机器学习算法对天气类型进行了预测。研究结果表明,所采用的机器学习模型能够有效地识别和预测不同类型的天气。具体结论如下:
- 模型的有效性:所使用的模型在训练数据和测试数据上均表现出较高的预测准确性,证明了模型在天气类型预测中的有效性。
- 特征重要性分析:通过对模型特征的重要性进行分析,发现温度、湿度和降水量是影响天气类型的主要因素,而云量和气压在某些天气类型中也具有显著的影响。
- 应用前景:本研究的方法和结果为实际应用提供了参考,可以应用于更大规模的数据集和更多种类的天气类型预测中,为提升天气预报的精准度提供了新的途径。
总之,本研究通过数据驱动的方法对天气类型进行了有效预测,为天气预报和相关应用提供了重要参考和借鉴。未来,可以进一步结合更为复杂的气象数据和更先进的机器学习算法,提升预测模型的性能和适用性。
创作不易,希望大家多点赞关注评论!!!(类似代码或报告定制可以私信)