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

2023-11-24 16:10:08 浏览数 (2)

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

目录

  • 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'u6c14u6e29-?d{1,2}[u4e00-u9fa5]-?d{1,2}')
    pattern_SR = re.compile(r'd{1}u65f6d{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

最后

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

0 人点赞