Skip to content

Commit

Permalink
Merge 399c137 into 8cc20a1
Browse files Browse the repository at this point in the history
  • Loading branch information
ymoch committed Nov 29, 2019
2 parents 8cc20a1 + 399c137 commit 97418d5
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 24 deletions.
3 changes: 1 addition & 2 deletions .travis.yml
@@ -1,7 +1,6 @@
language: python
python:
- 2.7
- 3.3
- 3.4
- 3.5
install:
Expand All @@ -12,7 +11,7 @@ script:
# Normal unit tests.
- coverage run --source=apyori setup.py test
# Code quality check.
- pylint apyori.py test/*.py
- pyflakes apyori.py test/*.py
# Integration test
- apyori-run data/integration_test_input_1.tsv > result.txt
- diff result.txt data/integration_test_output_1.txt
Expand Down
28 changes: 13 additions & 15 deletions apyori.py
Expand Up @@ -15,7 +15,7 @@


# Meta informations.
__version__ = '1.1.1'
__version__ = '1.1.2'
__author__ = 'Yu Mochizuki'
__author_email__ = 'ymoch.dev@gmail.com'

Expand Down Expand Up @@ -142,11 +142,7 @@ def create_next_candidates(prev_candidates, length):
length -- The lengths of the next candidates.
"""
# Solve the items.
item_set = set()
for candidate in prev_candidates:
for item in candidate:
item_set.add(item)
items = sorted(item_set)
items = sorted(frozenset(chain.from_iterable(prev_candidates)))

# Create the temporary candidates. These will be filtered below.
tmp_next_candidates = (frozenset(x) for x in combinations(items, length))
Expand All @@ -161,7 +157,7 @@ def create_next_candidates(prev_candidates, length):
next_candidates = [
candidate for candidate in tmp_next_candidates
if all(
True if frozenset(x) in prev_candidates else False
frozenset(x) in prev_candidates
for x in combinations(candidate, length - 1))
]
return next_candidates
Expand Down Expand Up @@ -212,14 +208,16 @@ def gen_ordered_statistics(transaction_manager, record):
record -- A support record as a SupportRecord instance.
"""
items = record.items
for combination_set in combinations(sorted(items), len(items) - 1):
items_base = frozenset(combination_set)
items_add = frozenset(items.difference(items_base))
confidence = (
record.support / transaction_manager.calc_support(items_base))
lift = confidence / transaction_manager.calc_support(items_add)
yield OrderedStatistic(
frozenset(items_base), frozenset(items_add), confidence, lift)
sorted_items = sorted(items)
for base_length in range(len(items)):
for combination_set in combinations(sorted_items, base_length):
items_base = frozenset(combination_set)
items_add = frozenset(items.difference(items_base))
confidence = (
record.support / transaction_manager.calc_support(items_base))
lift = confidence / transaction_manager.calc_support(items_add)
yield OrderedStatistic(
frozenset(items_base), frozenset(items_add), confidence, lift)


def filter_ordered_statistics(ordered_statistics, **kwargs):
Expand Down
10 changes: 5 additions & 5 deletions data/integration_test_output_1.txt
Expand Up @@ -4,15 +4,15 @@
{"items": ["beer", "butter"], "support": 0.25, "ordered_statistics": [{"items_base": ["butter"], "items_add": ["beer"], "confidence": 0.6666666666666666, "lift": 1.0666666666666667}]}
{"items": ["beer", "cheese"], "support": 0.25, "ordered_statistics": [{"items_base": ["cheese"], "items_add": ["beer"], "confidence": 0.6666666666666666, "lift": 1.0666666666666667}]}
{"items": ["beer", "jam"], "support": 0.375, "ordered_statistics": [{"items_base": ["beer"], "items_add": ["jam"], "confidence": 0.6, "lift": 1.2}, {"items_base": ["jam"], "items_add": ["beer"], "confidence": 0.75, "lift": 1.2}]}
{"items": ["beer", "nuts"], "support": 0.5, "ordered_statistics": [{"items_base": ["beer"], "items_add": ["nuts"], "confidence": 0.8, "lift": 1.28}, {"items_base": ["nuts"], "items_add": ["beer"], "confidence": 0.8, "lift": 1.28}]}
{"items": ["beer", "nuts"], "support": 0.5, "ordered_statistics": [{"items_base": [], "items_add": ["beer", "nuts"], "confidence": 0.5, "lift": 1.0}, {"items_base": ["beer"], "items_add": ["nuts"], "confidence": 0.8, "lift": 1.28}, {"items_base": ["nuts"], "items_add": ["beer"], "confidence": 0.8, "lift": 1.28}]}
{"items": ["cheese", "nuts"], "support": 0.375, "ordered_statistics": [{"items_base": ["cheese"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["nuts"], "items_add": ["cheese"], "confidence": 0.6, "lift": 1.5999999999999999}]}
{"items": ["jam", "nuts"], "support": 0.375, "ordered_statistics": [{"items_base": ["jam"], "items_add": ["nuts"], "confidence": 0.75, "lift": 1.2}, {"items_base": ["nuts"], "items_add": ["jam"], "confidence": 0.6, "lift": 1.2}]}
{"items": ["beer", "butter", "jam"], "support": 0.125, "ordered_statistics": [{"items_base": ["beer", "butter"], "items_add": ["jam"], "confidence": 0.5, "lift": 1.0}, {"items_base": ["butter", "jam"], "items_add": ["beer"], "confidence": 1.0, "lift": 1.6}]}
{"items": ["beer", "butter", "nuts"], "support": 0.125, "ordered_statistics": [{"items_base": ["beer", "butter"], "items_add": ["nuts"], "confidence": 0.5, "lift": 0.8}, {"items_base": ["butter", "nuts"], "items_add": ["beer"], "confidence": 1.0, "lift": 1.6}]}
{"items": ["beer", "cheese", "jam"], "support": 0.125, "ordered_statistics": [{"items_base": ["beer", "cheese"], "items_add": ["jam"], "confidence": 0.5, "lift": 1.0}, {"items_base": ["cheese", "jam"], "items_add": ["beer"], "confidence": 1.0, "lift": 1.6}]}
{"items": ["beer", "cheese", "nuts"], "support": 0.25, "ordered_statistics": [{"items_base": ["beer", "cheese"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["beer", "nuts"], "items_add": ["cheese"], "confidence": 0.5, "lift": 1.3333333333333333}, {"items_base": ["cheese", "nuts"], "items_add": ["beer"], "confidence": 0.6666666666666666, "lift": 1.0666666666666667}]}
{"items": ["beer", "jam", "nuts"], "support": 0.375, "ordered_statistics": [{"items_base": ["beer", "jam"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["beer", "nuts"], "items_add": ["jam"], "confidence": 0.75, "lift": 1.5}, {"items_base": ["jam", "nuts"], "items_add": ["beer"], "confidence": 1.0, "lift": 1.6}]}
{"items": ["beer", "cheese", "nuts"], "support": 0.25, "ordered_statistics": [{"items_base": ["cheese"], "items_add": ["beer", "nuts"], "confidence": 0.6666666666666666, "lift": 1.3333333333333333}, {"items_base": ["beer", "cheese"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["beer", "nuts"], "items_add": ["cheese"], "confidence": 0.5, "lift": 1.3333333333333333}, {"items_base": ["cheese", "nuts"], "items_add": ["beer"], "confidence": 0.6666666666666666, "lift": 1.0666666666666667}]}
{"items": ["beer", "jam", "nuts"], "support": 0.375, "ordered_statistics": [{"items_base": ["beer"], "items_add": ["jam", "nuts"], "confidence": 0.6, "lift": 1.5999999999999999}, {"items_base": ["jam"], "items_add": ["beer", "nuts"], "confidence": 0.75, "lift": 1.5}, {"items_base": ["nuts"], "items_add": ["beer", "jam"], "confidence": 0.6, "lift": 1.5999999999999999}, {"items_base": ["beer", "jam"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["beer", "nuts"], "items_add": ["jam"], "confidence": 0.75, "lift": 1.5}, {"items_base": ["jam", "nuts"], "items_add": ["beer"], "confidence": 1.0, "lift": 1.6}]}
{"items": ["butter", "jam", "nuts"], "support": 0.125, "ordered_statistics": [{"items_base": ["butter", "jam"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["butter", "nuts"], "items_add": ["jam"], "confidence": 1.0, "lift": 2.0}]}
{"items": ["cheese", "jam", "nuts"], "support": 0.125, "ordered_statistics": [{"items_base": ["cheese", "jam"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}]}
{"items": ["beer", "butter", "jam", "nuts"], "support": 0.125, "ordered_statistics": [{"items_base": ["beer", "butter", "jam"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["beer", "butter", "nuts"], "items_add": ["jam"], "confidence": 1.0, "lift": 2.0}, {"items_base": ["butter", "jam", "nuts"], "items_add": ["beer"], "confidence": 1.0, "lift": 1.6}]}
{"items": ["beer", "cheese", "jam", "nuts"], "support": 0.125, "ordered_statistics": [{"items_base": ["beer", "cheese", "jam"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["beer", "cheese", "nuts"], "items_add": ["jam"], "confidence": 0.5, "lift": 1.0}, {"items_base": ["cheese", "jam", "nuts"], "items_add": ["beer"], "confidence": 1.0, "lift": 1.6}]}
{"items": ["beer", "butter", "jam", "nuts"], "support": 0.125, "ordered_statistics": [{"items_base": ["beer", "butter"], "items_add": ["jam", "nuts"], "confidence": 0.5, "lift": 1.3333333333333333}, {"items_base": ["butter", "jam"], "items_add": ["beer", "nuts"], "confidence": 1.0, "lift": 2.0}, {"items_base": ["butter", "nuts"], "items_add": ["beer", "jam"], "confidence": 1.0, "lift": 2.6666666666666665}, {"items_base": ["beer", "butter", "jam"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["beer", "butter", "nuts"], "items_add": ["jam"], "confidence": 1.0, "lift": 2.0}, {"items_base": ["butter", "jam", "nuts"], "items_add": ["beer"], "confidence": 1.0, "lift": 1.6}]}
{"items": ["beer", "cheese", "jam", "nuts"], "support": 0.125, "ordered_statistics": [{"items_base": ["beer", "cheese"], "items_add": ["jam", "nuts"], "confidence": 0.5, "lift": 1.3333333333333333}, {"items_base": ["cheese", "jam"], "items_add": ["beer", "nuts"], "confidence": 1.0, "lift": 2.0}, {"items_base": ["beer", "cheese", "jam"], "items_add": ["nuts"], "confidence": 1.0, "lift": 1.6}, {"items_base": ["beer", "cheese", "nuts"], "items_add": ["jam"], "confidence": 0.5, "lift": 1.0}, {"items_base": ["cheese", "jam", "nuts"], "items_add": ["beer"], "confidence": 1.0, "lift": 1.6}]}
2 changes: 1 addition & 1 deletion dev-requirements.txt
Expand Up @@ -3,4 +3,4 @@ nose
mock

# Code quality utilities.
pylint
pyflakes
1 change: 0 additions & 1 deletion setup.py
Expand Up @@ -32,7 +32,6 @@
'License :: OSI Approved :: MIT License',
'Programming Language :: Python',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Topic :: Scientific/Engineering :: Mathematics',
Expand Down
26 changes: 26 additions & 0 deletions test/test_gen_ordered_statistics.py
Expand Up @@ -17,17 +17,43 @@ def test_normal():
"""
transaction_manager = Mock(spec=TransactionManager)
transaction_manager.calc_support.side_effect = lambda key: {
frozenset([]): 1.0,
frozenset(['A']): 0.8,
frozenset(['B']): 0.4,
frozenset(['C']): 0.2,
frozenset(['A', 'B']): 0.2,
frozenset(['A', 'C']): 0.1,
frozenset(['B', 'C']): 0.01,
frozenset(['A', 'B', 'C']): 0.001,
}.get(key, 0.0)

test_data = SupportRecord(frozenset(['A', 'B', 'C']), 0.001)
results = list(gen_ordered_statistics(transaction_manager, test_data))
eq_(results, [
OrderedStatistic(
frozenset([]),
frozenset(['A', 'B', 'C']),
0.001 / 1.0,
0.001 / 1.0 / 0.001,
),
OrderedStatistic(
frozenset(['A']),
frozenset(['B', 'C']),
0.001 / 0.8,
0.001 / 0.8 / 0.01,
),
OrderedStatistic(
frozenset(['B']),
frozenset(['A', 'C']),
0.001 / 0.4,
0.001 / 0.4 / 0.1,
),
OrderedStatistic(
frozenset(['C']),
frozenset(['A', 'B']),
0.001 / 0.2,
0.001 / 0.2 / 0.2,
),
OrderedStatistic(
frozenset(['A', 'B']),
frozenset(['C']),
Expand Down

0 comments on commit 97418d5

Please sign in to comment.