当前位置: 首页 > news >正文

深度学习笔记26-天气预测(Tensorflow)

  •  🍨 本文为🔗365天深度学习训练营中的学习记录博客
  • 🍖 原作者:K同学啊

 一、前期准备

1.数据导入

import numpy as np
import pandas as pd
import warnings
import seaborn as sns
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Activation,Dropout
from tensorflow.keras.callbacks import EarlyStopping
from sklearn.metrics import classification_report,confusion_matrix
from sklearn.metrics import r2_score
from sklearn.metrics import mean_absolute_error,mean_absolute_percentage_error,mean_squared_error
data=pd.read_csv("D:\TensorFlow1\weatherAUS.csv")
df=data.copy()
data.head()
data.describe()
data.dtypes

 

#将数据转换为日期时间格式
data['Date'] = pd.to_datetime(data['Date'])
data['year'] = data['Date'].dt.year
data['Month'] = data['Date'].dt.month
data['day']= data['Date'].dt.day
data.head()

data.drop('Date',axis=1,inplace=True)
data.columns

 

二、探索式数据分析EDA

1.数据相关性探索

plt.figure(figsize=(15,13))
#data.corr()表示了data中的两个变量之间的相关性
ax = sns.heatmap(data.corr(numeric_only=True),square=True,annot=True,fmt='.2f')
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
plt.show()

2.是否会下雨

#设置样式和调色板
sns.set(style="whitegrid", palette="Set2")
#创建一个1行2列的图像布局
fig,axes=plt.subplots(1,2,figsize=(10,4))#图形尺寸
#图表标题样式
title_font ={'fontsize':14,'fontweight':'bold','color':'darkblue'}#第一张图:RainTomorrow
sns.countplot(x='RainTomorrow', data=data, ax=axes[0],edgecolor='black')#添加边框
axes[0].set_title('Rain Tomorrow',fontdict=title_font) #设置标题
axes[0].set_xlabel('Will it Rain Tomorrow',fontsize=12) #X轴标签
axes[0].set_ylabel('Count',fontsize=12) #y轴标签
axes[0].tick_params(axis='x',labelsize=11) #X轴刻度字体大小
axes[0].tick_params(axis='y',labelsize=11) #y轴刻度字体大小#第二张图:RainToday
sns.countplot(x='RainTomorrow', data=data, ax=axes[1],edgecolor='black')#添加边框
axes[1].set_title('Rain Tomorrow',fontdict=title_font) #设置标题
axes[1].set_xlabel('Will it Rain Tomorrow',fontsize=12) #X轴标签
axes[1].set_ylabel('Count',fontsize=12) #y轴标签
axes[1].tick_params(axis='x',labelsize=11) #X轴刻度字体大小
axes[1].tick_params(axis='y',labelsize=11) #y轴刻度字体大小sns.despine() #去除图表顶部和右侧的边框
plt.tight_layout() #调整布局,避免图形之间的重叠
plt.show()

x=pd.crosstab(data['RainTomorrow'],data['RainToday'])
x

y=x/x.transpose().sum().values.reshape(2,1)*100
y

 

如果今天不下雨,那么明天下雨的机会=53.22%

如果今天下雨,那么明天下雨的机会=46.78%

y.plot(kind='bar',figsize=(4,3),color=['#006666','#d279a6']);

 

3.地理位置与下雨的关系

x=pd.crosstab(data['Location'],data['RainToday'])
#获取每个城市下雨天数和非下雨天数的百分比
y=x/x.transpose().sum().values.reshape((-1,1))*100
#按每个城市的雨天百分比排序
y=y.sort_values(by='Yes',ascending=True)color=['#cc6699','#006699','#006666','#862d86','#ff9966']
y.Yes.plot(kind='barh',figsize=(15,20),color=color)

4.湿度和压力对下雨的影响 

plt.figure(figsize=(8,6))
sns.scatterplot(data=data,x='Pressure9am',y='Pressure3pm',hue='RainTomorrow');

plt.figure(figsize=(8,6))
sns.scatterplot(data=data,x='Humidity9am',y='Pressure3pm',hue='RainTomorrow');

5.气温对下雨的影响

plt.figure(figsize=(8,6))
sns.scatterplot(x='MaxTemp',y='MinTemp',data=data,hue='RainTomorrow');

三、数据预处理

1.缺失值处理

# 每列中缺失数据的百分比
data.isnull().sum()/data.shape[0]*100

#在该列中随机选择数进行填充
lst=['Evaporation','Sunshine','Cloud9am','Cloud3pm']
for col in lst:fill_list=data[col].dropna()data[col]=data[col].fillna(pd.Series(np.random.choice(fill_list,size=len(data.index))))
s=(data.dtypes=='object')
object_cols=list(s[s].index)
object_cols

# inplace=True:直接修改原对象,不创建副本
# data[i].mode()[0] 返回频率出现最高的选项,众数
for i in object_cols:data[i].fillna(data[i].mode()[0],inplace=True)
t=(data.dtypes=='float64')
num_cols=list(t[t].index)
num_cols

# .median,中位数
for i in num_cols:data[i].fillna(data[i].median(),inplace=True)
data.isnull().sum()

2.构建数据集

from sklearn.preprocessing import LabelEncoder
label_encoder=LabelEncoder()
for i in object_cols:data[i]=label_encoder.fit_transform(data[i])
X=data.drop(['RainTomorrow','day'],axis=1).values
y=data['RainTomorrow'].values
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=101)

四、预测是否会下雨

1.搭建神经网络

from tensorflow.keras.optimizers import Adam
model=Sequential()
model.add(Dense(units=24,activation='tanh',))
model.add(Dense(units=18,activation='tanh'))
model.add(Dense(units=23,activation='tanh'))
model.add(Dropout(0.5))
model.add(Dense(units=12,activation='tanh'))
model.add(Dropout(0.2))
model.add(Dense(units=1,activation='sigmoid'))optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4)
model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=["accuracy"])
early_stop=EarlyStopping(monitor='val_loss',mode='min',min_delta=0.001,verbose=1,patience=25,restore_best_weights=True)

2.模型训练

model.fit(x=X_train,y=y_train,validation_data=(X_test,y_test),verbose=1,callbacks=[early_stop],epochs=10,batch_size=32)

3.结果可视化

import matplotlib.pyplot as plt
from datetime import datetime
#隐藏警告
import warnings
warnings.filterwarnings("ignore")#忽略警告信息
current_time=datetime.now()#获取当前时间plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False#用来正常显示负号
plt.rcParams['figure.dpi']= 200    #分辨率acc=model.history.history['accuracy']
val_acc=model.history.history['val_accuracy']
loss=model.history.history['loss']
val_loss=model.history.history['val_loss']epochs_range = range(10)
plt.figure(figsize=(14,4))
plt.subplot(1,2,1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.xlabel(current_time)#打卡请带上时间戳,否则代码截图无效plt.subplot(1,2,2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()


 

五、总结

探索性数据分析(EDA)在天气预测项目中具有不可替代的重要价值,主要优点:

🌟 核心优势

  1. 数据质量诊断

    • 快速识别传感器错误、传输故障导致的数据异常

    • 检测缺失值分布模式(如特定时间段/气象站数据缺失)

    • 发现单位不一致问题(如华氏/摄氏温度混杂)

  2. 特征理解与工程

    • 揭示气象变量间的复杂关系(如湿度-温度非线性关系)

    • 识别关键预测因子(如气压骤变对降雨的指示作用)

    • 指导创建新特征(如计算露点温度、热指数等复合指标)

 

相关文章:

  • 华为数字化转型进阶——精读188页华为EBPM数字化全要素流程管理方法论【附全文阅读】
  • 泰国电商系统简单纪要
  • Agent 处理流程
  • Arduino学习-红外感应
  • 基于通义灵码2.5的智能天气预警系统开发全记录
  • SQL注入部分理论入门学习
  • LLM-大模型原理
  • Elasticsearch 批量创建索引实践与优化建议
  • LeetCode - 76. 最小覆盖子串
  • Linux文件权限详解:从入门到精通
  • Deepseek+python - 自动图表生成
  • 自定义表单右侧属性使用v-bind绑定渲染
  • linux环境配置Go运行环境
  • 《Head First》读书笔记
  • 缩小 IEEE 会议论文 LaTeX 模板标题、作者信息和正文的间距
  • (十四)自然语言处理中的深度学习:语言表征、模型架构与计算语言学基础
  • 现代简约单词卡片应用 - 基础版
  • shader实现发亮的粒子 + 透明度渲染可能出现的坑
  • 生益PCB耐高温PCB板材怎么样?
  • 使用清华大学的 Hugging Face 镜像
  • 做app还是做网站合适6/游戏推广是什么工作
  • php和python做网站/百度文库个人登录入口
  • vps怎么做网站/百度搜索百度
  • 先做网站后台还是前台/网站开发技术
  • 建立一个同城网站要怎么做/东莞今天发生的重大新闻
  • 荆州松滋网站建设/网页设计需要学什么