コード例 #1
0
    def setUpClass(cls):
        super(Test, cls).setUpClass()
        
        dbPath = "testDb.sqlite"
        if os.path.exists(dbPath):
            os.remove(dbPath)
        
        store = Store(dbPath)
        assert isinstance(store, Store)
        
        for k1 in range(2**3):
            buildParameter = BuildParameter(label = "test" + str(k1))
            agent = Agent()

            for epoch in range(2**4):        
        
                agentMemento = agent.createMemento()
                buildParameterMemento = buildParameter.createMemento()
                buildParameterKey = buildParameter.key
                buildParameterLabel = buildParameter.label
        
                storeField = StoreField(agentMemento, epoch, buildParameterMemento, buildParameterKey, buildParameterLabel)
                assert isinstance(storeField, StoreField)
                
                store.append(storeField)
                
        cls.dbPath = dbPath
コード例 #2
0
    def test002(self):

        store = Store(self.dbPath)
        assert isinstance(store, Store)

        for k1 in range(2**3):
            buildParameter = BuildParameter(label="test" + str(k1))
            agent = Agent()

            for epoch in range(2**4):

                agentMemento = agent.createMemento()
                buildParameterMemento = buildParameter.createMemento()
                buildParameterKey = buildParameter.key
                buildParameterLabel = buildParameter.label

                storeField = StoreField(agentMemento, epoch,
                                        buildParameterMemento,
                                        buildParameterKey, buildParameterLabel)
                assert isinstance(storeField, StoreField)

                store.append(storeField)

        store.update_db()

        for storeField in store.restore("test%", 1):
            assert isinstance(storeField, StoreField)
コード例 #3
0
class Manager(object):
    def __init__(self, pcid, cid, datamonth):
        self.pcid = pcid
        self.cid = cid
        self.datamonth = datamonth

        self.save = Store(pcid, cid)

    @decorator.process
    def make_mat(self):
        """
        Select the useful targets and submarkets
        Organize raw data
        Embedding the scores and make the matrix
        Construct the relationship between line No. and model
        PCA dimension reduction
        :return:
        """
        info_target = get_targets_info(self.pcid,
                                       self.cid,
                                       self.datamonth,
                                       src="LOCAL")
        targets = select_targets(info_target, store=self.save)

        urls = get_urls(self.pcid, self.cid, self.datamonth, src="LOCAL")
        _ = map_model_urls(urls, self.save)

        info_submarket = get_submarket_info(self.pcid,
                                            self.cid,
                                            self.datamonth,
                                            src="LOCAL")
        _, sm_hot, = select_submarkets(info_submarket, store=self.save)

        info = reconstruct_info(info_target, info_submarket, targets, sm_hot)
        mat, map_line = embedding(info, targets, self.save)
        pca_mat, _ = pca(mat, self.save)

        # mat, map_line = embedding(info, targets, self.save, normal="NORMAL")
        # pca_mat = mat

        return pca_mat, map_line, info, sm_hot

    @decorator.process
    def describe_submarket(self, mat, map_line, info, sm_hot):
        """
        Describe submarkets as vector
        :param mat:
        :param map_line:
        :param info:
        :param sm_hot:
        :return:
        """
        models = select_top_model(info, sm_hot, self.save)
        lines = model_map_to_line(models, map_line)

        portraits_sm = establish_portraits_sm(lines, mat, self.save)
        # portraits_sm = establish_portraits_sm_by_lda(lines, mat, self.save)

        return portraits_sm

    @decorator.process
    def position_models(self, mat, map_line, portraits_sm):
        """
        Calculate distance between every model and every submarket
        :param mat:
        :param map_line:
        :param portraits_sm:
        :return:
        """
        distances, similarity = find_position(mat, map_line, portraits_sm,
                                              self.save)
        return distances, similarity

    @decorator.process
    def append_feature(self, mat, map_line):
        sale_info = get_sale_info(self.pcid,
                                  self.cid,
                                  self.datamonth,
                                  src="LOCAL")
        sale_mat = map_feature_info(sale_info, map_line, self.save, "sale")
        mat = append_method(mat, sale_mat)

        sku_info = get_sku_info(self.pcid,
                                self.cid,
                                self.datamonth,
                                src="LOCAL")
        # getting sku from table product_brain need loading json
        sku_info = load_sku_json(sku_info)
        sku_mat = map_feature_info(sku_info, map_line, self.save, "sku")
        mat = append_method(mat, sku_mat)

        self.save.append("mat_plus",
                         data=mat,
                         layout="np.array",
                         val_type="float")
        return mat

    @decorator.process
    def run(self):
        """
        Process the tasks and save datum and results
        :return:
        """
        mat, map_line, info, sm_hot = self.make_mat()
        mat = self.append_feature(mat, map_line)
        portraits_sm = self.describe_submarket(mat, map_line, info, sm_hot)
        _, _ = self.position_models(mat, map_line, portraits_sm)
        self.save.save()

    @decorator.process
    def query(self, method="PCA"):
        """
        Query the distance and similarity between model and hot submarkets
        : demo: brand 1号宝贝 model OUYOU0011
        : demo: brand fronton/弗朗顿 model CB-666D
        :return:
        """
        if "LDA" == method:
            query_position_lda(self.save)
        else:
            query_position(self.save)

    def main(self):
        choice = input(
            "\ninput 0 to generate result,input 1 to query result:\n")
        if "0" == str(choice):
            self.run()
        else:
            method = input("\ninput suffix:\n")
            self.query(method)