Pythonでの時系列データの扱い2 〜 時系列データの作成および選択
「Pythonでの時系列データの扱い1 〜 文字列とdatetimeの変換」の続き。
◎pandas.Seriesによる時系列データの作成および操作
pandas.Seriesのindexオプションに、datetime.datetimeで作成したdatetime型データのリストを指定して時系列データを作成すると、pandasがDatetimeIndex型の時系列データを作成してくれる
#coding:utf-8 import numpy as np import matplotlib.pyplot as plt import pandas as pd import datetime import dateutil #################### TimeSeries #################### # 日付インデックスを作成 dates = [ datetime.datetime(2011, 1, 2), datetime.datetime(2011, 1, 5), datetime.datetime(2011, 1, 7), datetime.datetime(2011, 1, 8), datetime.datetime(2011, 1, 10), datetime.datetime(2011, 1, 12), ] # indexを先程作成したdatesに設定した、時系列データを作成 ts = pd.Series(np.random.randn(6), index = dates) print ts print ts.index print ts.index.dtype print ts.index[0],ts[0]
出力結果は次の通り。
◎print ts実行
2011-01-02 0.085009
2011-01-05 2.289721
2011-01-07 -1.888826
2011-01-08 0.234620
2011-01-10 -0.519038
2011-01-12 -0.002832
dtype: float64◎print ts.index実行
DatetimeIndex(['2011-01-02', '2011-01-05', '2011-01-07', '2011-01-08',
'2011-01-10', '2011-01-12'],
dtype='datetime64[ns]', freq=None)◎print ts.index.dtype実行
datetime64[ns]◎print ts.index[0],ts[0]実行
2011-01-02 00:00:00 -1.19647229903
開始日付と期間を指定して時系列データを作成することも可能。
また、作成した時系列データから特定データを取得する方法も色々ある。
#coding:utf-8 import numpy as np import matplotlib.pyplot as plt import pandas as pd import datetime import dateutil # データの作成開始日付と期間を指定して時系列データを作成する longer_ts = pd.Series(np.random.randn(1000),index=pd.date_range('1/1/2000', periods=1000)) # 年が一致するものを検索する print longer_ts['2001'] # 年月が一致するものを検索 print longer_ts['2001-05'] # 取得開始日をdatetimeで指定して、それ以降のデータを取得する print longer_ts[datetime.datetime(2001,5,7):] # データの開始日付と終了日付を指定してデータを取得する print longer_ts['1/6/2011':'1/11/2011'] #存在しない場合は何も戻らない print longer_ts['5/6/2001':'5/11/2001']
実行結果は次のようになる。
# 年が一致するものを検索する print longer_ts['2001']
2001-01-01 -1.009395
2001-01-02 0.485400
2001-01-03 0.258303
2001-01-04 -0.239185
2001-01-05 0.047044
2001-01-06 -1.316472
...
2001-12-25 -0.388155
2001-12-26 -0.769968
2001-12-27 0.736896
2001-12-28 -1.241676
2001-12-29 0.085019
2001-12-30 -0.816814
2001-12-31 -0.984648# 年月が一致するものを検索する print longer_ts['2001-05']
2001-05-01 -0.200811
2001-05-02 0.312867
2001-05-03 -0.316903
2001-05-04 -1.238628
2001-05-05 -0.030432
2001-05-06 -0.983215
2001-05-07 0.789857
2001-05-08 0.723744
2001-05-09 -1.053328
2001-05-10 -0.662608
2001-05-11 0.114421
2001-05-12 -0.606446
2001-05-13 1.713556
2001-05-14 0.716952
2001-05-15 -0.912648
2001-05-16 0.288324
2001-05-17 1.769182
# 取得開始日をdatetimeで指定して、それ以降のデータを取得する print longer_ts[datetime.datetime(2001,5,7):]
2001-05-07 0.789857
2001-05-08 0.723744
2001-05-09 -1.053328
2001-05-10 -0.662608
・・・・・・・# データの開始日付と終了日付を指定してデータを取得する print longer_ts['1/6/2011':'1/11/2011']
Series([], Freq: D, dtype: float64)
※)存在しない場合は何も戻らない# データの開始日付と終了日付を指定してデータを取得する print longer_ts['5/6/2001':'5/11/2001']
2001-05-06 -0.983215
2001-05-07 0.789857
2001-05-08 0.723744
2001-05-09 -1.053328
2001-05-10 -0.662608
2001-05-11 0.114421
Freq: D, dtype: float64
◎pandas.DataFrameによる時系列データの作成および操作
ここまでpandas.Seriesに対して実施したことは、pandas.DataFrameでも実施できる。
###### pandas.DataFrameによる時系列データ作成 ###### longer_df = pd.DataFrame( np.random.randn(1000, 4), #1000行の4列の行列を作成する(4要素持つベクトルを1000個作る) index=pd.date_range('1/1/2000', periods=1000), columns=['Open', 'High', 'Low', 'Close'] ) # 年が一致するものを検索する print longer_df['2001'] # 年月が一致するものを検索 print longer_df['2001-05'] # 取得開始日をdatetimeで指定して、それ以降のデータを取得する print longer_df[datetime.datetime(2001,5,7):]
結果は次。
# 年が一致するものを検索する print longer_df['2001']
Open High Low Close
2001-01-01 0.226610 -2.021651 0.894285 -1.332273
2001-01-02 -0.159398 0.974963 1.479195 0.855358
2001-01-03 0.084935 -0.669278 1.188965 0.844677
2001-01-04 -0.602863 2.210382 -1.199838 1.820582
・・・・・・・・・・・# 年月が一致するものを検索 print longer_df['2001-05']
Open High Low Close
2001-05-01 -0.226392 -1.049307 -0.977490 -1.247701
2001-05-02 -0.902493 1.163422 0.038032 0.120781
2001-05-03 -0.430098 -1.867330 0.977169 -0.092192
2001-05-04 -0.866856 -0.095946 0.481190 0.507765
2001-05-05 0.144516 0.975847 1.105147 1.139388
2001-05-06 -1.679432 -1.370770 -0.606025 -1.600749
2001-05-07 0.664228 1.189631 1.053774 -0.852818
2001-05-08 -0.867117 0.135239 1.080369 -0.220236
・・・・・・・・・・・# 取得開始日をdatetimeで指定して、それ以降のデータを取得する print longer_df[datetime.datetime(2001,5,7):]
Open High Low Close
2001-05-07 0.664228 1.189631 1.053774 -0.852818
2001-05-08 -0.867117 0.135239 1.080369 -0.220236
2001-05-09 1.241876 1.362839 -0.618486 1.275841
2001-05-10 -1.343650 -0.811789 -2.136463 -0.274356
2001-05-11 0.571775 -1.788212 -1.626962 -0.317792
2001-05-12 0.145999 -0.128796 -0.440639 -1.052569
・・・・・・・・・・・
以上。
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理
- 作者: Wes McKinney,小林儀匡,鈴木宏尚,瀬戸山雅人,滝口開資,野上大介
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/12/26
- メディア: 大型本
- この商品を含むブログ (19件) を見る