查看原文
其他

带你领略一天天气之变化

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:石   艳,中南财经政法大学统计与数学学院

本文编辑:尚晨曦

技术总编:陈   鼎

Stata&Python云端课程来啦!

好雨知时节,当春乃发生。为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!



  导  读
小伙伴们,大家好啊,天气变化关乎我们的“衣,食,行”,不得不让我们关注。每天打开手机的天气,都可以看到一天的温度、空气质量以及风向等的变化图,今天就给大家分享一下有关天气变化绘图的简单实现。
01天气信息来源

在进行作图之前,我们首先要获得相关信息。以武汉市为例,进入http://www.weather.com.cn/weather1d/101200101.shtml(不同城市的网址所对应的最后编号不同),该网站有着详细的当天天气情况介绍以及7天和15天天气预报。在此处,我们只关注当天的天气变化情况,在查看网页源代码后可以发现,当天的天气状况全部包含在<div class="left-div">中的<script>下,所以对这部分内容进行解析和提取。在对网页内容解析后,根据查找条件进行匹配查找,最终获得原始数据。大家可以回复”天气“获得哦~。

02图形展示
在做图前先读入数据,然后分别绘制温度变化图、相对湿度变化图和风向雷达图。
import matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport mathdf1 = pd.read_csv(".\天气.csv")
  • 温度变化图

我们首先看一下当天的温度变化如何,作图代码如下:

# 作图前准备工作plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus'] = False #解决作图时的中文显示问题hour = list(df1['hour'])tem = list(df1['temp'])for i in range(0,24): if math.isnan(tem[i]) == True: tem[i] = tem[i-1]
tem_ave = df1['temp'].mean() #平均温度tem_max = max(df1['temp']) # 最高温tem_max_hour = hour[tem.index(tem_max)] #最高温时刻
tem_min = min(df1['temp']) # 最低温tem_min_hour = hour[tem.index(tem_min)] # 最低温时刻
# 开始作图x = range(0,24)y = []for i in range(0,24): y.append(tem[hour.index(i)])
plt.figure(1)plt.plot(x,y,color = 'red', label='温度')plt.scatter(x,y,color='red')plt.plot([0, 24], [tem_ave, tem_ave], c='blue', linestyle='--',label='平均温度') # 画出平均温度虚线
plt.text(tem_max_hour+0.15, tem_max+0.15, str(tem_max), ha='center', va='bottom', fontsize=10.5) # 标出最高温度、放置位置以及对齐方式plt.text(tem_min_hour+0.15, tem_min+0.15, str(tem_min), ha='center', va='bottom', fontsize=10.5) # 标出最低温度、放置的位置以及对齐方式
plt.xticks(x)plt.xlabel('时间/h')plt.ylabel('摄氏度/℃')plt.title('一天温度变化曲线图')plt.show()

一天温度变化曲线图如上所示,可知在这一天13:00时温度最高,为24℃,并且持续了三个小时;03:00时温度最低,为14℃,昼夜温差最大达到10℃;平均温度在19℃左右。

  • 相对湿度变化图

相对湿度变化图绘制过程如上,不再赘述,此处只展示最终图形。

观察图形可知,相对湿度的变化与温度变化正好相反,清晨的湿度比较大(最高为65%),而下午至黄昏湿度较小(最低为23%),平均在43%左右。

为了更清楚的观察温度和相对湿度之间的关系,可做二者的散点图。

tem = df1['temp']hum = df1['humidity']plt.scatter(tem,hum,color='blue')plt.title('温度湿度相关性分析图')plt.xlabel('温度/℃')plt.ylabel('相对湿度/%')plt.show()

散点图可清楚的观察到温度和相对湿度呈现出强烈的负相关关系,经计算,二者相关系数为-0.932756。原因可能为较高温度时,水分蒸发,空气就比较干燥,相对湿度较低,因而最低湿度一般出现在下午,这符合平时气候现象。

  • 风向雷达图

为了观察一天之内最经常出现的风向以及风力的大小,接下来进行雷达风向图的制作。我们之前获得的天气数据中,风向都是以文字形式直接显示的,比如“北风","东南风”等,所以要首先定义一个函数,将八个方向对应到一个圆上,再计算每个方向的平均风速作为半径,采用极坐标进行作图,颜色越深表明风力越大。

定义对应函数和计算平均风速:

# 转换风向为相应的角度def change_wind(wind): for i in range(0,6): if wind[i] == '北风': wind[i]=90 elif wind[i]=='南风': wind[i]=270 elif wind[i] == "西风": wind[i] = 180 elif wind[i] == "东风": wind[i] = 360 elif wind[i] == "东北风": wind[i] = 45 elif wind[i] == "西北风": wind[i] = 135 elif wind[i] == "西南风": wind[i] = 225 elif wind[i] == "东南风": wind[i] = 315 return wind
# 计算相应风向的平均风速wind = list(df1['wind'])wind_speed = list(df1['wind_scale'])wind = change_wind(wind)
degs = np.arange(45,361,45)temp2 = []for deg in degs: speed = [] for i in range(0,6): if wind[i] == deg: speed.append(wind_speed[i])
if len(speed) == 0: temp2.append(0) else: temp2.append(sum(speed)/len(speed))
进行作图:
# 作图N = 8theta=np.arange(0.+np.pi/8,2*np.pi+np.pi/8,2*np.pi/8)# 数据极径radii = np.array(temp2)# 绘制极区图坐标系plt.axes(polar=True)# 定义每个扇区的RGB值(R,G,B),x越大,对应的颜色越接近蓝色colors = [(1-x/max(temp2), 1-x/max(temp2),0.6) for x in radii]plt.bar(theta,radii,width=(2*np.pi/N),bottom=0.0,color=colors)plt.title('风向风级图',x=0.2,fontsize=20)plt.show()

图形展示如下:

通过图形可知,当天风向主要为东北风和东风,平均风速超过了1.4级,还有小部分东南风,平均为1.0级。虽然清晰地看到了风级,但是这样的情况下我们可能连“微风拂面”都感受不到呢。

今天的分享就到这里了,经过以上的图形展示我们大概了解到一天的天气变化啦,随时期待新的一天的到来,希望大家有所收获哦~

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。


欢迎大家点赞、评论、转发呦~



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐  

利用pyecharts看微博粉丝地区分布

零值太多怎么办?解锁Stata17新命令ziologit

  Stata17新功能之Python API

小罗肥归升级啦|解锁Stata17之新命令xtmlogit

 
速度大比拼之Stata17有多快?

初识PyStata

辞旧迎新——Stata17之Do-file编辑器优化

Stata17新亮点——解放表格输出生产力

【爬虫+可视化】链家网北京租房信息

 手把手教你如何获取股票数据和可视化

  Countvalues——数数的超级小帮手

         frame框架进阶篇

 下拉选择框如何变成“小猫咪” | selenium小技巧

  Python中的运算符知多少?

  快来get缺失值的正确打开方式

  frame框架——我到底在哪个“房间”

如何使用Pandas读取txt文件?

基于MySQL数据库实现增量式爬取

寻找春日气息|本月最受欢迎的景点都在这里!

问世间情为何物,大数据也想参悟——后考研时代,何以解忧?唯有数据!

Python与数据库交互—浅述pymysql

偷懒小妙招|selenium之玩转鼠标键盘操作--鼠标篇

大家用Stata来“找茬”

“粉墨登场”——多期双重差分法(DID)的Stata操作

Python与百度地图合璧,绘制棒呆的热力地图

     【数据可视化】统计图绘制神器:Seaborn

检索Stata推文的“任意门”

关于我们 


微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存