예제 #1
0
def calculateOneStation(id):
	item0 = list[id]
	station_0 = list_station_all[id]
	for x in xrange(1,size):
		print x
		item = list_station_all[x]
		leng = len(item)
		#print leng
		#cov =np.cov(station_0,item)[0][1]
		
		#correlate = np.corrcoef(station_0, item)[0,1]
		semi = semivariance(station_0, item)
		#list_corr_tuple.append((id, x, correlate))
		list_corr_tuple.append((id, x, semi))
		
		#print correlate
		#correlate =  corr(station_0, item)
		#value = 0
		#for y in xrange(0, leng):
		#	value = value + abs(station_0[y] - item[y])
		#value = value/leng
		#print value
		list_index.append(x)
		list_value.append(semi)
		list_h.append(haversine(item0[2], item0[1], list[x][2], list[x][1]))
예제 #2
0
def calculateOneStation(id):
    item0 = list[id]
    station_0 = list_station_all[id]
    for x in xrange(1, size):
        item = list_station_all[x]
        correlate = np.corrcoef(station_0, item)[0, 1]
        list_index.append(x)
        list_value.append(correlate)
        list_h.append(haversine(item0[2], item0[1], list[x][2], list[x][1]))
예제 #3
0
def generateDistanceMatrix(list_sta_by_area):
	#l = getAllObservation()
	l = list_sta_by_area
	meteo_size = len(l)
	D = np.zeros([meteo_size, meteo_size])
	for x in xrange(0,meteo_size):#0->97
		item1 = l[x]
		for y in xrange(0,meteo_size):#0->97
			item2 = l[y]
			d = haversine(item1[2], item1[1], item2[2], item2[1])
			D[x][y]= round(d)
			#print x, ' ', y, ' ', D[x][y]
			#time.sleep(0.5)
			#print d
	print D[0:10,0:10]
	return D
예제 #4
0
def calculateOneStation(id):
	item0 = list[id]
	station_0 = list_station_all[id]

	for x in xrange(1,size):
		item = list_station_all[x]
		correlate = np.corrcoef(station_0, item)[0,1]
	#	print x
	#	item = list_station_all[x]
	#	leng = len(item)
	#	print leng
	#	value = 0
	#	for y in xrange(0, leng):
	#		value = value + abs(station_0[y] - item[y])
	#	value = value/leng
	#	print value
		list_index.append(x)
		list_value.append(correlate)
		list_h.append(haversine(item0[2], item0[1], list[x][2], list[x][1]))
예제 #5
0
def krigeOne(point, neighbor, list_all_station, list_data, G, D):
	#print 'KRIGE ONE'
	list_station = list_all_station
	#Cal distances from current point to all others
	item0 = (0, point[0], point[1])
	meteo_size = len(list_station)
	list_d = []
	#cal all distance from point to others stations 
	for i in xrange(0,meteo_size):
		#Cal distance one-one
		item1 = list_station[i]
		d = haversine(item0[2], item0[1] ,item1[2], item1[1])
		newitem = (item1[0], d, item1[3], item1[1], item1[2])#id, distance, temp, lat, lon
		list_d.append(newitem)
	#Sort by distance, get n first nearest neighbors
	sorted_list = sorted(list_d, key=itemgetter(1))
	list_neighbor = sorted_list[:neighbor]
	#print list_neighbor
	'''
	#Get areaid for each station
	list_neighbor_with_areaid = []
	for item in list_neighbor:
		item1 = list_station[item[0]]
		new_item = (item[0], item[1], getAreaIdFromPoint([item1[1], item1[2]]))
		list_neighbor_with_areaid.append(new_item)
	'''
	K1 = np.zeros([neighbor, neighbor])
	K = np.zeros([neighbor, neighbor])
	k = np.zeros([neighbor, 1])
	T = []# list of temp of neighbor station at interpolate time
	string = ''
	i = 0 
	for  item in list_neighbor:
		f.write('getting T\n')
		#Nhiet do 1 thang cua tram item
		#print len(list_data)
		t = list_data[item[0]-1]
		trendValue = getTrendValue(trend_curve, item[3], item[4])
		#print trend_curve, trendValue
		f.write(str(t) + '\n')
		t_size = len(t)
		T.append(t[t_size - 1] - trendValue)
		j = 0
		string = string + str(item[0])
		#print item
		#Area key = 0, because of we have only one model for all
		a0, c0 = global_data[0][0], global_data[0][1]
		h = item[1]#distance
		k[i][0] = semiToCov( h, a0, c0)
		for sub_item in list_neighbor:
			string = string+' ' + str(sub_item[0])
			#print i, j
			K1[i][j] = G_COV[item[0]-1][sub_item[0]-1]
			K [j][i] = K1[i][j]#Inverse of K1
			j = j + 1
		string = string + '\n'
		i = i + 1
	f.write('T: ' + str(T) + '\n')
	f.write('neighbors list: \n' + string + '\n')
	#print string
	#print k
	#print K
	f.write('K: \n' + str(K) +' \n')
	f.write('k: \n' + str(k) +' \n')
	weight = np.dot(K,k)
	f.write('ori-weight: \n' + str(weight) +' \n')
	if sum(weight) == 0:
		f.write('NOT RELATED\n')
		weight[:] = 1 #assign the same weight for all elements
	weight = weight/sum(weight)
	krige = np.dot(T, weight)
	f.write('nor-weight: \n' + str(weight) +' \n')
	f.write('T: \n' + str(T)+' \n')
	f.write('krige: ' + str(krige)+' \n')
	#print krige
	#print krige[0],' ',
	#print k
	weight = inverseMatrix(weight)
	derivation = np.dot(weight, k)
	f.write('derivation: ' + str(derivation[0][0])+' \n')	
	#time.sleep(2)
	return krige[0], derivation[0][0]


	'''