Python天气数据分析预测与可视化教学
天气数据分析和预测在多个领域(如农业、交通、能源)中具有广泛应用。本文将通过 Python 展示如何获取天气数据、分析和预测,并利用可视化技术进行呈现。
一、获取天气数据
1.1 使用 API 获取天气数据
大多数天气服务提供商(如 OpenWeatherMap)提供免费的 API 用于获取天气数据。
获取天气数据的步骤:
- 注册获取 API 密钥。
- 使用
requests
库发送 API 请求。 - 解析 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()
六、总结
通过本文,你学会了如何:
- 使用 API 获取天气数据。
- 对天气数据进行清洗、分析和建模。
- 使用多种可视化技术展示结果。
使用 Python 的强大功能,可以轻松处理和分析天气数据,为实际应用提供有力支持!