Python天气数据分析预测与可视化教学

Python天气数据分析预测与可视化教学

天气数据分析和预测在多个领域(如农业、交通、能源)中具有广泛应用。本文将通过 Python 展示如何获取天气数据、分析和预测,并利用可视化技术进行呈现。


一、获取天气数据

1.1 使用 API 获取天气数据

大多数天气服务提供商(如 OpenWeatherMap)提供免费的 API 用于获取天气数据。

获取天气数据的步骤:

  1. 注册获取 API 密钥。
  2. 使用 requests 库发送 API 请求。
  3. 解析 JSON 数据。

示例代码:

import requests
import json

# 设置 API 密钥和 URL
API_KEY = "your_api_key"
CITY = "Beijing"
URL = f"http://api.openweathermap.org/data/2.5/weather?q={CITY}&appid={API_KEY}"

# 发送请求
response = requests.get(URL)
data = response.json()

# 打印天气信息
print(f"城市: {data['name']}")
print(f"温度: {data['main']['temp']} K")
print(f"天气: {data['weather'][0]['description']}")

二、天气数据分析

2.1 清洗和准备数据

数据通常存储在 CSV 文件中,需要对其进行清洗和格式化。

示例:

import pandas as pd

# 加载数据
df = pd.read_csv("weather_data.csv")

# 检查数据
print(df.head())

# 处理缺失值
df = df.dropna()

# 转换日期格式
df['date'] = pd.to_datetime(df['date'])

2.2 统计分析

通过统计方法分析温度、湿度等天气指标的变化趋势。

# 计算基本统计量
print(df['temperature'].describe())

# 按月统计平均温度
monthly_avg_temp = df.groupby(df['date'].dt.month)['temperature'].mean()
print(monthly_avg_temp)

三、天气预测

3.1 时间序列建模

使用 ARIMA 模型预测未来天气数据。

安装必要的库

pip install statsmodels

示例代码:

from statsmodels.tsa.arima_model import ARIMA
import matplotlib.pyplot as plt

# 准备时间序列数据
time_series = df.set_index('date')['temperature']

# 拆分训练集和测试集
train = time_series[:int(0.8 * len(time_series))]
test = time_series[int(0.8 * len(time_series)):]

# 构建 ARIMA 模型
model = ARIMA(train, order=(5, 1, 0))
model_fit = model.fit(disp=False)

# 预测
forecast = model_fit.forecast(steps=len(test))[0]

# 绘图
plt.plot(test, label='Actual')
plt.plot(test.index, forecast, label='Forecast')
plt.legend()
plt.show()

四、天气数据可视化

4.1 绘制折线图

展示温度、湿度的时间变化趋势。

import matplotlib.pyplot as plt

# 绘制折线图
plt.figure(figsize=(10, 5))
plt.plot(df['date'], df['temperature'], label='Temperature', color='blue')
plt.xlabel('Date')
plt.ylabel('Temperature (°C)')
plt.title('Temperature Over Time')
plt.legend()
plt.show()

4.2 热力图

展示一周内不同时间段的平均温度。

import seaborn as sns

# 生成数据
df['day_of_week'] = df['date'].dt.day_name()
df['hour'] = df['date'].dt.hour
heatmap_data = df.pivot_table(values='temperature', index='day_of_week', columns='hour', aggfunc='mean')

# 绘制热力图
plt.figure(figsize=(12, 6))
sns.heatmap(heatmap_data, cmap='coolwarm', annot=True)
plt.title('Average Temperature Heatmap')
plt.show()

4.3 地图可视化

使用 Folium 显示不同城市的天气信息。

import folium

# 创建地图
m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 添加天气标记
folium.Marker([39.9042, 116.4074], popup="Beijing: Sunny 25°C").add_to(m)
folium.Marker([31.2304, 121.4737], popup="Shanghai: Cloudy 22°C").add_to(m)

# 显示地图
m.save("weather_map.html")

五、完整流程案例:每日天气报告

综合代码:

import requests
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 获取天气数据
API_KEY = "your_api_key"
CITY = "Beijing"
URL = f"http://api.openweathermap.org/data/2.5/forecast?q={CITY}&appid={API_KEY}&units=metric"
response = requests.get(URL)
data = response.json()

# 提取关键数据
forecast = []
for item in data['list']:
    forecast.append({
        "date": item['dt_txt'],
        "temperature": item['main']['temp'],
        "humidity": item['main']['humidity'],
        "weather": item['weather'][0]['description']
    })

# 转为 DataFrame
df = pd.DataFrame(forecast)
df['date'] = pd.to_datetime(df['date'])

# 绘制温度趋势图
plt.figure(figsize=(10, 5))
plt.plot(df['date'], df['temperature'], label='Temperature', color='red')
plt.xlabel('Date')
plt.ylabel('Temperature (°C)')
plt.title('Temperature Forecast')
plt.legend()
plt.show()

# 绘制湿度热力图
df['day_of_week'] = df['date'].dt.day_name()
df['hour'] = df['date'].dt.hour
heatmap_data = df.pivot_table(values='humidity', index='day_of_week', columns='hour', aggfunc='mean')

plt.figure(figsize=(12, 6))
sns.heatmap(heatmap_data, cmap='Blues', annot=True)
plt.title('Humidity Heatmap')
plt.show()

六、总结

通过本文,你学会了如何:

  1. 使用 API 获取天气数据。
  2. 对天气数据进行清洗、分析和建模。
  3. 使用多种可视化技术展示结果。

使用 Python 的强大功能,可以轻松处理和分析天气数据,为实际应用提供有力支持!

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日