导入所需的库

1
2
3
4
import pandas as pd  # Pandas库用于数据处理
from sklearn.model_selection import train_test_split # 用于划分训练集和测试集
from sklearn.tree import DecisionTreeClassifier # 决策树分类器
from sklearn.metrics import accuracy_score # 用于计算准确率

读取数据集

1
2
file_path = r'C:\Users\Administrator\Desktop\数据集.xlsx'
df = pd.read_excel(file_path, sheet_name='训练和测试集')
1
2
3
4
5
6
7
# 处理分类变量,将文字类别转换为数字
direction_mapping = {'W': 1, 'NNE': 2, 'SSW': 3, 'SSE': 4, 'N': 5, 'SE': 6, 'ESE': 7, 'S': 8, 'E': 9, 'NE': 10}

# 将文字类别转换为数字
df['最强阵风的方向'] = df['最强阵风的方向'].map(direction_mapping)
df['风向9am'] = df['风向9am'].map(direction_mapping)
df['风向3pm'] = df['风向3pm'].map(direction_mapping)

处理分类变量:

  • direction_mapping是一个字典,将风向的文字类别映射为对应的数字。例如,’W’映射为1,’NNE’映射为2,以此类推。
  • map函数用于根据提供的映射将数据中的文字类别转换为对应的数字。
1
2
3
# 分离特征和目标变量
X = df.drop(['日期', '今天是否下雨'], axis=1) # 特征集,去除日期和目标变量
y = df['今天是否下雨'] # 目标变量

分离特征和目标变量:

  • df.drop(['日期', '今天是否下雨'], axis=1):从数据框中删除’日期’和’今天是否下雨’列,得到特征集X
  • df['今天是否下雨']:获取目标变量y,即’今天是否下雨’列。
1
2
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.007, random_state=42)

划分训练集和测试集:

  • train_test_split(X, y, test_size=0.007, random_state=42):将特征集X和目标变量y划分为训练集和测试集。
  • test_size=0.007表示测试集占总数据的0.7%。
  • random_state=42用于设置随机种子,以确保划分的一致性。
1
2
3
# 训练决策树分类器
clf = DecisionTreeClassifier(random_state=42) # 创建决策树分类器对象
clf.fit(X_train, y_train) # 使用训练集进行模型训练

训练决策树分类器:

  • DecisionTreeClassifier(random_state=42):创建了一个决策树分类器对象,其中random_state=42用于设置随机种子,以保持模型的一致性。
  • clf.fit(X_train, y_train):使用训练集X_train和对应的目标变量y_train来训练决策树分类器。
1
2
# 进行测试集的预测
prediction_test = clf.predict(X_test)

测试集预测:

  • clf.predict(X_test):使用训练好的决策树模型对测试集X_test进行预测,得到预测结果prediction_test
1
2
3
# 计算测试集的准确率
accuracy_test = accuracy_score(y_test, prediction_test)
print(f"测试集准确率: {accuracy_test}")

计算测试集准确率:

  • accuracy_score(y_test, prediction_test):使用测试集的真实标签y_test和模型预测的结果prediction_test来计算模型在测试集上的准确率。
  • 打印测试集准确率。
1
2
3
4
5
6
7
# 处理预测集的分类变量
predict_df = pd.read_excel(file_path, sheet_name='需要预测的下雨情况')

# 使用之前定义的映射将文字类别转换为数字
predict_df['最强阵风的方向'] = predict_df['最强阵风的方向'].map(direction_mapping)
predict_df['风向9am'] = predict_df['风向9am'].map(direction_mapping)
predict_df['风向3pm'] = predict_df['风向3pm'].map(direction_mapping)

处理预测集的分类变量:

  • 从Excel文件中读取包含需要预测的数据,同样将文字类别映射为数字。
1
2
3
# 进行预测集的预测
X_predict = predict_df.drop(['日期', '今天是否下雨'], axis=1)
prediction_predict = clf.predict(X_predict)

预测集预测:

  • 使用训练好的决策树模型对预测集X_predict进行预测,得到预测结果prediction_predict
1
2
# 将预测结果合并到预测集
predict_df['今天是否下雨'] = prediction_predict

合并预测结果:

  • 将模型在预测集上的结果prediction_predict添加到预测集的数据框中。
1
2
# 打印预测集的预测结果
print(predict_df[['日期', '今天是否下雨']])

打印预测结果:

打印包含日期和预测是否下雨的结果的数据框。

总结一下,这段代码主要进行了以下步骤:

  1. 数据读取和预处理:

    • 通过Pandas读取包含训练和测试集的Excel文件。
    • 将风向等分类变量映射为数字。
  2. 数据集划分:

    • 使用train_test_split将数据集划分为训练集和测试集。
  3. 模型训练:

    • 创建并训练了一个决策树分类器。
  4. 模型评估:

    • 使用测试集评估了模型的准确率。
  5. 预测集处理和预测:

    • 从Excel文件中读取包含需要预测的数据。
    • 对预测集中的分类变量进行数字映射。
    • 使用训练好的决策树模型进行预测。
  6. 结果展示:

    • 将预测结果合并到预测集,打印包含日期和预测是否下雨的最终结果。

这段代码是一个简单的机器学习任务示例,使用了决策树分类器来预测某一天是否会下雨,通过对数据的处理、模型的训练和测试集的评估,最后得到了预测结果。