实现思路
- 数据读取:使用Pandas读取CSV文件,对数据进行必要的清洗和预处理,确保数据格式正确。
- 时间序列图:筛选出特定城市的数据,按照年份聚合气温数据,使用Plotly的
graph_objects
创建时间序列图。
- 交互式地图:计算每个城市的平均降水量,使用Plotly的
express
创建地图,通过设置hover_data
来展示点击城市弹出的信息。
- 相关性分析图表:根据滑块调整的时间范围筛选数据,计算气温与降水量的相关性,使用Plotly创建散点图展示关系。
关键代码片段
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
import numpy as np
# 数据读取
data = pd.read_csv('气象数据.csv')
# 将日期列转换为datetime类型
data['日期'] = pd.to_datetime(data['日期'])
# 提取年份
data['年份'] = data['日期'].dt.year
# 时间序列图
city = '目标城市'
city_data = data[data['城市'] == city]
yearly_temperature = city_data.groupby('年份')['气温'].mean().reset_index()
fig1 = go.Figure(data=go.Scatter(x=yearly_temperature['年份'], y=yearly_temperature['气温'],
mode='lines+markers'))
fig1.update_layout(title=f'{city}气温随年份变化',
xaxis_title='年份',
yaxis_title='平均气温')
# 交互式地图
city_precipitation = data.groupby('城市')['降水量'].mean().reset_index()
fig2 = px.scatter_mapbox(city_precipitation, lat=city_precipitation['纬度'], lon=city_precipitation['经度'],
color='降水量', hover_data=['城市', '降水量'])
fig2.update_layout(mapbox_style='open-street-map')
# 相关性分析图表
min_year = data['年份'].min()
max_year = data['年份'].max()
fig3 = go.Figure()
fig3.add_trace(go.Scatter(x=[], y=[], mode='markers'))
fig3.update_layout(
xaxis_title='气温',
yaxis_title='降水量',
title='气温与降水量相关性分析',
sliders=[
{
'active': 0,
'currentvalue': {'prefix': '时间范围: '},
'pad': {'t': 50},
'len': 0.9,
'x': 0.1,
'y': 0,
'steps': [
{
'args': [[i], {'x': [data[(data['年份'] >= i) & (data['年份'] <= i + 5)]['气温']],
'y': [data[(data['年份'] >= i) & (data['年份'] <= i + 5)]['降水量']}]],
'label': f'{i}-{i + 5}',
'method': 'update'
} for i in range(min_year, max_year - 5 + 1, 5)
]
}
]
)