Aide pour transformer une table et convertir un horodatage ?j'ai donc une table de données d'un capteur que je ne sais pas trop comment formater correctement. C'est un capteur de lumière qui produit des lectures de tension.
La première colonne du tableau est la longueur d'onde mesurée, puis il y a plus de 100 colonnes pour chaque instance de mesure des données.
Comment ferais-je pour transformer ou faire pivoter cela correctement ? Une simple transposition de table serait-elle la bonne activité ?
Ensuite, des conseils sur la façon de convertir l'horodatage brut en une série temporelle utilisable ? Il sort comme ça.
JJ-MM-AAAA:MM:SS.###Z
que puis-je faire pour convertir cela en une valeur de série chronologique utilisable pour tracer comme un axe des x? C'est au millième de seconde, par incréments de 0,1 s.
Bonus, comment faire pour trouver le min et le max et normaliser le temps à 0-->max ?
...
14-07-2020T22:47:31.400Z
14-07-2020T22:47:31.500Z
14-07-2020T22:47:31.600Z
14-07-2020T22:47:31.700Z
14-07-2020T22:47:31.800Z
14-07-2020T22:47:31.900Z
...
Fusion et nettoyage des donnéesRe : Aide pour transformer une table et convertir un horodatage ?Merci Jeff. Votre contribution à cette équation finale est excellente et supprime l'inquiétude d'une course qui traverse minuit.
Re : Aide pour transformer une table et convertir un horodatage ?
@aliegner1 a écrit:
Question sur les horodatages : comment puis-je convertir cela en une durée brute ? Je vois qu'il y a la formule "Date Difference", mais il semble qu'elle ait besoin de deux colonnes. Comment puis-je en faire une série chronologique commençant à 0,000 s --> temps maximum ?
Avant d'aller trop loin, je pense que nous devons clarifier cette question ici.@txnelson interprété cela comme si vous vouliez vous débarrasser de la partie date de la valeur datetime. Je ne pense pas que ce soit ce que tu veux.
Vous avez maintenant une colonne de valeurs de date et d'heure . Cette colonne peut être utilisée comme une série chronologique, elle ne commencera tout simplement pas à 0.
Si, à la place, vous préférez une colonne qui compte la différence de temps entre les lignes consécutives du tableau de données, ce qui est facile à faire avec une simple soustraction et indice de ligne .

J'ai deux ou trois choses à souligner ici :
- Dans la première ligne, la valeur est définie sur 0.
- Je n'ai pas besoin d'utiliser la fonction Date Difference() car je suis intéressé par les valeurs en secondes. Ainsi, la simple soustraction fonctionne.
- À cause de arithmétique en virgule flottante la différence entre ces valeurs ne sont pas précisément sur les dixièmes de seconde. J'ai formaté cette colonne pour qu'elle s'affiche en dixièmes de seconde, c'est-à-dire Fixed Dec avec 1 décimale.
- Enfin, mais peut-être plus compliqué, votre question initiale indiquait que vous aviez plusieurs longueurs d'onde. Voulez-vous redémarrer cette séquence temporelle à 0 pour chaque longueur d'onde ? Si c'est le cas, ce n'est pas un problème. Il faudra juste quelques changements à la formule.

- Maintenant, la formule vérifie la ligne 1 ou pour que la valeur lambda soit différente de la valeur lambda précédente (en utilisant le Fonction décalage() ) pour définir la séquence sur 0.
- Il utilise également Lag() pour obtenir la valeur de la séquence dans la ligne précédente et ajoute la différence dans les valeurs de temps entre les lignes actuelles et précédentes.
J'espère que cela aide à clarifier et à fournir une bonne direction.
Re : Aide pour transformer une table et convertir un horodatage ?Compte tenu des questions que vous posez, ma première réponse est que vous devez lire un peu.Vous devez parcourir les documents Découverte de JMP et Utilisation de JMP.Les deux sont disponibles dans la bibliothèque de documentation JMP sous le menu déroulant Aide.
En ce qui concerne le problème de dépassement de jours ... ce que vous devrez faire est de vérifier si la différence de date () est supérieure à 0 jours, et si ce n'est pas le cas, calculez l'heure selon vos besoins.
Lamda n'a pas besoin d'être remplacé par un caractère.Mais cela peut facilement être fait en changeant le type de données.Ou vous pouvez simplement changer le Type de modélisation en Ordinal ou Nominal.
:Lamda << Data Type(character);
// or
:Lamda<<MODELING type=""></MODELING>
Re : Aide pour transformer une table et convertir un horodatage ?Génial Jim!
quelques questions pour voir ce que vous en pensez :
- comment se prémunir contre une course qui dépasse minuit le lendemain ? l'utilisation de l'heure du jour pour obtenir une heure absolue ou la normaliser pour qu'elle démarre à zéro serait affectée par une exécution s'étalant sur 2 jours.
- Des réflexions sur la conversion du col Lambda en une colonne de caractères ? C'est essentiellement une étiquette, elle ne devrait donc pas être numérique, n'est-ce pas ? Sa mesure à plusieurs longueurs d'onde t puis trace les données v temps.
- comment puis-je intégrer le fichier d'origine dans la table de données nouvellement créée ? J'ai changé le dt initial = --> en une boîte de dialogue d'ouverture de fichier.

Re : Aide pour transformer une table et convertir un horodatage ?Voici un petit script qui devrait vous donner un bon "coup de pouce" pour mettre vos données dans un format analytique. Il prend votre exemple de table de données et crée :

names default to here(1);
dt=current data table();
// Get the column names from the data table
colNames = dt << get column names;
// Remove Lamda from the list
remove from(colNames,1,1);
// Stack the data
dtStack = dt << Stack(
columns(
colNames
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Output Table( "Stacked" )
);
// Create a new JMP DateTime column
dtStack << New Column( "Timestamp",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 26, 3 ),
Input Format( "d/m/y h:m:s", 0 ),
Formula( Informat( Word( 1, :Label, "Z" ), "d/m/y h:m:s" ) )
);
// Remove formula to convert column to static values
dtStack:Timestamp << delete formula;
// Create the Time variable
dtstack << New Column( "Time",
Numeric,
"Continuous",
Format( "hr:m:s", 17, 3 ),
Input Format( "hr:m:s", 0 ),
Formula( Time Of Day( :Timestamp ) )
);
// Get rid of no longer needed "Label" column
dtStack << delete columns( "Label" );
Re : Aide pour transformer une table et convertir un horodatage ?Voir le sous-ensemble joint (pré empilé).
Je reçois l'heure de la journée, mais je dois ensuite me prémunir contre les conditions lorsqu'une course se produit au-delà de minuit et que le jour change ? Je le remets à zéro en faisant [time of day() - col minimum(time of day())
Re : Aide pour transformer une table et convertir un horodatage ?Pour convertir une colonne Time Stamp(JMP Date/Time) en une valeur d'heure uniquement, utilisez la fonction Time of Day(). Il renvoie effectivement le nombre de secondes entre le minuit précédent et l'heure de la mesure.
En ce qui concerne l'empilement lorsque les noms de colonnes changent d'un jour à l'autre ...... il suffit d'obtenir une liste des colonnes de la table de données, puis d'appliquer cette liste aux instructions Stack Platform. Le message à passer à la table de données pour récupérer les noms de colonnes est dt << get column names().
Serait-il possible de joindre un exemple de tableau de données ou de feuille de calcul de vos données. Il est assez difficile de voir les spécificités des données d'entrée, ce qui peut entraîner la transmission de fausses instructions.Re : Aide pour transformer une table et convertir un horodatage ?Merci Jim et Jeff, ça marche très bien ! Je suis en train de lire word() en ce moment.
Question sur les horodatages : comment puis-je convertir cela en une durée brute ? Je vois qu'il y a la formule "Date Difference", mais il semble qu'elle ait besoin de deux colonnes. Comment puis-je en faire une série chronologique commençant à 0,000 s --> temps maximum ?
Question sur le script de la commande stack : en regardant le script, il a une ligne unique pour chaque colonne... comment rendre cela dynamique pour la prochaine fois que je tire ce fichier de données ?
Data Table( "Sheet1" ) << Stack(
columns(
:Name( "14-07-2020T22:47:31.400Z" ),
:Name( "14-07-2020T22:47:31.500Z" ),
:Name( "14-07-2020T22:47:31.600Z" ),
....for every column...
),
Source Label Column( "TimeStamp" ),
Stacked Data Column( "data" ),
Output Table( "sensor table" )
)
Re : Aide pour transformer une table et convertir un horodatage ?Jeff,
Je suppose que mon âge montre ..... vous m'avez encore battu à la réponse.
Re : Aide pour transformer une table et convertir un horodatage ?Concernant vos données, je vous suggérerais de vous pencher sur l'empilement des colonnes.Ce formulaire vous fournira davantage d'outils d'analyse JMP.
En ce qui concerne votre problème d'horodatage... voici un exemple de script qui prend une colonne d'entrée appelée "TS" et la convertit en une colonne JMP Date/Heure.
Names default to here(1);
dt = New Table( "Example",
Add Rows( 6 ),
New Column( "TS",
Character,
"Nominal",
Set Values(
{"14-07-2020T22:47:31.400Z", "14-07-2020T22:47:31.500Z",
"14-07-2020T22:47:31.600Z", "14-07-2020T22:47:31.700Z",
"14-07-2020T22:47:31.800Z", "14-07-2020T22:47:31.900Z"}
)
)
);
dt << New Column( "Column 2",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 26, 3 ),
Input Format( "d/m/y h:m:s", 0 ),
Formula( Informat( Word( 1, :TS, "Z" ), "d/m/y h:m:s" ) )
);Re : Aide pour transformer une table et convertir un horodatage ?Je pense que tout ce dont tu as besoin est Tableaux-> Pile en plaçant vos colonnes de temps dans le rôle Stack Columns.
Vous devriez vous retrouver avec deux colonnes, longueur d'onde et heure.
En ce qui concerne la conversion de votre horodatage en une colonne datetime JMP, Mot() et Informer() sont mon rendez-vous ici :

Lecture complémentaire :
Si vous n'apprenez qu'une seule fonction de l'éditeur de formules, Word() est celle
Utilisation de dates, d'heures, de dates-heures et de durées dans JMP