Exemplo n.º 1
0
def generate_table(main, table):
    def data_received(keywords_freq_files, keywords_stats_files):
        if keywords_freq_files:
            table.clear_table()

            table.settings = copy.deepcopy(main.settings_custom)

            text_test_significance = settings['generation_settings'][
                'test_significance']
            text_measure_effect_size = settings['generation_settings'][
                'measure_effect_size']

            (text_test_stat, text_p_value,
             text_bayes_factor) = main.settings_global['tests_significance'][
                 'keywords'][text_test_significance]['cols']
            text_effect_size = main.settings_global['measures_effect_size'][
                'keywords'][text_measure_effect_size]['col']

            table.blockSignals(True)
            table.setSortingEnabled(False)
            table.setUpdatesEnabled(False)

            # Insert columns (Files)
            table.insert_col(table.columnCount() - 1,
                             main.tr(f'[{ref_file["name"]}]\nFrequency'),
                             num=True,
                             pct=True,
                             cumulative=True)

            for file in files:
                table.insert_col(table.columnCount() - 1,
                                 main.tr(f'[{file["name"]}]\nFrequency'),
                                 num=True,
                                 pct=True,
                                 cumulative=True,
                                 breakdown=True)

                if text_test_stat:
                    table.insert_col(
                        table.columnCount() - 1,
                        main.tr(f'[{file["name"]}]\n{text_test_stat}'),
                        num=True,
                        breakdown=True)

                table.insert_col(table.columnCount() - 1,
                                 main.tr(f'[{file["name"]}]\n{text_p_value}'),
                                 num=True,
                                 breakdown=True)

                if text_bayes_factor:
                    table.insert_col(
                        table.columnCount() - 1,
                        main.tr(f'[{file["name"]}]\n{text_bayes_factor}'),
                        num=True,
                        breakdown=True)

                table.insert_col(
                    table.columnCount() - 1,
                    main.tr(f'[{file["name"]}]\n{text_effect_size}'),
                    num=True,
                    breakdown=True)

            # Insert columns (Total)
            table.insert_col(table.columnCount() - 1,
                             main.tr(f'Total\nFrequency'),
                             num=True,
                             pct=True,
                             cumulative=True)

            if text_test_stat:
                table.insert_col(table.columnCount() - 1,
                                 main.tr(f'Total\n{text_test_stat}'),
                                 num=True)

            table.insert_col(table.columnCount() - 1,
                             main.tr(f'Total\n{text_p_value}'),
                             num=True)

            if text_bayes_factor:
                table.insert_col(table.columnCount() - 1,
                                 main.tr(f'Total\n{text_bayes_factor}'),
                                 num=True)

            table.insert_col(table.columnCount() - 1,
                             main.tr(f'Total\n{text_effect_size}'),
                             num=True)

            # Sort by p-value of the first file
            table.sortByColumn(
                table.find_col(
                    main.tr(f'[{files[0]["name"]}]\n{text_p_value}')),
                Qt.AscendingOrder)

            cols_freq = table.find_cols(main.tr('\nFrequency'))

            if text_test_stat:
                cols_test_stat = table.find_cols(
                    main.tr(f'\n{text_test_stat}'))

            cols_p_value = table.find_cols(main.tr('\np-value'))

            if text_bayes_factor:
                cols_bayes_factor = table.find_cols(main.tr('\nBayes Factor'))

            cols_effect_size = table.find_cols(f'\n{text_effect_size}')
            col_number_files_found = table.find_col(
                main.tr('Number of\nFiles Found'))

            len_files = len(files)

            table.setRowCount(len(keywords_freq_files))

            for i, (keyword, stats_files) in enumerate(
                    wordless_sorting.sorted_keywords_stats_files(
                        keywords_stats_files)):
                keyword_freq_files = keywords_freq_files[keyword]

                # Rank
                table.set_item_num_int(i, 0, -1)

                # Keywords
                table.setItem(i, 1,
                              wordless_table.Wordless_Table_Item(keyword))

                # Frequency
                for j, freq in enumerate(keyword_freq_files):
                    table.set_item_num_cumulative(i, cols_freq[j], freq)

                for j, (test_stat, p_value, bayes_factor,
                        effect_size) in enumerate(stats_files):
                    # Test Statistic
                    if text_test_stat:
                        table.set_item_num_float(i, cols_test_stat[j],
                                                 test_stat)

                    # p-value
                    table.set_item_num_float(i, cols_p_value[j], p_value)

                    # Bayes Factor
                    if text_bayes_factor:
                        table.set_item_num_float(i, cols_bayes_factor[j],
                                                 bayes_factor)

                    # Effect Size
                    table.set_item_num_float(i, cols_effect_size[j],
                                             effect_size)

                # Number of Files Found
                table.set_item_num_pct(
                    i, col_number_files_found,
                    len([freq for freq in keyword_freq_files[1:-1] if freq]),
                    len_files)

            table.blockSignals(False)
            table.setSortingEnabled(True)
            table.setUpdatesEnabled(True)

            table.toggle_pct()
            table.toggle_cumulative()
            table.toggle_breakdown()
            table.update_ranks()
            table.update_items_width()

            table.itemChanged.emit(table.item(0, 0))

            wordless_msg.wordless_msg_generate_table_success(main)
        else:
            wordless_msg_box.wordless_msg_box_no_results(main)

            wordless_msg.wordless_msg_generate_table_error(main)

        dialog_progress.accept()

    settings = main.settings_custom['keywords']
    files = main.wordless_files.get_selected_files()

    if wordless_checking_file.check_files_on_loading(main, files):
        ref_file = main.wordless_files.find_file_by_name(
            settings['generation_settings']['ref_file'], selected_only=True)

        files = [
            file for file in main.wordless_files.get_selected_files()
            if file != ref_file
        ]

        if files:
            dialog_progress = wordless_dialog_misc.Wordless_Dialog_Progress_Process_Data(
                main)

            worker_process_data = Wordless_Worker_Process_Data_Keywords_Table(
                main, dialog_progress, data_received)
            thread_process_data = wordless_threading.Wordless_Thread_Process_Data(
                worker_process_data)

            thread_process_data.start()

            dialog_progress.exec_()

            thread_process_data.quit()
            thread_process_data.wait()
        else:
            wordless_msg_box.wordless_msg_box_missing_observed_file(main)

            wordless_msg.wordless_msg_generate_table_error(main)
    else:
        wordless_msg.wordless_msg_generate_table_error(main)
Exemplo n.º 2
0
def generate_fig(main):
    def data_received(keywords_freq_files, keywords_stats_files):
        if keywords_freq_files:
            text_test_significance = settings['generation_settings'][
                'test_significance']
            text_measure_effect_size = settings['generation_settings'][
                'measure_effect_size']

            (text_test_stat, text_p_value,
             text_bayes_factor) = main.settings_global['tests_significance'][
                 'keywords'][text_test_significance]['cols']
            text_effect_size = main.settings_global['measures_effect_size'][
                'keywords'][text_measure_effect_size]['col']

            if settings['fig_settings']['use_data'] == main.tr('Frequency'):
                wordless_fig_freq.wordless_fig_freq_ref(
                    main,
                    keywords_freq_files,
                    ref_file=ref_file,
                    settings=settings['fig_settings'],
                    label_x=main.tr('Keywords'))
            else:
                if settings['fig_settings']['use_data'] == text_test_stat:
                    keywords_stat_files = {
                        keyword: numpy.array(stats_files)[:, 0]
                        for keyword, stats_files in
                        keywords_stats_files.items()
                    }

                    label_y = text_test_stat
                elif settings['fig_settings']['use_data'] == text_p_value:
                    keywords_stat_files = {
                        keyword: numpy.array(stats_files)[:, 1]
                        for keyword, stats_files in
                        keywords_stats_files.items()
                    }

                    label_y = text_p_value
                elif settings['fig_settings']['use_data'] == text_bayes_factor:
                    keywords_stat_files = {
                        keyword: numpy.array(stats_files)[:, 2]
                        for keyword, stats_files in
                        keywords_stats_files.items()
                    }

                    label_y = text_bayes_factor
                elif settings['fig_settings']['use_data'] == text_effect_size:
                    keywords_stat_files = {
                        keyword: numpy.array(stats_files)[:, 3]
                        for keyword, stats_files in
                        keywords_stats_files.items()
                    }

                    label_y = text_effect_size

                wordless_fig_stat.wordless_fig_stat_ref(
                    main,
                    keywords_stat_files,
                    ref_file=ref_file,
                    settings=settings['fig_settings'],
                    label_y=label_y)

            wordless_msg.wordless_msg_generate_fig_success(main)
        else:
            wordless_msg_box.wordless_msg_box_no_results(main)

            wordless_msg.wordless_msg_generate_fig_error(main)

        dialog_progress.accept()

        if keywords_freq_files:
            wordless_fig.show_fig()

    settings = main.settings_custom['keywords']
    files = main.wordless_files.get_selected_files()

    if wordless_checking_file.check_files_on_loading(main, files):
        ref_file = main.wordless_files.find_file_by_name(
            settings['generation_settings']['ref_file'], selected_only=True)

        files = [
            file for file in main.wordless_files.get_selected_files()
            if file != ref_file
        ]

        if files:
            dialog_progress = wordless_dialog_misc.Wordless_Dialog_Progress_Process_Data(
                main)

            worker_process_data = Wordless_Worker_Process_Data_Keywords_Fig(
                main, dialog_progress, data_received)
            thread_process_data = wordless_threading.Wordless_Thread_Process_Data(
                worker_process_data)

            thread_process_data.start()

            dialog_progress.exec_()

            thread_process_data.quit()
            thread_process_data.wait()
        else:
            wordless_msg_box.wordless_msg_box_missing_observed_file(main)

            wordless_msg.wordless_msg_generate_fig_error(main)
    else:
        wordless_msg.wordless_msg_generate_fig_error(main)
Exemplo n.º 3
0
def generate_table(main, table):
    def update_gui(keywords_freq_files, keywords_stats_files):
        if keywords_freq_files:
            table.clear_table()

            table.settings = copy.deepcopy(main.settings_custom)

            text_test_significance = settings['generation_settings']['test_significance']
            text_measure_effect_size = settings['generation_settings']['measure_effect_size']

            (text_test_stat,
             text_p_value,
             text_bayes_factor) = main.settings_global['tests_significance']['keyword'][text_test_significance]['cols']
            text_effect_size =  main.settings_global['measures_effect_size']['keyword'][text_measure_effect_size]['col']

            # Insert columns (files)
            table.insert_col(table.columnCount() - 2,
                             main.tr(f'[{ref_file["name"]}]\nFrequency'),
                             is_int = True, is_cumulative = True)
            table.insert_col(table.columnCount() - 2,
                             main.tr(f'[{ref_file["name"]}]\nFrequency %'),
                             is_pct = True, is_cumulative = True)

            for file in files:
                table.insert_col(table.columnCount() - 2,
                                 main.tr(f'[{file["name"]}]\nFrequency'),
                                 is_int = True, is_cumulative = True, is_breakdown = True)
                table.insert_col(table.columnCount() - 2,
                                 main.tr(f'[{file["name"]}]\nFrequency %'),
                                 is_pct = True, is_cumulative = True, is_breakdown = True)

                if text_test_stat:
                    table.insert_col(table.columnCount() - 2,
                                     main.tr(f'[{file["name"]}]\n{text_test_stat}'),
                                     is_float = True, is_breakdown = True)

                table.insert_col(table.columnCount() - 2,
                                 main.tr(f'[{file["name"]}]\n{text_p_value}'),
                                 is_float = True, is_breakdown = True)

                if text_bayes_factor:
                    table.insert_col(table.columnCount() - 2,
                                     main.tr(f'[{file["name"]}]\n{text_bayes_factor}'),
                                     is_float = True, is_breakdown = True)

                table.insert_col(table.columnCount() - 2,
                                 main.tr(f'[{file["name"]}]\n{text_effect_size}'),
                                 is_float = True, is_breakdown = True)

            # Insert columns (total)
            table.insert_col(table.columnCount() - 2,
                             main.tr('Total\nFrequency'),
                             is_int = True, is_cumulative = True)
            table.insert_col(table.columnCount() - 2,
                             main.tr('Total\nFrequency %'),
                             is_pct = True, is_cumulative = True)

            if text_test_stat:
                table.insert_col(table.columnCount() - 2,
                                 main.tr(f'Total\n{text_test_stat}'),
                                 is_float = True)

            table.insert_col(table.columnCount() - 2,
                             main.tr(f'Total\n{text_p_value}'),
                             is_float = True)

            if text_bayes_factor:
                table.insert_col(table.columnCount() - 2,
                                 main.tr(f'Total\n{text_bayes_factor}'),
                                 is_float = True)

            table.insert_col(table.columnCount() - 2,
                             main.tr(f'Total\n{text_effect_size}'),
                             is_float = True)

            # Sort by p-value of the first file
            table.horizontalHeader().setSortIndicator(
                table.find_col(main.tr(f'[{files[0]["name"]}]\n{text_p_value}')),
                Qt.AscendingOrder
            )

            table.blockSignals(True)
            table.setSortingEnabled(False)
            table.setUpdatesEnabled(False)

            cols_freq = table.find_cols(main.tr('\nFrequency'))
            cols_freq_pct = table.find_cols(main.tr('\nFrequency %'))

            for col in cols_freq_pct:
                cols_freq.remove(col)

            if text_test_stat:
                cols_test_stat = table.find_cols(main.tr(f'\n{text_test_stat}'))

            cols_p_value = table.find_cols(main.tr('\np-value'))

            if text_bayes_factor:
                cols_bayes_factor = table.find_cols(main.tr('\nBayes Factor'))

            cols_effect_size = table.find_cols(f'\n{text_effect_size}')
            col_files_found = table.find_col(main.tr('Number of\nFiles Found'))
            col_files_found_pct = table.find_col(main.tr('Number of\nFiles Found %'))

            freq_totals = numpy.array(list(keywords_freq_files.values())).sum(axis = 0)
            len_files = len(files)

            table.setRowCount(len(keywords_freq_files))

            for i, (keyword, stats_files) in enumerate(wordless_sorting.sorted_keywords_stats_files(keywords_stats_files)):
                freq_files = keywords_freq_files[keyword]

                # Rank
                table.set_item_num(i, 0, -1)

                # Keyword
                table.setItem(i, 1, wordless_table.Wordless_Table_Item(keyword))

                # Frequency
                for j, freq in enumerate(freq_files):
                    table.set_item_num(i, cols_freq[j], freq)
                    table.set_item_num(i, cols_freq_pct[j], freq, freq_totals[j])

                for j, (test_stat, p_value, bayes_factor, effect_size) in enumerate(stats_files):
                    # Test Statistic
                    if text_test_stat:
                        table.set_item_num(i, cols_test_stat[j], test_stat)

                    # p-value
                    table.set_item_num(i, cols_p_value[j], p_value)

                    # Bayes Factor
                    if text_bayes_factor:
                        table.set_item_num(i, cols_bayes_factor[j], bayes_factor)

                    # Effect Size
                    table.set_item_num(i, cols_effect_size[j], effect_size)

                # Number of Files Found
                num_files_found = len([freq for freq in freq_files[1:-1] if freq])

                table.set_item_num(i, col_files_found, num_files_found)
                table.set_item_num(i, col_files_found_pct, num_files_found, len_files)

            table.setSortingEnabled(True)
            table.setUpdatesEnabled(True)
            table.blockSignals(False)

            table.toggle_pct()
            table.toggle_cumulative()
            table.toggle_breakdown()
            table.update_ranks()

            table.itemChanged.emit(table.item(0, 0))

            wordless_msg.wordless_msg_generate_table_success(main)
        else:
            wordless_msg_box.wordless_msg_box_no_results(main)

            wordless_msg.wordless_msg_generate_table_error(main)

    settings = main.settings_custom['keyword']
    files = main.wordless_files.get_selected_files()

    if wordless_checking_file.check_files_on_loading(main, files):
        ref_file = main.wordless_files.find_file_by_name(
            settings['generation_settings']['ref_file'],
            selected_only = True
        )

        files = [file
                 for file in main.wordless_files.get_selected_files()
                 if file != ref_file]

        if files:
            dialog_progress = wordless_dialog_misc.Wordless_Dialog_Progress_Process_Data(main)

            worker_keyword_table = Wordless_Worker_Keyword_Table(
                main,
                dialog_progress = dialog_progress,
                update_gui = update_gui
            )

            thread_keyword_table = wordless_threading.Wordless_Thread(worker_keyword_table)
            thread_keyword_table.start_worker()
        else:
            wordless_msg_box.wordless_msg_box_missing_observed_file(main)

            wordless_msg.wordless_msg_generate_table_error(main)
    else:
        wordless_msg.wordless_msg_generate_table_error(main)