From c0ca9351f2efb9a885a3b2fbe7ba667c1c55583a Mon Sep 17 00:00:00 2001 From: Taylor Smith Date: Fri, 13 Nov 2015 09:56:00 -0600 Subject: [PATCH] Added file writing support, toggle print option --- .gitignore | 2 ++ apriori.py | 46 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ca0973 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store + diff --git a/apriori.py b/apriori.py index 8ae4682..92f04b3 100644 --- a/apriori.py +++ b/apriori.py @@ -7,7 +7,7 @@ $python apriori.py -f DATASET.csv -s 0.15 -c 0.6 """ -import sys +import sys, os from itertools import chain, combinations from collections import defaultdict @@ -113,14 +113,29 @@ def getSupport(item): return toRetItems, toRetRules -def printResults(items, rules): +def printResults(items, rules, stdout=True, _output_file=None): """prints the generated itemsets sorted by support and the confidence rules sorted by confidence""" + write = not _output_file is None for item, support in sorted(items, key=lambda (item, support): support): - print "item: %s , %.3f" % (str(item), support) - print "\n------------------------ RULES:" + sup_str = "item: %s , %.3f" % (str(item), support) + if stdout: print sup_str + if write: + with open(_output_file, 'a') as of: + of.write(sup_str + os.linesep) + + page_del = os.linesep + "------------------------ RULES:" + if stdout: print page_del + if write: + with open(_output_file, 'a') as of: + of.write(page_del + os.linesep) + for rule, confidence in sorted(rules, key=lambda (rule, confidence): confidence): pre, post = rule - print "Rule: %s ==> %s , %.3f" % (str(pre), str(post), confidence) + rule_write = "Rule: %s ==> %s , %.3f" % (str(pre), str(post), confidence) + if stdout: print rule_write + if write: + with open(_output_file, 'a') as of: + of.write(rule_write + os.linesep) def dataFromFile(fname): @@ -149,6 +164,16 @@ def dataFromFile(fname): help='minimum confidence value', default=0.6, type='float') + optparser.add_option('-p', '--print', + dest='stdout', + help='hide printing to stdout. defaults to true if no outputfile provided (see -o)', + default=True, + action = 'store_false') + optparser.add_option('-o', '--outputFile', + dest='output', + help='output filename containing csv', + default=None) + (options, args) = optparser.parse_args() @@ -161,9 +186,18 @@ def dataFromFile(fname): print 'No dataset filename specified, system with exit\n' sys.exit('System will exit') + + _output_file = options.output + stdout = options.stdout + if not _output_file is None: + if not _output_file.endswith('.csv'): + raise Exception('output file must end with .csv') + else: stdout = True + + minSupport = options.minS minConfidence = options.minC items, rules = runApriori(inFile, minSupport, minConfidence) - printResults(items, rules) + printResults(items, rules, stdout, _output_file)