资讯专栏INFORMATION COLUMN

北京全年天气状况分析

wupengyu / 2519人阅读

摘要:对个月份进行抓取后再汇总,就得到了北京年全年的天气数据,包括最高温度最低温度天气状况风向等信息。按月查看温度走势日期天气状况分布天气状况晴天和多云是北京一年中主要的天气。北京的降水天数不多,主要在月份。

本文来自 @范洺源 投稿,在其基础上做了点修改

最近在学爬虫和数据分析,看到 天气网 上有国内城市一年的天气历史数据,想以此为数据源练习一下,于是就有了这个项目。今天在此简单介绍一下实现思路和最终效果。

用到的相关库包括:

requests

bs4

pandas

matplotlib

seaborn

pyecharts

分析数据源

天气网的 历史天气预报查询 页面( http:// lishi.tianqi.com/)上有各城市的数据。以 北京 为例,打开页面之后经过简单的尝试就可以发现,每个月的数据是以 http://lishi.tianqi.com/{城市的拼音}/{年份+月份}.html 这样的地址来展示的,于是可据此构建一个函数,函数的作用是默认返回北京市2018年1月到12月的 url:


def get_url(city="beijing"):
    for time in range(201801,201813):
        url = "http://lishi.tianqi.com/{}/{}.html".format(city,time)
        yield url
爬取数据

有了 url 地址就可以用 requests 来抓取。这里要注意,得加上自己的 cookies ,否则会返回 404 页面,应该是对方网站做了反爬。拿到返回值之后,我用 bs4 库的 select 函数提取数据。select 函数使用的是 css 选择器 的语法。由于需要进行一定的数据分析,所以这里没有将数据保存到文件,而是直接使用 pandasdataframe 进行储存。


 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.text for x in date]
max_temp = [x.text for x in max_temp[1:]]
min_temp = [x.text for x in min_temp[1:]]
weather = [x.text for x in weather[1:]]
wind_direction = [x.text for x in wind_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(lambda x: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()
for d in directions:
    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年的最热门的风向。

以上就是我这个项目所做的工作,内容还是比较基础的。大家可以做进一步的扩展,比如爬取其他的城市,然后进行全国多城市的天气比较,或者结合地图进行可视化。

几个相关库的官网都很不错,供参考:

requests http://cn.python-requests.org/zh_CN/latest/

bs4 https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

pyecharts http://pyecharts.org/

seaborn http://seaborn.pydata.org/

pandas https://pandas.pydata.org/

文章源码及相关文件已上传,获取代码及可视化效果可在公众号( Crossin的编程教室 )回复关键字 天气

本文是我们编程教室新春征稿活动的一篇投稿,来自 @ 范洺源 同学。

我们编程教室会持续向所有人开放,如果有投稿或参与志愿者的意向,欢迎随时在公众号里给我们留言。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43523.html

相关文章

  • 突破、进化,腾讯云数据库2018全年盘点

    摘要:性能全面领先同类,拥有极致性价比作为腾讯云在公司架构调整完成后向外界发布的首款产品,强悍的性能,极致的性价比,使得其无疑成为年度数据库市场的一颗重磅炸弹,可谓不鸣则已一鸣惊人。无疑是腾讯云数据库自主可控最典型的代表。 在企业上云逐渐加速的背景下,云数据库作为企业重要的IT基础设施,其重要性毋庸置疑。各大云计算厂商不惜重金,纷纷在产品和技术层面加大布局,争夺这一重要的云服务市场。纵观国内...

    noONE 评论0 收藏0
  • 用机器学习识别不断变化的股市状况—隐马尔科夫模型(HMM)的应用

    摘要:在本文中,我们将通过使用一类强大的机器学习算法隐马尔科夫模型来探索如何识别不同的股市状况。隐马尔科夫模型马尔科夫模型是一个概率过程,查看当前状态来预测下一个状态。通过隐马尔科夫模型,可以深入了解不断变化的股市状况。 showImg(https://segmentfault.com/img/bVUlGu?w=913&h=515); 了解不同的股市状况,改变交易策略,对股市收益有很大的影响...

    lookSomeone 评论0 收藏0
  • 猫叔产品读记 | 全时关店潮、那些记得住的2019春节营销案例(2期)

    摘要:全时关店潮氪获得的一份内部资料显示,自去年月以来,全时便利店在北京关店约家截至月日,全时在北京的店铺还有家左右。这意味着该轮关店比例超过。 本博客 猫叔的博客,转载请申明出处 前言 本系列为猫叔综合整理的Java面试题系列,如有雷同不胜荣幸。 前言 本系列主要是猫叔对互联网相关产品(兼任产品经理)路上的视野扩展与信息记录,每日三篇,记录分享。 全时关店潮 36氪获得的一份内部资料显示,...

    spademan 评论0 收藏0
  • 守护城市安全:时空数据+深度学习

    摘要:上周,在旧金山召开的人工智能国际较高级会议上,来自微软亚洲研究院的郑宇博士及其团队的论文首创性的将时空数据与深度学习结合起来,利用时空深度残差网络用于预测城市人流问题。 上周,在旧金山召开的人工智能国际较高级会议AAAI 2017上,来自微软亚洲研究院的郑宇博士及其团队的论文Deep Spatio-Temporal Residual Networks for Citywide Crowd F...

    CarlBenjamin 评论0 收藏0
  • 简历大数据公司全员被抓,HR要注意什么?

    摘要:日前,简历大数据公司巧达科技被警方一锅端,高管和员工全部被带走。买卖简历,直接违法。三人累计贩卖个人简历万余份,智联招聘由此蒙受损失近日前,简历大数据公司巧达科技被警方一锅端,高管和员工全部被带走。到底发生了什么?  一 、为什么公司全员被抓? 3月14日团队被警方带走,有HR等非核心成员回家,但核心高管依然失联中。3月25日,一位巧达科技前员工告诉燃财经。 在天眼查中北京...

    Loong_T 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<