in aiops/AnomalyDetection/utils/utils.py [0:0]
def insertAnomaly(datas,anomalyRatio,slowNumRatio,slowTimeRange,labels,exeTime,edges):
#labels=np.zeros((datas.shape[0],datas.shape[1]))
exeTime=exeTime[:-1]
edges=edges[1:]
#exeTime=np.array([5,15,25,35,55,90,130,170,210,255,305,355,405])
#edges=[10,20,30,40,70,110,150,190,230,280,330,380,430]
for i,data in enumerate(datas):
length,interval=data.shape
anomalyNum=math.ceil(length*anomalyRatio)
positions=[random.randint(0,length-1) for i in range(anomalyNum)]
for position in positions:
slowNum=np.random.random(interval-1)
slowNum[-1]=0
slowNum/=slowNum.sum()
slowNum*=slowNumRatio
slowTime=np.random.randint(slowTimeRange[0],slowTimeRange[1],size=interval-1)
presTime=exeTime+slowTime
slowDur = random.randint(2, 5)
for k in range(min(slowDur,length-position)):
flag = True
for j in range(interval - 1):
transfer=min(datas[i,position+k,j],slowNum[j])
datas[i,position + k, j] = max(datas[i,position + k, j] - slowNum[j], 0)
target = 0
if transfer>0:
flag=False
for edge in edges:
if presTime[j] < edge:
break
target += 1
datas[i,position + k, target] += transfer
if not flag:
labels[i,position+k] = 1.
return datas,labels