【Week-R3】天气预测,引入探索式数据分析方法(EDA)

news2024/11/25 4:55:20

文章目录

  • 1. 导入模块
  • 2. 导入数据
  • 3.探索式数据分析方法(EDA)
    • 3.1 数据相关性探索
    • 3.2 是否会下雨
    • 3.3 地理位置与下雨的关系
    • 3.4 湿度和压力对下雨的影响
    • 3.5 气温对下雨的影响
  • 4.数据预处理
    • 4.1 处理缺损值
    • 4.2 构建数据集
  • 5 预测是否会下雨
    • 5.1 构建神经网络
    • 5.2 模型训练
    • 5.3 结果可视化

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊 | 接辅导、项目定制

本次学习引入了探索式数据分析(EDA),可用于分析数据表内各数据之间的关系

本次学习使用的数据集:来自澳大利亚许多地点的大约10年的每日天气观测数据。

本次学习的任务:根据提供的数据,对明天是否下雨(RainTomorrow)进行预测。

语言环境:Python 3.12
编译器:VSCode
深度学习框架:Tensorflow 2.11.0

1. 导入模块

print("*****************# 1. 导入模块************************")
# 1. 导入模块
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings('ignore')

import tensorflow as tf
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout
from 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
print("*****************# 1. 导入模块  End************************")

2. 导入数据

# 2. 导入数据
print("*****************# 2. 导入数据************************")
data = pd.read_csv("D:\\jupyter notebook\\DL-100-days\\RNN\\weatherAUS.csv")
df = data.copy()
print("data.head():\n", data.head())

在这里插入图片描述

print("data.describe():\n", data.describe())

在这里插入图片描述

print("data.dtypes:\n", data.dtypes)

在这里插入图片描述

data['Date'] = pd.to_datetime(data['Date'])
print("data['Date']:\n", data['Date'])

在这里插入图片描述

data['year'] = data['Date'].dt.year
data['Month'] = data['Date'].dt.month
data['day'] = data['Date'].dt.day
print("data.head():\n", data.head())

在这里插入图片描述

data.drop('Date', axis=1, inplace=True)
print("data.columns:\n", data.columns)
print("*****************# 2. 导入数据 End************************")

在这里插入图片描述

3.探索式数据分析方法(EDA)

探索性数据分析(Exploratory Data Analysis,简称EDA),是指对已有的数据(特别是调查或观察得来的原始数据)在尽量少的先验假定下进行探索,通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律了解数据集,了解变量间的相互关系以及变量与预测值之间的关系的一种数据分析方法。

【探索式数据分析方法(EDA)】

3.1 数据相关性探索

print("*****************3.探索式数据分析方法(EDA)************************")
# 3.探索式数据分析方法(EDA)
# 3.1 数据相关性探索
plt.figure(figsize=(15,13))
# data.corr()表示了data中的两个变量之间的相关性
ax = sns.heatmap(data.corr(),square=True, annot=True, fmt='.2f')
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
plt.savefig("3.1 数据相关性探索热力图.png")
plt.show()

在这里插入图片描述

3.2 是否会下雨

# 3.2 是否会下雨
fig,ax = plt.subplots(1,3,constrained_layout = True , figsize = (14,3))
sns.set_theme(style="darkgrid")
#plt.figure(figsize=(4,3))
sns.countplot(x='RainTomorrow', data=data, ax=ax[0])
#plt.savefig("3.2 明天是否会下雨.png")

#plt.figure(figsize=(4,3))
sns.countplot(x='RainToday', data=data, ax=ax[1])
#plt.savefig("3.2 今天是否会下雨.png")

x = pd.crosstab(data['RainTomorrow'], data['RainToday'])
print("x: \n", x)
# 计算百分比
y = x/x.transpose().sum().values.reshape(2,1)*100
print("y: \n", y)

y.plot(kind="bar", figsize=(4,3), color=['#006666','#d279a6'], ax=ax[2])
plt.savefig("3.2 是否会下雨.png")

在这里插入图片描述
(左)明天是否下雨
(中)今天是否下雨
(右)今天是否下雨 & 明天是否下雨 的关系
请添加图片描述

3.3 地理位置与下雨的关系

plt.figure(figsize=(15,20))
# 3.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="bath", figsize=(15,20), color=color)
plt.savefig("3.3 地理位置与下雨的关系.png")

在这里插入图片描述

3.4 湿度和压力对下雨的影响

# 3.4 湿度和压力对下雨的影响
data.columns
# 绘制明天早上9点到下午3点的气压下是否下雨的散点图
fig,ax = plt.subplots(1,2,constrained_layout = True , figsize = (20,6))
#plt.figure(figsize=(8,6))
sns.scatterplot(data=data, x='Pressure9am', y='Pressure3pm',hue='RainTomorrow', ax=ax[0])
#plt.savefig("3.4 压力对下雨的影响.png")
# 绘制明天早上9点到下午3点的湿度下是否下雨的散点图
#plt.figure(figsize=(8,6))
sns.scatterplot(data=data, x='Humidity9am', y='Humidity3pm',hue='RainTomorrow', ax=ax[1])
plt.savefig("3.4 压力、湿度对下雨的影响.png")

输出:(左)压力对下雨的影响 (右)湿度对下雨的影响
在这里插入图片描述

3.5 气温对下雨的影响

# 3.5 气温对下雨的影响
plt.figure(figsize=(8,6))
sns.scatterplot(data=data, x='MinTemp', y='MaxTemp',hue='RainTomorrow')
plt.savefig("3.5 气温对下雨的影响.png")
print("*****************3.探索式数据分析方法(EDA)  End************************")

在这里插入图片描述

4.数据预处理

4.1 处理缺损值

print("*****************# 4.数据预处理************************")
# 4.数据预处理
# 4.1 处理缺损值
# 每列中缺失数据的百分比
print("每列中缺失数据的百分比: \n", 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)
print("object_cols: \n", 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)
print("num_cols: \n", num_cols)

在这里插入图片描述

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

4.2 构建数据集

LabelEncodersklearn.preprocessing 模块中的一个工具,用于将分类特征的标签转换为整数。

# 4.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)
scaler = MinMaxScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)
print("*****************# 4.数据预处理  End************************")

报错:
在这里插入图片描述
原因:LabelEncoder是sklearn的模块,不是keras的。
在这里插入图片描述

5 预测是否会下雨

5.1 构建神经网络

print("*****************# 5 预测是否会下雨************************")
# 5 预测是否会下雨
# 5.1 构建神经网络
from 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.2))
model.add(Dense(units=12, activation='tanh'))
model.add(Dropout(0.2))
model.add(Dense(units=1, activation='tanh'))
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)

5.2 模型训练

# 5.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)

在这里插入图片描述

5.3 结果可视化

# 5.3 结果可视化
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.subplot(1,2,2)
plt.plot(epochs_range, loss, label="Training Loss")
plt.plot(epochs_range, val_loss, label="Validation Loss")
plt.legend(loc="lower right")
plt.title("Training and Validation Loss")
plt.savefig("# 5.3 结果可视化.png")
plt.show()
print("*****************# 5 预测是否会下雨  End************************")

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1813193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVAEE值之网络原理(1)_传输控制协议(UDP)、概念、特点、结构、代码实例

前言 在前两节中我们介绍了UDP数据报套接字编程,但是并没有对UDP进行详细介绍,本节中我们将会详细介绍传输层中的UDP协议。 一、什么是UDP? UDP工作在传输层,用于程序之间传输数据的。数据一般包含:文件类型&#xff0…

您对薪资待遇是否满意?没证据怎么办?这样做很可能会补上来!

您对薪资待遇是否满意?没证据怎么办? 这样做很可能会补上来! 您有时可能对自己的工资或福利待遇感到不满意:感到为何我付出的不比别人少,但是工资待遇总是比别人低,是不是觉得很不服气?那么不服…

K8s 卷快照类

卷快照类 卷快照类 这个警告信息通常出现在使用 kubectl 删除 Kubernetes 集群资源时,如果尝试删除的是集群作用域(cluster-scoped)的资源,但指定了命名空间(namespace),就会出现这个警告。 集…

leetcode刷题-二叉树02

代码随想录二叉树part02|102.层序遍历、226.翻转二叉树、101.对称二叉树 102.层序遍历--十题226.翻转二叉树101.对称二叉树 102.层序遍历–十题 代码随想录文档讲解 LeetCode102 图论中的深度搜索和广度搜索分别对应二叉树中的递归遍历和层序遍历。 3/ \9 20/ \15 7返回层序…

ubuntu 20.04禁止自动更新内核驱动、显卡驱动(使用命令行)

本文目录 一、禁止更新内核1.1 查看当前内核1.2 查看安装的内核1.3 根据需求,使用hold参数禁止固定内核1.4 查询被锁定不更新软件包的状态 二、禁止更新显卡驱动2.1 查看安装的显卡驱动2.2 查看详细的详细的显卡信息2.3 禁止显卡驱动更新2.4 查询显卡是否设置成功 前…

记录大三上学期大数据课程设计:基于Hadoop和Spark的中文手写数字实时识别系统

我整理好了两个百度网盘链接,一个是模型文档和数据,一个是镜像,下载、导入虚拟机即可运行。 github地址:Li-Jihong/big-data: 用来记录大三上学期大数据课程设计:基于Hadoop和Spark的中文手写数字实时识别系统 (githu…

c# 二维图形绘制实践

1.等边三角形 1.1 概述 1.2 代码 using System; using System.Drawing; using System.Windows.Forms;public partial class TriangleForm : Form {public TriangleForm(){//InitializeComponent();// 确保窗体大小足够大,以容纳三角形 this.ClientSize new Siz…

计算机网络(1) OSI七层模型与TCP/IP四层模型

一.OSI七层模型 OSI 七层模型是国际标准化组织ISO提出的一个网络分层模型,它的目的是使各种不同的计算机和网络在世界范围内按照相同的标准框架实现互联。OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、…

小魔推-短视频矩阵批量创作一键分发同城引流工具

​小魔推是一款短视频营销裂变推广工具,主要服务于想做短视频营销的实体商家,通过BGC、PGC、UGC的打造帮助商家实现流量裂变与转化。 其中,小魔推AI矩阵营销是借助AI技术帮助企业/商家搭建营销矩阵,让商家拥有足够多的账号、足够…

matlab-2-simulink-小白教程-如何绘制电路图进行电路仿真

以上述电路图为例:包含D触发器,时钟CLK,与非门 一、启动simulink的三种方式 方式1 在MATLAB的命令行窗口输入“Simulink”命令。 方式2 在MATLAB主窗口的“主页”选项卡中,单击“SIMULINK”命令组中的Simulink命令按钮。 方式3 从MATLAB…

最小二乘法原理及其代码实现

一、最小二乘法原理 假设目前我们有一些数据,x是输入,y是与之对应的输出。现在想利用这些已有的数据,从中发现出规律,来预测没有出现过的输入会产生什么样的输出。 假设系统为单输入单输出系统,我们想在这个系统里找到…

【TB作品】MSP430F5529 单片机,数字时钟设计与实现,整点时通过蜂鸣器播放音乐进行报时

基于单片机的数字时钟设计与实现 作品名称 基于MSP430单片机的OLED显示数字时钟 作品功能 本作品实现了一个具有时间显示和整点报时功能的数字时钟。通过OLED屏幕显示当前时间,用户可以通过按键设置时间,并在整点时通过蜂鸣器播放音乐进行报时。 作…

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件 Affinity Designer 2, Affinity Photo 2, Affinity Publisher 2 请访问原文链接:Serif Affinity 2.5 (macOS, Windows) - 专业创意软件,查看最新版。原创作品,转载请保留出处。 作者主…

如何优化仓库布局与ERP库存管理

一、引言 随着企业规模的不断扩大,仓库管理和库存控制成为企业运营中不可或缺的一环。优化仓库布局和提高ERP库存管理效率,对于降低企业成本、提高物流效率、增强企业竞争力具有重要意义。 二、优化仓库布局 1. 分析仓库需求 在优化仓库布局之前&…

【学习笔记】Linux

Linux 1、 介绍 1.1、概述 1.2、特点 1.3、Linux的发行版2、 基础篇 —— 文件系统 2.1、文件系统 2.2、目录结构3、 基础篇 —— VI/VIM 编辑器 3.1、概述 3.2、编辑器模式及常用命令4、 基础篇 —— 网络配置 4.1、VMware NetWork …

【Linux】shell——条件判断test,各种运算符,expr

条件判断——test 真——0 假——1 test expression or [ expression ] 整数运算符 字符串运算符 -z 长度是否为0 -n 长度是否不为0 str1 str2 str1 ! str2 补 &&-->逻辑与,前面为真后面才会执行 || -->逻辑或,前面为假后面才…

【算法实战】每日一题:18.1并查集知识点讲解以及算法实战

1.题目 给定一个序列,通过n-1次相邻元素的合并操作,恢复原始序列。 2.涉及知识点 - 并查集 (Union-Find) 并查集 (Union-Find) 详解 概述 并查集(Union-Find),也称为不相交集数据结构,用于处理一些不相…

MFC案例:利用SetTimer函数编写一个“计时器”程序

一、希望达成效果 利用基于对话框的MFC项目,做一个一方面能够显示当前时间;另一方面在点击开始按钮时进行读秒计时,计时结果动态显示,当点击结束时读秒结束并保持最后结果。 二、编程步骤及相关代码、注释 1、启动VS…

OA协同办公系统 iWebPDF插件安装

1、下载压缩文件 iweboffice,并进行解压 链接:https://pan.baidu.com/s/1GQd7000PTZ771ifL5KEflg 提取码:hb56 2、安装iWenpdf2018.exe 3、安装金格中间件外部应用 4、测试了谷歌、360安全,发现安装插件后,只有360极…

BP8519C非隔离降压型恒压芯片

BP8519封装和丝印 BP8519封装和丝印 注意: 该芯片为非隔离ACDC电源芯片,非专业人员请勿使用。专业人员在使用时必须注意防护,避免触电。 非隔离ACDC电源芯片,国内有多家半导体厂商生产,在部分追求低价格的低端仪表、灯…