今天处理了一个气象数据集,我们得到的数据集是分钟数据形式,需要转化为小时数据形式,我们都知道小时的风速风向其实并不是二者分钟数据的均值,因为不可能一小时内所有的风向都是同一方位上的,只能说某一方位上一小时内的频度最高,也即该方位为该小时内的主风向,至于风速的计算,则是取一小时内该主风向方位上的所有分钟风速数据的均值。
有了上面的计算思路之后就可以直接进行实现了,具体实现如下:
#!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)
整体的实现思路也是很简单的,相应的注释都已经放在代码里面了,就不再多进行解释了。
美好又充实的周末,迎接来了两位兄弟,又送走了两位兄弟,时间是如此的匆匆,可能现在的年纪并非是我们应该停下脚步去回忆的时候吧,那么就去努力奋斗吧,加油!