深度學習筆記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. 特征理解與工程

    • 揭示氣象變量間的復雜關系(如濕度-溫度非線性關系)

    • 識別關鍵預測因子(如氣壓驟變對降雨的指示作用)

    • 指導創建新特征(如計算露點溫度、熱指數等復合指標)

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84726.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84726.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

day54 python對抗生成網絡

目錄 一、GAN對抗生成網絡思想 二、實踐過程 1. 數據準備 2. 構建生成器和判別器 3. 訓練過程 4. 生成結果與可視化 三、學習總結 一、GAN對抗生成網絡思想 GAN的核心思想非常有趣且富有對抗性。它由兩部分組成:生成器(Generator)和判…

龍虎榜——20250613

上證指數放量下跌收陰線,個股下跌超4000只,受外圍消息影響情緒總體較差。 深證指數放量下跌,收陰線,6月總體外圍風險較高,轉下跌走勢的概率較大,注意風險。 2025年6月13日龍虎榜行業方向分析 1. 石油石化&…

Linux常用命令加強版替代品

Linux常用命令加強版替代品 還在日復一日地使用 ls、grep、cd 這些“上古”命令嗎?是時候給你的終端來一次大升級了!本文將為你介紹一系列強大、高效且設計現代的Linux命令行工具,它們將徹底改變你的工作流,讓你愛上在終端里操作…

Hadoop 003 — JAVA操作MapReduce入門案例

MapReduce入門案例-分詞統計 文章目錄 MapReduce入門案例-分詞統計1.xml依賴2.編寫MapReduce處理邏輯3.上傳統計文件到HDFS3.配置MapReduce作業并測試4.執行結果 1.xml依賴 <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-commo…

Python打卡第53天

浙大疏錦行 作業&#xff1a; 對于心臟病數據集&#xff0c;對于病人這個不平衡的樣本用GAN來學習并生成病人樣本&#xff0c;觀察不用GAN和用GAN的F1分數差異。 import pandas as pd import numpy as np import torch import torch.nn as nn import torch.optim as optim from…

力扣-279.完全平方數

題目描述 給你一個整數 n &#xff0c;返回 和為 n 的完全平方數的最少數量 。 完全平方數 是一個整數&#xff0c;其值等于另一個整數的平方&#xff1b;換句話說&#xff0c;其值等于一個整數自乘的積。例如&#xff0c;1、4、9 和 16 都是完全平方數&#xff0c;而 3 和 1…

前端構建工具Webapck、Vite——>前沿字節開源Rspack詳解——2023D2大會

Rspack 以下是針對主流構建工具&#xff08;Webpack、Vite、Rollup、esbuild&#xff09;的核心不足分析&#xff0c;以及 Rspack 如何基于這些痛點進行針對性改進 的深度解析&#xff1a; 一、主流構建工具的不足 1. Webpack&#xff1a;性能與生態的失衡 核心問題 冷啟動慢…

輸入法,開頭輸入這U I V 三個字母會不顯示 任何中文

1. 漢語拼音規則的限制 漢語拼音中不存在以“V”“U”“I”為聲母的情況&#xff1a; 漢語拼音的聲母是輔音&#xff0c;而“V”“U”“I”在漢語拼音中都是元音&#xff08;或韻母的一部分&#xff09;。漢語拼音的聲母系統中沒有“V”“U”“I”作為聲母的音節。例如&#xf…

Linux文件權限詳解:從入門到精通

前言 權限是什么&#xff1f; 本質&#xff1a;無非就是能做和不能做什么。 為什么要有權限呢&#xff1f; 目的&#xff1a;為了控制用戶行為&#xff0c;防止發生錯誤。 1.權限的理解 在學習下面知識之前要先知道的一點是&#xff1a;linux下一切皆文件&#xff0c;對li…

在多云環境透析連接ngx_stream_proxy_protocol_vendor_module

1、模塊定位與價值 多云接入&#xff1a;在同一 Nginx 實例前端接入來自多云平臺的私有鏈路時&#xff0c;能區分 AWS、GCP、Azure 特有的連接 ID。安全審計&#xff1a;自動記錄云平臺側的 Endpoint/VPC ID&#xff0c;有助于聯調和安全事件追蹤。路由分流&#xff1a;基于不…

力扣:基本計算器

基本計算器: 224. 基本計算器 - 力扣&#xff08;LeetCode&#xff09; 本體思路為&#xff0c;將中綴表達式轉為后綴表達式&#xff0c;通過后綴表達式進行運算。 中綴表達式: 我們日常生活中熟知的表達式如12-30 就是一個中綴表達式。 后綴表達式: 150. 逆波蘭表達式求值 - …

《AI日報 · 0613|ChatGPT支持導出、Manus免費開放、GCP全球宕機》

AI 資訊 1?? OpenAI ChatGPT Canvas新增多格式導出功能 OpenAI終于為ChatGPT Canvas推出了用戶期待已久的導出功能。現在,用戶可以將創作內容導出為多種格式:文檔類支持PDF、docx和markdown格式,代碼文件則可直接保存為對應擴展名的源文件(如.py、.js、.sql等)。這一功…

C++中的零拷貝技術

一、C中零拷貝技術的核心概念 零拷貝&#xff08;Zero-copy&#xff09;是一種重要的優化技術&#xff0c;旨在減少數據在內存中的不必要復制&#xff0c;從而提高程序性能、降低內存使用并減少CPU消耗。在C中&#xff0c;零拷貝技術通過多種方式實現&#xff0c;包括引用語義…

RT_Thread內核源碼分析(五)——內存管理@小堆內存管理算法

目錄 1、內存堆控制 1.1 內存堆控制器 1.2 內存塊節點 1.3 內存堆管理 2、內存堆初始化 2.1 初始化接口 2.2 初始化示例 2.3 源碼分析 3、內存堆操作 3.1 內存塊申請 3.1.1 相關接口 3.1.2 原理分析 3.1.3 示例分析 3.1.4 代碼分析 3.2 內存塊伸縮 3.2.1 相關…

MyBatis-Plus 混合使用 XML 和注解

mybatisplus代碼生成器&#xff1a; 版本匹配是個比較麻煩的問題&#xff0c;這是我的配置&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version>…

基于ssm的教學質量評估系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

【STM32】G030單片機開啟超過8個ADC通道的方法

如圖所示通道數量已經超過8個&#xff0c;按照之前博客的辦法已經行不通了 CubeMX配置STM32F103C8T6多路ADC配合DMA采集_stm32f103c8t6的adc采樣率-CSDN博客 這里筆者開了10個channel&#xff0c;注意切換為不完全配置&#xff0c;否則的話最多只有8個rank 開DMA&#xff0c;…

不同網絡I/O模型的原理

目錄 1、I/O的介紹 1.1、I/O 操作分類 1.2、I/O操作流程階段 1.3、I/O分類 2、同步I/O 2.1、阻塞I/O 2.2、非阻塞I/O 2.3、I/O復用 2.4、信號驅動式I/O 3、異步I/O 前言 在網絡I/O之中&#xff0c;I/O操作往往會涉及到兩個系統對象&#xff0c;一個是用戶空間調用I/O…

在正則表達式中語法 (?P<名字>內容)

&#x1f3af; 重點解釋&#xff1a;?P<xxx> 是什么語法&#xff1f; 這一整段&#xff1a; (?P<xxx>...)是 Python 正則表達式中 “命名捕獲組” 的語法。 咱們現在一個字一個字來解釋&#xff1a; ? (?...) 是干啥的&#xff1f; 這是一個捕獲組&#xff…

中興B860AV1.1_MSO9280_降級后開ADB-免刷機破解教程(非刷機)

中興B860AV1.1江蘇移動-自動降級包 關于中興b860av1.1頑固盒子降級教程終極版 將附件解壓好以后&#xff0c;準備一個8G以下的U盤重新格式化為FAT32格式后&#xff0c;并插入電腦 將以下文件及文件夾一同復制到優盤主目錄下&#xff08;見下圖&#xff09; 全選并復制到U盤主目…