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)
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 }] })
def test_defaults_to_empty_dict(self): answer_frequency_lists = stats_domain.CategorizedAnswerFrequencyLists() self.assertEqual( len(answer_frequency_lists.categorized_answer_freq_lists), 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)