def setUpClass(cls): ds = NREL() cls.turbine = ds.get_turbine(NREL.park_id['tehachapi'], 2004, 2005) cls.windpark = ds.get_windpark(NREL.park_id['tehachapi'], 3, 2004, 2005) cls.pmapping = PowerMapping() cls.pdmapping = PowerDiffMapping()
def down(citynum, methodnum): cityname = [ 'tehachapi', 'cheyenne', 'palmsprings', 'lasvegas', 'lancaster' ] method = [ 'KMeans', 'SpectralClustering', 'AgglomerativeClustering', 'Birch' ] target_idx = NREL.park_id[cityname[citynum]] year_from, year_to = 2004, 2006 if sys.version_info < (3, ): mode = 'rU' else: mode = 'r' csvfile = 'cluster/' + method[methodnum] + '200.csv' pick = [] with open(csvfile, mode) as csv_arch: reader = csv.reader(csv_arch, delimiter=',') for row in reader: pick.append(int(row[0])) nrel = NREL() d = 0 turbines = nrel.fetch_nrel_meta_data_all() for row in turbines: turbine_index = np.int(row[0]) if (turbine_index != target_idx): if (pick[turbine_index - 1] == pick[target_idx - 1]): d = d + 1 for y in range(year_from, year_to + 1): measurement = nrel.fetch_nrel_data( row[0], y, ['date', 'corrected_score', 'speed'])
def test_nmar_destroyer(self): turbine = NREL().get_turbine(NREL.park_id['tehachapi'], 2004) timeseries = turbine.get_measurements()[:1000] damaged, indices = NMARDestroyer().destroy(timeseries, percentage=.50,\ min_length=10, max_length=50) misses = MissingDataFinder().find(damaged, 600) assert(len(misses) > 0)
def test_mreg_interpolation_multi(self): park_id = NREL.park_id['tehachapi'] windpark = NREL().get_windpark(park_id, 3, 2004) target = windpark.get_target() timestep = 600 measurements = target.get_measurements()[300:350] damaged, indices = MARDestroyer().destroy(measurements, percentage=.50) before_misses = MissingDataFinder().find(damaged, timestep) neighbors = windpark.get_turbines()[:-1] count_neighbors = len(neighbors) reg = 'knn' # KNeighborsRegressor(10, 'uniform') regargs = {'n' : 8, 'variant' : 'uniform'} processed = 0 missed = {k : count_neighbors for k in indices} exclude = [] damaged_nseries = [] for neighbor in neighbors: nseries = neighbor.get_measurements()[300:350] damaged, indices = MARDestroyer().destroy(nseries, percentage=.50, exclude=exclude) for index in indices: if(index not in missed.keys()): missed[index] = count_neighbors missed[index] -= 1 if(missed[index] == 1): exclude.append(index) # exclude in next iterations damaged_nseries.append(damaged) t_hat = MRegInterpolation().interpolate(damaged, timestep=timestep,\ neighbor_series=damaged_nseries, reg=reg, regargs=regargs) after_misses = MissingDataFinder().find(t_hat, timestep) assert(len(after_misses) < 1)
def test_marthres_destroyer(self): turbine = NREL().get_turbine(NREL.park_id['tehachapi'], 2004) timeseries = turbine.get_measurements()[:1000] damaged, indices = MARThresDestroyer().destroy(timeseries, percentage=.50,\ lower_bound = 0, upper_bound = 20) misses = MissingDataFinder().find(damaged, 600) assert(len(misses) > 0)
def compute_mse(regressor, horizon): # get wind park and corresponding target. windpark = NREL().get_windpark(NREL.park_id['tehachapi'], 3, 2004, 2005) target = windpark.get_target() # use power mapping for pattern-label mapping. feature_window = 3 mapping = PowerMapping() X = mapping.get_features_park(windpark, feature_window, horizon) y = mapping.get_labels_turbine(target, feature_window, horizon) # train roughly for the year 2004, test for 2005. train_to = int(math.floor(len(X) * 0.5)) test_to = len(X) train_step, test_step = 25, 25 X_train=X[:train_to:train_step] y_train=y[:train_to:train_step] X_test=X[train_to:test_to:test_step] y_test=y[train_to:test_to:test_step] if(regressor == 'svr'): reg = SVR(kernel='rbf', epsilon=0.1, C = 100.0,\ gamma = 0.0001).fit(X_train,y_train) mse = mean_squared_error(reg.predict(X_test),y_test) elif(regressor == 'knn'): reg = KNeighborsRegressor(10, 'uniform').fit(X_train,y_train) mse = mean_squared_error(reg.predict(X_test),y_test) return mse
def compute_mse(regressor, param): # get wind park and corresponding target. forecast is for the target # turbine park_id = NREL.park_id['tehachapi'] windpark = NREL().get_windpark(park_id, 3, 2004) target = windpark.get_target() # use power mapping for pattern-label mapping. Feature window length # is 3 time steps and time horizon (forecast) is 3 time steps. feature_window = 6 horizon = 3 mapping = PowerMapping() X = mapping.get_features_park(windpark, feature_window, horizon) Y = mapping.get_labels_turbine(target, feature_window, horizon) # train roughly for the year 2004. train_to = int(math.floor(len(X) * 0.5)) # test roughly for the year 2005. test_to = len(X) # train and test only every fifth pattern, for performance. train_step, test_step = 5, 5 if (regressor == 'rf'): # random forest regressor reg = RandomForestRegressor(n_estimators=param, criterion='mse') reg = reg.fit(X[0:train_to:train_step], Y[0:train_to:train_step]) y_hat = reg.predict(X[train_to:test_to:test_step]) elif (regressor == 'knn'): # TODO the regressor does not need to be newly trained in # the case of KNN reg = KNeighborsRegressor(param, 'uniform') # fitting the pattern-label pairs reg = reg.fit(X[0:train_to:train_step], Y[0:train_to:train_step]) y_hat = reg.predict(X[train_to:test_to:test_step]) else: raise Exception("No regressor set.") # naive is also known as persistence model. naive_hat = zeros(len(y_hat), dtype=float32) for i in range(0, len(y_hat)): # naive label is the label as horizon time steps before. # we have to consider to use only the fifth label here, too. naive_hat[i] = Y[train_to + (i * test_step) - horizon] # computing the mean squared errors of Linear and naive prediction. mse_y_hat, mse_naive_hat = 0, 0 for i in range(0, len(y_hat)): y = Y[train_to + (i * test_step)] mse_y_hat += (y_hat[i] - y)**2 mse_naive_hat += (naive_hat[i] - y)**2 mse_y_hat /= float(len(y_hat)) mse_naive_hat /= float(len(y_hat)) return mse_y_hat, mse_naive_hat
def test_backward_copy_interpolation(self): park_id = NREL.park_id['tehachapi'] windpark = NREL().get_windpark(park_id, 10, 2004) target = windpark.get_target() timestep = 600 measurements = target.get_measurements()[300:500] damaged, indices = MARDestroyer().destroy(measurements, percentage=.50) before_misses = MissingDataFinder().find(damaged, timestep) t_hat = BackwardCopy().interpolate(measurements, timestep=timestep) after_misses = MissingDataFinder().find(t_hat, timestep) assert(measurements.shape[0] == t_hat.shape[0]) assert(len(after_misses) < 1)
def test_mreg_interpolation(self): park_id = NREL.park_id['tehachapi'] windpark = NREL().get_windpark(park_id, 3, 2004) target = windpark.get_target() timestep = 600 measurements = target.get_measurements()[300:500] damaged, indices = MARDestroyer().destroy(measurements, percentage=.50) before_misses = MissingDataFinder().find(damaged, timestep) neighbors = windpark.get_turbines()[:-1] reg = 'knn' # KNeighborsRegressor(10, 'uniform') regargs = {'n' : 8, 'variant' : 'uniform'} nseries = [t.get_measurements()[300:500] for t in neighbors] t_hat = MRegInterpolation().interpolate(damaged, timestep=timestep,\ neighbor_series=nseries, reg=reg, regargs=regargs) after_misses = MissingDataFinder().find(t_hat, timestep) assert(len(after_misses) < 1)
def fun(citynum,methodnum,K): park_id = NREL.park_id[cityname[citynum]] windpark = NREL().get_windpark(park_id, 10, 2004,2006) pla=[] kk=windpark.get_turbines() for i in range(len(kk)): pla.append(kk[i].idx) feature_window, horizon = 3, 3 mapping = PowerMapping() data_1 = np.array(mapping.get_features_park(windpark, feature_window, horizon)) data_train = np.array(mapping.get_features_park(windpark, 1, 1)) lendata=len(data_1) data1 = data_1[:lendata:3] l1=len(data_train) data_train1=data_train[:l1:3] half=int(math.floor(len(data1) * 0.5)) traindata_1=data_train1[0:half,:] traindata1=np.transpose(traindata_1) traindata1=preprocessing.scale(np.array(traindata1),with_mean=True,with_std=True) if methodnum==0: ans = KMeans(n_clusters=K, random_state=0).fit(traindata1).predict(traindata1) if methodnum==1: ans = SpectralClustering(n_clusters=K, random_state=0).fit_predict(traindata1) if methodnum==2: ans = AgglomerativeClustering(n_clusters=K).fit_predict(traindata1) if methodnum==3: ans = Birch(n_clusters=K).fit_predict(traindata1) if methodnum==4: ans = DBSCAN(eps = 0.1).fit_predict(traindata1) fo = open('cluster10/'+cityname[citynum]+method[methodnum]+str(K)+'.csv','w', newline='') csv_write = csv.writer(fo,dialect='excel') for i in range(len(ans)): cc=[]; cc.append(pla[i]) cc.append(ans[i]) csv_write.writerow(cc) fo.close()
def test_topological_interpolation(self): park_id = NREL.park_id['tehachapi'] windpark = NREL().get_windpark(park_id, 10, 2004) target = windpark.get_target() timestep = 600 measurements = target.get_measurements()[300:500] damaged, indices = NMARDestroyer().destroy(measurements, percentage=.80,\ min_length=10, max_length=100) tloc = (target.longitude, target.latitude) neighbors = windpark.get_turbines()[:-1] nseries = [t.get_measurements()[300:500] for t in neighbors] nlocs = [(t.longitude, t.latitude) for t in neighbors] t_hat = TopologicInterpolation().interpolate(\ damaged, method="topologic",\ timestep=timestep, location=tloc,\ neighbor_series = nseries,\ neighbor_locations = nlocs) misses = MissingDataFinder().find(t_hat, timestep) assert(measurements.shape[0] == t_hat.shape[0]) assert(len(misses) < 1)
import numpy as np import matplotlib.pyplot as plt import math import time import csv from windml.datasets.nrel import NREL from windml.mapping.power_mapping import PowerMapping from sklearn import preprocessing from sklearn.preprocessing import MinMaxScaler from sklearn.metrics import mean_squared_error start = time.clock() park_id = NREL.park_id['cheyenne'] windpark = NREL().get_windpark(park_id, 5, 2004,2006) target = windpark.get_target() feature_window, horizon = 3, 3 mapping = PowerMapping() data_1 = np.array(mapping.get_features_park(windpark, feature_window, horizon)) data_2 = np.array(mapping.get_labels_turbine(target, feature_window, horizon)).reshape(-1,1) #目标多向前取feature_window个点 #data1 = np.array(mapping.get_features_park(windpark, feature_window*2, horizon)) #data2 = np.array(mapping.get_labels_turbine(target, feature_window*2, horizon)).reshape(-1,1) #region = int(data1.shape[1]/(feature_window*2)) #for i in range(region-1): # for j in range(feature_window): # data1=np.delete(data1,[(i+1)*feature_window],axis = 1) #
def test_nrel_repair(self): ds = NREL() target = ds.get_turbine(NREL.park_id['tehachapi'], 2004) measurements = target.get_measurements()[:43504] measurements = NRELRepair().repair(measurements) assert(NRELRepair().validate(measurements))
for i in range(0, len(y_hat)): y = YT[i] mse_y_hat += (y_hat[i] - y)**2 mse_y_hat /= float(len(y_hat)) return mse_y_hat # generating destroyed measurements which are constant over all # methods data = [] for park in parks.keys(): windpark = NREL().get_windpark_nearest(parks[park], 5, 2004) windpark_test = NREL().get_windpark_nearest(parks[park], 5, 2005) target = windpark.get_target() measurements = repair_nrel(target.get_measurements()[:10000]) for i in range(2): damaged_series = {} de = lambda rate: (rate, (destroy( measurements, method=destroy_method, percentage=rate)[0])) dseries = map(de, rates) for rate, series in dseries: damaged_series[rate] = series
citynum = 4 methodnum = 3 target_idx = NREL.park_id[cityname[citynum]] year_from, year_to = 2004, 2006 if sys.version_info < (3, ): mode = 'rU' else: mode = 'r' csvfile = 'cluster/' + method[methodnum] + '200.csv' pick = [] with open(csvfile, mode) as csv_arch: reader = csv.reader(csv_arch, delimiter=',') for row in reader: pick.append(int(row[0])) nrel = NREL() d = 0 turbines = nrel.fetch_nrel_meta_data_all() result = Windpark(target_idx, 0) for row in turbines: turbine_index = np.int(row[0]) if (turbine_index != target_idx): if (pick[turbine_index - 1] == pick[target_idx - 1]): d = d + 1 newturbine = Turbine(row[0], row[1], row[2], row[3], row[4], row[5], row[6]) for y in range(year_from, year_to + 1): measurement = nrel.fetch_nrel_data( row[0], y, ['date', 'corrected_score', 'speed']) if y == year_from: measurements = measurement
""" Topography of a Windpark ------------------------------------------------------------------------- This example shows the topography of a wind park near Tehachapi. The black dots illustrate the locations of turbines. The red dot is the target turbine. """ # Author: Nils A. Treiber <*****@*****.**> # License: BSD 3 clause from windml.datasets.nrel import NREL from windml.visualization.show_coord_topo import show_coord_topo radius = 30 name = 'tehachapi' windpark = NREL().get_windpark(NREL.park_id['tehachapi'], 30, 2004) print "Working on windpark around target turbine", str(windpark.get_target_idx()) print "Plotting windpark ..." title = "Some Turbines of NREL Data Set" show_coord_topo(windpark, title)
def test_get_turbine(self): ds = NREL() target = ds.get_turbine(NREL.park_id['tehachapi'], 2004, 2005) t = target.get_measurements()[0] assert (len(t) == 3)
def test_get_windpark(self): ds = NREL() windpark = ds.get_windpark(NREL.park_id['tehachapi'], 10, 2004, 2005) assert (len(windpark.turbines) == 66)
------------------------------------------------------------------------- This examples shows a statistical overview of the power levels of a wind turbine. """ # Author: Oliver Kramer <*****@*****.**> # License: BSD 3 clause import matplotlib.pyplot as plt import numpy as np import windml.util.features from windml.datasets.nrel import NREL from windml.visualization.show_coord_topo import show_coord_topo ds = NREL() windpark = ds.get_windpark(NREL.park_id['tehachapi'], 2, 2004) X = np.array(windpark.get_powermatrix()) feat, month_power, ramps_up, ramps_down, power_freq =\ windml.util.features.compute_highlevel_features(windpark.turbines[0]) help = [ i * windml.util.features.interval_width for i in range(1, 30 / windml.util.features.interval_width + 1) ] labels = [ str(i - windml.util.features.interval_width) + "-" + str(i) for i in help ] with plt.style.context("fivethirtyeight"):
# Justin P. Heinermann <*****@*****.**> # Stefan Oehmcke <*****@*****.**> # License: BSD 3 clause from __future__ import print_function import math import matplotlib.pyplot as plt from numpy import zeros, float32 from windml.datasets.nrel import NREL from windml.mapping.power_mapping import PowerMapping from sklearn.neighbors import KNeighborsRegressor from sklearn.metrics import mean_squared_error # get windpark and corresponding target. forecast is for the target turbine park_id = NREL.park_id['tehachapi'] windpark = NREL().get_windpark(park_id, 3, 2004, 2005) target = windpark.get_target() # use power mapping for pattern-label mapping. feature_window, horizon = 3, 3 mapping = PowerMapping() X = mapping.get_features_park(windpark, feature_window, horizon) y = mapping.get_labels_turbine(target, feature_window, horizon) # train roughly for the year 2004, test roughly for the year 2005. train_to, test_to = int(math.floor(len(X) * 0.5)), len(X) # train and test only every fifth pattern, for performance. train_step, test_step = 5, 5 X_train = X[:train_to:train_step] y_train = y[:train_to:train_step] X_test = X[train_to:test_to:test_step]
def setUpClass(cls): ds = NREL() cls.turbine = ds.get_turbine(NREL.park_id['tehachapi'], 2004) cls.windpark = ds.get_windpark(NREL.park_id['tehachapi'], 3, 2004)