Beispiel #1
0
    def runWithResponsibility(self, methodsResultDict:dict, modelDF:DataFrame, userID:int, numberOfItems:int, argumentsDict:Dict[str,object]={}):

        # testing types of parameters
        if type(methodsResultDict) is not dict:
            raise ValueError("Type of methodsResultDict isn't dict.")
        for methI in methodsResultDict.values():
            if type(methI) is not pd.Series:
                raise ValueError("Type of methodsParamsDF doen't contain Series.")
        if (not isinstance(modelDF, PModelDHondt)) and (not isinstance(modelDF, PModelDHondtPersonalised))\
                and  (not isinstance(modelDF, PModelDHondtPersonalisedStat))\
                and  (not isinstance(modelDF, PModelHybrid)):
            raise ValueError("Type of methodsParamsDF isn't DataFrame.")

#        if not isinstance(modelDF, DataFrame):
#            raise ValueError("Type of methodsParamsDF isn't DataFrame.")
#        if list(modelDF.columns) != ['votes']:
#            print("columns: " + str(modelDF.columns))
#            print("aaaaaaaaaaaaaaaaaaaaaaa")
#            print("userID: " + str(userID))
#            print("aaaaaaaaaaaaaaaaaaaaaaa")
#            print(modelDF.head(10))
#            raise ValueError("Argument methodsParamsDF doen't contain rights columns.")
        if type(numberOfItems) is not int:
            raise ValueError("Type of numberOfItems isn't int.")

#        if sorted([mI for mI in modelDF.index]) != sorted([mI for mI in methodsResultDict.keys()]):
#            raise ValueError("Arguments methodsResultDict and methodsParamsDF have to define the same methods.")
#        for mI in methodsResultDict.keys():
#            if modelDF.loc[mI] is None:
#                raise ValueError("Argument modelDF contains in ome method an empty list of items.")
        if numberOfItems < 0:
            raise ValueError("Argument numberOfItems must be positive value.")
        if type(argumentsDict) is not dict:
            raise ValueError("Argument argumentsDict isn't type dict.")

        aggregatedItemIDs:List[int] = self.run(methodsResultDict, modelDF, userID, numberOfItems, argumentsDict)


        itemsWithResposibilityOfRecommenders:List[int,np.Series[int,str]] = modelDF.countResponsibility(
            userID, aggregatedItemIDs, methodsResultDict, numberOfItems, argumentsDict)

        # list<(itemID:int, Series<(rating:int, methodID:str)>)>
        return itemsWithResposibilityOfRecommenders