JMPで扱う可能性のある一般的な時間ベースの値は、日付、時刻、日付時刻、そして期間の4つです。データベースやフラットファイルからデータをインポートする場合でも、JSLで参照する場合でも、JMPの軸で使用する場合でも、JMPがこれらの値をどのように保存し、使用する際にどのような影響があるかを理解することが重要です。
日時値
日時値は、特定の日付の特定の時刻を表します。例:
- 2016年1月20日午後12時
- 1918年11月7日午後3時
- 1969年7月20日20時17分
多くの分析アプリケーションと同様に、JMPでは日付時刻値は参照時刻からの経過時間として保存されます。JMPでは、参照時刻は1904年1月1日午前0時で、単位は秒です。簡単に言うと、JMPは日付を1904年1月1日午前0時からの経過秒数として保存します。
したがって、上記の例の datetime 値に対応する数値は次のようになります。
| 日時 |
JMP 日時値 (1904年1月1日深夜からの秒数) |
| 2018年1月20日午後12時 |
3536136000 |
| 1918年11月7日午後3時 |
468687600 |
| 1969年7月20日20:17 |
2068661820 |
日付
JMPでは、日付値は日付時刻の特殊なケースであり、時刻は午前0時と想定されます。つまり、1904年1月1日の午前0時から、保存されている日付の午前0時までの秒数を単純にカウントすることになります。
タイムズ
時間値は特定の日付を持たない時刻を表します。JMPは、時間値を午前0時からの経過秒数として保存します。つまり、午前0時1分1秒は61秒です。これは午前0時から61秒経過した時間です。
期間
期間(Duration)は、ある時間単位の量を表す数値であるという点を除けば、それほど特別なものではありません。当然のことながら、JMPは秒数を表す期間を最も適切に処理できます。この点については、時間ベースの値の表示形式を設定する際に詳しく説明します。
時間ベースの値を表示用にフォーマットする
時間ベースの値を秒数として表示することは特に便利ではないため、JMP にはこれらの値を表示するための日付形式と時刻形式が多数用意されています。
ただし、日付の表示方法を変更しても、基になる値やその分析方法は変更されないことに注意してください。例えば、表示形式を「m/y」(月/年)に変更しても、JMPは分析やグラフ作成時にデータを月ごとに集計しません。月ごとに集計したい場合は、集計対象となる一意の値を含む新しい列を作成する必要があります。新しい列を作成するには、列ヘッダーを右クリックし、「新しい計算式列」を選択して列を変換します。
時間ベースの値のインポート
データをインポートする際は、時間ベースの値が上記の数値として保存されていることを確認することが重要です。JMPは、インポートやコピー&ペースト操作中に時間ベースの値を認識しようとする際に、ほとんどの場合、自動的にこの処理を行います。データテーブル内で列の値がどのように揃えられているかを確認することで、正しく保存されているかどうかを確認できます。数値は右揃え、文字値は左揃えです。
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.間違っているのは文字列です。左揃えになっていることに注意してください。正しいのは数値列です。右揃えになっています。
時間ベースの値が文字列として保存されている場合は、「列情報」ダイアログボックスを使用して変換できます。「データ型」を数値、「形式」を希望の日付/時刻形式、「入力形式」をデータ内の文字列を表す形式に変更するだけです。これで、JMPが値を適切な数値に変換します。
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.まず、データ型を数値に変更します。
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.時間ベースの値を表示するために使用する形式を選択します。
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.最後に、列内の文字列の形式に合わせて入力形式を変更します。
Parse Date() 便利な関数
日付を解析する()関数(およびそのエイリアスである情報提供()関数)は、文字列を数値に変換するのにも便利です。オプションの3番目の引数を指定せずに使用すると、入力文字列をスキャンし、適切な入力形式を探します。そのため、入力形式に関わらず、汎用的な関数として使用できます。
時間ベースの値を使用した計算(つまり数学)
これらすべての時間ベースの値を数値として保存すると、それらに対して計算を実行し、年齢、あるイベントからの時間、他の時間単位への変換などを行うことができます。
たとえば、JMP の 2 つの日付、時刻、または日時値の差は、2 つの値間の秒数になります。
つまり、結果を分、日、週、年などのよりわかりやすい単位に変換する必要があります (ヒント: ここでは時間単位() 、 週単位() 、およびその他の In...() 関数が役立ちます)。
JMP には、時間ベースの値の計算を容易にする組み込み関数が多数あります。
私のお気に入りをいくつか紹介します。
時刻(datetime)
この関数は、datetime値の時刻(つまり、午前0時からの秒数)を返します。これは、datetime値をdate値に変換するのに非常に便利です。datetime値からTime of Day()を引くだけです。
datetime = Today();
date = datetime - Time Of Day( datetime );
Show( As Date( date ) );
日付差(datetime1, datetime2, "interval_name", <"alignment">)
この関数は、2つの日付時刻値の差を返します。もちろん、一方からもう一方を引くだけで、2つの値の差の秒数を取得できます。しかし、Date Difference() 関数では、「interval_name」引数を使用して、差を返す時間単位を指定できます。例えば、次のようになります。
datetime1 = 01Sep2018:03:00:01;
datetime2 = 04Sep2018:14:10:15;
Date Difference( datetime1, datetime2, "Hour" );
日付時刻関数のリスト全体を必ず確認してください。これらの関数を使うと、時間ベースの値の操作がはるかに簡単になります。
JSL の日付と時刻の定数
JSLで日付、日付時刻、時刻の定数を表すには、特定の形式で指定する必要があります。日付の場合はddMONyyyy形式、時刻の場合はdd:hh:mm:ss形式を使用する必要があります。例:
time = 14:10:15;
date = 18Jan1957;
datetime = 11Jul2000:03:10:12;
利用可能な機能の優れた概要を提供してくれた@Jeff_Perkinsonに感謝します。
この投稿を再確認し、これらの機能を日常のワークフローに適用することによる ROI は非常に優れています。
JMP には、データのインポート、データのキュレーション、日付のデータ分析に役立つ機能が数多く用意されており、実際に使用してみると大きな違いが生まれます。
それ以外にも、機能が不足していたり改善の余地があったり、JMPが予期せぬ動作をする場合があります。また、バグ(少なくとも世界中の一部のユーザーにとってはバグのように感じられるもの)もいくつかあります。例えば、「MDY」と「DMY」の違い、Unix/Pythonからのタイムスタンプの日付インポート、「Z」やミリ秒に関する問題などです。
日々の仕事で日付や時刻に関する問題がある場合は、その問題がリストされているかどうかを確認し、リンクをクリックして投票してください。
リストにない場合は、下記または直接ウィッシュリストに問題を投稿してください。
JMPを磨き上げましょう。世界よりも丸くしましょう。;)
特徴 / 快適性:
バグ / バグのような感じ:
変換時のもう一つの便利なヒントをご紹介します。
上記のとおり、日付変換における最初の問題は、バックグラウンドで JMP が日付を 1904 年 1 月 1 日午前 12 時 00 分 00 秒からの秒数として「読み取っている」ことです (Excel は 1900 年 1 月 1 日から約 40 億秒を「読み取っており、これは 2026 年 10 月 3 日午前 7 時 06 分 40 秒に達します)。そのため、日付変換時に 39 億程度の値が表示されることがあります。
第二に、表示している時間の形式を変更することはできますが、JMP は元のインポートされた形式で時間を「読み取ります」。たとえば、1/15/2020 という日付があり、1 月のすべての日付を MM/YYYY 形式でグループ化したい場合 (グラフや表を作成するため)、単に形式を MM/YYYY に変更しても機能しません。JMP は元のインポートされた日付として「読み取ります」。
とはいえ、私が日付を変換して使用できるようにするのに最も成功した方法は以下のとおりです。
- Date から MM/YYYY 形式を取得するには、MM/YYYY 形式で Date DMY( 1, Month( :TRANSACTION_DATE ), Year( :TRANSACTION_DATE ) ) を使用します。
- Date から YYYYQq を取得するには、YYYYQq 形式 (例: 2020Q1) で Date DMY( 1, Floor( (Month( :TRANSACTION_DATE ) - 1) / 3 ) * 3 + 1, 年(:TRANSACTION_DATE) )を使用します。
どちらも基本的に、特定の月のすべての日付を取得し、それぞれ月の最初の日または四半期の最初の日に設定します。奇妙な回避策のように思えますが、集計、時系列、グラフ作成などに必要な処理を実行するには有効です。