def make_m3_figs(forecaster_dict, nick, path=''):
    '''Makes m3 tables for each forecaster. Uses methods from the runmatrix module.

    :param forecaster_dict:
    :param nick:            is how I can select relevant warnings for this forecaster
    :param product_folder:  location where plots (endproduct) is saved
    :param project_folder:  many files generated; make project folder in product folder
    :return:
    '''

    from runvarsomdata import runmatrix as rm

    f = forecaster_dict[nick]
    # select only warnings for this forecaster
    one_forecaster_warnings = f.warnings

    # prepare dataset
    pickle_data_set_file_name = '{0}runforefollow data set {1}.pickle'.format(env.local_storage, f.observer_id)
    rm.pickle_data_set(one_forecaster_warnings, pickle_data_set_file_name, use_ikke_gitt=False)
    forecaster_data_set = mp.unpickle_anything(pickle_data_set_file_name)

    # prepare the m3 elementes (cell contents)
    pickle_m3_v2_file_name = '{0}runforefollow m3 {1}.pickle'.format(env.local_storage, f.observer_id)
    rm.pickle_M3(forecaster_data_set, 'matrixconfiguration.v2.csv', pickle_m3_v2_file_name)
    m3_v2_elements = mp.unpickle_anything(pickle_m3_v2_file_name)

    # plot
    plot_m3_v2_file_name = '{0}{1}_m3'.format(path, f.observer_id)
    rm.plot_m3_v2(m3_v2_elements, plot_m3_v2_file_name)

    return
def get_2016_17_warnings(how_to_get_data='Get new and dont pickle', pickle_file_name=None):
    '''

    :param hot_to_get_data:     'Get new and dont pickle', 'Get new and save pickle' or 'Load pickle'
    :param file_name:           Not needed if no pickles involved
    :return:
    '''

    if 'Get new' in how_to_get_data:

        from_date = dt.date(2016, 11, 30)
        #to_date = dt.date.today()
        to_date = dt.date(2017, 5, 31)

        #region_ids = [3012, 3013]
        region_ids = gm.get_forecast_regions(year='2016-17')

        all_warnings = []
        for region_id in region_ids:
            all_warnings += gd.get_forecasted_dangers(region_id, from_date, to_date, include_ikke_vurdert=False)

        # Sort by date
        all_warnings = sorted(all_warnings, key=lambda AvalancheDanger: AvalancheDanger.date)

        if 'and save pickle' in how_to_get_data:
            mp.pickle_anything(all_warnings, pickle_file_name)

    elif 'Load pickle' in how_to_get_data:
        all_warnings = mp.unpickle_anything(pickle_warnings_file_name)

    else:
        all_warnings = 'No valid data retrival method given in get_2015_16_warnings.'

    return all_warnings
Beispiel #3
0
def select_messages_with_more(pickle_warnings_file_name):
    """Method selects unique messages and adds the english name to them (english name that appeared on the first
    occurrence), adds the danger levels, main causes, causes, and avalanche types that are used to this main
    message. There is also a count of how many times the main text has occurred.

    :param pickle_warnings_file_name    filename to where the pickle file with the warnings are located
    :return main_messages               list of MainMessage objects ordered by most occurrences first
    """

    warnings = mp.unpickle_anything(pickle_warnings_file_name)
    main_messages_in_admin = _messages_found_in_admin(
        '{}mainmessages.20180704.csv'.format(env.input_folder))
    main_messages = []

    for w in warnings:

        message_no = w.main_message_no
        message_no = fe.text_cleanup(message_no)

        # if no content
        if 'Ikke vurdert.' in message_no:
            continue

        if message_no == '':
            continue

        if message_no in main_messages_in_admin:
            continue

        # if message exists in list append changes to it
        if _message_no_is_in_list(message_no, main_messages):
            m = _get_main_message_object(message_no, main_messages)
            m.add_occurrence()
            m.add_to_danger_levels(w.danger_level)

            for p in w.avalanche_problems:
                m.add_to_problems(p.problem)
                m.add_to_cause_names(p.cause_name)
                m.add_to_aval_types(p.aval_type)
                m.add_to_aval_triggers(p.aval_trigger)

        # if not append a new one
        else:
            new_m = MainMessage(message_no)
            new_m.add_main_message_en(w.main_message_en)
            new_m.add_to_danger_levels(w.danger_level)

            for p in w.avalanche_problems:
                new_m.add_to_problems(p.problem)
                new_m.add_to_cause_names(p.cause_name)
                new_m.add_to_aval_types(p.aval_type)
                new_m.add_to_aval_triggers(p.aval_trigger)

            main_messages.append(new_m)

    # sort on main_message_no
    main_messages.sort(key=lambda m: m.main_message_no, reverse=False)

    # sort on occurrences
    # main_messages.sort(key=lambda m: m.occurrences, reverse=True)

    return main_messages
Beispiel #4
0
            aval_types, m.main_message_no, m.main_message_en)

        l.write(s)
    l.close()


if __name__ == "__main__":

    year = '2017-18'
    regions = gm.get_forecast_regions(year=year)
    date_from, date_to = gm.get_dates_from_season(year=year)

    # file names
    file_name_for_warnings_pickle = '{0}{1}'.format(
        env.local_storage, 'runmainmessage warnings.pickle')
    file_name_for_main_messages_pickle = '{0}{1}'.format(
        env.local_storage, 'runmainmessage main messages.pickle')
    file_name_for_main_messages_csv = '{0}{1}'.format(
        env.output_folder, 'Alle hovedbudskap {}.csv'.format(year))

    ##### pickle the warnings and dataset with main messages
    # pickle_warnings(regions, date_from, date_to, file_name_for_warnings_pickle)
    main_messages = select_messages_with_more(file_name_for_warnings_pickle)
    mp.pickle_anything(main_messages, file_name_for_main_messages_pickle)
    main_messages = mp.unpickle_anything(file_name_for_main_messages_pickle)

    # write to file
    save_main_messages_to_file(main_messages, file_name_for_main_messages_csv)

    pass
Beispiel #5
0
    pickle_m3_file_name = '{0}{1}'.format(thisenv.local_storage,
                                          'runForMatix m3.pickle')
    plot_m3_file_name = '{0}m3 {1}-{2}'.format(thisenv.plot_folder,
                                               date_from[0:4], date_to[2:4])

    pickle_m3_v2_file_name = '{0}{1}'.format(thisenv.local_storage,
                                             'runForMatix m3.v2.pickle')
    plot_m3_v2_file_name = '{0}m3 {1}-{2}.v2'.format(thisenv.plot_folder,
                                                     date_from[0:4],
                                                     date_to[2:4])

    ######################################################################################
    ####### With something pickled you don't need to read on the api all the time ########
    #
    pickle_warnings(regions, date_from, date_to, pickle_warnings_file_name)
    warnings = mp.unpickle_anything(pickle_warnings_file_name)
    pickle_data_set(warnings, pickle_data_set_file_name, use_ikke_gitt=False)
    data_set = mp.unpickle_anything(pickle_data_set_file_name)
    #
    ######################################################################################

    # plot_all_histograms(data_set, date_from, date_to, warnings)

    # pickle_M3(data_set, 'matrixconfiguration.csv', pickle_m3_file_name)
    # m3_elements = mp.unpickle_anything(pickle_m3_file_name)
    # plot_m3(m3_elements, plot_m3_file_name, file_ext=".png")

    pickle_M3(data_set, 'matrixconfiguration.v2.csv', pickle_m3_v2_file_name)
    m3_v2_elements = mp.unpickle_anything(pickle_m3_v2_file_name)
    plot_m3_v2(m3_v2_elements, plot_m3_v2_file_name)