前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1153天数据告诉你黄山云海在哪些天容易遇见

1153天数据告诉你黄山云海在哪些天容易遇见

作者头像
renhai
发布2023-11-24 16:10:08
1820
发布2023-11-24 16:10:08
举报

数据来源:黄山风景区管理委员会官网 > 气象信息

目录

  • 1.request请求
  • 2.lxml结合xpath解析网页源代码
  • 3正则提取文本
  • 将数据去重、将日期转为datetime对象等
  • 2.读入数据

云海是黄山的第一奇观。

据百度百科记载,黄山一年只有51天可以看到云海,每年11月到第二年的5月是观赏环山云海的最佳时间段。抱着数据党的态度,想用真实的数据证明以上结论是否可信。

流程:

1.数据获取:黄山官网的气象预告从2018年起至今提供了条天气预报数据,包括我们所需的基本天气情况以及云海概率。

导航:黄山风景区管理委员会官网-气象信息

2.对获得文本数据进行提取,这里我们采用的Python中正则的方法来提取。

3.进行数据透视和绘图分析。

一、数据获取

1.request请求

根据网页结构构造url请求,一共75页。

代码语言:javascript
复制
url = 'https://hsgwh.huangshan.gov.cn/content/column/6794224?pageIndex={}'.format(i)

2.lxml结合xpath解析网页源代码

代码语言:javascript
复制
#定义字典储存数据
item = {}
#解析源代码 
content_lst = selector.xpath("//div/div[3]/div[3]//ul//a//span/text()")
#解析日期
date_lst = selector.xpath('//li//span[@class="right date"]/text()')

3正则提取文本

首先要解决正则如何匹配中文字的问题:

1.”[\u4e00-\u9fa5]+”可以表示一个或者多个中文字符;

2.利用编码函数将特定字符转换为unicode编码。

代码语言:javascript
复制
def get_unicode(str):
    str_unicode = str.encode('unicode-escape').decode()
    return print(str_unicode)
M_unicode = get_unicode('月')
D_unicode = get_unicode('日')

#以下是输出,填入匹配规则就行
#\u6708
#\u65e5

代码语言:javascript
复制
# 循环解析
for num,n in enumerate(content_lst):    
  pattern_num = re.compile(r'-?\d{1,2}') # 匹配1-2位数字 -?此符号最多可以有一次
    pattern_per = re.compile(r'-?\d{1,2}%') # 匹配1-3位概率
    pattern_tex = re.compile(r'[\u4e00-\u9fa5]') # 匹配所有汉字

    pattern_TEM = re.compile(r'\u6c14\u6e29-?\d{1,2}[\u4e00-\u9fa5]-?\d{1,2}')
    pattern_SR = re.compile(r'\d{1}\u65f6\d{1,3}\u5206') # 日出时间文本
    
    # 最低和最高温度
    tems = pattern_TEM.findall(n)
    for tem in tems:
        tem_min = pattern_num.findall(tem)[0]
        tem_max = pattern_num.findall(tem)[1]
        item['tem_min'] = tem_min
        item['tem_max'] = tem_max       
代码语言:javascript
复制
#云海概率2018有和2022用的不同表述,需要多个条件和手动判断
if len(percent) == 2:
    sunrise_time_per = percent[0]
    item['sunrise_time_per'] = sunrise_time_per
    # 云海可见概率
    sea_of_clouds_per = percent[1]
    item['sea_of_clouds_per'] = sea_of_clouds_per

elif len(percent) == 1:
    sunrise_time_per = percent[0]
    item['sunrise_time_per'] = sunrise_time_per
    if len(per_kejianyunhai) == 1 :
        item['sea_of_clouds_per'] = '80%'
    elif len(per_oujianyunhai) == 1:
        item['sea_of_clouds_per'] = '30%'
    else:
        print(n+url+'网页需核实1')

else:
    print(n+url+'网页需核实0')
    item['sunrise_time_per'] = item['sea_of_clouds_per'] = '0'

代码语言:javascript
复制
# 储存        pd.DataFrame([item]).to_csv('./weather.csv',mode='a',index=False,header=0) 

二、数据清洗

将数据去重、将日期转为datetime对象等

代码语言:javascript
复制
df.drop_duplicates(inplace=True,ignore_index=True)
read_csv(parse_dates=['datetime']) # parse_dates将某些列解析为 DataTime 对象,这比使用 to_datetime() 方便

2.读入数据

代码如下(示例):

代码语言:javascript
复制
data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。

三、数据分析

究竟哪些天容易见到云海:

每年最可能见到黄山云海的76天

三年平均下来,共有76天云海可见概率大于等于60%,占全年20%,所以碰上黄山云海还是需要靠运气的。我们可以看到五一和十一黄金周云海概率不到60%,同时人流又多还会堵在上下山途中动不了,建议错峰出游。

他们集中在每年11-12月、1-2月、6月,其中冬季能见到雾凇与云海两大奇观,黄山的淡季门票还打折,时间是2021年12月20日至2022年1月20日,查好天气错峰看雪景也是很不错的。

image-20221125182759721

最后

感谢阅读,如果觉得文章有用,希望点赞和关注。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 renhailab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、数据获取
    • 1.request请求
      • 2.lxml结合xpath解析网页源代码
        • 3正则提取文本
        • 二、数据清洗
          • 将数据去重、将日期转为datetime对象等
            • 2.读入数据
            • 三、数据分析
            • 最后
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档