基于Python的河南省天气数据分析与空气质量预测研究【含数据抓取与数据库自动存储】

有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主

抓取天气网站

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

以下是部分代码展示

import matplotlib.pyplot as plt# 设置中文字体
plt.rcParams['axes.unicode_minus'] = False    # 不使用中文减号
plt.rcParams['font.sans-serif'] = 'FangSong'  # 设置字体为仿宋(FangSong)
import pandas as pdfile_path = 'weather_info.csv'
weather_data = pd.read_csv(file_path)# Displaying the first few rows of the dataset to understand its structure
weather_data.head()
ymdhighlowtianqifengxiangfengliaqiaqiInfoaqiLeveltrain_levelProvinceCity
01/1/202050多云东南风1级72.02.00河南省郑州
12/1/20207-1多云东南风1级120.0轻度污染3.00河南省郑州
23/1/202010-2阴~多云东南风1级183.0中度污染4.00河南省郑州
34/1/2020111多云~中雨东南风2级242.0重度污染5.02河南省郑州
45/1/202020雨夹雪东北风3级274.0重度污染5.00河南省郑州
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt# 数据清洗:删除含有空值的数据行
cleaned_data = weather_data.dropna()# 数据字段扩充:将日期字段转换为年、月、日和星期
cleaned_data['date'] = pd.to_datetime(cleaned_data['ymd'], format='%d/%m/%Y')
cleaned_data['year'] = cleaned_data['date'].dt.year
cleaned_data['month'] = cleaned_data['date'].dt.month
cleaned_data['day'] = cleaned_data['date'].dt.day
cleaned_data['weekday'] = cleaned_data['date'].dt.day_name()# 显示清洗和扩充后的数据
cleaned_data.head()
ymdhighlowtianqifengxiangfengliaqiaqiInfoaqiLeveltrain_levelProvinceCitydateyearmonthdayweekday
01/1/202050多云东南风1级72.02.00河南省郑州2020-01-01202011Wednesday
12/1/20207-1多云东南风1级120.0轻度污染3.00河南省郑州2020-01-02202012Thursday
23/1/202010-2阴~多云东南风1级183.0中度污染4.00河南省郑州2020-01-03202013Friday
34/1/2020111多云~中雨东南风2级242.0重度污染5.02河南省郑州2020-01-04202014Saturday
45/1/202020雨夹雪东北风3级274.0重度污染5.00河南省郑州2020-01-05202015Sunday
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt# 数据清洗:删除含有空值的数据行
cleaned_data = weather_data.dropna()# 数据字段扩充:将日期字段转换为年、月、日和星期
cleaned_data['date'] = pd.to_datetime(cleaned_data['ymd'], format='%d/%m/%Y')
cleaned_data['year'] = cleaned_data['date'].dt.year
cleaned_data['month'] = cleaned_data['date'].dt.month
cleaned_data['day'] = cleaned_data['date'].dt.day
cleaned_data['weekday'] = cleaned_data['date'].dt.day_name()# 显示清洗和扩充后的数据
cleaned_data.head()
ymdhighlowtianqifengxiangfengliaqiaqiInfoaqiLeveltrain_levelProvinceCitydateyearmonthdayweekday
01/1/202050多云东南风1级72.02.00河南省郑州2020-01-01202011Wednesday
12/1/20207-1多云东南风1级120.0轻度污染3.00河南省郑州2020-01-02202012Thursday
23/1/202010-2阴~多云东南风1级183.0中度污染4.00河南省郑州2020-01-03202013Friday
34/1/2020111多云~中雨东南风2级242.0重度污染5.02河南省郑州2020-01-04202014Saturday
45/1/202020雨夹雪东北风3级274.0重度污染5.00河南省郑州2020-01-05202015Sunday
年度平均最高气温和最低气温趋势:年度平均最高气温和最低气温趋势图显示了每年的平均最高和最低温度的变化。如果存在年度数据,可以观察到随时间的推移,温度是否呈现上升或下降趋势,这可能反映了气候变化的影响。每月平均空气质量指数(AQI)变化:该图展示了不同月份的平均AQI值。通过这个分析,可以识别出空气质量较差和较好的月份,这可能与特定的季节性活动或气候条件有关。不同天气状况的出现频率:展示了记录期间各种天气状况出现的频率。这可以帮助理解该地区的主要天气模式,例如最常见的天气状况是多云、晴朗还是下雨。风力分布情况:描述了不同风力等级的出现次数。通过这个分析,可以了解该地区常见的风力强度,以及极端风力事件的频率。不同星期的平均最高气温变化:显示了一周内不同天的平均最高温度。这可以帮助观察是否存在工作日和周末之间的显著温度差异,这可能与人类活动模式有关。不同星期的平均最低气温变化:显示了一周内不同天的平均最低温度。类似于最高温度分析,这也可以揭示工作日和周末的温度差异。年度空气质量等级分布情况:描述了不同年份中各种空气质量等级的分布。这有助于识别空气质量的长期趋势,例如是否有改善或恶化的迹象。每月平均最高气温和最低气温变化:展示了一年中不同月份的平均最高和最低温度。这有助于理解季节性温度变化,包括最热和最冷的月份。不同风向的出现频率:显示了不同风向的统计频率。这有助于理解主导风向,以及风向变化是否与季节变化有关。每月平均风力变化:描述了一年中不同月份的平均风力。这可以揭示风力的季节性模式,例如某些月份是否通常风力更强或更弱。
# 设置图表的全局参数
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用于正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    # 用于正常显示负号
plt.rcParams['figure.dpi'] = 300              # 设置图像的dpi# 1. 年度平均最高气温和最低气温趋势
plt.figure(figsize=(10, 6))
cleaned_data.groupby('year')['high'].mean().plot(kind='line', label='平均最高气温')
cleaned_data.groupby('year')['low'].mean().plot(kind='line', label='平均最低气温')
plt.title('年度平均最高气温和最低气温趋势')
plt.xlabel('年份')
plt.ylabel('温度 (℃)')
plt.legend()
plt.show()
# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)X_train
highlowfenglifengxiangtianqi_simplified
844228233级东北风
243406-11级东南风多云
1697831242级南风
509428193级东北风
1148036253级东南风多云
..................
2157522103级南风多云
539034242级西南风多云
86021122级南风
15795303级东风
236548-42级西北风

19713 rows × 5 columns

# 预处理和模型管道
preprocessor = ColumnTransformer(transformers=[('num', StandardScaler(), ['high', 'low']),('cat', OneHotEncoder(), ['fengxiang', 'tianqi_simplified'])])# 定义模型
models = {'RandomForest': RandomForestClassifier(random_state=42),'SVC': SVC(random_state=42),'LogisticRegression': LogisticRegression(random_state=42)
}# 训练和评估模型
for name, model in models.items():pipeline = Pipeline([('preprocessor', preprocessor),('smote', SMOTE(random_state=42)),('classifier', model)])pipeline.fit(X_train, y_train)y_pred = pipeline.predict(X_test)accuracy = accuracy_score(y_test, y_pred)print(f"Model: {name}")print("Accuracy:", accuracy)print("Classification Report:")print(classification_report(y_test, y_pred))print("\n")
Model: RandomForest
Accuracy: 0.7841347129235139
Classification Report:precision    recall  f1-score   support0       0.88      0.85      0.86      39401       0.47      0.52      0.49       989accuracy                           0.78      4929macro avg       0.67      0.69      0.68      4929
weighted avg       0.79      0.78      0.79      4929


Model: SVC
Accuracy: 0.7108947048082775
Classification Report:precision    recall  f1-score   support0       0.95      0.67      0.79      39401       0.40      0.87      0.55       989accuracy                           0.71      4929macro avg       0.68      0.77      0.67      4929
weighted avg       0.84      0.71      0.74      4929


Model: LogisticRegression
Accuracy: 0.7210387502536011
Classification Report:precision    recall  f1-score   support0       0.93      0.71      0.80      39401       0.40      0.78      0.53       989accuracy                           0.72      4929macro avg       0.66      0.74      0.67      4929
weighted avg       0.82      0.72      0.75      4929



import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, accuracy_score
from imblearn.over_sampling import SMOTE
from imblearn.pipeline import Pipeline# 训练随机森林模型
pipeline = Pipeline([('preprocessor', preprocessor),('smote', SMOTE(random_state=42)),('classifier', RandomForestClassifier(random_state=42))
])pipeline.fit(X_train, y_train)# 特征重要性可视化try:onehot_columns = pipeline.named_steps['preprocessor'].named_transformers_['cat'].get_feature_names(input_features=['fengxiang', 'tianqi_simplified'])
except AttributeError:onehot_columns = pipeline.named_steps['preprocessor'].named_transformers_['cat'].get_feature_names()feature_names = np.concatenate([['high', 'low'], onehot_columns])
importances = pipeline.named_steps['classifier'].feature_importances_
indices = np.argsort(importances)plt.figure(figsize=(10, 6))
plt.title('Feature Importances')
plt.barh(range(len(indices)), importances[indices], color='b', align='center')
plt.yticks(range(len(indices)), [feature_names[i] for i in indices])
plt.xlabel('Relative Importance')
plt.show()

每文一语

加油

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

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

相关文章

Python爬虫技术 第14节 HTML结构解析

HTML 结构解析是 Web 爬虫中的核心技能之一,它允许你从网页中提取所需的信息。Python 提供了几种流行的库来帮助进行 HTML 解析,其中最常用的是 BeautifulSoup 和 lxml。 1. 安装必要的库 首先,你需要安装 requests(用于发送 HTT…

Linux系统上安装zookeeper

百度网盘 通过网盘分享的文件:zookeeper_linux 链接: https://pan.baidu.com/s/1_hybXZVwTRkotz0VbwbSMw?pwd8888 提取码: 8888 1.将压缩包拖进虚拟机 2.解压压缩包 cd /ruanjian/zookeeper/ tar -zxvf apache-ZooKeeper-3.7.2-bin.tar.gz3. 进入到conf目录 cd …

Godot入门 03世界构建1.0版

在game场景,删除StaticBody2D节点,添加TileMap节点 添加TileSet图块集 添加TileSet源 拖动图片到图块,自动创建图块 使用橡皮擦擦除。取消橡皮擦后按住Shift创建大型图块。 进入选择模式,TileMap选择绘制,选中图块后在…

通过强大的语义层增强现代数据湖

在现代数据湖架构中,语义层通过向数据添加有意义的上下文来发挥至关重要的作用,否则这些上下文会丢失。此层充当现代数据湖(数据仓库和查询引擎)处理层中未整理的原始数据与利用此数据的工具和应用程序之间的桥梁。此服务对 AI 特…

【Golang 面试基础题】每日 5 题(七)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

【中项】系统集成项目管理工程师-第5章 软件工程-5.6软件质量管理与5.7软件过程能力成熟度

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

ROS机械臂——rviz+gazebo仿真环境搭建

纲要 ROS的控制插件 常用控制器 完善机器人模型 为link添加惯性参数和碰撞属性 为joint添加传动装置 添加gazebo控制插件 加载机器人模型 启动仿真环境 问题:gazebo加载的模型只有一层阴影 解决方案:关闭虚拟机,设置虚拟机属性,…

【数据结构-前缀和】力扣2550.统计范围内的元音字符串数

给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内(包含 这两个值)并且以元音开头和结尾的字符串的数目。 返回一个整数数组,其中…

springboot实战(十二)之通过注解的方式记录接口出入参log入库

前言 生产过程中,为了更好的辅助线上问题排查避免不了对接口出入参进行日志输出的时候,并且为了分析接口数据效果需要将每次请求接口的出入参进行落库方便后续的数据分析,这时总不能每个接口入参之后、出参之前都打印一遍日志吧?如…

C++第十弹 ---- vector的介绍及使用

目录 前言vector的介绍及使用1. vector的使用1.1 vector的定义1.2 iterator的使用1.3 vector空间增长问题1.4 vector增删查改 2. vector迭代器失效问题(重点) 总结 前言 本文介绍了C中的vector数据结构及其使用方法。 更多好文, 持续关注 ~ 酷酷学!!! 正文开始 vector的介绍…

基本类型的包装类,面向对象三大特性,继承(inherit).一道力扣分享。

>>>基本类型的包装类 拆包–>封包 拆包–>包装类型转换为基本数据类型 封包—>基本数据类型转换为包装类型 编号基本数据类型包装类型1byteByte2shortShort3charCharacter4intInteger5longLong6floatFloat7doubleDouble8booleanBoolean 为何要用包装类型…

【echarts】中如何设置曲线展示最新值、最大值、最小值

需要用到的属性:图表标注 series-line. markPoint 默认可以通过 type直接标注:‘min’ 最小值、‘max’ 最大值、‘average’ 平均值。 markPoint: {data: [{type: max},{type: min}]}如何展示最新值 如果要展示最新值得话,需要设置 标注…

昇思25天学习打卡营第19天|DCGAN生成漫画头像

DCGAN生成漫画头像总结 实验概述 本实验旨在利用深度卷积生成对抗网络(DCGAN)生成动漫头像,通过设置网络、优化器以及损失函数,使用MindSpore进行实现。 实验目的 学习和掌握DCGAN的基本原理和应用。熟悉使用MindSpore进行图像…

Vue3时间选择器datetimerange在数据库存开始时间和结束时间

♥️作者:小宋1021 🤵‍♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油&#xff01…

[算法]归并排序(C语言实现)

一、归并排序的定义 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 二、归并排序的算法原理 归并排序的算法可以用递归法和非递归法来实现…

介绍一下TCP/IP 模型和 OSI 模型的区别

OSI 模型是由国际标准化组织制定的一个用于计算机或通信系统间互联的标准体系,一共有七层,由上而下分别为应用层,表示层,会话层,传输层,网络层,数据链路层和物理层,虽然 OSI 模型理论…

华为网络模拟器eNSP安装部署教程

eNSP是图形化网络仿真平台,该平台通过对真实网络设备的仿真模拟,帮助广大ICT从业者和客户快速熟悉华为数通系列产品,了解并掌握相关产品的操作和配置、提升对企业ICT网络的规划、建设、运维能力,从而帮助企业构建更高效&#xff0…

Geoscene Pro的数据管理

GeoScene Pro是为新一代WebGIS平台而全新打造的一款具有高效、强大生产力且为全面国产的的高级桌面应用程序,可以对来自本地、GeoScene Online、或者GeoScene Portal的数据进行可视化、编辑、分析,可以同时在2D和3D中制作内容,并发布为要素服…

医疗器械维修行业发展及趋势

医疗器械维修的前景是广阔的。‌ 随着医疗技术的不断发展和进步,‌医疗器械的种类和数量持续增加,‌对专业维修人员的需求也在不断上升。‌无论是医院、‌诊所等医疗机构,‌还是医疗器械生产企业、‌销售企业等,‌都需要专业的维修…

Spark+实例解读

第一部分 Spark入门 学习教程:Spark 教程 | Spark 教程 Spark 集成了许多大数据工具,例如 Spark 可以处理任何 Hadoop 数据源,也能在 Hadoop 集群上执行。大数据业内有个共识认为,Spark 只是Hadoop MapReduce 的扩展&#xff08…