冷空气吧 关注:21,384贴子:925,509
  • 1回复贴,共1

日均温震荡程度的空间异质性研究

只看楼主收藏回复

基于吧友的改进。
1.数据源从ogimet从python获取,而不需要从rp5下载。缺点和rp5是一样的,只有交换站,但访问(至少在我以前的尝试中)不会像qweather那样有限制。
2.计算日均温的方法改为八点法而非四点法。
3.不再按照各地的季节划分,而是按照同样的月份划分。
4.最后用插值方法把图做出来。


IP属地:湖北1楼2023-12-25 15:30回复
    import re
    import datetime
    if __name__ == "__main__":
    for y in range(2000,2023):#2000-2022年
    for m in range(1,13):#1-12月
    list=[]#空列表存数据
    if (m > 1):#计算一个月有多少天
    days = (datetime.date(y, m, 1)-datetime.date(y, m-1, 1)).days
    else:
    days = (datetime.date(y, 1, 1) - datetime.date(y-1, 12, 1)).days
    url='https://www.ogimet.com/cgi-bin/gsynres?lang=en&state=Chin&osum=no&fmt=html&ord=REV&ano='\
    +str(y)+'&mes='+str(m)+'&day=31&hora=12&ndays=1&Send=send'#获取该月有数据的站点列表
    a=requests.get(url).text
    for pos in re.finditer('ind=', a):#站点列表中的超链接字符截取获得站点列表名
    index=a[pos.end():pos.end()+5]#一个站点
    url = 'https://www.ogimet.com/cgi-bin/gsynres?lang=en&ord=DIR&ndays='+str(days+1)\
    +'&ano='+str(y)+'&mes='+str(m)+'&day'+str(days)+'&hora=12&ind='+index#一个站点一个月的数据
    try:
    b=pd.read_html(url)[2]['Temperature (C)']['Avg']#定位到日均温
    b = b.drop(b[b == '-----'].index)#去掉空数据
    diff = np.mean(np.fabs(np.diff(b.values)))#求差、求绝对值、求平均
    print('%d\t%d\t%d\t%.3f'%(y,m,int(index),diff))#可视化
    list.append([index,diff])#列表保存数据
    except:
    continue#获取失败
    month_data=pd.DataFrame(list)#列表转为dataframe
    month_data.to_csv('D:/'+str(y)+'_'+str(m)+'.txt')#保存到txt,实际是csv


    IP属地:湖北2楼2023-12-25 23:42
    回复