function commerce_reports_patterns_frequent_itemset in Commerce Reporting 7.3
Same name and namespace in other branches
- 7.4 modules/patterns/commerce_reports_patterns.batch.inc \commerce_reports_patterns_frequent_itemset()
1 string reference to 'commerce_reports_patterns_frequent_itemset'
- commerce_reports_patterns_form_submit in modules/
patterns/ commerce_reports_patterns.admin.inc
File
- modules/
patterns/ commerce_reports_patterns.batch.inc, line 52
Code
function commerce_reports_patterns_frequent_itemset(&$context) {
if (empty($context['sandbox'])) {
$context['sandbox']['set_length'] = 2;
$context['sandbox']['current_partition'] = 0;
$context['sandbox']['first_itemset'] = 0;
$context['sandbox']['second_itemset'] = 1;
}
$length = $context['sandbox']['set_length'];
if (empty($context['results']['frequent_sets'][$length - 1])) {
return;
}
if (empty($context['results']['frequent_sets'][$length])) {
$context['results']['frequent_sets'][$length] = array();
}
$prev_partitions =& $context['results']['frequent_sets'][$length - 1];
$prev_partitions_count = count($prev_partitions);
for ($x = 0; $x < 50; $x++) {
if (!empty($prev_partitions[$context['sandbox']['current_partition']])) {
$partition_itemset_count = count($prev_partitions[$context['sandbox']['current_partition']]['sets']);
}
else {
$partition_itemset_count = 0;
}
$a = $context['sandbox']['first_itemset'];
$b = $context['sandbox']['second_itemset'];
if ($context['sandbox']['second_itemset'] >= $partition_itemset_count) {
if ($context['sandbox']['first_itemset'] >= $partition_itemset_count) {
if ($context['sandbox']['current_partition'] >= $prev_partitions_count) {
$context['sandbox']['current_partition'] = 0;
$context['sandbox']['set_length']++;
break;
}
else {
$context['sandbox']['current_partition']++;
}
$context['sandbox']['first_itemset'] = 0;
}
else {
$context['sandbox']['first_itemset']++;
}
$context['sandbox']['second_itemset'] = $context['sandbox']['first_itemset'] + 1;
continue;
}
else {
$context['sandbox']['second_itemset']++;
}
$partition =& $prev_partitions[$context['sandbox']['current_partition']];
$partition_prefix =& $partition['prefix'];
$partition_itemset =& $partition['sets'];
$a_set =& $partition_itemset[$a];
$b_set =& $partition_itemset[$b];
$candidate = array(
'items' => array_values(array_unique(array_merge($a_set['items'], $b_set['items']))),
'tidlist' => array_intersect($a_set['tidlist'], $b_set['tidlist']),
);
$occurences = max(count($candidate['tidlist']), 0);
if ($occurences >= $context['results']['minimum_transactions']) {
$new_items = array_diff($candidate['items'], $partition_prefix);
$prefix = array_merge($partition_prefix, array(
reset($new_items),
));
_commerce_reports_patterns_add_set($context['results']['frequent_sets'][$length], $prefix, $candidate);
}
}
if ($count = count($context['results']['frequent_sets'][$length])) {
$context['finished'] = 0;
$context['message'] = t('Generated %count frequent item sets with length %length', array(
'%count' => $count,
'%length' => $length,
));
}
else {
unset($context['results']['frequent_sets'][$length]);
}
}