|
|
|
@ -0,0 +1,330 @@
|
|
|
|
|
import joblib
|
|
|
|
|
import datetime as DT
|
|
|
|
|
import GetModel
|
|
|
|
|
from pyecharts.charts import Bar, Grid, Line, Tab
|
|
|
|
|
from pyecharts.components import Table
|
|
|
|
|
from pyecharts.options import ComponentTitleOpts
|
|
|
|
|
from pyecharts.charts import Map
|
|
|
|
|
from pyecharts import options as opts
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 训练并保存模型并返回MAE
|
|
|
|
|
import ProcessData
|
|
|
|
|
import GetData
|
|
|
|
|
|
|
|
|
|
r = GetModel.getModel()
|
|
|
|
|
print("MAE:", r[0])
|
|
|
|
|
# 读取保存的模型
|
|
|
|
|
model = joblib.load('Model.pkl')
|
|
|
|
|
|
|
|
|
|
# 最终预测结果
|
|
|
|
|
preds = model.predict(r[1])
|
|
|
|
|
|
|
|
|
|
print("未来7天预测")
|
|
|
|
|
for a in range(0, 7):
|
|
|
|
|
today = DT.datetime.now()
|
|
|
|
|
time = (today + DT.timedelta(days=a)).date()
|
|
|
|
|
print(time.year, '-', time.month, '-', time.day,
|
|
|
|
|
'最高气温', preds[a][0],
|
|
|
|
|
'最低气温', preds[a][1],
|
|
|
|
|
"空气质量", preds[a][2],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
数据可视化代码
|
|
|
|
|
通过爬虫获取到的天气信息,利用pyecharts框架来实现绘图功能,实现天气的可视化
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
可视化当日长春天气数据
|
|
|
|
|
'''
|
|
|
|
|
# 获取当日长春天气数据
|
|
|
|
|
today_data = GetData.getToday(54161)
|
|
|
|
|
headers_ = ["日期", "最高温", "最低温", "天气", "风力风向", "空气质量指数"]
|
|
|
|
|
rows_ = [
|
|
|
|
|
[today_data['日期'].values[0], today_data['最高温'].values[0], today_data['最低温'].values[0],
|
|
|
|
|
today_data['天气'].values[0], today_data['风力风向'].values[0], today_data['空气质量指数'].values[0]],
|
|
|
|
|
]
|
|
|
|
|
def table_main() ->Table:
|
|
|
|
|
c=(
|
|
|
|
|
Table()
|
|
|
|
|
.add(headers_, rows_)
|
|
|
|
|
.set_global_opts(
|
|
|
|
|
title_opts=ComponentTitleOpts(title="", subtitle="")
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
return c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
可视化当日长春近一周的天气质量和气温
|
|
|
|
|
'''
|
|
|
|
|
# 获取最近七天的天气数据
|
|
|
|
|
week_data=GetData.getWeek(54161)
|
|
|
|
|
# 最近长春一周的天气和空气
|
|
|
|
|
airs = ProcessData.setAir(week_data)
|
|
|
|
|
low_temperature = ProcessData.setLowTemp(week_data)
|
|
|
|
|
high_temperature = ProcessData.setHighTemp(week_data)
|
|
|
|
|
|
|
|
|
|
def grid_week() -> Grid:
|
|
|
|
|
x_data = ["前七天", "前六天", "前五天", "前四天", "前三天", "前两天", "前一天"]
|
|
|
|
|
bar = (
|
|
|
|
|
Bar()
|
|
|
|
|
.add_xaxis(x_data)
|
|
|
|
|
.add_yaxis(
|
|
|
|
|
"最高温",
|
|
|
|
|
high_temperature,
|
|
|
|
|
yaxis_index=0,
|
|
|
|
|
color="#d14a61",
|
|
|
|
|
)
|
|
|
|
|
.add_yaxis(
|
|
|
|
|
"最低温",
|
|
|
|
|
low_temperature,
|
|
|
|
|
yaxis_index=1,
|
|
|
|
|
color="#5793f3",
|
|
|
|
|
)
|
|
|
|
|
.extend_axis(
|
|
|
|
|
yaxis=opts.AxisOpts(
|
|
|
|
|
name="最高温",
|
|
|
|
|
type_="value",
|
|
|
|
|
min_=-30,
|
|
|
|
|
max_=40,
|
|
|
|
|
position="right",
|
|
|
|
|
axisline_opts=opts.AxisLineOpts(
|
|
|
|
|
linestyle_opts=opts.LineStyleOpts(color="#d14a61")
|
|
|
|
|
),
|
|
|
|
|
axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
.extend_axis(
|
|
|
|
|
yaxis=opts.AxisOpts(
|
|
|
|
|
type_="value",
|
|
|
|
|
name="天气质量指数",
|
|
|
|
|
min_=0,
|
|
|
|
|
max_=300,
|
|
|
|
|
position="left",
|
|
|
|
|
axisline_opts=opts.AxisLineOpts(
|
|
|
|
|
linestyle_opts=opts.LineStyleOpts(color="#675bba")
|
|
|
|
|
),
|
|
|
|
|
axislabel_opts=opts.LabelOpts(formatter="{value}"),
|
|
|
|
|
splitline_opts=opts.SplitLineOpts(
|
|
|
|
|
is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
.set_global_opts(
|
|
|
|
|
yaxis_opts=opts.AxisOpts(
|
|
|
|
|
name="最低温",
|
|
|
|
|
min_=-30,
|
|
|
|
|
max_=40,
|
|
|
|
|
position="right",
|
|
|
|
|
offset=80,
|
|
|
|
|
axisline_opts=opts.AxisLineOpts(
|
|
|
|
|
linestyle_opts=opts.LineStyleOpts(color="#5793f3")
|
|
|
|
|
),
|
|
|
|
|
axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
|
|
|
|
|
),
|
|
|
|
|
title_opts=opts.TitleOpts(title=""),
|
|
|
|
|
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
line = (
|
|
|
|
|
Line()
|
|
|
|
|
.add_xaxis(x_data)
|
|
|
|
|
.add_yaxis(
|
|
|
|
|
"天气质量指数 "
|
|
|
|
|
"优(0~50) 良(51~100) 轻度(101~150) 中度(151~200) 重度(201~300)",
|
|
|
|
|
airs,
|
|
|
|
|
yaxis_index=2,
|
|
|
|
|
color="#675bba",
|
|
|
|
|
label_opts=opts.LabelOpts(is_show=False),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
bar.overlap(line)
|
|
|
|
|
return Grid().add(
|
|
|
|
|
bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
可视化预测长春的天气
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
# 预测长春一周的天气和空气
|
|
|
|
|
predict_airs=[]
|
|
|
|
|
predict_low_temperature=[]
|
|
|
|
|
predict_high_temperature=[]
|
|
|
|
|
x_data=[]
|
|
|
|
|
for i in range(0,7):
|
|
|
|
|
predict_high_temperature.append(round(preds[i][0],4))
|
|
|
|
|
predict_low_temperature.append(round(preds[i][1],4))
|
|
|
|
|
predict_airs.append(round(preds[i][2],4))
|
|
|
|
|
x_data.append((today + DT.timedelta(days=i)).date())
|
|
|
|
|
|
|
|
|
|
def grid_week_predict() -> Grid:
|
|
|
|
|
bar = (
|
|
|
|
|
Bar()
|
|
|
|
|
.add_xaxis(x_data)
|
|
|
|
|
.add_yaxis(
|
|
|
|
|
"最高温",
|
|
|
|
|
predict_high_temperature,
|
|
|
|
|
yaxis_index=0,
|
|
|
|
|
color="#d14a61",
|
|
|
|
|
)
|
|
|
|
|
.add_yaxis(
|
|
|
|
|
"最低温",
|
|
|
|
|
predict_low_temperature,
|
|
|
|
|
yaxis_index=1,
|
|
|
|
|
color="#5793f3",
|
|
|
|
|
)
|
|
|
|
|
.extend_axis(
|
|
|
|
|
yaxis=opts.AxisOpts(
|
|
|
|
|
name="最高温",
|
|
|
|
|
type_="value",
|
|
|
|
|
min_=-30,
|
|
|
|
|
max_=40,
|
|
|
|
|
position="right",
|
|
|
|
|
axisline_opts=opts.AxisLineOpts(
|
|
|
|
|
linestyle_opts=opts.LineStyleOpts(color="#d14a61")
|
|
|
|
|
),
|
|
|
|
|
axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
.extend_axis(
|
|
|
|
|
yaxis=opts.AxisOpts(
|
|
|
|
|
type_="value",
|
|
|
|
|
name="天气质量指数",
|
|
|
|
|
min_=0,
|
|
|
|
|
max_=300,
|
|
|
|
|
position="left",
|
|
|
|
|
axisline_opts=opts.AxisLineOpts(
|
|
|
|
|
linestyle_opts=opts.LineStyleOpts(color="#675bba")
|
|
|
|
|
),
|
|
|
|
|
axislabel_opts=opts.LabelOpts(formatter="{value}"),
|
|
|
|
|
splitline_opts=opts.SplitLineOpts(
|
|
|
|
|
is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
.set_global_opts(
|
|
|
|
|
yaxis_opts=opts.AxisOpts(
|
|
|
|
|
name="最低温",
|
|
|
|
|
min_=-30,
|
|
|
|
|
max_=40,
|
|
|
|
|
position="right",
|
|
|
|
|
offset=80,
|
|
|
|
|
axisline_opts=opts.AxisLineOpts(
|
|
|
|
|
linestyle_opts=opts.LineStyleOpts(color="#5793f3")
|
|
|
|
|
),
|
|
|
|
|
axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
|
|
|
|
|
),
|
|
|
|
|
title_opts=opts.TitleOpts(title=""),
|
|
|
|
|
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
line = (
|
|
|
|
|
Line()
|
|
|
|
|
.add_xaxis(x_data)
|
|
|
|
|
.add_yaxis(
|
|
|
|
|
"天气质量指数 "
|
|
|
|
|
"优(0~50) 良(51~100) 轻度(101~150) 中度(151~200) 重度(201~300)",
|
|
|
|
|
predict_airs,
|
|
|
|
|
yaxis_index=2,
|
|
|
|
|
color="#675bba",
|
|
|
|
|
label_opts=opts.LabelOpts(is_show=False),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
bar.overlap(line)
|
|
|
|
|
return Grid().add(
|
|
|
|
|
bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
获取全国各省会城市今日的天气情况
|
|
|
|
|
'''
|
|
|
|
|
china_today = GetData.getChinaToday()
|
|
|
|
|
china_today.to_csv("china_today.csv")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def setData(str,i):
|
|
|
|
|
return china_today[i:i+1][str].values[0]
|
|
|
|
|
provinces = [
|
|
|
|
|
"黑龙江","内蒙古", "吉林", "辽宁", "河北","天津","山西", "陕西",
|
|
|
|
|
"甘肃","宁夏", "青海","新疆", "西藏", "四川", "重庆", "山东", "河南",
|
|
|
|
|
"江苏", "安徽","湖北", "浙江", "福建", "江西", "湖南", "贵州",
|
|
|
|
|
"广西", "海南","上海","广东","云南","台湾"
|
|
|
|
|
]
|
|
|
|
|
rows=[]
|
|
|
|
|
for i in range(0,31):
|
|
|
|
|
rows.append([provinces[i],setData('最低温',i),setData('最高温',i),setData('天气',i),setData('风力风向',i)])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def today_china_table() ->Table:
|
|
|
|
|
c=(
|
|
|
|
|
Table()
|
|
|
|
|
.add(["省份","最低温","最高温", "天气", "风力风向"], rows)
|
|
|
|
|
.set_global_opts(
|
|
|
|
|
title_opts=ComponentTitleOpts(title="今日全国各省会城市的天气信息表", subtitle="")
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
return c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
china_airs = ProcessData.setAir(china_today)
|
|
|
|
|
airs_list=[]
|
|
|
|
|
for i in range(0,31):
|
|
|
|
|
airs_list.append(china_airs[i])
|
|
|
|
|
|
|
|
|
|
def today_china() ->Map:
|
|
|
|
|
c = (
|
|
|
|
|
Map()
|
|
|
|
|
.add("天气质量指数 优(0~50) 良(51~100) 轻度(101~150) 中度(151~200) 重度(201~300)", [list(z) for z in zip(provinces, airs_list)], "china")
|
|
|
|
|
.set_global_opts(
|
|
|
|
|
title_opts=opts.TitleOpts(title="今日中国空气质量"),
|
|
|
|
|
visualmap_opts=opts.VisualMapOpts(max_=300),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
return c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 分页图的标题
|
|
|
|
|
tab = Tab()
|
|
|
|
|
tab.add(table_main(), "今日长春")
|
|
|
|
|
tab.add(grid_week_predict(), "未来长春")
|
|
|
|
|
tab.add(grid_week(), "近一周长春")
|
|
|
|
|
tab.add(today_china_table(), "今日中国天气")
|
|
|
|
|
tab.add(today_china(), "今日全国空气质量")
|
|
|
|
|
tab.render("天气网.html")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
all_high_t = []
|
|
|
|
|
all_low_t = []
|
|
|
|
|
all_air = []
|
|
|
|
|
all_high_t.append(preds[a][0])
|
|
|
|
|
all_low_t.append(preds[a][1])
|
|
|
|
|
all_air.append(preds[a][2])
|
|
|
|
|
temp = {"最高温": all_high_t, "最低温": all_low_t, "空气质量": all_air}
|
|
|
|
|
# 绘画折线图
|
|
|
|
|
plt.plot(range(1, 7), temp["最高温"], color="red", label="high_t")
|
|
|
|
|
plt.plot(range(1, 7), temp["最低温"], color="blue", label="low_t")
|
|
|
|
|
plt.legend() # 显示图例
|
|
|
|
|
plt.ylabel("Temperature(°C)")
|
|
|
|
|
plt.xlabel("day")
|
|
|
|
|
# 显示
|
|
|
|
|
plt.show()
|
|
|
|
|
plt.plot(range(1, 7), temp["空气质量"], color="black", label="air")
|
|
|
|
|
plt.legend()
|
|
|
|
|
plt.ylabel(" ")
|
|
|
|
|
plt.xlabel("day")
|
|
|
|
|
plt.show()
|
|
|
|
|
'''
|