责任编辑源自 @范洺源 征稿,在其基础上做了点修正前段时间在学食腐和统计数据挖掘,看见天气情况网路上有亚洲地区卫星城两年的天气情况发展史统计数据,想以为管理工具练呵呵,只好就有了那个工程项目那时在此单纯如是说呵呵同时实现路子和最后效用加进的有关库主要包括:。

requestsbs4pandasmatplotlibseabornpyecharts预测管理工具天气情况网的发展史预报查阅网页(http://lishi.tianqi.com/)上有各卫星城的统计数据以上海为例,关上网页后历经单纯的试著就能辨认出,每一月的统计数据是以

http://lishi.tianqi.com/{卫星城的罗马字}/{年数+月末}.html这种的门牌号来展现的,只好可依此构筑两个表达式,表达式的促进作用是预设回到上海市2018年1月到12月的 url:defget_url

(city=beijing):fortimeinrange(201801,201813):url="http://lishi.tianqi.com/{}/{}.html".format(city,time

)yieldurl爬取统计数据有了 url 门牌号就能用 requests 来截取这儿要特别注意,得加之他们的 cookies,不然会回到 404 网页,如果是旁人中文网站做了反爬领到回到值后,布季谢 bs4 库的

select表达式抽取统计数据select 表达式采用的是 css 示例的句法虽然须要展开很大的统计数据挖掘,因此这儿没将统计数据留存到文档,而要间接采用 pandas 的 dataframe 展开存储html=requests

.get(url=url,headers=header,cookies=cookie)soup=BeautifulSoup(html.content,html.parser)date=soup.select

("#tool_site > div.tqtongji2 > ul > li:nth-of-type(1) > a")max_temp=soup.select("#tool_site > div.tqtongji2 > ul > li:nth-of-type(2)"

)min_temp=soup.select("#tool_site > div.tqtongji2 > ul > li:nth-of-type(3)")weather=soup.select("#tool_site > div.tqtongji2 > ul > li:nth-of-type(4)"

)wind_direction=soup.select("#tool_site > div.tqtongji2 > ul > li:nth-of-type(5)")date=[x.textforxindate

]max_temp=[x.textforxinmax_temp[1:]]min_temp=[x.textforxinmin_temp[1:]]weather=[x.textforxinweather[1

:]]wind_direction=[x.textforxinwind_direction[1:]]data=pd.DataFrame([date,max_temp,min_temp,weather,wind_direction

]).T对12个月末展开截取后再汇总,就得到了上海2018年全年的天气情况统计数据,主要包括最高温度、最低温度、天气情况状况、风向等信息适当加工下信息,我们用一些图表来展开可视化的展现:平均温度的分布seaborn.distplot

(result[平均温度])

平均温度是采用每日最高温度和最低温度取平均的值上海平均温度在0度和20多度的日子是最多的按月查看温度走势result.groupby(result[日期].apply(lambdax:x.month))

.mean().plot(kind=line)

天气情况状况分布seaborn.countplot(result[天气情况状况])

晴天和多云是上海两年中主要的天气情况各月降水天数统计line=pyecharts.Line("各月降水天数统计")line.add("降水天数",month,is_rain,is_fill=True,area_opacity。

=0.7,is_stack=True)line.add("未降水天数",month,no_rain,is_fill=True,area_opacity=0.7,is_stack=True)

这儿用 pyecharts 做了两个堆叠折线图。上海的降水天数不多,主要在7、8月末。能对比下重庆的统计数据,差别就很明显了:

风向统计directions=[北风,西北风,西风,西南风,南风,东南风,东风,东北风]schema=[]v=[]days=result[风向].value_counts()fordindirections

:schema.append((d,100))v.append(days[d])v=[v]radar=pyecharts.Radar()radar.config(schema)radar.add("风向统计"

,v,is_axisline_show=True)

为了让结果更加直观,这儿采用了 pyecharts 里的雷达图,并且将8个维度按真实方向的角度来排列通常认为,上海冬季盛行西北风,夏季盛行东南风不过从统计数据上来看,西南风才是上海2018年的最热门的风向以上就是我那个工程项目所做的工作,内容还是比较基础的。

大家能做进一步的扩展,比如爬取其他的卫星城,然后展开全国多卫星城的天气情况比较,或者结合地图展开可视化几个有关库的官网都很不错,供参考:requestshttp://cn.python-requests.org/

zh_CN/latest/bs4https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/pyechartshttp://pyecharts.org/

seabornhttp://seaborn.pydata.org/pandashttps://pandas.pydata.org/文章源码及有关文档已上传,获取代码及可视化效用可在公众号(Crossin的编程教室

)回复关键字 天气情况责任编辑是我们编程教室新春征稿活动的一篇征稿,源自 @范洺源 同学我们编程教室会持续向所有人开放,如果有征稿或参与志愿者的意向,欢迎随时在公众号里给我们留言Python | 新手引导 |

一图学Python开发案例:智能防挡弹幕 | 红包提醒 | 流浪地球 | 漫威欢迎搜索及关注:Crossin的编程教室