def normalizeProdClusters(clusts, centroids, mats, maps, floor, ceil): displacement = 0 again = False for i in range(0,len(clusts)): ratio = len(clusts[i - displacement])/len(clusts) if ratio < floor: again = True merge(clusts, centroids, mats, maps, i - displacement) displacement += 1 mats = st.subMatrices(clusts)[0] displacement = 0 for i in range(0,len(clusts)): t1 = len(clusts[i])/(0.0 + len(p.products)) > ceil t2 = len(clusts[i]) > 8 if (t1 and t2): again = True dissolve(clusts, centroids, mats, maps, i - displacement) displacement += 1 subs = st.subMatrices(clusts) if(again): clusts = normalizeProdClusters(clusts, centroids, subs[0], subs[1], floor, ceil) else: displacement = 0 for i in range(0,len(clusts)): if not isinstance(clusts[i-displacement],list): clusts.pop(i - displacement) displacement += 1 return clusts
def normalizeProdClusters(clusts, centroids, mats, maps, floor, ceil): displacement = 0 again = False for i in range(0, len(clusts)): ratio = len(clusts[i - displacement]) / len(clusts) if ratio < floor: again = True merge(clusts, centroids, mats, maps, i - displacement) displacement += 1 mats = st.subMatrices(clusts)[0] displacement = 0 for i in range(0, len(clusts)): t1 = len(clusts[i]) / (0.0 + len(p.products)) > ceil t2 = len(clusts[i]) > 8 if (t1 and t2): again = True dissolve(clusts, centroids, mats, maps, i - displacement) displacement += 1 subs = st.subMatrices(clusts) if (again): clusts = normalizeProdClusters(clusts, centroids, subs[0], subs[1], floor, ceil) else: displacement = 0 for i in range(0, len(clusts)): if not isinstance(clusts[i - displacement], list): clusts.pop(i - displacement) displacement += 1 return clusts
def run(names): global products products = p.products results = [names, c.customersMap] global transpose transpose = c.matrix.transpose() cl.__init__(transpose, p.products) catNum = len(p.products)/8 + 1 outputs = cl.kMeans(catNum,8) prodClusters = outputs[0] centroids = outputs[1] inputs = st.subMatrices(prodClusters) prodClusters = n.normalizeProdClusters(prodClusters, centroids, inputs[0], inputs[1], 0.2, 0.4) results.append(prodClusters) inputs = st.subMatrices(prodClusters) subMats = inputs[0] maps = inputs[1] indexMap = inputs[2] subClusters = [] for i in range(0, len(subMats)): subCluster = st.createSubcluster(indexMap[i], subMats[i], maps[i]) subCluster.append(r.buildRecommendations(names, [subCluster])) subClusters.append(subCluster) totCluster = st.createSubcluster(p.products, c.matrix, p.productsMap) totCluster.append(r.buildRecommendations(names,[totCluster])) powerClusters = [] powerSil = [] results.append('unfiltered results: ' + str(totCluster[4])) for i in range(0, len(subClusters)): if subClusters[i][4] >= totCluster[4]: powerClusters.append(subClusters[i]) powerSil.append(subClusters[i][4]) if(len(powerSil) == 0): return 'again' else: results.append('filtered average: ' + str(sum(powerSil)/len(powerSil))) powerClusters.append(totCluster) recommendationMatrix = r.buildRecommendations(names, powerClusters) results.append(recommendationMatrix) results.append(powerClusters) results.append(subClusters) return results
def run(nameList, matrix): global products products = p.products global names names = nameList outputs = buildProductClusters() productClusters = outputs[0] centroids = outputs[1] inputs = st.subMatrices(productClusters) productClusters = n.normalizeProdClusters(productClusters, centroids, inputs[0], inputs[1], 0.2, 0.4) inputs = st.subMatrices(productClusters) subMats = inputs[0] maps = inputs[1] indexMap = inputs[2] customerClustersHelpers = buildCustomerHelpers() subClustersHelpers = buildSubHelpers(indexMap, subMats, maps) powerups = buildPowerHelpers(subClustersHelpers,customerClustersHelpers) powerClustersHelpers = powerups[0] productClusterLocator = powerups[1] powerRecMatrix = r.buildRecommendations(names, powerClustersHelpers) productClustersMap = st.createClusterMap(productClusters) customerMatrix = c.customerMatrixiser() productMatrix = p.productMatrixiser() hasPurchased = matrix if(len(powerClustersHelpers) == 0): return 'again' else: results = [] # index 0 results.append(names) # index 1 results.append(c.customersMap) # index 2 results.append(productClusters) # index 3 results.append(p.productsMap) # index 4 results.append(products) # index 5 results.append(powerRecMatrix) # index 6 results.append([customerClustersHelpers]) # index 7 results.append(subClustersHelpers) # index 8 results.append(powerClustersHelpers) # index 9 results.append(c.matrix) # index 10 results.append(productClustersMap) # index 11 results.append(productClusterLocator) # index 12 results.append(customerMatrix) # index 13 results.append(productMatrix) # index 14 results.append(hasPurchased) return results
def run(names): global products products = p.products # indexes 0 and 1 results = [names, c.customersMap] global transpose transpose = c.matrix.transpose() cl.__init__(transpose, p.products) catNum = len(p.products)/8 + 1 outputs = cl.kMeans(catNum,8) productClusters = outputs[0] centroids = outputs[1] inputs = st.subMatrices(productClusters) productClusters = n.normalizeProdClusters(productClusters, centroids, inputs[0], inputs[1], 0.2, 0.4) # index 2 results.append(productClusters) # index 3 results.append(p.productsMap) # index 4 results.append(products) inputs = st.subMatrices(productClusters) subMats = inputs[0] maps = inputs[1] indexMap = inputs[2] subClustersHelpers = [] for i in range(0, len(subMats)): subCluster = st.createSubclustersHelpers(indexMap[i], subMats[i], maps[i]) subCluster.append(r.buildRecommendations(names, [subCluster])) subClustersHelpers.append(subCluster) customerClustersHelpers = st.createSubclustersHelpers(p.products, c.matrix, p.productsMap) customerClustersHelpers.append(r.buildRecommendations(names,[customerClustersHelpers])) powerClustersHelpers = [] powerI = [] powerCount = 0 productClusterLocator = [] for i in range(0, len(subClustersHelpers)): if subClustersHelpers[i][5] >= customerClustersHelpers[5]: powerClustersHelpers.append(subClustersHelpers[i]) powerI.append(i) productClusterLocator.append(['power', powerCount]) powerCount += 1 else: productClusterLocator.append(['sub', i - powerCount]) if(len(powerClustersHelpers) == 0): return 'again' displacement = 0 for i in range(0,len(powerI)): subClustersHelpers.pop(powerI[i]-displacement) displacement += 1 powerRecMatrix = r.buildRecommendations(names, powerClustersHelpers) # index 5 results.append(powerRecMatrix) # index 6 results.append([customerClustersHelpers]) # index 7 results.append(subClustersHelpers) # index 8 results.append(powerClustersHelpers) # index 9 results.append(c.matrix) # index 10 productClustersMap = st.createClusterMap(productClusters) results.append(productClustersMap) results.append(productClusterLocator) return results