Example #1
0
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()
Example #2
0
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')
Example #3
0
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()
Example #4
0
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)
Example #5
0
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')
Example #6
0
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)
Example #7
0
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
Example #8
0
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
Example #9
0
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()
Example #10
0
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
Example #11
0
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
Example #12
0
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
Example #13
0
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
Example #14
0
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)
Example #15
0
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
Example #16
0
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
Example #17
0
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
Example #18
0
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()
Example #19
0
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
Example #20
0
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')
Example #21
0
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)
Example #22
0
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)