摘 要
近些年大数据人工智能等技术发展迅速,我国工业正努力从“制造”迈向“智造”实现新跨越。神经网络(NeuronNetwork)是一种计算模型,通过大量数据的学习,来发现数据之间的模式和规律,模仿人脑神经元的工作方式。随着算力的提升和算法的不断成熟图像识别技术已经完全融入到生活中,卷积神经网络算法在识别领域尤为成熟,卷积神经网络模型CNN通常用于影像识别案例,通过模型训练计算机也能像大脑一样抓取图像特征识别出图片影像中的物体符号等,比如人脸识别中快速匹配身份信息,天气识别等。一直以来,人类关注气象预报都是其中的一个热点。对于农业、交通、旅游等领域,准确的气象预报必不可少。随着技术的发展,气象预测领域广泛使用神经网络。
本文将以卷积神经网络为基础,对天气预测方法进行探讨,并对其优点及局限性进行分析。在气象预报中,利用历史气象资料作为输入,通过训练神经网络,预测未来几个小时的天气状况、研究天气变化规律。该系统对数据进行预处理后,利用处理后的数据构建预测模型,自动收集包括时间、最高温度、最低温度、天气状况等在内的多个气象数据源的历史和实时气象数据。通过CNN卷积层识别图像特定线条,池化层减小图像数据量提升辨识率,全连接层来做最后的识别判断进而预测天气。
本系统主要功能是基于卷积神经网络算法实现对天气场景的实时预测,技术上基于TensorFlow框架前端采用了广泛使用的HTML与JQuery,后端基于Django框架搭建后端管理。
关键词:卷积神经网络算法;爬虫;天气识别;可视化
核心算法代码分享如下:
import requests
from bs4 import BeautifulSoup
import csv
import json
from lxml import etree
def getHTMLtext(url):
"""请求获得网页内容"""
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
print("成功访问")
return r.text
except:
print("访问错误")
return" "
def get_content(html):
"""处理得到有用信息保存数据文件"""
final = [] # 初始化一个列表保存数据
bs = BeautifulSoup(html, "html.parser") # 创建BeautifulSoup对象
body = bs.body
data = body.find('div', {'id': '7d'}) # 找到div标签且id = 7d
# 下面爬取当天的数据
data2 = body.find_all('div',{'class':'left-div'})
text = data2[2].find('script').string
# print(data2[1])
# print(text)
text = text[text.index('=')+1 :-2] # 移除改var data=将其变为json数据
# print(text)
jd = json.loads(text)
# print(jd)
dayone = jd['od']['od2'] # 找到当天的数据
# print(dayone)
final_day = [] # 存放当天的数据
count = 0
for i in dayone:
temp = []
if count <= 24:
temp.append(i['od21']) # 添加时间
temp.append(i['od22']) # 添加当前时刻温度
temp.append(i['od24']) # 添加当前时刻风力方向
temp.append(i['od25']) # 添加当前时刻风级
temp.append(i['od26']) # 添加当前时刻降水量
temp.append(i['od27']) # 添加当前时刻相对湿度
temp.append(i['od28']) # 添加当前时刻控制质量
# print(temp)
final_day.append(temp)
count = count +1
# 下面爬取7天的数据
ul = data.find('ul') # 找到所有的ul标签
li = ul.find_all('li') # 找到左右的li标签
i = 0 # 控制爬取的天数
for day in li: # 遍历找到的每一个li
if i < 7 and i > 0:
temp = [] # 临时存放每天的数据
date = day.find('h1').string # 得到日期
date = date[0:date.index('日')] # 取出日期号
temp.append(date)
inf = day.find_all('p') # 找出li下面的p标签,提取第一个p标签的值,即天气
temp.append(inf[0].string)
tem_low = inf[1].find('i').string # 找到最低气温
if inf[1].find('span') is None: # 天气预报可能没有最高气温
tem_high = None
else:
tem_high = inf[1].find('span').string # 找到最高气温
temp.append(tem_low[:-1])
if tem_high[-1] == '℃':
temp.append(tem_high[:-1])
else:
temp.append(tem_high)
wind = inf[2].find_all('span') # 找到风向
for j in wind:
temp.append(j['title'])
wind_scale = inf[2].find('i').string # 找到风级
index1 = wind_scale.index('级')
temp.append(int(wind_scale[index1-1:index1]))
final.append(temp)
i = i + 1
return final_day,final
#print(final)