2015-04-01 1 views
1

Je souhaite créer un algorithme mais je ne sais pas comment démarrer.Algorithme de données continues précis en temps opportun

Cet algorithme sera en fait une méthode qui accepte un tableau de N objets avec certains des attributs, createdAt, value. Je vais trier le tableau de l'ancien au nouveau (createdAt) et ensuite je dois savoir à quel point les données disponibles sont cohérentes, ce qui veut dire que j'ai au moins 5 enregistrements et toutes les demi-heures.

Exemple-TestCode:

- (void) normalizeData:(NSArray*)records 
{ 
// sort the records 
NSArray* sortedRecords = [records sortWithCreatedAt]; 

// split all dates in the records, distinct them, and create a dictionary with a key for every date, for value create another dictionary with the hour as key and the records as the value. 

NSArray* distinctDates = [sortedRecords valueForKeyPath:@"@distinctUnionOfObjects.createdAt"]; // should only consider month-day-year-hour 
NSMutableDictionary* dictionary = [NSMutableDictionary dictionary]; 
for (NSDate* date in distinctDates) 
    { 
    NSString* stringDate = [date string]; 
    NSArray* recordsForDate = [sortedRecords valueForKeyPath:[NSString stringWithFormat:@"[collect].{createdAt=%@}.self", stringDate]]; // let's say you got them with this line 
    [dictionary setObject:recordsForDate forKey:date]; 
    } 

for (NSDate* keyDate in dictionary) 
    { 
    NSArray* records = [dictionary objectForKey:keyDate]; 
    Record* previousRecord = nil; 
    for (Records* record in records) 
     { 
     // I'll have to keep the previous record and compare the time difference with the new 
     NSInteger secondsAfterDate = 0; 
     if (previousRecord) 
     { 
     secondsAfterDate = [record.createdAt timeIntervalSinceDate:previousRecord.createdAt]; 
     // add logic to create trend difference in a model that has for every hour of the records count, the records and suffice description 
     // logic if the records count and timespan is suffice. 

     } 
     previousRecord = record; 
     } 
    } 
} 

J'apprécierait toute contribution au processus dans la méthode.

L'objectif ultime est également de créer un retour (invocation d'un gestionnaire de bloc) pour chaque résultat des enregistrements traités. La logique devrait se terminer par, 5 enregistrements au moins par heure et un intervalle de temps entre eux moins de 15 minutes.

+0

Lorsque vous voulez dire que vous avez besoin de 5 enregistrements par heure, voulez-vous dire entre 23h et 12h, ou que 5 séparés (dans les termes "index" dans tableau trié) les différences de temps doivent être inférieures à une heure? – Larme

+0

Pour chaque heure (23h - 12h) j'ai besoin d'au moins 5 enregistrements, avec un temps ~ 15 minutes. De cette façon, je peux dire que j'ai assez de données à traiter pour un changement de tendance. –

Répondre

0

Prenez la durée totale de la collecte d'enregistrements (différence entre createdAt du premier enregistrement et createdAt du dernier enregistrement) et discrétisez-la dans les bins. Placez chaque objet dans la corbeille appropriée. Puis utilisé une fenêtre coulissante avec deux tailles de fenêtre (30 minutes et 60 minutes). En parcourant le tableau, évaluez continuellement si les conditions que vous décrivez sont remplies. Notez que pour l'approche ci-dessus, il est important de définir correctement la largeur de la corbeille comme la résolution de votre processus d'horodatage. Puisque vous ne l'indiquez pas dans votre message, n'hésitez pas à commenter s'il s'agit d'un problème.

+0

Merci pour votre contribution. Je vais vérifier votre suggestion dès que possible. –