python 天气数据可视化的 天气预报,python获取天气数据
本文主要介绍python对气象数据的采集和数据可视化。通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面跟边肖学习。
00-1010前言知识点:开发环境:收集天气数据代码数据分析代码尾
目录
最近天气好像有点脾气。我总是在极其晴朗的时候耍点小脾气~
会阴天,下一会儿雨~提醒我们要时刻带着伞,不然会淋雨或者晒太阳。
所以今天我就分享一下收集天气数据并可视化的代码~
前言
动态数据捕获包
请求发送请求
结构化和非结构化数据解析
知识点:
Python 3.8运行代码pycharm 2021.2辅助敲门代码请求如果安装了Python第三方模块:
R win,输入cmd,单击ok,输入安装命令pip安装模块名(pip安装请求)并按enter。在pycharm中点击终端,输入安装命令代码,实现3360。
发送请求以获取数据、分析数据和保存数据。
开发环境:
导入模块
导入请求#第三方模块提前安装并发送请求(Python中的浏览器),因为你没有安装该模块。
#如果安装了,但还是红色,为什么?pycharm中的解释器配置不正确。
导入parsel
导入csv
#翻译插件
With (weather.csv ,mode= a ,encoding= utf-8 ,newline= )为f:
csv_writer=csv.writer(f)
Csv_writer.writerow([日期,最高温度,最低温度,天气,风向,城市])
city_list=[54511,58362,59287,59493]
对于city_list:中的城市
对于范围内的年份(2011,2022):
对于(1,13):范围内的月份
URL=f https://Tianqi . 2345.com/Pc/get history?area info[areaId]={ city } area info[area type]=2 date[year]={ year } date[month]={ month }
1.发送请求
response=requests.get(url=url)
# Response [200]:请求成功。
2.检索数据
# json数据传输格式
json_data=response.json()
#字典类型数据
3.分析数据
#结构化数据解析
html_data=json_data[data]
选择器=parsel。选择器(html_data)
#常规css xpath json字典数据解析
tr_list=selector.css(。历史表tr’)
# tr _ list [13360]从列表的第二个元素中获取
对于tr_list[1:]:中的tr
# Xfhwaeuifhwiuf/X
td = tr.css(td::text).getall()
if td[2] == °:
td[2] = td[1]
if city == 54511:
td.append("北京")
elif city == 58362:
td.append("上海")
elif city == 59287:
td.append("广州")
elif city == 59493:
td.append("深圳")
print(td)
# 文件名 写入方式 追加写入 编码方式 utf-8 数据空行
with open(天气.csv, mode=a, encoding=utf-8, newline=) as f:
csv_writer = csv.writer(f)
csv_writer.writerow(td)
数据分析代码
导入包
import pandas as pdimport datetime
from pyecharts import options as opts
from pyecharts.charts import *
from pyecharts.commons.utils import JsCode
读入数据
data = pd.read_csv(天气.csv)data
数据预览
data.sample(5)data.info()
分割日期/星期
data[[日期,星期]] = data[日期].str.split( ,expand=True,n=1)data
去除多余字符
data[[最高温度,最低温度]] = data[[最高温度,最低温度]].apply(lambda x: x.str.replace(°,))data.head()
计算下雪天气
data.loc[data[天气].str.contains(雪),下雪吗]=是data.fillna(否,inplace=True)
分割日期时间
data[日期] = pd.to_datetime(data[日期])data[[最高温度,最低温度]] = data[[最高温度,最低温度]].astype(int)
data[年份] = data[日期].dt.year
data[月份] = data[日期].dt.month
data[日] = data[日期].dt.day
# 预览
data.sample(5)
各城市初雪的时间
s_data = data[data[下雪吗]==是]s_data[(s_data[月份]>=9)].groupby(年份).first().reset_index()
各城市下雪天气分布
s_data.groupby([城市,年份])[日期].count().to_frame(下雪天数).reset_index()
做透视表
data_bj = data[(data[年份] == 2021) & (data[城市] == 北京)]data_bj = data_bj.groupby([月份,天气], as_index=False)[日期].count()
data_pivot = pd.pivot(data_bj,
values=日期,
index=月份,
columns=天气)
data_pivot = data_pivot.astype(float)
# 按照 索引年月倒序排序
data_pivot.sort_index(ascending=False,inplace=True)
# 资料、解答、教程可加Q :261823976免费领
data_pivot
北上广深2021年10月份天气热力图分布
import matplotlib.pyplot as pltimport matplotlib.colors as mcolors
import seaborn as sns
#设置全局默认字体 为 雅黑
plt.rcParams[font.family] = [Microsoft YaHei]
# 设置全局轴标签字典大小
plt.rcParams["axes.labelsize"] = 14
# 设置背景
sns.set_style("darkgrid",{"font.family":[Microsoft YaHei, SimHei]})
# 设置画布长宽 和 dpi
plt.figure(figsize=(18,8),dpi=100)
# 自定义色卡
cmap = mcolors.LinearSegmentedColormap.from_list("n",[#95B359,#D3CF63,#E0991D,#D96161,#A257D0,#7B1216])
# 绘制热力图
ax = sns.heatmap(data_pivot, cmap=cmap, vmax=30,
annot=True, # 热力图上显示数值
linewidths=0.5,
)
# 将x轴刻度放在最上面
ax.xaxis.set_ticks_position(top)
plt.title(北京最近10个月天气分布,fontsize=16) #图片标题文本和字体大小
plt.show()
data_gz= data[(data[年份] == 2021) & (data[城市] == 广州)]
data_gz = data_gz.groupby([月份,天气], as_index=False)[日期].count()
data_sz= data[(data[年份] == 2021) & (data[城市] == 深圳)]
data_sz = data_sz.groupby([月份,天气], as_index=False)[日期].count()
data_sh= data[(data[年份] == 2021) & (data[城市] == 上海)]
data_sh = data_sh.groupby([月份,天气], as_index=False)[日期].count()
data_pivot_sz = pd.pivot(data_sz,
values=日期,
index=月份,
columns=天气)
data_pivot_sz = data_pivot_sz.astype(float)
# 按照 索引年月倒序排序
data_pivot_sz.sort_index(ascending=False,inplace=True)
#设置全局默认字体 为 雅黑
plt.rcParams[font.family] = [Microsoft YaHei]
# 设置全局轴标签字典大小
plt.rcParams["axes.labelsize"] = 14
# 设置背景
sns.set_style("darkgrid",{"font.family":[Microsoft YaHei, SimHei]})
# 设置画布长宽 和 dpi
plt.figure(figsize=(18,8),dpi=100)
# 自定义色卡
cmap = mcolors.LinearSegmentedColormap.from_list("n",[#95B359,#D3CF63,#E0991D,#D96161,#A257D0,#7B1216])
# 绘制热力图
ax_sz = sns.heatmap(data_pivot_sz, cmap=cmap, vmax=31,
annot=True, # 热力图上显示数值
linewidths=0.5,
)
# 将x轴刻度放在最上面
ax_sz.xaxis.set_ticks_position(top)
plt.title(深圳最近10个月天气分布,fontsize=16) #图片标题文本和字体大小
plt.show()
data_pivot_gz = pd.pivot(data_gz,
values=日期,
index=月份,
columns=天气)
data_pivot_gz = data_pivot_gz.astype(float)
# 按照 索引年月倒序排序
data_pivot_gz.sort_index(ascending=False,inplace=True)
#设置全局默认字体 为 雅黑
plt.rcParams[font.family] = [Microsoft YaHei]
# 设置全局轴标签字典大小
plt.rcParams["axes.labelsize"] = 14
# 设置背景
sns.set_style("darkgrid",{"font.family":[Microsoft YaHei, SimHei]})
# 设置画布长宽 和 dpi
plt.figure(figsize=(18,8),dpi=100)
# 自定义色卡
cmap = mcolors.LinearSegmentedColormap.from_list("n",[#95B359,#D3CF63,#E0991D,#D96161,#A257D0,#7B1216])
# 绘制热力图
ax_sz = sns.heatmap(data_pivot_gz, cmap=cmap, vmax=31,
annot=True, # 热力图上显示数值
linewidths=0.5,
)
# 将x轴刻度放在最上面
ax_sz.xaxis.set_ticks_position(top)
plt.title(广州最近10个月天气分布,fontsize=16) #图片标题文本和字体大小
plt.show()
# 资料、解答、教程可加Q :261823976免费领
data_pivot_sh = pd.pivot(data_sh,
values=日期,
index=月份,
columns=天气)
data_pivot_sh = data_pivot_sh.astype(float)
# 按照 索引年月倒序排序
data_pivot_sh.sort_index(ascending=False,inplace=True)
#设置全局默认字体 为 雅黑
plt.rcParams[font.family] = [Microsoft YaHei]
# 设置全局轴标签字典大小
plt.rcParams["axes.labelsize"] = 14
# 设置背景
sns.set_style("darkgrid",{"font.family":[Microsoft YaHei, SimHei]})
# 设置画布长宽 和 dpi
plt.figure(figsize=(18,8),dpi=100)
# 自定义色卡
cmap = mcolors.LinearSegmentedColormap.from_list("n",[#95B359,#D3CF63,#E0991D,#D96161,#A257D0,#7B1216])
# 绘制热力图
ax_sz = sns.heatmap(data_pivot_sh, cmap=cmap, vmax=31,
annot=True, # 热力图上显示数值
linewidths=0.5,
)
# 将x轴刻度放在最上面
ax_sz.xaxis.set_ticks_position(top)
plt.title(上海最近10个月天气分布,fontsize=16) #图片标题文本和字体大小
plt.show()
data_bj = data[(data[城市]==北京) & (data[年份] == 2021)]
data_bj[日期] = pd.to_datetime(data_bj.日期,format="%Y年%m月%d日")
data_bj = data_bj.sort_values(by=日期,ascending=True)
北京2021年每日最高最低温度变化
color0 = [#FF76A2,#24ACE6]color_js0 = """new echarts.graphic.LinearGradient(0, 1, 0, 0,
[{offset: 0, color: #FFC0CB}, {offset: 1, color: #ed1941}], false)"""
color_js1 = """new echarts.graphic.LinearGradient(0, 1, 0, 0,
[{offset: 0, color: #FFFFFF}, {offset: 1, color: #009ad6}], false)"""
tl = Timeline()
for i in range(0,len(data_bj)):
coordy_high = list(data_bj[最高温度])[i]
coordx = list(data_bj[日期])[i]
coordy_low = list(data_bj[最低温度])[i]
x_max = list(data_bj[日期])[i]+datetime.timedelta(days=10)
y_max = int(max(list(data_bj[最高温度])[0:i+1]))+3
y_min = int(min(list(data_bj[最低温度])[0:i+1]))-3
title_date = list(data_bj[日期])[i].strftime(%Y-%m-%d)
c = (
Line(
init_opts=opts.InitOpts(
theme=dark,
#设置动画
animation_opts=opts.AnimationOpts(animation_delay_update=800),#(animation_delay=1000, animation_easing="elasticOut"),
#设置宽度、高度
width=1500px,
height=900px, )
)
.add_xaxis(list(data_bj[日期])[0:i])
.add_yaxis(
series_name="",
y_axis=list(data_bj[最高温度])[0:i], is_smooth=True,is_symbol_show=False,
linestyle_opts={
normal: {
width: 3,
shadowColor: rgba(0, 0, 0, 0.5),
shadowBlur: 5,
shadowOffsetY: 10,
shadowOffsetX: 10,
curve: 0.5,
color: JsCode(color_js0)
}
},
itemstyle_opts={
"normal": {
"color": JsCode(
"""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: #ed1941
}, {
offset: 1,
color: #009ad6
}], false)"""
),
"barBorderRadius": [45, 45, 45, 45],
"shadowColor": "rgb(0, 160, 221)",
}
},
)
.add_yaxis(
series_name="",
y_axis=list(data_bj[最低温度])[0:i], is_smooth=True,is_symbol_show=False,
# linestyle_opts=opts.LineStyleOpts(color=color0[1],width=3),
itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js1)),
linestyle_opts={
normal: {
width: 3,
shadowColor: rgba(0, 0, 0, 0.5),
shadowBlur: 5,
shadowOffsetY: 10,
shadowOffsetX: 10,
curve: 0.5,
color: JsCode(color_js1)
}
},
)
.set_global_opts(
title_opts=opts.TitleOpts("北京2021年每日最高最低温度变化\n\n{}".format(title_date),pos_left=330,padding=[30,20]),
xaxis_opts=opts.AxisOpts(type_="time",max_=x_max),#, interval=10,min_=i-5,split_number=20,axistick_opts=opts.AxisTickOpts(length=2500),axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="grey"))
yaxis_opts=opts.AxisOpts(min_=y_min,max_=y_max),#坐标轴颜色,axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="grey"))
)
)
tl.add(c, "{}".format(list(data_bj[日期])[i]))
tl.add_schema(
axis_type=time,
play_interval=100, # 表示播放的速度
pos_bottom="-29px",
is_loop_play=False, # 是否循环播放
width="780px",
pos_left=30px,
is_auto_play=True, # 是否自动播放。
is_timeline_show=False)
tl.render_notebook()
# 资料、解答、教程可加Q :261823976免费领
data_10 = data[(data[年份] == 2021) & ( data[月份] == 10)]
data_10.head()
尾语
到此这篇关于python采集天气数据并做数据可视化的文章就介绍到这了,更多相关python采集天气可视化内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。