2019独角兽企业重金招聘Python工程师标准>>>

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

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

用到的相关库包括:

  • 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年的最热门的风向。

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

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

  1. requests http://cn.python-requests.org/zh_CN/latest/
  2. bs4 https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
  3. pyecharts http://pyecharts.org/
  4. seaborn http://seaborn.pydata.org/
  5. pandas https://pandas.pydata.org/

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

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

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

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

转载于:https://my.oschina.net/crossin/blog/3031959

北京全年天气状况分析相关推荐

  1. 全球及中国STEAM素质教育行业发展价值与运营能力状况分析报告2022版

    全球及中国STEAM素质教育行业发展价值与运营能力状况分析报告2022版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期]:2021年11 ...

  2. 全球及中国信息安全产业应用前景及投融资状况分析报告2021-2027年版

    全球及中国信息安全产业应用前景及投融资状况分析报告2021-2027年版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期] ...

  3. 全球及中国轮胎行业发展方向与销售前景状况分析报告2022年

    全球及中国轮胎行业发展方向与销售前景状况分析报告2022年 --------------------------------------- <修订日期>:2021年12月 <报告价格 ...

  4. 全球及中国计算机仿真产业发展热点及运营能力状况分析报告2021-2027年版

    全球及中国计算机仿真产业发展热点及运营能力状况分析报告2021-2027年版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日 ...

  5. 全球及中国移动多媒体市场状况分析与运营模式咨询报告2022版

    全球及中国移动多媒体市场状况分析与运营模式咨询报告2022版 -------------------------------------  <修订日期>:2022年2月 <出版单位& ...

  6. 中国数据中心IT基础设施第三方服务行业运行状况分析及未来发展趋势展望报告2022-2027年

    中国数据中心IT基础设施第三方服务行业运行状况分析及未来发展趋势展望报告2022-2027年   第1章:行业概念界定及发展环境剖析1.1 行业概念及研究范围界定 1.1.1 数据中心及IT基础设施的 ...

  7. 天津地铁行业建设现状与运营状况分析报告2022版

    天津地铁行业建设现状与运营状况分析报告2022版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期]:2021年11月 [搜索鸿晟信合研究院 ...

  8. 中国服务外包行业竞争状况分析与发展战略规划研究报告2022-2028年版

    第.一章 服务外包行业相关概述 1.1 服务外包的基本介绍 1.1.1 服务外包的定义 1.1.2 服务外包的分类 1.1.3 服务外包的背景与意义 1.2 软件与信息服务外包相关介绍 1.2.1 软 ...

  9. 疫情期北京融资信息分析---疫情对北京社会经济影响分析---科技战疫·大数据公益挑战赛---2020北京数据开放创新应用大赛

    目录 1 北京金融疫情 1.1 宏观 1.1.1. 央行"放水" 1.1.2 疫情对三驾马车的影响 1.2 北京国企和大民企融资 1.2.1 金融债 1.2.2 短期融资券-疫情防 ...

最新文章

  1. vue-cli#2.0项目结构分析
  2. HDU 4539郑厂长系列故事――排兵布阵(状压DP)
  3. Java判断一个数是否是回文数
  4. 中国聚氨酯胶粘剂行业现状研究分析及市场前景预测报告(2022年)
  5. R,让你的数据分析更简便!
  6. [深度学习-NLP]什么是Self-attention, Muti-attention和Transformer
  7. 基于Python+tkinter+pygame的音乐播放器完整源码
  8. 图片怎么转换成文字?几个好用的方法快来查阅
  9. opencv 在图片上打印字符。
  10. 动名词做主语时的谓语动词问题
  11. 基于照片标记的广州市旅游流特征简单分析(上)
  12. 逆向app - 简单apk工具的安装
  13. Servlet内存马
  14. mysql 日期截止,MySQL查询以开始日期和结束日期计算日期范围内的天数
  15. 全球首家!苹果市值达 3 万亿美元,AR 和自动驾驶是下一重点?
  16. docker registry 2 私有仓库镜像删除方法
  17. 一行代码实现访客人次统计
  18. 【程序源代码】电商网站系统
  19. Waymo object detect 2D解决方案论文拓展
  20. Android初级教程实现电话录音

热门文章

  1. [kuangbin] M - Find a way(简单广搜)
  2. 使用消息队列实现分布式事务-公认较为理想的分布式事务解决方案(转)
  3. 东北育才 数论专场第2场
  4. Arithmetic_Thinking -- greedy algorithm
  5. Xamarin.Android开发实践(十八)
  6. 流程控制 - PHP手册笔记
  7. pip无法更新_TensorFlow 2.0「开发者预览版」上线,内容每日更新
  8. POJ 2516 基础费用流
  9. C语言经典例67-数组最大值与最小值与数组元素交换
  10. 【Linux 内核 内存管理】Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )