2014年11月30日日曜日

読み込んだ日付をdatetime形式にする -poython

前回までで、保存してた過去の株式ファイルを読み込み、行列で呼び出すことができるようになりました。
しかし、日付に関しては日本語文字列で表記されているので、このまま日付として人s着させることができません。
そこで、この日付をdatetimeモジュールを用いて扱いやすいようフォーマットを変更しようと思います。

まず日本語文字列のうち年、月、日にちの情報をそれぞれ抜き出すのですが、
これは正規表現で抜き出すことにしました。
このへんはJAVAのでも使いましたのでやり方はほぼ同じです。
import numpy as np
import re
import datetime
def str2date(days):
    days = days.decode('utf-8')
    pattern = u"([0-9]{4})年([0-9]{1,2})月([0-9]{1,2})日"  ##[0-9]{1,2}月[0-9]{1,2}日
    matchOB = re.search(pattern,days)
    yyyy = int(matchOB.group(1))
    mm = int(matchOB.group(2))
    dd = int(matchOB.group(3))
    return datetime.datetime(yyyy,mm,dd)

このstr2date関数で年月日を探しだして、再フォーマットします。
ただ、この状態では、引数に配列を入れることができないので、
例えば
data[date]
ではうまく行かず、
data[date][2]
のように行列の行数まで指定してやる必要があります。

今回は上の
data[date]の状態で日付すべてを使えるようにしたいので、
この関数をベクトル化して使う必要があります。
そのためにもう一つ関数を作りました。
def vstr2date(deta):
    v2d = np.vectorize(str2date)
    return v2d(deta[dataload.date])

この関数は
t = vstr2date(data)
(dataは前回のdataloadクラスで読み込んだ変数)
とすることでdataの日付をフォーマットしてくれます。

今回もこの2つの関数をdataloadクラスなどに組み込みたかったのですが、
クラスに組み込むとうまく行かなかったので、
関数の状態でモジュールから呼び出すことにしました。

参考
実験データの読み込み(テキストファイル)
http://kaiseki-web.lhd.nifs.ac.jp/documents/Python/textfile.htm
Pythonで文字列 <-> 日付(date, datetime) の変換http://qiita.com/shibainurou/items/0b0f8b0233c45fc163cd
日付フォーマット(datetime⇔文字列)
http://python.civic-apps.com/date-format/

0 件のコメント:

コメントを投稿