From f4694adc6cddd782d72219825f3bd7c88c4e75f7 Mon Sep 17 00:00:00 2001 From: nakamura204 Date: Fri, 17 Nov 2023 03:28:52 +0000 Subject: [PATCH 1/2] [update] SHUFIM change code --- .../basic/SHUFIM.py | 69 +++++++++++++------ 1 file changed, 48 insertions(+), 21 deletions(-) diff --git a/PAMI/highUtilityGeoreferencedFrequentPattern/basic/SHUFIM.py b/PAMI/highUtilityGeoreferencedFrequentPattern/basic/SHUFIM.py index 3b69dbdd..a7d140a7 100644 --- a/PAMI/highUtilityGeoreferencedFrequentPattern/basic/SHUFIM.py +++ b/PAMI/highUtilityGeoreferencedFrequentPattern/basic/SHUFIM.py @@ -222,6 +222,7 @@ def createItemSets(self, datasetPath): """ Storing the complete transactions of the database/input file in a database variable """ + pmuString = None if isinstance(datasetPath, _ab._pd.DataFrame): utilities, data, utilitySum, pmuString = [], [], [], [] if datasetPath.empty: @@ -248,8 +249,9 @@ def createItemSets(self, datasetPath): itemsString = [x for x in itemsString if x] utilityString = trans_list[2].strip().split(self.sep) utilityString = [x for x in utilityString if x] - pmuString = trans_list[3].strip().split(self.sep) - pmuString = [x for x in pmuString if x] + if len(trans_list) == 4: + pmuString = trans_list[3].strip().split(self.sep) + pmuString = [x for x in pmuString if x] self.transactions.append(self.createTransaction(itemsString, utilityString, transactionUtility, pmuString)) else: try: @@ -261,8 +263,9 @@ def createItemSets(self, datasetPath): itemsString = [x for x in itemsString if x] utilityString = trans_list[2].strip().split(self.sep) utilityString = [x for x in utilityString if x] - pmuString = trans_list[3].strip().split(self.sep) - pmuString = [x for x in pmuString if x] + if len(trans_list) == 4: + pmuString = trans_list[3].strip().split(self.sep) + pmuString = [x for x in pmuString if x] self.transactions.append( self.createTransaction(itemsString, utilityString, transactionUtility, pmuString)) except IOError: @@ -301,7 +304,10 @@ def createTransaction(self, items, utilities, utilitySum, pmustring): self.maxItem = itemInt items.append(itemInt) utilities.append(int(utilityString[idx])) - pmus.append(int(pmuString[idx])) + if pmuString != None: + pmus.append(int(pmuString[idx])) + if pmuString == None: + pmus = None return _Transaction(items, utilities, transactionUtility, pmus) def getMaxItem(self): @@ -886,10 +892,18 @@ def _useUtilityBinArrayToCalculateLocalUtilityFirstTime(self, dataset): for idx, item in enumerate(transaction.getItems()): self._singleItemSetsSupport[item] += 1 self._singleItemSetsUtility[item] += transaction.getUtilities()[idx] + pmu = transaction.getUtilities()[idx] + if item in self._Neighbours: + neighbors = self._Neighbours[item] + for idx, item in enumerate(transaction.getItems()): + if item in neighbors: + pmu += transaction.getUtilities()[idx] if item in self._utilityBinArrayLU: - self._utilityBinArrayLU[item] += transaction.getPmus()[idx] + # self._utilityBinArrayLU[item] += transaction.getPmus()[idx] + self._utilityBinArrayLU[item] += pmu else: - self._utilityBinArrayLU[item] = transaction.getPmus()[idx] + # self._utilityBinArrayLU[item] = transaction.getPmus()[idx] + self._utilityBinArrayLU[item] = pmu def getPatternsAsDataFrame(self): """Storing final patterns in a dataframe @@ -959,19 +973,32 @@ def printResults(self): print("Total Memory in RSS", self.getMemoryRSS()) print("Total ExecutionTime in seconds:", self.getRuntime()) +def main(): + inputFile = '/home/nakamura/workspace/labwork/PAMI/PAMI/highUtilityGeoreferencedFrequentPattern/basic/mushroom_utility_spmf.txt' + neighborFile = '/home/nakamura/workspace/labwork/PAMI/PAMI/highUtilityGeoreferencedFrequentPattern/basic/mushroom_utility_spmf.txt' + + minUtilCount = 10000 + minSup = 100 + seperator = ' ' + obj = SHUFIM(iFile=inputFile, nFile=neighborFile, minUtil=minUtilCount, minSup=minSup, sep=seperator) #initialize + obj.startMine() + obj.printResults() + print(obj.getPatterns()) + if __name__ == '__main__': - _ap = str() - if len(_ab._sys.argv) == 6 or len(_ab._sys.argv) == 7: - if len(_ab._sys.argv) == 7: - _ap = SHUFIM(_ab._sys.argv[1], _ab._sys.argv[3], int(_ab._sys.argv[4]), _ab._sys.argv[5], _ab._sys.argv[6]) - if len(_ab._sys.argv) == 6: - _ap = SHUFIM(_ab._sys.argv[1], _ab._sys.argv[3], int(_ab._sys.argv[4]), _ab._sys.argv[5]) - _ap.startMine() - print("Total number of Spatial High Utility Frequent Patterns:", len(_ap.getPatterns())) - _ap.save(_ab._sys.argv[2]) - print("Total Memory in USS:", _ap.getMemoryUSS()) - print("Total Memory in RSS", _ap.getMemoryRSS()) - print("Total ExecutionTime in seconds:", _ap.getRuntime()) - else: - print("Error! The number of input parameters do not match the total number of parameters provided") + main() + # _ap = str() + # if len(_ab._sys.argv) == 6 or len(_ab._sys.argv) == 7: + # if len(_ab._sys.argv) == 7: + # _ap = SHUFIM(_ab._sys.argv[1], _ab._sys.argv[3], int(_ab._sys.argv[4]), _ab._sys.argv[5], _ab._sys.argv[6]) + # if len(_ab._sys.argv) == 6: + # _ap = SHUFIM(_ab._sys.argv[1], _ab._sys.argv[3], int(_ab._sys.argv[4]), _ab._sys.argv[5]) + # _ap.startMine() + # print("Total number of Spatial High Utility Frequent Patterns:", len(_ap.getPatterns())) + # _ap.save(_ab._sys.argv[2]) + # print("Total Memory in USS:", _ap.getMemoryUSS()) + # print("Total Memory in RSS", _ap.getMemoryRSS()) + # print("Total ExecutionTime in seconds:", _ap.getRuntime()) + # else: + # print("Error! The number of input parameters do not match the total number of parameters provided") From 8f9e5b33227a00fe3ba1e554209cceb73fe0c5fe Mon Sep 17 00:00:00 2001 From: nakamura204 Date: Fri, 17 Nov 2023 03:43:11 +0000 Subject: [PATCH 2/2] [update] FCPGrowth change code --- .../fuzzyCorrelatedPattern/basic/FCPGrowth.py | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/PAMI/fuzzyCorrelatedPattern/basic/FCPGrowth.py b/PAMI/fuzzyCorrelatedPattern/basic/FCPGrowth.py index 0f4f7608..d0adbaab 100644 --- a/PAMI/fuzzyCorrelatedPattern/basic/FCPGrowth.py +++ b/PAMI/fuzzyCorrelatedPattern/basic/FCPGrowth.py @@ -339,7 +339,8 @@ def _compareItems(self, o1: _FFList, o2: _FFList) -> int: """ compare = self._mapItemSum[o1.item] - self._mapItemSum[o2.item] if compare == 0: - return int(o1.item) - int(o2.item) + # return int(o1.item) - int(o2.item) + return 1 else: return compare @@ -407,9 +408,9 @@ def _creatingItemSets(self) -> None: line = line.split("\n")[0] parts = line.split(":") parts[0] = parts[0].strip() - parts[2] = parts[2].strip() + parts[1] = parts[1].strip() items = parts[0].split(self._sep) - quantities = parts[2].split(self._sep) + quantities = parts[1].split(self._sep) self._transactions.append([x for x in items]) self._fuzzyValues.append([x for x in quantities]) else: @@ -419,7 +420,7 @@ def _creatingItemSets(self) -> None: line = line.split("\n")[0] parts = line.split(":") items = parts[0].split() - quantities = parts[2].split() + quantities = parts[1].split() self._transactions.append([x for x in items]) self._fuzzyValues.append([x for x in quantities]) except IOError: @@ -437,7 +438,7 @@ def startMine(self) -> None: quantities = self._fuzzyValues[tr] for i in range(0, len(items)): item = items[i] - regions = _Regions(item, int(quantities[i]), 3, self._mapItemRegionSum) + regions = _Regions(item, float(quantities[i]), 3, self._mapItemRegionSum) if item in self._mapItemsLowSum.keys(): low = self._mapItemsLowSum[item] low += regions.low @@ -492,7 +493,7 @@ def startMine(self) -> None: for i in range(0, len(items)): pair = _Pair() pair.item = items[i] - regions = _Regions(pair.item, int(quantities[i]), 3, self._temp) + regions = _Regions(pair.item, float(quantities[i]), 3, self._temp) item = pair.item if self._mapItemSum[item] >= self._minSup: if self._mapItemRegions[pair.item] == "L": @@ -686,8 +687,19 @@ def printResults(self) -> None: print("Total Memory in RSS", self.getMemoryRSS()) print("Total ExecutionTime in ms:", self.getRuntime()) +def main(): + inputFile = 'https://u-aizu.ac.jp/~udayrage/datasets/fuzzyDatabases/Fuzzy_T10I4D100K.csv' + + minimumSupportCount=1200 #Users can also specify this constraint between 0 to 1. + ratioExample=0.8 + seperator='\t' + + obj = FCPGrowth(inputFile, minimumSupportCount,ratioExample,seperator) #initialize + obj.startMine() + if __name__ == "__main__": + main() _ap = str() if len(_ab._sys.argv) == 5 or len(_ab._sys.argv) == 6: if len(_ab._sys.argv) == 6: