python实现基于分钟数据来计算小时风速、风向的数据

       今天处理了一个气象数据集,我们得到的数据集是分钟数据形式,需要转化为小时数据形式,我们都知道小时的风速风向其实并不是二者分钟数据的均值,因为不可能一小时内所有的风向都是同一方位上的,只能说某一方位上一小时内的频度最高,也即该方位为该小时内的主风向,至于风速的计算,则是取一小时内该主风向方位上的所有分钟风速数据的均值。

     有了上面的计算思路之后就可以直接进行实现了,具体实现如下:

#!usr/bin/env python
# encoding:utf-8
from __future__ import division

"""
__Author__:沂水寒城
功能: 基于分钟数据来计算风向和风速数据

计算思想:
以单个小时内特定方位频度最高的风向作为主风向,以该方位风向的所有分钟风速数据的均值作为小时的风速值
"""




def windSpeedDirection(data_list):
    '''
    基于分钟数据来获取风向和风速数据
    data_list中每一个子列表元素形式为:
    T,temperate,pressure,humidity,speed,direction
    '''
    data_dict = {}  #以小时为键构建字典,将同一小时的所有分钟数据放到一个列表里面
    for i in range(1,len(data_list)):
        T,temperate,pressure,humidity,speed,direction=data_list[i]
        hour=T.split(':')[0].strip()+':00:00'
        if hour in data_dict:
            data_dict[hour].append(data_list[i])
        else:
            data_dict[hour]=[data_list[i]]
    #遍历处理每一个小时的风速风向数据
    result={}
    for one_hour in data_dict:
        print 'one_hour: ',one_hour
        one_data=data_dict[one_hour]
        res_list=sorted(one_data,key=lambda i:i[0])  #依据时间升序排序
        wd_list=[float(res_list[i][-1]) for i in range(len(res_list))]
        ws_list=[float(res_list[i][-2]) for i in range(len(res_list))]
        fwj_list=[degree2WindDirection(degree=one) for one in wd_list]
        fre_dict={}
        for one in fwj_list:
            if one in fre_dict:
                fre_dict[one]+=1
            else:
                fre_dict[one]=1
        fre_list=sorted(fre_dict.items(),key=lambda e:e[1],reverse=True)
        final_wd=fre_list[0][0]
        final_ws_list=[]
        for i in range(len(wd_list)):
            if degree2WindDirection(degree=wd_list[i])==final_wd:
                final_ws_list.append(ws_list[i])
        print final_ws_list
        ws=sum(final_ws_list)/len(final_ws_list)
        wd=windDirection2Degree(direction=final_wd)
        result[one_hour]=[ws,wd]
    return result


if __name__=='__main__':
    windSpeedDirection(data_list)

        整体的实现思路也是很简单的,相应的注释都已经放在代码里面了,就不再多进行解释了。

        美好又充实的周末,迎接来了两位兄弟,又送走了两位兄弟,时间是如此的匆匆,可能现在的年纪并非是我们应该停下脚步去回忆的时候吧,那么就去努力奋斗吧,加油!

你可能感兴趣的:(编程技术,算法)