Pythonでの時系列データの扱い3 〜 時系列データの頻度設定

前回「Pythonでの時系列データの扱い2 〜 時系列データの作成および選択」の続き。

特定間隔の時系列データを作成する方法を学ぶ。

#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import datetime
import dateutil

#################### 日付範囲 ####################
## 日付範囲の作成
index = pd.date_range(start='2012/1/1', end='2012/3/30')
print index

## 4時間毎
index = pd.date_range(start='2016/1/1', end='2016/1/3', freq='4H')
print index

## 月の最終営業日(BusinessMonthEnd)毎に作成
index = pd.date_range(start='2016/1/1', end='2016/11/30', freq='BM')
print index

実行結果は次のようになる。

## 日付範囲の作成
DatetimeIndex(['2012-01-01', '2012-01-02', '2012-01-03', '2012-01-04',
'2012-01-05', '2012-01-06', '2012-01-07', '2012-01-08',
'2012-01-09', '2012-01-10', '2012-01-11', '2012-01-12',
'2012-01-13', '2012-01-14', '2012-01-15', '2012-01-16',
・・・・・・・

## 4時間毎
DatetimeIndex(['2016-01-01 00:00:00', '2016-01-01 04:00:00',
'2016-01-01 08:00:00', '2016-01-01 12:00:00',
'2016-01-01 16:00:00', '2016-01-01 20:00:00',
'2016-01-02 00:00:00', '2016-01-02 04:00:00',
'2016-01-02 08:00:00', '2016-01-02 12:00:00',
'2016-01-02 16:00:00', '2016-01-02 20:00:00',
'2016-01-03 00:00:00'],
dtype='datetime64[ns]', freq='4H')

## 月の最終営業日(BusinessMonthEnd)毎に作成
DatetimeIndex(['2016-01-29', '2016-02-29', '2016-03-31', '2016-04-29',
'2016-05-31', '2016-06-30', '2016-07-29', '2016-08-31',
'2016-09-30', '2016-10-31', '2016-11-30'],
dtype='datetime64[ns]', freq='BM')

さてここで、最後の実行結果の「2016-04-29」に注目する。
日本では4月29日は昭和の日で祝日である。
つまり、国によって最終営業日は異なる。

タイムゾーンをAsia/Tokyoに指定すると上手くいくのだろうかと考えたが無駄だったw。UTCからの時差を考慮したところで、曜日(休日)の概念を教えなければ駄目だよね。

print pd.date_range(start='2016/1/1', end='2016/11/30', freq='BM', tz='Asia/Tokyo')

結果は、次。

DatetimeIndex(['2016-01-29 00:00:00+09:00', '2016-02-29 00:00:00+09:00',
'2016-03-31 00:00:00+09:00', '2016-04-29 00:00:00+09:00',
'2016-05-31 00:00:00+09:00', '2016-06-30 00:00:00+09:00',
'2016-07-29 00:00:00+09:00', '2016-08-31 00:00:00+09:00',
'2016-09-30 00:00:00+09:00', '2016-10-31 00:00:00+09:00',
'2016-11-30 00:00:00+09:00'],
dtype='datetime64[ns, Asia/Tokyo]', freq='BM')

これについては大変そうな気がするので、別の機会に纏めることとする。
→(追記 2016/11/26)
「Pythonでの時系列データの扱い4 〜 「祝日の取得」および「祝日を考慮した営業日の取得」」に作成した。
営業日リストの作成までは書いていないが、応用すれば営業日リストも作成できる(はず)。

以上。


Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理