Chevauchement / Nombre de périodes au même momentSalut tout le monde,
J'ai actuellement du mal avec certaines visualisations de données. J'ai un énorme tableau contenant des milliers d'événements qui sont capturés, y compris. heure de début et de fin de différents événements à différents endroits (ceux-ci sont affichés sous forme de texte) dans le format suivant que j'ai converti avec succès pour être reconnu comme heure :
Début : 2022-01-28T22:26:13
Fin : 2022-01-28T23:10:56
Je voudrais maintenant visualiser/compter le nombre d'événements parallèles, c'est-à-dire superposer toutes les périodes résultantes et voir le nombre maximum d'événements parallèles sur les différents emplacements. J'ai également la durée disponible comme différence entre l'heure de début et l'heure de fin, donc au cas où cela serait nécessaire....
Peut-être que quelqu'un peut m'aider ?
Acclamations!
JMP16
Exploration et visualisation des donnéesPersonnalisation de masseles fenêtresRe : Chevauchement / Nombre de périodes au même momentIl y a juste quelques problèmes avec cette méthode (que j'ai remarqué plus tard), mais heureusement comme il s'agit d'une méthode interactive, vous pouvez les voir assez facilement à partir des données (j'ai ajouté quelques exemples d'images). Cela peut également ne pas poser de problème, selon ce qui est calculé.
1. Si une heure commence avant l'heure de début vérifiée et se termine après l'heure de fin vérifiée, elle ne sera pas calculée
2. si le temps commence et se termine entre les heures vérifiées, il sera calculé deux fois
Re : Chevauchement / Nombre de périodes au même momentSalut,
merci beaucoup pour votre code. Je l'ai vérifié et cela pourrait être utile à d'autres fins. MAIS : Votre idée
" Vous devriez pouvoir le faire également de manière presque interactive dans JMP en créant une nouvelle table de données avec trois colonnes : Time, TypeOfTime (start, end) et le numéro de ligne d'origine. Ensuite, triez-le par ordre croissant et écrivez une formule pour vérifier les chevauchements (pourrait peut-être utiliser Lag(), j'ai utilisé Col Min(Row(), :Row) et Col Max(Row(), :Row()) et leur différence) . Enfin, créez un tableau récapitulatif pour obtenir la valeur maximale/rejoignez le tableau d'origine en fonction des numéros de ligne. "
était simple et génial ! J'ai juste empilé, classé par horodatage et implémenté un canal de formule renvoyant simplement +1/-1 selon qu'il s'agit de début ou de fin, puis je les résume dans un autre canal. Fonctionne à merveille !
Re : Chevauchement / Nombre de périodes au même momentSalut Jthi,
tout d'abord merci beaucoup pour vos efforts ! Je vérifierai la solution dès que possible et vous ferai part de vos commentaires !!
Acclamations
Ulf
Re : Chevauchement / Nombre de périodes au même momentJ'ai remarqué quelques problèmes avec mon approche initiale, j'ai donc repensé et écrit un nouveau script, en espérant qu'il soit désormais correct. Cela pourrait probablement être rendu plus rapide en utilisant uniquement des calculs matriciels, mais je n'ai pas pris la peine de le faire maintenant. Cela laisse volontairement un certain nombre de tables de données ouvertes, il est donc plus facile de vérifier si les valeurs sont correctes.
Names Default To Here(1);
dt = Current Data Table();
dt << Clear Select;
dt << Sort(By(:"Start time (UTC)"n), Replace Table, Order(Ascending));
dt << New Column("Overlap", Numeric, Continuous);
dt << New Column("OriginalRowOrder", Numeric, Continuous, <<SET each="" value=""> :MaxRowForRow);
inside + outside; // if you need only inside, then don't calculate outside overlaps and just return inside
)
);
dt_overlaps << Update(
With(dt),
Match Columns(:OriginalRowOrder = :OriginalRowOrder),
Add Columns from Update Table(
:"Start time (UTC)"n, :"End time (UTC)"n, :Location
)
);
dt_statistics = dt_overlaps << Summary(
Group(:Location),
Min(:Overlaps),
Max(:Overlaps),
Range(:Overlaps),
Mean(:Overlaps),
Median(:Overlaps),
Freq("None"),
Weight("None"),
statistics column name format("stat"),
Link to original data table(0),
output table name("Overlap statistics by location")
);
f = Function({a},
selected_rows = dt_overlaps << Get Selected Rows;
dt_stack << Select Where(Contains(dt_overlaps[selected_rows, "OriginalRowOrder"], :OriginalRowOrder))
);
rs = dt_overlaps << make row state handler(f);</SET>Re : Chevauchement / Nombre de périodes au même momentSi l'idée est d'obtenir uniquement un nombre maximum de chevauchements pour l'emplacement, vous pouvez d'abord calculer tous les chevauchements en ajoutant les heures de début et de fin à une matrice, puis en les triant tout en gardant une trace de ce qui est la fin et de ce qui est le début. Ensuite, vous pouvez calculer le nombre de valeurs qui correspondent à chaque paire début-fin.
Peut-être que quelque chose comme ceci fonctionnera (il pourrait y avoir des problèmes avec les valeurs dupliquées) :
Names Default To Here(1);
dt = Current Data Table();
dt << New Column("Overlap", Numeric, Continuous);
dt << Sort(By(:"Start time (UTC)"n), Replace Table, Order(Ascending));
starts = dt[0, 1];
ends = dt[0, 2];
m = Sort Ascending(starts |/ ends);
For Each Row(dt,
start = :"Start time (UTC)"n;
end = :"End time (UTC)"n;
:Overlap = Loc(m, end)[1] - Loc(m, start)[1] - 1;
);
/*
dt << New Column("MaxOverlap", Numeric, Continuous, << Set Each Value(
Col Max(:Overlap, :Location)
));
*/
tab = dt << Tabulate(
Show Control Panel(0),
Add Table(
Column Table(Statistics(Min, Mean, Max), Analysis Columns(:Overlap)),
Row Table(Grouping Columns(:Location))
)
);

Vous devriez pouvoir le faire également de manière presque interactive dans JMP en créant une nouvelle table de données avec trois colonnes : Time, TypeOfTime (start, end) et le numéro de ligne d'origine. Ensuite, triez-le par ordre croissant et écrivez une formule pour vérifier les chevauchements (pourrait peut-être utiliser Lag(), j'ai utilisé Col Min(Row(), :Row) et Col Max(Row(), :Row()) et leur différence) . Enfin, créez un tableau récapitulatif pour obtenir la valeur maximale/rejoignez le tableau d'origine en fonction des numéros de ligne.

Résumé (je n'ai pas ajouté de maximum ici) :

Il semble y avoir de légères différences entre les deux méthodes, alors peut-être que l’une d’entre elles est fausse. Peut-être dû à des valeurs dupliquées (j'ai également supprimé les valeurs manquantes de la méthode interactive)

Il est beaucoup plus facile de rechercher des problèmes possibles lorsque vous disposez d'un tableau de données :

La méthode interactive peut également être scriptée très facilement avec le journal amélioré de JMP16.
Edit : cela pose très probablement les problèmes suivants : 1. si une heure commence avant l'heure de début vérifiée et se termine après l'heure de fin vérifiée, elle ne sera pas calculée et 2. si l'heure commence et se termine entre les heures vérifiées, elle sera calculée deux fois . Le deuxième devrait être assez facile à réparer, mais le premier nécessitera un peu plus.
Exemple de 2. OriginalRowOrder commence et se termine dans OriginalRowOrder 10 et est calculé deux fois :

Exemple de 1. OriginalRowOrder 13 commence et se termine en dehors de 14 :

Edit2 : Je n'ai pas pris la peine de comprendre comment ceux-ci pourraient être traités de manière interactive, j'ai donc écrit assez rapidement deux formules (j'espère qu'elles sont correctes...). Les valeurs manquantes doivent être supprimées/recodées avant de les utiliser. OverlapsOutside peut devenir un peu lent s'il est effectué avec une formule sans aucune optimisation supplémentaire.
OverlapsInside (devrait résoudre le problème 2) :
N Items(Associative Array(:OriginalRowOrder[Index(:MinRowForRow, :MaxRowForRow)])) - 1
OverlapsOutside (devrait résoudre le problème 1) :
If(Row() == 1,
m = :OriginalRowOrder << Get As Matrix
);
Try(
starts = Associative Array(m[Index(1, :MinRowForRow - 1)]);
ends = Associative Array(m[Index(:MaxRowForRow + 1, N Rows())]);
starts << Intersect(ends);
N Items(starts);
,
.
);
OverlapsInside peut suffire, selon la façon dont vous souhaitez calculer les chevauchements. Si vous avez besoin des deux, obtenez simplement la somme de ces valeurs.


Re : Chevauchement / Nombre de périodes au même momentvoici un ensemble de données réduit avec seulement deux jours, mais il devrait faire l'affaire. Je n'ai pas nécessairement besoin d'une vue graphique, mais pour le débogage, ce serait bien d'avoir une sorte de contrôle pour savoir si le nombre d'événements parallèles est raisonnable.
Merci d'avance!!
Ulf
Re : Chevauchement / Nombre de périodes au même moment Txnelson,
Merci pour l'astuce, je vais télécharger le complément car il semble tout à fait utilisable. Mais dans mon cas, l’axe y serait trop surchargé en raison du nombre d’emplacements dont je dispose.
Re : Chevauchement / Nombre de périodes au même momentJe vous suggère de télécharger le complément de diagramme de Gantt.Il vous fournira un excellent moyen d’afficher vos événements.

Re : Chevauchement / Nombre de périodes au même momentSalut @ubpk ,
peut-être que si vous nous donnez un petit échantillon dans un tableau, je pourrai l'essayer.
sinon, jetez un œil au tableau et à l'image ci-joints et dites-nous si cela va dans la bonne direction pour commencer. si vous exécutez le script dans la table de données, vous obtenez le graphique.
Tous mes vœux,
Ron
