2019年10月14日月曜日

pandasで日時の列を作る、Matplotlibの横軸に日時を使う

Pandasのdata_rangeを使って日付の列を作る

例えば2019年1月1日から2020年1月1日までの間にある、月末日を求めたいときは
pd.date_range(start='1/1/2019', end='1/1/2020', freq='M')
DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-31', '2019-04-30',
               '2019-05-31', '2019-06-30', '2019-07-31', '2019-08-31',
               '2019-09-30', '2019-10-31', '2019-11-30', '2019-12-31'],
              dtype='datetime64[ns]', freq='M')
となります。
start, end, freqを入力すればよいです。日付は 月/日/年がデフォルトです。
freqはDate Offsetの記号で多数あるようです(使い勝手が悪そうなものも多いですが)。
Mは月末でMSが月初というのが注意点です。
W Week(W-SUN) W-MON Monday W-... (他の曜日) M MonthEnd MS MonthBegin D Day H Hour
https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#dateoffset-objects

Matplotlibで横軸に日時の列を使う

# 日時を作る 2020年1月1日から4月1日までの水曜日の列
d = pd.date_range(start="1/1/2020", end="4/1/20", freq="W-WED")
v = np.linspace(1,10,len(d))
plt.plot(range(d.size), v, 'o')
# ticks, labelを作る
xticks = range(len(d))
xticklabels = [(d[0]+d[0].freq*x).strftime('%-m/%-d') for x in range(len(d))]
# xticksをセット
plt.xticks(xticks, xticklabels)
# x軸の左右のマージンをなくしている
plt.autoscale(True, axis='x', tight=True)
plt.show()
# 日時d の中身
DatetimeIndex(['2020-01-01', '2020-01-08', '2020-01-15', '2020-01-22',
               '2020-01-29', '2020-02-05', '2020-02-12', '2020-02-19',
               '2020-02-26', '2020-03-04', '2020-03-11', '2020-03-18',
               '2020-03-25', '2020-04-01'],
              dtype='datetime64[ns]', freq='W-WED')

0 件のコメント:

コメントを投稿