日付と時刻
1. 学習内容
- ❶ datetime64 配列の作成
- ❷ 日付の演算と期間
- ❸ 営業日の機能
- ❹ 日付の構成要素(年、月、日)の抽出
2. 主要な概念
PYTHON
import numpy as np
# Creating datetime arrays
dates = np.array(['2024-01-01', '2024-02-01', '2024-03-01'], dtype='datetime64')
print(dates) # ['2024-01-01' '2024-02-01' '2024-03-01']
# Date arithmetic
print(dates + np.arange(3)) # add days
# Date range
range_dates = np.arange('2024-01-01', '2024-01-10', dtype='datetime64')
print(range_dates)
# Extract components
print(dates.astype('datetime64[Y]')) # year
print(dates.astype('datetime64[M]')) # month
TEXT
> Output: Run NumPy 2.x in your local Python environment to see the ndarray output. The Piston server does not have NumPy pre-installed — install it locally (`pip install numpy`) and compare. Actual values may vary by NumPy version and random seed.
(1) ▶ サンプル:日付範囲の作成(難易度 ⭐)
PYTHON
import numpy as np
# Daily range
days = np.arange('2024-01-01', '2024-01-11', dtype='datetime64')
print("Daily:", days)
# Monthly range
months = np.arange('2024-01', '2024-07', dtype='datetime64[M]')
print("Monthly:", months)
# Hourly range
hours = np.arange('2024-01-01', '2024-01-02', dtype='datetime64[h]')
print("Hourly:", hours)
出力:
TEXT日別:['2024-01-01' '2024-01-02' '2024-01-03' '2024-01-04' '2024-01-05' '2024-01-06' '2024-01-07' '2024-01-08' '2024-01-09' '2024-01-10'] 月別:['2024-01' '2024-02' '2024-03' '2024-04' '2024-05' '2024-06'] 1時間ごと:['2024-01-01T00' '2024-01-01T01' '2024-01-01T02' '2024-01-01T03' '2024-01-01T04' '2024-01-01T05' '2024-01-01T06' '2024-01-01T07' '2024-01-01T08' '2024-01-01T09' '2024-01-01T10' '2024-01-01T11' '2024-01-01T12' '2024-01-01T13' '2024-01-01T14' '2024-01-01T15' '2024-01-01T16' '2024-01-01T17' '2024-01-01T18' '2024-01-01T19' '2024-01-01T20' '2024-01-01T21' '2024-01-01T22' '2024-01-01T23']
(2) ▶ サンプル:日付の演算(難易度 ⭐⭐)
PYTHON
import numpy as np
start = np.array('2024-01-15', dtype='datetime64')
# Add days
print("Start:", start)
print("+7 days:", start + 7)
print("+30 days:", start + 30)
print("-5 days:", start - 5)
# Difference between dates
d1 = np.array('2024-01-01', dtype='datetime64')
d2 = np.array('2024-12-31', dtype='datetime64')
delta = d2 - d1
print("Days in 2024:", delta)
# Extract components
date = np.array('2024-07-04', dtype='datetime64')
print("Year:", date.astype('datetime64[Y]'))
print("Month:", date.astype('datetime64[M]'))
出力:
TEXT開始日:2024年1月15日 +7日:2024年1月22日 30日後:2024年2月14日 -5日後:2024年1月10日 2024年の日数:365日 年:2024年 月:2024年7月
(3) ▶ サンプル:営業日の計算(難易度 ⭐⭐)
PYTHON
import numpy as np
start = np.datetime64('2024-01-01')
end = np.datetime64('2024-01-31')
# Count business days
bd = np.busday_count(start, end)
print(f"Business days Jan 2024: {bd}")
# Find next business day
print("Next business day after 2024-01-05:", np.busday_offset('2024-01-05', 0, roll='forward'))
# Business day range
biz_days = np.busday_offset('2024-01-01', np.arange(10))
print("First 10 business days of 2024:", biz_days)
出力:
TEXT2024年1月の営業日数:22日 2024年1月5日の翌営業日:2024年1月8日 2024年の最初の10営業日:['2024-01-01' '2024-01-02' '2024-01-03' '2024-01-04' '2024-01-05' '2024-01-08' '2024-01-09' '2024-01-10' '2024-01-11' '2024-01-12']
Q datetime64とPythonのdatetimeの違いは何ですか?
A datetime64は、時刻を表す固定幅の64ビット整数であるため、高速でメモリ効率に優れています。一方、Pythonのdatetimeは完全なオブジェクトであり、柔軟性が高い反面、オーバーヘッドが大きくなります。
Q datetime64 の解像度はどれくらいですか?
A 単位によって異なります —
datetime64[Y](年)、datetime64[M](月)、datetime64[D](日)、 datetime64[h](時間)、datetime64[ms](ミリ秒)、datetime64[ns](ナノ秒)です。Q 営業日はどのように計算すればよいですか?
A 2つの日付間の営業日を数えるには
np.busday_count(start, end) を、最も近い営業日を調べるには np.busday_offset を使用してください。❓ よくある質問
Q 最も重要なポイントは何か?
A NumPyの演算はベクトル化されているため、パフォーマンスを向上させるにはPythonのループは避けるべきだ。
Q さらに詳しく知りたい場合はどうすればよいですか?
A 詳細なリファレンスや高度なトピックについては、numpy.org の NumPy 公式ドキュメントをご覧ください。
Q これはNumPy 2.xでも動作しますか?
A はい。すべての例はNumPy 2.xと互換性があります。一部の古いAPI(np.random.seedなど)は引き続きサポートされていますが、最新の代替APIの使用をお勧めします。
📖 まとめ
- datetime64 配列は、日付や時刻を 64 ビット整数として格納します。高速かつコンパクトです。
np.arangedatetime64 データ型を使用すると、日付範囲が生成されます- 算術演算:整数の加算・減算を行い、日付・時刻単位分だけずらす
astypeは、年、月、日などの要素を抽出します。- 営業日機能:
busday_count、busday_offset
📝 練習問題
-
初心者向け(難易度 ⭐):2024年1月のすべての日付を格納した配列を作成してください。その配列の先頭から5つ目と末尾から5つ目の日付を出力してください。
-
中級(難易度 ⭐⭐):2024-01-01 から 2024-12-31 までの日付範囲を作成します。各日付から月を抽出し、各月に該当する日付の数を数えてください。
-
上級(難易度 ⭐⭐⭐):2024-01-01 から 2024-12-31 までの営業日数を算出してください。その数を暦日数の合計と比較してください。