チートシート (ラボクオリティなので、ご利用は自己責任でお願いします)
日時関連
datetimeモジュール  Pandas 

datetimeモジュール

表示形式(外部リンク):https://docs.python.org/ja/3/library/datetime.html#strftime-and-strptime-format-codes


datetimeオブジェクトを作成する  各種変換など 


・datetimeオブジェクトを作成する

print('import datetime')
import datetime
print('今日')
print('today_obj = datetime.date.today()')
today_obj = datetime.date.today()
print('today_obj')
print(today_obj)
print('today_obj.year, today_obj.month, today_obj.day')
print('=========================================================')
print('曜日')
print('weekday_dic = {0:"Mon", 1:"Tue", 2:"Wed", 3:"Thu", \n'
'               4:"Fri", 5:"Sat", 6:"Sun"}')
weekday_dic = {0:"Mon", 1:"Tue", 2:"Wed", 3:"Thu", 4:"Fri", 5:"Sat", 6:"Sun"}
print('today_obj.weekday(), weekday_dic[today_obj.weekday()]')
print(today_obj.weekday(), weekday_dic[today_obj.weekday()])
print('=========================================================')
print('表示形式')
print('today_obj.strftime("%Y/%m/%d")')
print(today_obj.strftime("%Y/%m/%d"))
print('today_obj.isoformat()')
print(today_obj.isoformat())
print('=========================================================')
print('現在時刻')
print('now_obj = datetime.datetime.now()')
now_obj = datetime.datetime.now()
print(now_obj)
print('now_obj.year, now_obj.month, now_obj.day, now_obj.hour,\n'
'now_obj.minute, now_obj.second, now_obj.microsecond')
print('=========================================================')
print('日時指定')
print('datetime_obj = datetime.datetime(2022, 4, 3, 12, 0, 0)')
datetime_obj = datetime.datetime(2022, 4, 3, 12, 0, 0)
print(datetime_obj)
datetimeモジュールに戻る

・各種変換など

時間を加減する  文字列をdatetime型に変換  datetime型を指定フォーマットに変換  タイムスタンプ 


時間を加減する

print('import datetime')
import datetime
print('指定できる時間軸')
print('microseconds, milliseconds, seconds, \n'
      'minutes, hours, days, weeks')
print('=====================================')
print('現在日時')
print('now = datetime.datetime.now()')
now = datetime.datetime.now()
print(now)
print('=====================================')
print('時間増加(進める)')
print('now + datetime.timedelta(hours=1)')
print(now + datetime.timedelta(hours=1))
print('=====================================')
print('時間減少(戻す)')
print('now + datetime.timedelta(hours=-1)')
print(now + datetime.timedelta(hours=-1))

文字列をdatetime型に変換

print('import datetime')
import datetime
print("datetime.datetime.strptime('2022/04/03', '%Y/%m/%d')")
print(datetime.datetime.strptime('2022/04/03', '%Y/%m/%d'))
print("datetime.datetime.strptime('2022.04.03', '%Y.%m.%d')")
print(datetime.datetime.strptime('2022.04.03', '%Y.%m.%d'))
print("datetime.datetime.strptime('2022-04-03', '%Y-%m-%d')")
print(datetime.datetime.strptime('2022-04-03', '%Y-%m-%d'))
print("datetime.datetime.strptime('20220403', '%Y%m%d')")
print(datetime.datetime.strptime('20220403', '%Y%m%d'))
print("datetime.datetime.strptime('2022/04/03 12:00:00', '%Y/%m/%d %H:%M:%S')")
print(datetime.datetime.strptime('2022/04/03 12:00:00', '%Y/%m/%d %H:%M:%S'))

datetime型を指定フォーマットに変換

print('import datetime')
import datetime
print('datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")')
print(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
print('datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")')
print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
print('datetime.datetime.now().strftime("%Y%m%d %H%M%S")')
print(datetime.datetime.now().strftime("%Y%m%d %H%M%S"))

タイムスタンプ

print('import datetime')
import datetime
print('タイムスタンプ(UNIX)')
print('now = datetime.datetime.now()')
now = datetime.datetime.now()
print('time_stamp = datetime.datetime.timestamp(now)')
time_stamp = datetime.datetime.timestamp(now)
print('UNIX Timestamp:', time_stamp)
print('===========================================================')
print('タイムスタンプをJST,UTCに変換')
print('jst_time = datetime.datetime.fromtimestamp(time_stamp)')
jst_time = datetime.datetime.fromtimestamp(time_stamp)
print('JST:', jst_time)
print('utc_time = datetime.datetime.utcfromtimestamp(time_stamp)')
utc_time = datetime.datetime.utcfromtimestamp(time_stamp)
print('UTC:', utc_time)
datetimeモジュールに戻る
Pandas

※取得した株価データがカレントディレクトリにある環境で実行
株価データ  datetime型をつくる  属性  インデックスメソッド  データを取得  リサンプリング  移動平均をプロット 


・株価データ

株価データをcsvファイルに保存  データの読み込み 


株価データをcsvファイルに保存

# 2024.4.28取得可
# !pip install yfinance(Jupyter Labの場合)
import yfinance
df = yfinance.download('7203.T')
df.to_csv('7203.csv')
    
# 2022.4.26取得可(2024.4.28エラー)
from pandas_datareader import data
df = data.DataReader("7203.T", "yahoo")
df.to_csv('7203.csv')

データの読み込み

import pandas as pd
# parse_dates: インデックスを日時としてパース
df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)
Pandasに戻る

・datetime型をつくる

print('import pandas as pd')
import pandas as pd
print('日時としてパースしなかった場合')
print("df = pd.read_csv('7203.csv')")
df = pd.read_csv('7203.csv')
print("df['Date'] = pd.to_datetime(df.Date)")
print(df.Date.dtype, '->', end=' ')
df['Date'] = pd.to_datetime(df.Date)
print(df.Date.dtype)
print('===============================================================================')
print('範囲指定')
print("pd.date_range('2022-4-20', periods=5, freq='D')")
print(pd.date_range('2022-4-20', periods=5, freq='D'))
print('===============================================================================')
print('リストで指定')
print("pd.to_datetime(['2022/4/20', '2022/4/21'], format='%Y/%m/%d')")
print(pd.to_datetime(['2022/4/20', '2022/4/21'], format='%Y/%m/%d'))
Pandasに戻る

・属性

strftime(外部リンク) :https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Period.strftime.html#pandas.Period.strftime

print('import pandas as pd')
import pandas as pd
print("df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)")
df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)
print('インデックス以外にも通常のdatetime型カラムを作成')
df['date'] = df.index
print("属性:year, month, day, hour, minute, weekday_name, weekday")
print("df.index.year[0] ->", df.index.year[0])
print("df.date.dt.month[0] ->", df.date.dt.month[0])
print('==================================================================')
print('strftime')
print("df.index.strftime('%a')[0] ->", df.index.strftime('%a')[0])
print("df.date.dt.strftime('%Y')[0] ->", df.date.dt.strftime('%Y')[0])
Pandasに戻る

・インデックスメソッド

print('import pandas as pd')
import pandas as pd
print("df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)")
df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)
print("df.index.min()    ->" , df.index.min())
print("df.index.argmin() ->", df.index.argmin())
print("df.index.max()    ->", df.index.max())
print("df.index.argmax() ->", df.index.argmax())
Pandasに戻る

・データを取得

print('import pandas as pd')
import pandas as pd
print("df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)")
df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)
print('2022年3月分')
print("df.loc['2022-3']")
print(df.loc['2022-3'])
print('==================================================================')
print('2022年1月~4月分')
print("df.loc['2022-1':'2022-4']")
print(df.loc['2022-1':'2022-4'])
Pandasに戻る

・リサンプリング

オフセットエイリアス(外部リンク): https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases

print('import pandas as pd')
import pandas as pd
print("df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)")
df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)
print()
print('D:日 ,W:週, M:月, Y:年')
print('メソッド:min(), max(), std(), etc', '\n')
print('月終値')
print("df.Close.resample('M').last().head()")
print(df.Close.resample('M').last().head(), '\n')
print('年平均')
print("df.Close.resample(rule='Y').mean().head()")
print(df.Close.resample(rule='Y').mean().head(), '\n')
print('週平均')
print("df.Close.resample('W').mean().head()")
print(df.Close.resample('W').mean().head())
Pandasに戻る

・移動平均をプロット

import matplotlib.dates as dates
import matplotlib.pyplot as plt
import pandas as pd

plt.style.use('dark_background')
df = pd.read_csv('7203.csv', index_col='Date', parse_dates=True)

df_copy = df.iloc[-100:].copy()
df_copy['Close'].plot()
# 25日移動平均
ax = df_copy.Close.rolling(window=25).mean().plot()
ax.set_title('7203')
# 日付
ax.xaxis.set_major_locator(dates.DayLocator(1))
# フォーマット
ax.xaxis.set_major_formatter(dates.DateFormatter('%y/%m/%d'))
ax.yaxis.grid(True, alpha=0.3)
ax.xaxis.grid(True, alpha=0.3)
Pandasに戻る