今天是9月4日了,离一年一度的中秋节只剩下一周的时间了,提前祝大家中秋佳节快乐,另外可怕的是好像自己的觉都没有睡醒,而2019年就悄悄的只剩下三分之一了,即将进入的Q4季度,相比刚刚过去的炎炎夏日,秋天还是非常值得期待的,不仅庄稼收获满满,气温也是非常凉爽的,对于小编所在的宁夏地区来说,秋天的早晚温差还是很大,今天利用Python爬虫技术+Pyecharts可视化工具为大家呈现西北主要城市最近五天内的天气预报,只有了解了天气,再也不用担心妈妈喊你穿秋裤啦~~~
Python资源共享群:626017123
01
—
天气预报数据靠不靠谱儿?
数据来源:中华万年历API。
抓包中华万年历得到的接口(JSON):
① 通过城市名字获得天气数据,得到一个json数据:
http://wthrcdn.etouch.cn/weather_mini?city=北京
② 通过城市ID获得天气数据,得到一个json数据:
http://wthrcdn.etouch.cn/weather_mini?citykey=101010100
上述两种方式都是可以的。
小编特地对比了一下,从中华万年历获取到的天气数据和中国天气网(www.weather.com.cn)获得的天气数据是一致的。
数据样例如下:
该json数据中包含了城市昨天的天气数据、当天的天气数据以及未来四天的天气数据,数据详情包括:日期、最高气温、最低气温、风向、风力以及天气,那么按照城市解析这个json数据串就可以得到我们想要的数据了。
02
—
想偷懒?数据整理+清洗少不了
因全国城市太多,所以小编只整理了主要城市(省会+主要地级市)的信息,定向提取这些城市近六天的天气数据,从数据样例中看出:源数据是以json格式存储的,并且温度数据是字符串形式,例如:“高温 37℃”,实际上在可视化中,温度还是以数字为主,所以还是需要将抓取到数据中所有有关温度的字符串改为数字,这样有利于数据可视化。
下面我们分步进行:
# 先导入数据解析所需要的数据包 # -*- coding: utf-8 -*- import urllib.request import json import gzip import numpy as np import pandas as pd
此次源数据格式为json格式,相对比较简单,所以只需要导入python基础包就可以了。
# 数据源url,包括当天天气和未来四天的预报天气 url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + urllib.parse.quote(data.city_name[i]) # 解析其中的天气气温数据 weather_data = urllib.request.urlopen(url).read() weather_data = gzip.decompress(weather_data).decode('utf-8') # 转化为json字符串 weather_dict = json.loads(weather_data) if weather_dict.get('desc') == 'invilad-citykey': print('查询不到该城市天气信息'+data.city_name[i]) elif weather_dict.get('desc') == 'OK': # 获取昨天的天气数据 yesterday=weather_dict.get('data').get('yesterday') infod={'yesday':[yesterday.get('date')], 'yeshigh':[yesterday.get('high')], 'yeslow':[yesterday.get('low')], 'yestype':[yesterday.get('type')]} infos=pd.DataFrame(infod) city_yesterdaydata=city_yesterdaydata.append(infos) # 获取城市名称 infod={'city_name':[weather_dict.get('data').get('city')]} infos=pd.DataFrame(infod) city_name=city_name.append(infos) # 获取预测日期的天气数据 forecast=weather_dict.get('data').get('forecast') infod={'curday':[forecast[0].get('date')], 'curhigh':[forecast[0].get('high')], 'curlow':[forecast[0].get('low')], 'curtype':[forecast[0].get('type')], 'oneday':[forecast[1].get('date')], 'onehigh':[forecast[1].get('high')], 'onelow':[forecast[1].get('low')], 'onetype':[forecast[1].get('type')], 'twoday':[forecast[2].get('date')], 'twohigh':[forecast[2].get('high')], 'twolow':[forecast[2].get('low')], 'twotype':[forecast[2].get('type')], 'theday':[forecast[3].get('date')], 'thehigh':[forecast[3].get('high')], 'thelow':[forecast[3].get('low')], 'thetype':[forecast[3].get('type')], 'forday':[forecast[4].get('date')], 'forhigh':[forecast[4].get('high')], 'forlow':[forecast[4].get('low')], 'fortype':[forecast[4].get('type')]} infos=pd.DataFrame(infod) city_forecaet=city_forecaet.append(infos) # 合并上面提取好的数据 city_info=pd.concat([city_name,city_yesterdaydata,city_forecaet],axis=1) city_infos=city_infos.append(city_info)
上面的部分代码是解析json源数据的,通过遍历即可获得所有想要城市近六天的天气信息。注意:提取城市为一般主要城市,例如省会或者是常听到的地级市,如果所在城市为自治州或者自治县等,有可能会提取失败。
提取的数据展示如下:
可以看到解析出来的数据中所有有关温度数据都包含“高温”、“低温”、“℃”这样的字符,实际上这样的字符是不需要的,那么可以通过下面的方式全部剔除掉:
# 清洗数据(替换高温,低温等其他无效字符) city_infos.yeshigh=city_infos.yeshigh.apply(lambda x:x.replace('高温','')).apply(lambda x:x.replace('℃','')) city_infos.yeslow=city_infos.yeslow.apply(lambda x:x.replace('低温','')).apply(lambda x:x.replace('℃',''))
这样数据就比较干净了,如下:
接下来就要对上述数据进行可视化展示了。
03
—
强大的Pyecharts可视化工具
由于在初次安装Python时是默认不安装Pyecharts包的,所以在利用Pyecharts数据可视化之前,先确保自己电脑上的Python环境安装了pyecharts工具包,如果没有安装,可以问度娘,相关的文章特别的多,安装过程其实也非常简单,这里就不再赘述了。
安装好之后,在python环境中导入相关的包:
from pyecharts.charts import * from pyecharts import options as opts from pyecharts.globals import ChartType, SymbolType from pyecharts.render import make_snapshot from snapshot_phantomjs import snapshot
那么接下来将获取到的数据用图的形式展示出来:
①全国主要城市今日最高气温分布
这张图其实是动态的,因小编尝试了好多次将动图保存为gif都失败了,所以这里贴上了静态图,以上是全国52个主要城市今日最高气温分布图,可以看到两个温度最高的城市分别是:重庆34°,桂林34°,华中华东以及整个华北地区的温度都在24-32°区间内,图中的那几个黄色点比较惹眼,可以看着那是我们的西北地区,青海、西藏和甘肃部分城市全天最高气温都还不到20°,这标识着全国城市中西北首先迈入凉爽的秋天。
②西北五省各城市明日最高最低气温分布图(面积图)
作为西北人,首先还是关注自己家乡的气温变化,这样就不用担心妈妈催着穿秋裤了,自觉还是很重要的。
这里我筛选了西北25个城市,可视化展示明日全天最高最低气温图,如上:可以看到西北火炉城市:吐鲁番,都已经是金秋送爽,丹桂飘香的季节了,全天气温最高还在37°,最低气温28°几乎很全部城市的最高气温持平,真的是名副其实的火焰山城市啊,另外还有其不相上下的哈密地区;西北城市中最凉爽TOP3:固原、平凉以及林芝,省会城市中西宁是真的凉爽,全天最高气温才21°,最近去青海湖游玩怕是要带厚秋裤了,还请大家自行准备,哈哈哈~
这里小编用面积图展示了西北五省主要城市最高最低温差,换一种方式再来展示一下子。
③西北五省各城市明日最高最低气温分布图(气泡图)
图中气泡大小表示温度的高低,气温越高气泡就越大,小编觉得相比面积图,气泡图相对更加直观一些。
04
—
动手才是实践的真理
深深的感触就是动手才是实践的真理,看了很多书但是不动手实践就是白搭,只有动手操作实现出来才能知道其中的坑在哪里,这样才能学以致用。 今天带领大家简单的 获取了主要城市未来六天的 天气预报数据 和 利用Pyecharts可视化展示, Pyecharts中有很多 很好玩的可视化 展示方法,各位 如若感兴趣的话 可以尝试一波。