Esistono quattro valori temporali comuni con cui potresti dover interagire in JMP : date, orari, datetime e durate. Che tu stia importando dati da un database o da un file flat, che tu li faccia riferimento in JSL o li utilizzi su un asse in JMP, è importante capire come JMP memorizza questi valori e le implicazioni del loro utilizzo.
Valori di data e ora
I valori datetime rappresentano un orario specifico in una data specifica, ad esempio:
- 12:00, 20 gennaio 2016
- 07 nov 1918 15:00
- 20/07/1969 20:17
Come nella maggior parte delle applicazioni analitiche, i valori datetime vengono memorizzati in JMP come numero di unità di tempo a partire da un orario di riferimento. In JMP, l'orario di riferimento è la mezzanotte del 1° gennaio 1904 e le unità sono i secondi. Per dirla in modo più chiaro: JMP memorizza le date come numero di secondi trascorsi dalla mezzanotte del 1° gennaio 1904.
Quindi, i valori numerici corrispondenti ai valori datetime nei miei esempi precedenti sono:
| Data e ora |
Valore data/ora JMP (secondi dalla mezzanotte del 01/01/1904) |
| 12:00, 20 gennaio 2018 |
3536136000 |
| 07 nov 1918 15:00 |
468687600 |
| 20/07/196920:17 |
2068661820 |
Date
In JMP, i valori di data sono solo un caso speciale di valori di data e ora, in quanto presuppongono che l'ora del giorno sia 00:00. Quindi, contano semplicemente il numero di secondi dalla mezzanotte del 1° gennaio 1904 alla mezzanotte della data memorizzata.
Volte
I valori di tempo rappresentano un momento della giornata senza una data specifica. JMP memorizza i valori di tempo come il numero di secondi trascorsi dall'inizio del giorno a partire da mezzanotte. Quindi, 00:01:01 è 61. Sono trascorsi 61 secondi dalla mezzanotte.
Durate
Le durate non sono poi così speciali, se non per il fatto che sono numeri che rappresentano una quantità di un'unità di tempo. Non sorprende che JMP sia in grado di gestire al meglio le durate quando rappresentano un numero di secondi. Ne parleremo più approfonditamente quando parleremo della formattazione dei valori basati sul tempo per la visualizzazione.
Formattazione dei valori basati sul tempo per la visualizzazione
Visualizzare i valori basati sul tempo come numero di secondi non è particolarmente utile, quindi JMP dispone di diversi formati di data e ora per visualizzare questi valori.
Ricorda, però, che cambiare il modo in cui una data viene visualizzata non modifica il valore sottostante o il modo in cui viene analizzata. Ad esempio, cambiare il formato in "m/y" (ovvero mese/anno) non obbligherà JMP a riepilogare i dati per mese quando li analizzi o li rappresenti graficamente. Se desideri farlo, dovrai creare una nuova colonna che contenga i valori univoci che desideri riepilogare. Per creare queste nuove colonne, trasforma la colonna facendo clic con il pulsante destro del mouse sull'intestazione e scegliendo "Nuova colonna formula".
Importazione di valori basati sul tempo
Durante l'importazione dei dati, è importante assicurarsi che i valori basati sul tempo vengano memorizzati come valori numerici descritti sopra. Nella maggior parte dei casi, JMP esegue questa operazione automaticamente, tentando di riconoscere i valori basati sul tempo durante le operazioni di importazione o copia/incolla. È possibile verificare se questa operazione è stata eseguita correttamente osservando il modo in cui i valori nella colonna sono giustificati nella tabella dati. I valori numerici sono giustificati a destra, mentre i valori di tipo carattere sono giustificati a sinistra.
Wrong is a character column. Notice it is left-justified. Right is numeric column. It is right-justified.Wrong is a character column. Notice it is left-justified. Right is numeric column. It is right-justified.Wrong is a character column. Notice it is left-justified. Right is numeric column. It is right-justified.Wrong is a character column. Notice it is left-justified. Right is numeric column. It is right-justified.Wrong is a character column. Notice it is left-justified. Right is numeric column. It is right-justified.Wrong è una colonna di caratteri. Nota che è giustificata a sinistra. Right è una colonna numerica. È giustificata a destra.
Se si riscontrano valori basati sul tempo memorizzati come stringhe di caratteri, è possibile convertirli utilizzando la finestra di dialogo Informazioni colonna. È sufficiente modificare il Tipo di dati in numerico, il Formato nel formato data/ora desiderato e il Formato di input in quello che descrive le stringhe di caratteri presenti nei dati. JMP convertirà quindi i valori nei valori numerici appropriati.
First change the Data Type to Numeric.First change the Data Type to Numeric.First change the Data Type to Numeric.First change the Data Type to Numeric.First change the Data Type to Numeric.Per prima cosa cambia il tipo di dati in numerico.
Pick the Format that you want to use to display the time-based value.Pick the Format that you want to use to display the time-based value.Pick the Format that you want to use to display the time-based value.Pick the Format that you want to use to display the time-based value.Pick the Format that you want to use to display the time-based value.Seleziona il formato che desideri utilizzare per visualizzare il valore basato sul tempo.
Finally, change the Input format to match the format of the strings in the column.Finally, change the Input format to match the format of the strings in the column.Finally, change the Input format to match the format of the strings in the column.Finally, change the Input format to match the format of the strings in the column.Finally, change the Input format to match the format of the strings in the column.Infine, modifica il formato di input in modo che corrisponda al formato delle stringhe nella colonna.
Analizza Date() una funzione utile
La funzione Analizza Data() (e il suo alias, Informato() ) è utile anche per convertire stringhe di caratteri in valori numerici. Se utilizzata senza il terzo argomento opzionale, analizza la stringa di input e cerca di trovare il formato di input appropriato. Questo la rende una funzione multiuso, indipendentemente dal formato di input.
Calcoli (ad esempio, matematica) utilizzando valori basati sul tempo
Memorizzare tutti questi valori basati sul tempo come numeri significa che possiamo fare calcoli matematici su di essi per calcolare l'età, il tempo trascorso da un evento, convertirli in altre unità di tempo, ecc.
Ad esempio, la differenza tra due date, orari o valori datetime in JMP sarà il numero di secondi tra i due valori.
Ciò significa che dovrai convertire il risultato in unità più semplici come minuti, giorni, settimane o anni (Suggerimento: le funzioni In ore() , In settimane() e altre In...() possono essere utili in questo caso).
JMP dispone di numerose funzioni integrate per semplificare i calcoli sui valori basati sul tempo.
Ecco un paio dei miei preferiti:
Ora del giorno (datetime)
Questa funzione restituisce l'ora del giorno (ovvero il numero di secondi trascorsi dalla mezzanotte) di un valore datetime. È molto utile per convertire un valore datetime in un valore date. È sufficiente sottrarre la funzione Time of Day() dal valore datetime:
datetime = Today();
date = datetime - Time Of Day( datetime );
Show( As Date( date ) );
Differenza di data(datetime1, datetime2, "nome_intervallo", <"allineamento">)
Questa funzione restituisce la differenza tra due valori datetime. Naturalmente, è possibile farlo semplicemente sottraendo uno dall'altro, ottenendo il numero di secondi che li separano. Tuttavia, Date Difference() consente di specificare le unità di tempo in cui restituire la differenza utilizzando l'argomento "interval_name". Ad esempio:
datetime1 = 01Sep2018:03:00:01;
datetime2 = 04Sep2018:14:10:15;
Date Difference( datetime1, datetime2, "Hour" );
Assicuratevi di dare un'occhiata all'elenco completo delle funzioni Data e Ora . Semplificano notevolmente l'utilizzo di valori basati sul tempo.
Costanti di data e ora in JSL
Per rappresentare date, datetime e time in JSL è necessario specificarli in un formato specifico. Per le date, è necessario specificarle nel formato ggMONaaaa, mentre per gli orari è necessario utilizzare il formato gg:hh:mm:ss. Ad esempio:
time = 14:10:15;
date = 18Jan1957;
datetime = 11Jul2000:03:10:12;
Grazie, @Jeff_Perkinson, per questa eccellente panoramica delle funzionalità disponibili.
Il ritorno sull'investimento derivante dalla rivisitazione di questo post e dall'applicazione di queste funzionalità nei nostri flussi di lavoro quotidiani è eccezionale.
JMP offre tantissime funzioni utili per l'importazione, la gestione e l'analisi dei dati, e nella pratica fanno davvero la differenza!
Oltre a ciò, ci sono alcuni punti in cui mancano funzionalità o potrebbero essere migliorate, e in cui JMP si comporta in modo inaspettato. Ci sono anche alcuni bug, o almeno cose che alcuni utenti in tutto il mondo percepiscono come bug, come la differenza tra "MDY" e "DMY" o l'importazione della data dei timestamp da Unix/Python e i problemi con "Z" o ms.
Se riscontri problemi nella tua vita lavorativa quotidiana con date e orari, controlla se il problema è elencato, quindi segui il link e vota!
Se non è presente nell'elenco, pubblica il tuo problema qui sotto o direttamente nella lista dei desideri.
Lucidiamo JMP. Rendiamolo più rotondo del mondo.;)
Caratteristiche / Comfort:
Insetti / sembra un insetto:
Ecco un altro consiglio utile per la conversione:
Come già accennato, il primo problema con la conversione delle date è che, in background, JMP "legge" la data come numero di secondi trascorsi dal 1° gennaio 1904 alle 00:00:00 (mentre Excel la "legge" dal 1° gennaio 1900, che corrisponde a quasi 4 miliardi di secondi, cifra che raggiungeremo il 3 ottobre 2026 alle 07:06:40)! Ecco perché a volte si possono visualizzare valori nell'ordine dei 3,9 miliardi durante la conversione delle date.
In secondo luogo, anche se è possibile modificare il formato dell'ora visualizzata, JMP continuerà a "leggere" l'ora nel formato originale importato. Ad esempio, se ho una data del 15/01/2020 e voglio raggruppare tutte le date di gennaio nel formato MM/AAAA (per creare grafici o tabelle), la semplice modifica del formato in MM/AAAA non funziona: JMP continuerà a "leggerla" come la data originale importata.
Detto questo, i metodi che ho usato con maggiore successo per convertire le date in modo che possano essere utilizzate sono i seguenti:
- Per MM/AAAA da Data, utilizzo: Data GMY( 1, Mese( :DATA_TRANSAZIONE ), Anno( :DATA_TRANSAZIONE ) ) con il formato MM/AAAA.
- Per YYYYQq da Data, utilizzo: Data DMY( 1, Floor( (Mese( :DATA_TRANSAZIONE ) - 1) / 3 ) * 3 + 1, Anno( :DATA_TRANSAZIONE ) ) con il formato YYYYQq (ad esempio 2020Q1).
Entrambi i metodi, in sostanza, prendono tutte le date di un determinato mese e le posizionano rispettivamente al primo giorno del mese o del trimestre. Può sembrare una soluzione un po' strana, ma funziona per ottenere i risultati desiderati in ambito di tabelle, serie temporali, creazione di grafici, ecc.