月曜日から始まる最初の週をその月の第一週として、損益その他を集計したい。
ChatGPTに聞いたら、誤ったPythonコードを教えてくれました。。。
ネット上で見つけられなかったので、月曜日始まりの週を算出するPythonコードを作成しました。
月曜日始まりの最初週を、その月の第一週に指定
月曜日始まりの最初の週を、その月の第一週に指定とは。
下は2023年5月(May)と6月(June)のカレンダーです。
6月1日は木曜日なので、平日が2日しかありません。
6月(June)の第一週は月曜日から始まる6月5日として、6月1日から6月4日までは前月の5月5週と指定します。
サンプルコード
関数を作成しました。
関数名はweek_calc(date)
名付けのセンスが無くて恥ずかしい。。。
引数に日付を渡します。
戻り値はYYYYMMの後に○週とします。
月はゼロ埋めして2桁で表示させました。
こちらが関数です。
コード内にコメントを入れました。
初心者の方がコードの意味を確認しやすいように、print文で途中経過も出力出来るようにしています。
途中経過を出力する場合は、# print(・・・・・ の#を外してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import datetime def week_calc(date): target_day = date # 対象の日が何曜日かを取得 target_weekday = target_day.isoweekday() # print('対象の日が何曜日かを取得',target_weekday) # 対象の日の週の月曜日を算出 target_week_first_day = target_day - datetime.timedelta(days=(target_weekday-1)) # print('対象の日の週の月曜日を算出',target_week_first_day) # 年と月を取得 year = target_week_first_day.year month = target_week_first_day.month # 月をゼロ埋めして2桁で表示 month_str = f"{month:02}" # その月の最初の日を取得 first_day = datetime.date(year, month, 1) # print('その月の最初の日を取得', first_day) # その月の最初の日が何曜日かを取得 first_weekday = first_day.isoweekday() # print('その月の最初の日が何曜日かを取得',first_weekday) # その月の最初の週の日付を採用 # もし、その月の最初の日が月曜日ならば,そのまま月曜日を採用。 if first_weekday==1: first_week_start_day = first_day else: # 火曜日以降であれば翌週の月曜日の期日を採用 first_week_start_day = first_day + datetime.timedelta(days=(first_weekday*-1+8)) # print('対象日の週の月曜日 月の最初の週の日付を取得',first_week_start_day) # 特定の日が何週目かを計算 week_number = (target_week_first_day - first_week_start_day).days // 7 + 1 # print('特定の日が何週目かを計算',week_number) return f"{year}年{month_str}月{week_number}週" |
この記事を書いた人
あしおゆたか
株式投資歴22年のシステムトレーダー(←主な取引手法)
机上の理論ではなく、実体験に基づいた記事作りをモットーにしています。
スポーツクラブに毎週2日~3日通い、サウナ後の暴飲暴食が趣味。
◇主な投資対象
日本株式
株式ETF(上場投資信託)
日経225先物
日経225先物オプション
◇運営者情報はこちら