def _correlate2Lobs(lobName1, lobName2, granularity=0): lobConfig1 = config.getLobConfigByName(lobName1) lobConfig2 = config.getLobConfigByName(lobName2) if granularity is 0: if (lobConfig1.granularity < lobConfig2.granularity - 60): return -1 granularity = max(lobConfig1.granularity, lobConfig2.granularity) import mediation.api.util as util fromDate = util.jsStringToDate("2016-10-28T10:00:00.000Z") toDate = util.jsStringToDate("2016-10-29T10:00:00.000Z") lob1Query = DateRangeGroupQuery(fromDate, toDate, [lobName1], granularity) lob2Query = DateRangeGroupQuery(fromDate, toDate, [lobName2], granularity) lob1Data = lob1Query.execute() lob2Data = lob2Query.execute() fromDate = util.jsStringToDate("2016-10-25T10:00:00.000Z") toDate = util.jsStringToDate("2016-10-26T10:00:00.000Z") lob1Query = DateRangeGroupQuery(fromDate, toDate, [lobName1], granularity) lob2Query = DateRangeGroupQuery(fromDate, toDate, [lobName2], granularity) lob1Data.extend(lob1Query.execute()) lob2Data.extend(lob2Query.execute()) lob1Data = util.dateDataListToList(lob1Data, lobName1.replace(".", "_")) lob2Data = util.dateDataListToList(lob2Data, lobName2.replace(".", "_")) lin = linregress(lob1Data, lob2Data) return lin.rvalue
def getBestCorrelations(lobName, correlationThreshold=0.9, granularity=0): lobConfig = config.getLobConfigByName(lobName) otherLobs = config.getLobsConfig()["lobs"][lobConfig.country] resArr = [] for lob in otherLobs: fullLobName = lobConfig.country + "." + lob if lobName == fullLobName: continue try: correlation = _correlate2Lobs(lobName, fullLobName, granularity) dayCorrelation = _correlate2Lobs( lobName, fullLobName, 1440) #lobs show have same workday/weekend changes resArr.append((fullLobName, correlation, dayCorrelation)) except: traceback.print_exc() pass resArr = [ x for x in resArr if x[1] >= correlationThreshold and x[2] >= correlationThreshold ] resSorted = sorted(resArr, key=lambda x: x[1], reverse=True) return map(lambda x: { "lobName": x[0], "correlation": (x[1] + x[2]) / 2 }, resSorted)
def correlate2Lobs(lobName1, lobName2): lobConfig1 = config.getLobConfigByName(lobName1) lobConfig2 = config.getLobConfigByName(lobName2) if (lobConfig1.granularity < lobConfig2.granularity - 60): return -1, 0 granularity = max(lobConfig1.granularity, lobConfig2.granularity) import mediation.api.util as util fromDate = util.jsStringToDate("2016-10-03T10:00:00.000Z") toDate = util.jsStringToDate("2016-10-10T10:00:00.000Z") lob1Query = DateRangeGroupQuery(fromDate, toDate, [lobName1], granularity) lob2Query = DateRangeGroupQuery(fromDate, toDate, [lobName2], granularity) lob1Data = lob1Query.execute() lob1Data = util.dateDataListToList(lob1Data, lobName1) lob2Data = lob2Query.execute() lob2Data = util.dateDataListToList(lob2Data, lobName2) lin = linregress(lob1Data, lob2Data) # cosineSimilarity = cosine_similarity(lob1Data, lob2Data) return lin.rvalue, 0
def getBestCorrelations(lobName): mainLobConfig = config.getLobConfigByName(lobName) country = mainLobConfig.country countryLobs = CZ_LOBS resArr = [] for lob in countryLobs: fullLobName = country + "." + lob try: correlation = correlate2Lobs(lobName, fullLobName) resArr.append((fullLobName, correlation[0])) except: traceback.print_exc() pass resSorted = sorted(resArr, key=lambda x: x[1], reverse=True) return resSorted
def getBestCorrelations(lobName, correlationThreshold=0.9, granularity=0): lobConfig = config.getLobConfigByName(lobName) otherLobs = config.getLobsConfig()["lobs"][lobConfig.country] resArr = [] for lob in otherLobs: fullLobName = lobConfig.country + "." + lob if lobName == fullLobName: continue try: correlation = _correlate2Lobs(lobName, fullLobName, granularity) resArr.append((fullLobName, correlation)) except: traceback.print_exc() pass resArr = [x for x in resArr if x[1] >= correlationThreshold] resSorted = sorted(resArr, key=lambda x: x[1], reverse=True) return list( map(lambda x: { "lobName": x[0], "correlation": x[1] }, resSorted))
def __init__(self, lobName, dateTime): self.lobName = lobName self.lobConfig = config.getLobConfigByName(lobName) self.granularity = self.lobConfig.granularity self.dateTime = dateTime