めも

メモ.

pythonで日付(タイムスタンプの文字列)から日付の特徴を作成する

タイムスタンプの文字列から、日付に関する特徴(情報)を計算する。 たまに行うのでめも。

必要ライブラリ

こちらから jpholiday をインストール、祝日の判定に使用する。 ありがたい。

from datetime import datetime, date, timedelta
import calendar
import jpholiday
import numpy as np

文字列からタイムスタンプを取得

文字列を %Y/%m/%d (年/月/日) としてパースする。年月日以外の各種ディレクティブ(記号)の意味はドキュメントを参照。

# 2019/6/30から年月日をパース
timestamp_str = '2019/6/30'
t = datetime.strptime(timestamp_str, '%Y/%m/%d')

曜日

datetime --- 基本的な日付型および時間型 — Python 3.7.4 ドキュメント

# 月:0 ~ 日:6 のint型で取得
weekday = t.weekday()

祝日フラグ

holidayflag = jpholiday.is_holiday(t.date())

次の日が休日

beginofh = jpholiday.is_holiday(t.date()+ timedelta(days=1)) or (t.date() + timedelta(days=1)).weekday()>4

次の日が平日

endofh = not(jpholiday.is_holiday(t.date()+ timedelta(days=1))) and (t.date() + timedelta(days=1)).weekday()==0

元旦から何日目か

tm_ydayに年度始めからの日数が保存されている。tm_zoneなど他のものは上記ドキュメント参照。

dayofyear = t.timetuple().tm_yday

年と週番号(元旦から第何週目か)

date.isocalendar()はISO 年、ISO 週番号、ISO 曜日を返す。

year, weekofyear, _ = t.isocalendar()

月と日

month, day = t.month, t.day

年度始めから何日目か

年度始めからの日数の差分を求める。

# X年4月1日からの経過日数
frombiginofyear = (t.date() - datetime(t.year-(t.month<4)*1, 4, 1).date()).days

その月の平日と休日の一覧

# 特定の年月の平日・休日一覧を取得
def getdaytypelistfromYM(year, month):
    weekdays, holydays = [], []
    for i in range(calendar.monthrange(year, month)[1]):
        if datetime(year, month, i+1).weekday()<5 and not jpholiday.is_holiday(date(year, month, i+1)):
            # 平日の場合
            weekdays += [i+1]
        else:
            # 休日・祝日
            holydays += [i+1]
    return weekdays, holydays

weekdays, holydays = getdaytypelistfromYM(year, month)

その月に平日と休日が何日あるか

上記「その月の平日と休日」のリストの長さ。

weekdays, holydays = getdaytypelistfromYM(year, month)
numofweekdays, numofholydays = len(weekdays), len(holydays)

一年前の今日に一番近い同じ曜日の日付

nearestwd = date(year-1, month, day)
for i in range(4):
    # 一年前 + i日後の曜日と比較
    if weekday == (nearestwd + timedelta(days=i)).weekday():
        nearestwd = date(year-1, month, day) + timedelta(days=i)
        break
    # 一年前 - i日後の曜日と比較
    if weekday == (nearestwd + timedelta(days=-i)).weekday():
        nearestwd = date(year-1, month, day) + timedelta(days=-i)
        break

特定の日付からの経過日数

# 2017/6/30 から何日経過したか
daydiff = (t.date() - datetime(2017, 6, 30).date()).days

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

全体

gist.github.com