예제 #1
0
    def calculate_from_state_answers_dict(self, state_answers_dict):
        """Computes the number of occurrences of each answer, split into groups
        based on the number of classification categories.

        This method is run from within the context of a MapReduce job.
        """
        grouped_submitted_answer_dicts = itertools.groupby(
            state_answers_dict['submitted_answer_list'],
            operator.itemgetter('classification_categorization'))
        submitted_answers_by_categorization = collections.defaultdict(list)
        for category, answer_dicts in grouped_submitted_answer_dicts:
            if category in CLASSIFICATION_CATEGORIES:
                submitted_answers_by_categorization[category].extend(
                    d['answer'] for d in answer_dicts)

        categorized_answer_frequency_lists = (
            stats_domain.CategorizedAnswerFrequencyLists({
                category: _get_top_answers_by_frequency(categorized_answers)
                for category, categorized_answers in
                submitted_answers_by_categorization.iteritems()
            }))
        return stats_domain.StateAnswersCalcOutput(
            state_answers_dict['exploration_id'],
            state_answers_dict['exploration_version'],
            state_answers_dict['state_name'],
            state_answers_dict['interaction_id'], self.id,
            categorized_answer_frequency_lists)
예제 #2
0
 def test_convert_list_to_raw_object(self):
     answer_frequency_lists = stats_domain.CategorizedAnswerFrequencyLists({
         'category a':
         stats_domain.AnswerFrequencyList([self.ANSWER_A]),
         'category b':
         stats_domain.AnswerFrequencyList([self.ANSWER_B, self.ANSWER_C]),
     })
     self.assertEqual(
         answer_frequency_lists.to_raw_type(), {
             'category a': [{
                 'answer': 'answer a',
                 'frequency': 3
             }],
             'category b': [{
                 'answer': 'answer b',
                 'frequency': 2
             }, {
                 'answer': 'answer c',
                 'frequency': 1
             }]
         })
예제 #3
0
 def test_defaults_to_empty_dict(self):
     answer_frequency_lists = stats_domain.CategorizedAnswerFrequencyLists()
     self.assertEqual(
         len(answer_frequency_lists.categorized_answer_freq_lists), 0)
예제 #4
0
 def test_has_correct_type(self):
     answer_frequency_lists = (stats_domain.CategorizedAnswerFrequencyLists(
         {}))
     self.assertEqual(
         answer_frequency_lists.calculation_output_type,
         stats_domain.CALC_OUTPUT_TYPE_CATEGORIZED_ANSWER_FREQUENCY_LISTS)