def test_load_campbell_scientific(): data = bw.load_campbell_scientific( '../datasets/demo/campbell_scientific_demo_data.csv') data1 = bw.load_campbell_scientific( '../datasets/demo/campbell_scientific_demo_data1.csv', dayfirst=True) assert (data['2016-01-09 15:30:00':'2016-01-10 23:50:00'].fillna(-999) == data1['2016-01-09 15:30:00':'2016-01-10 23:50:00'].fillna(-999) ).all().all()
def test_dist(): df = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_data) dist = bw.dist(df[['Spd40mN']], bins=[0, 8, 12, 21], bin_labels=['normal', 'gale', 'storm']) # For distribution of %frequency of wind speeds dist = bw.dist(df.Spd40mN, bins=[0, 8, 12, 21], bin_labels=['normal', 'gale', 'storm']) # For distribution of mean temperature temp_dist = bw.dist(df.T2m, bins=[-10, 4, 12, 18, 30], aggregation_method='mean') # For custom aggregation function def custom_agg(x): return x.mean() + (2 * x.std()) temp_dist = bw.dist(df.T2m, bins=[-10, 4, 12, 18, 30], aggregation_method=custom_agg) # For distribution of mean wind speeds with respect to temperature spd_dist = bw.dist(df.Spd40mN, var_to_bin_against=df.T2m, bins=[-10, 4, 12, 18, 30], bin_labels=['freezing', 'cold', 'mild', 'hot'], aggregation_method='mean')
def test_apply_cleaning(): data = bw.load_campbell_scientific( bw.datasets.demo_campbell_scientific_data) data_clnd2 = bw.apply_cleaning_windographer( data, bw.datasets.demo_windographer_flagging_log2, dayfirst=True) data_clnd3 = bw.apply_cleaning(data, bw.datasets.demo_cleaning_file) data_clnd4 = bw.apply_cleaning(data, '../datasets/demo/demo_cleaning_file2.csv', dayfirst=True) data_clnd5 = bw.apply_cleaning(data, '../datasets/demo/demo_cleaning_file3.csv', dayfirst=True) assert (data_clnd2.drop(['RECORD', 'Site', 'LoggerID'], axis=1).fillna(-999) == data_clnd3.drop( ['RECORD', 'Site', 'LoggerID'], axis=1).fillna(-999)).all().all() assert (data_clnd3.drop(['RECORD', 'Site', 'LoggerID'], axis=1).fillna(-999) == data_clnd4.drop( ['RECORD', 'Site', 'LoggerID'], axis=1).fillna(-999)).all().all() assert (data_clnd3.drop(['RECORD', 'Site', 'LoggerID'], axis=1).fillna(-999) == data_clnd5.drop( ['RECORD', 'Site', 'LoggerID'], axis=1).fillna(-999)).all().all()
def test_freq_table(): df = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data) graph = bw.freq_table(df[['Spd40mN']], df[['Dir38mS']]) graph, tab = bw.freq_table(df.Spd40mN, df.Dir38mS, return_data=True) # Calling with user defined dir_bin labels BUGGY graph, tab = bw.freq_table(df.Spd40mN, df.Dir38mS, direction_bin_array=[0, 90, 160, 210, 360], direction_bin_labels=['lowest', 'lower', 'mid', 'high'], return_data=True) assert (tab.columns == ['lowest','lower','mid','high']).all() tab = bw.freq_table(df.Spd40mN, df.Dir38mS, plot_bins=[0, 3, 6, 9, 12, 15, 41], plot_labels=['0-3 m/s', '4-6 m/s', '7-9 m/s', '10-12 m/s', '13-15 m/s', '15+ m/s'], return_data=True) #Calling with user defined var_bin labels graph, tab = bw.freq_table(df.Spd40mN, df.Dir38mS, var_bin_array=[0, 10, 15, 50], var_bin_labels=['low', 'mid', 'high'], plot_bins=[0, 10, 15, 50], plot_labels=None, return_data=True) tab = bw.freq_table(df.Spd40mN, df.Dir38mS, var_bin_array=[0, 8, 14, 41], var_bin_labels=['low', 'mid', 'high'], direction_bin_array=[0, 90, 130, 200, 360], direction_bin_labels=['northerly', 'easterly', 'southerly', 'westerly'], plot_bins=[0, 8, 14, 41], plot_labels=None, return_data=True) # var_bin_labels=['operating','shutdow','dangerous'], temp_rose, temp_freq_tab = bw.freq_table(df.T2m, df.Dir78mS, var_bin_array=[-10, 0, 10, 20], var_bin_labels=['low', 'mid', 'high'], plot_bins=[-10, 0, 10, 20], plot_labels=None, return_data=True)
def test_export_to_csv(): df = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data) bw.export_csv(df, file_name='export_to_csv') bw.export_csv(df, file_name='export_to_csv_tab.tab', sep='\t')
def test_average_data_by_period(): data = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data) #hourly averages bw.average_data_by_period(data.Spd80mN, period='1H') #hourly average with coverage filtering bw.average_data_by_period(data.Spd80mN, period='1H', coverage_threshold=0.9) bw.average_data_by_period(data.Spd80mN, period='1H', coverage_threshold=1) #return coverage with filtering bw.average_data_by_period(data.Spd80mN, period='1H', coverage_threshold=0.9, return_coverage=True) # return coverage without filtering bw.average_data_by_period(data.Spd80mN, period='1H', return_coverage=True) #monthly averages bw.average_data_by_period(data.Spd80mN, period='1M') #hourly average with coverage filtering bw.average_data_by_period(data.Spd80mN, period='1M', coverage_threshold=0.9) bw.average_data_by_period(data.Spd80mN, period='1M', coverage_threshold=1) #return coverage with filtering bw.average_data_by_period(data.Spd80mN, period='1M', coverage_threshold=0.9, return_coverage=True) # return coverage without filtering bw.average_data_by_period(data.Spd80mN, period='1M', return_coverage=True) #weekly averages bw.average_data_by_period(data.Spd80mN, period='2W') #hourly average with coverage filtering bw.average_data_by_period(data.Spd80mN, period='2W', coverage_threshold=0.9) bw.average_data_by_period(data.Spd80mN, period='2W', coverage_threshold=1) #return coverage with filtering bw.average_data_by_period(data.Spd80mN, period='2W', coverage_threshold=0.9, return_coverage=True) # return coverage without filtering bw.average_data_by_period(data.Spd80mN, period='2W', return_coverage=True)
def test_average_data_by_period(): data = bw.load_campbell_scientific( bw.datasets.demo_campbell_scientific_site_data) bw.average_data_by_period(data[['Spd80mN']], period='1H') # hourly averages bw.average_data_by_period(data.Spd80mN, period='1H') # hourly average with coverage filtering bw.average_data_by_period(data.Spd80mN, period='1H', coverage_threshold=0.9) bw.average_data_by_period(data.Spd80mN, period='1H', coverage_threshold=1) # return coverage with filtering bw.average_data_by_period(data.Spd80mN, period='1H', coverage_threshold=0.9, return_coverage=True) # return coverage without filtering bw.average_data_by_period(data.Spd80mN, period='1H', return_coverage=True) # monthly averages bw.average_data_by_period(data.Spd80mN, period='1M') # hourly average with coverage filtering bw.average_data_by_period(data.Spd80mN, period='1M', coverage_threshold=0.9) bw.average_data_by_period(data.Spd80mN, period='1M', coverage_threshold=1) # return coverage with filtering bw.average_data_by_period(data.Spd80mN, period='1M', coverage_threshold=0.9, return_coverage=True) # return coverage without filtering bw.average_data_by_period(data.Spd80mN, period='1M', return_coverage=True) # weekly averages bw.average_data_by_period(data.Spd80mN, period='2W') # hourly average with coverage filtering bw.average_data_by_period(data.Spd80mN, period='2W', coverage_threshold=0.9) bw.average_data_by_period(data.Spd80mN, period='2W', coverage_threshold=1) # return coverage with filtering bw.average_data_by_period(data.Spd80mN, period='2W', coverage_threshold=0.9, return_coverage=True) # return coverage without filtering bw.average_data_by_period(data.Spd80mN, period='2W', return_coverage=True) average_monthly_speed = bw.average_data_by_period(dummy_data_frame(), '1M') average_annual_speed = bw.average_data_by_period(dummy_data_frame(), '1As') # round annual wind speed print(round(average_annual_speed, 2)) # test average wind speed for each month for i in range(0, 11): assert average_monthly_speed.iloc[i].item() == i + 1 # test average annual wind speed assert round(average_annual_speed.iloc[0].item(), 1) == 6.5
def test_TI_twelve_by_24(): df = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data) bw.TI.twelve_by_24(df[['Spd60mN']], df[['Spd60mNStd']]) bw.TI.twelve_by_24(df.Spd60mN, df.Spd60mNStd) bw.TI.twelve_by_24(df.Spd60mN, df.Spd60mNStd, return_data=True) bw.TI.twelve_by_24(df.Spd60mN, df.Spd60mNStd, return_data=True, var_name_label='Speed 60 m N m/s') bw.TI.twelve_by_24(df.Spd60mN, df.Spd60mNStd, var_name_label='Speed 60 m N m/s') bw.TI.twelve_by_24(df.Spd40mN, df.Spd40mNStd) assert 1 == 1
def test_apply_cleaning_windographer(): data = bw.load_campbell_scientific( bw.datasets.demo_campbell_scientific_data) data_clnd = bw.apply_cleaning_windographer( data, bw.datasets.demo_windographer_flagging_log) data_clnd2 = bw.apply_cleaning_windographer( data, bw.datasets.demo_windographer_flagging_log2, dayfirst=True) assert (data_clnd2.fillna(-999) == data_clnd.fillna(-999)).all().all()
def test_plot_timeseries(): df = bw.load_campbell_scientific( bw.datasets.demo_campbell_scientific_site_data) graph = bw.plot_timeseries(df[['Spd40mN', 'Spd60mS', 'T2m']]) graph = bw.plot_timeseries(df.Spd40mN, date_from='2016-04-21') graph = bw.plot_timeseries(df.Spd40mN, date_from='2016-01-21', date_to='2016-02-28') assert True
def test_freq_table(): df = bw.load_campbell_scientific( bw.datasets.demo_campbell_scientific_site_data) temp_rose, temp_freq_tab = bw.freq_table( df.T2m, df.Dir78mS, var_bin_array=[-10, 0, 10, 20], var_bin_labels=['low', 'mid', 'high'], return_data=True) assert 1 == 1
def test_dist_matrix_by_direction_sector(): df = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data) bw.dist_matrix_by_dir_sector(var_series=df.Spd80mN, var_to_bin_by_series=df.Spd80mN, direction_series=df.Dir78mS, aggregation_method='count') matrix = bw.dist_matrix_by_dir_sector(df.Spd40mN, df.T2m, df.Dir38mS, var_to_bin_by_array=[-8, -5, 5, 10, 15, 20, 26], direction_bin_array=[0, 90, 180, 270, 360], direction_bin_labels=['north', 'east', 'south', 'west']) matrix = bw.dist_matrix_by_dir_sector(df.Spd40mN, df.T2m, df.Dir38mS, var_to_bin_by_array=[-8, -5, 5, 10, 15, 20, 26], sectors=8) assert True
def test_coverage(): data = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data) # hourly coverage data_hourly = bw.coverage(data[['Spd80mN']], period='1H') data_hourly = bw.coverage(data.Spd80mN, period='1H') # monthly_coverage data_monthly = bw.coverage(data.Spd80mN, period='1M') # monthly_coverage of variance data_monthly= bw.coverage(data.Spd80mN, period='1M', aggregation_method='var') assert True
def test_dist_by_dir_sector(): df = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data) rose = bw.dist_by_dir_sector(df[['Spd40mN']], df[['Dir38mS']]) rose = bw.dist_by_dir_sector(df.Spd40mN, df.Dir38mS) rose, distribution = bw.dist_by_dir_sector(df.Spd40mN, df.Dir38mS, direction_bin_array=[0, 90, 130, 200, 360], direction_bin_labels=['northerly', 'easterly', 'southerly', 'westerly'], return_data=True) rose, distribution = bw.dist_by_dir_sector(df.Spd40mN, df.Dir38mS, aggregation_method='std', return_data=True)
def test_TI_by_speed(): df = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data) TI_by_speed = bw.TI.by_speed(df[['Spd80mN']], df[['Spd80mNStd']]) TI_by_speed = bw.TI.by_speed(df.Spd80mN, df.Spd80mNStd) #60 percentile TI_by_speed_60 = bw.TI.by_speed(df.Spd80mN, df.Spd80mNStd, percentile=60, return_data=True) #bin_array TI_by_speed = bw.TI.by_speed(df.Spd80mN, df.Spd80mNStd, speed_bin_array=[0, 10, 14, 51], speed_bin_labels=['low', 'mid', 'high'], return_data=True) # assert TI_by_speed.index == ['low', 'mid', 'high'] assert True
def test_get_data_resolution(): import warnings series1 = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data)['Spd80mS'].index assert bw._get_data_resolution(series1).seconds == 600 series2 = pd.date_range('2010-01-01', periods=150, freq='H') assert bw._get_data_resolution(series2).seconds == 3600 #hourly series with one instance where difference between adjacent timestamps is 10 min series3 = pd.date_range('2010-04-15', '2010-05-01', freq='H').union(pd.date_range('2010-05-01 00:10:00', periods=20, freq='H')) with warnings.catch_warnings(record=True) as w: assert bw._get_data_resolution(series3).seconds == 3600 assert len(w) == 1
def test_twelve_by_24(): df = bw.load_campbell_scientific( bw.datasets.demo_campbell_scientific_site_data) graph, table12x24 = bw.twelve_by_24(df.Spd40mN, var_name_label='wind speed', return_data=True) graph = bw.twelve_by_24(df.PrcpTot, aggregation_method='sum') def custom_agg(x): return x.mean() + (2 * x.std()) graph, table12x24 = bw.twelve_by_24(df.PrcpTot, aggregation_method=custom_agg, return_data=True) assert True
def test_calc_air_density(): data = bw.load_campbell_scientific(bw.datasets.demo_campbell_scientific_site_data) bw.calc_air_density(data[['T2m']], data[['P2m']]) bw.calc_air_density(data.T2m, data.P2m) bw.calc_air_density(data.T2m, data.P2m, elevation_ref=0, elevation_site=200) with pytest.raises(TypeError) as except_info: bw.calc_air_density(15, 1013, elevation_site=200) assert str(except_info.value) == 'elevation_ref should be a number' with pytest.raises(TypeError) as except_info: bw.calc_air_density(15, 1013, elevation_ref=200) assert str(except_info.value) == 'elevation_site should be a number' assert abs(bw.calc_air_density(15, 1013) - 1.225) < 1e-3 assert abs(bw.calc_air_density(15, 1013, elevation_ref=0, elevation_site=200) - 1.203) < 1e-3 assert (abs(bw.calc_air_density(pd.Series([15, 12.5, -5, 23]), pd.Series([1013, 990, 1020, 900])) - pd.Series([1.225, 1.208, 1.326, 1.059])) < 1e-3).all()
def test_sector_ratio_by_sector(): data = bw.load_csv(bw.datasets.shell_flats_80m_csv) bw.SectorRatio.by_sector(data['WS70mA100NW_Avg'], data['WS70mA100SE_Avg'], data['WD50mW200PNW_VAvg'], sectors=72, boom_dir_1=315, boom_dir_2=135, return_data=True)[1] data = bw.load_campbell_scientific(bw.datasets.demo_site_data) bw.SectorRatio.by_sector(data.Spd40mN, data.Spd60mN, wdir=data.Dir38mS, direction_bin_array=[0, 45, 135, 180, 220, 360], boom_dir_1=160, boom_dir_2=340) assert True
def test_export_tab_file(): df = bw.load_campbell_scientific( bw.datasets.demo_campbell_scientific_site_data) graph, tab = bw.freq_table(df.Spd40mN, df.Dir38mS, return_data=True) bw.export_tab_file(tab, 80, 10, 10, file_name='export_tab_file.tab')
def test_export_tab_file(): df = bw.load_campbell_scientific( bw.datasets.demo_campbell_scientific_site_data) graph, tab = bw.freq_table(df.Spd40mN, df.Dir38mS, return_data=True) bw.export_tab_file(tab, name='campbell_tab_file', lat=10, long=10)
def test_offset_timestamps(): series1 = bw.load_campbell_scientific( bw.datasets.demo_campbell_scientific_site_data) # sending index with no start end bw.offset_timestamps(series1.index, offset='90min') # sending index with start end op = bw.offset_timestamps(series1.index, offset='2min', date_from='2016-01-01 00:10:00') assert op[0] == pd.to_datetime('2016-01-01 00:00:00') assert op[1] == pd.to_datetime('2016-01-01 00:12:00') op = bw.offset_timestamps(series1.index, '2min', date_to='2016-01-01 00:30:00') assert op[3] == pd.to_datetime('2016-01-01 00:32:00') assert op[4] == pd.to_datetime('2016-01-01 00:40:00') op = bw.offset_timestamps(series1.index, '3min', date_from='2016-01-01 00:10:00', date_to='2016-01-01 00:30:00') assert op[0] == pd.to_datetime('2016-01-01 00:00:00') assert op[1] == pd.to_datetime('2016-01-01 00:13:00') assert op[5] == pd.to_datetime('2016-01-01 00:50:00') op = bw.offset_timestamps(series1.index, '10min', date_from='2016-01-01 00:10:00', date_to='2016-01-01 00:30:00') assert op[0] == series1.index[0] assert op[1] == series1.index[2] # sending DataFrame with datetime index op = bw.offset_timestamps(series1, offset='-10min', date_from='2016-01-01 00:20:00') assert (op.iloc[1] == series1.iloc[1]).all() assert len(op) + 1 == len(series1) assert (op.loc['2016-01-01 00:40:00'] == series1.loc['2016-01-01 00:50:00'] ).all() op = bw.offset_timestamps(series1, offset='-10min', date_from='2016-01-01 00:20:00', overwrite=True) assert (op.loc['2016-01-01 00:10:00'] == series1.loc['2016-01-01 00:20:00'] ).all() op = bw.offset_timestamps(series1, '10min', date_from='2016-01-01 00:10:00', date_to='2016-01-01 00:30:00') assert (op.loc['2016-01-01 00:20:00'] == series1.loc['2016-01-01 00:10:00'] ).all() assert (op.loc['2016-01-01 00:40:00'] == series1.loc['2016-01-01 00:40:00'] ).all() assert len(op) + 1 == len(series1) op = bw.offset_timestamps(series1, '10min', date_from='2016-01-01 00:10:00', date_to='2016-01-01 00:30:00', overwrite=True) assert (op.loc['2016-01-01 00:40:00'] == series1.loc['2016-01-01 00:30:00'] ).all() assert len(op) + 1 == len(series1) # sending Series with datetime index op = bw.offset_timestamps(series1.Spd60mN, offset='-10min', date_from='2016-01-01 00:20:00') assert (op.iloc[1] == series1.Spd60mN.iloc[1]).all() assert len(op) + 1 == len(series1.Spd60mN) assert (op.loc['2016-01-01 00:40:00'] == series1.Spd60mN.loc['2016-01-01 00:50:00']).all() op = bw.offset_timestamps(series1.Spd60mN, offset='-10min', date_from='2016-01-01 00:20:00', overwrite=True) assert (op.loc['2016-01-01 00:10:00'] == series1.Spd60mN.loc['2016-01-01 00:20:00']).all() op = bw.offset_timestamps(series1.Spd60mN, '10min', date_from='2016-01-01 00:10:00', date_to='2016-01-01 00:30:00') assert (op.loc['2016-01-01 00:20:00'] == series1.Spd60mN.loc['2016-01-01 00:10:00']).all() assert (op.loc['2016-01-01 00:40:00'] == series1.Spd60mN.loc['2016-01-01 00:40:00']).all() assert len(op) + 1 == len(series1.Spd60mN) op = bw.offset_timestamps(series1.Spd60mN, '10min', date_from='2016-01-01 00:10:00', date_to='2016-01-01 00:30:00', overwrite=True) assert (op.loc['2016-01-01 00:40:00'] == series1.Spd60mN.loc['2016-01-01 00:30:00']).all() assert len(op) + 1 == len(series1.Spd60mN)