FRBの金利データをRSSから抜き出してみる-SQLite3との接続


 前回までの記事で、とりあえずFRBのRSSからデータを取得する工程は一段落した。
 そこで、今回はこのデータをDBに保存することで今後のデータ利用の幅を増やして行きたいと思う。
 また、更新が完了したところまでをGit-Hubにcommitした。

作業

データ構造の定義

 その前に、RDBのデータ構造を定義していきたい。
 今の所、データの形は次のようになっている。

date DATE,
FFRate FLOAT,
M1 FLOAT,
M3 FLOAT,
M6 FLOAT,
Y1 FLOAT,
Y2 FLOAT,
Y3 FLOAT,
Y5 FLOAT,
Y10 FLOAT,
Y20 FLOAT,
Y30 FLOAT

最初はIDをふろうかと思ったが、最大でも一日に一回しかデータを取らないし、金融データは連番IDで検索をかけるよりも日付で検索がかけられたほうが便利なので、主キーは日付にした。
 また、データは分離したほうがいいかと思ったがまとめておいても特に差し障りがないため、以上の構造で問題ないだろう。
と、思っていたが、やはりデータは一つ一つ分離されていたほうが都合が良さそうだ。

作業

SQLiteによる実装

 さて、これをプログラムに落とし込むと、こうなった。なお、保存先は外付けHDDだ。

database.py
import sqlite3 as sql
dbpath="H:\Data\yieldcurve.db"
conn=sql.connect(dbpath)

cur=conn.cursor()
""
cur.executescript('''
    CREATE TABLE IF NOT EXISTS yieldCurve(
           ID INTEGER PRIMARY KEY,
           date DATE,
           FFRate FLOAT,
           M1 FLOAT,
           M3 FLOAT,
           M6 FLOAT,
           Y1 FLOAT,
           Y2 FLOAT,
           Y3 FLOAT,
           Y5 FLOAT,
           Y10 FLOAT,
           Y20 FLOAT,
           Y30 FLOAT
     )
''')
""
conn.commit()
cur=conn.cursor()
data=['2018-06-06', 1.7, 1.76, 1.93, 2.08, 2.23, 2.4, 2.54, 2.68, 2.83, 2.91, 3.0]
cur.execute(
    "INSERT INTO yieldCurve(date,FFRate,M1,M3,M6,Y1,Y2,Y3,Y5,Y10,Y20,Y30) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)",
    data)
conn.commit()
cur=conn.cursor()

cur.execute("SELECT * FROM yieldCurve")
list=cur.fetchall()
for i in list:
    print(i)
output
(1, '2018-06-03', 1.7, 1.76, 1.93, 2.08, 2.23, 2.4, 2.54, 2.68, 2.83, 2.91, 3.0)

これでOKだろう。

GitHubへの投稿

 せっかくなのでGitHubにも投稿してみた。
 VisualStudioをつかうとかなり簡単に投稿できる。

まとめ

 これで、データベースを用いることができるようになり、今後データを活用する幅が広がった。
 ただ、今回は仮の保存先として外付けHDDを使ったが、毎日駆動することを考えると信頼性に乏しいように思える。今後クローラーとして動かしていくにあたっては、仮想サーバーの活用などが必要になってくるだろう。
 次は、今回作ったモジュールを活かしてデータの取得から保存までを行うクローラーを作っていきたい。
と思っていたが、先にデータベースに接続するモジュールを作ろうと思う。