心ゆく日並

辛さを辛味に、苦しみを苦味に転じら れればこの日々も味わい深い

Python プログラム

PythonでFRBと米国金利を取得する方法

投稿日:

ども♪マコトです。

去年から米国の金利が逆イールドしているので景気が低迷するのではないかと話題があったので、FRBのHPからFFレートと米国金利を取得するプログラムをpyhtonで作ってみました。

Cドライブのdataフォルダに格納後にデータベースに格納するように作成しているので dataフォルダを作成してください。

プログラムは以下

"""
アメリカの金利とFFRateを取得する
https://www.federalreserve.gov/datadownload
"""
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import mysql.connector as sqlc
import csv
import sys
import time
import requests
from contextlib import closing
import os
import Cls_Connect as Conn

try:
    # 実行時間を測るStart
    start = time.time()

    #保存先ファイル名
    file_name = r"C:\data\FRB_H15.csv"

    # プロキシの設定(プロキシーを設定している場合は必要ない)
    Con = Conn.Connect()
    os.environ["http_proxy"] = Con.http_proxy()
    os.environ["https_proxy"] = Con.https_proxy()

    # 米国金利
    URL = "https://www.federalreserve.gov/datadownload/Output.aspx?rel=H15&series=bf17364827e38702b42a58cf8eaa3f78&lastobs=&from=&to=&filetype=csv&label=omit&layout=serieslist"

    response = requests.get(URL, stream=True)
    # ファイルの保存
    if response.status_code == 200:
        f = open(file_name, 'wb')
        f.write(response.content)
        f.close()

    # 編集したいファイル(元ファイル)を開く
    file = open(file_name,"r")
    # 書き出し用のファイルを開く
    out_file = open(r"C:\data\FRB_H15_Modify.csv","w")


    # 元ファイルのレコード部分をreadlinesメソッドで全行を読み取る
    lines = file.readlines()

    # for文で1行ずつ取得
    for line in lines:

        if(line[-2:]==",\n" or line[-4:]==",ND\n"):
            pass
        else:
            # ダブルコーテーションでくくる
            word = line.split(',')
            line = '"' + word[0].lstrip("H15/H15/").rstrip("_N.B") + '",' + word[1] + ',' + word[2]
            # 書き出し用のファイルに出力
            out_file.write(line)

    # 2つのファイルを閉じる
    file.close()
    out_file.close()

    # 編集したファイルを開く
    csv_file = open(r"C:\data\FRB_H15_Modify.csv", "r", encoding="utf_8", errors="", newline="" )

    #リスト形式
    Modifydata = csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\n", quotechar='"', skipinitialspace=True)

    connect = sqlc.connect(
        user = Con.user(),
        password = Con.password(),
        host = Con.host(),
        database = Con.database(),
        charset = Con.charset()
        )

    cursor = connect.cursor()
    #cursor.execute('LOAD DATA "C:\data\FRB_H15_Modify.csv" INTO TABLE IR_TS FIELDS TERMINATED BY "," LINES TERMINATED BY "\n"')

    query = "truncate table IR_DT"
    cursor.execute(query)
    query = "INSERT INTO IR_DT (TICKER,DATE,DATA) VALUES (%s, %s, %s)"
    cursor.executemany(query, Modifydata)

except sqlc.Error as error:
    connect.rollback()
    print ("エラー",error)
except Exception:
    e = sys.exc_info()[1]
    print("エラー",e.args)
else:
    cursor.close()
    connect.commit()
    connect.close()
    # 編集したファイルを閉じる
    csv_file.close()
finally:
    # 実行時間を測るEnd
    elapsed_time = time.time() - start
    print ("処理時間:{0}".format(elapsed_time) + "[sec]")


try:
    # 実行時間を測るStart
    start = time.time()
    file_name = r"C:\data\FF_Rate.csv"

    # プロキシの設定
    #上で行っているのでやらない

    # FFレート
    URL = "https://www.federalreserve.gov/datadownload/Output.aspx?rel=H15&series=8e83f7f17c5cea4d190d85ae6737639f&lastobs=&from=&to=&filetype=csv&label=omit&layout=serieslist"

    response = requests.get(URL, stream=True)
    # ファイルの保存
    if response.status_code == 200:
        f = open(file_name, 'wb')
        f.write(response.content)
        f.close()

    # 編集したいファイル(元ファイル)を開く
    file = open(file_name,"r")
    # 書き出し用のファイルを開く
    out_file = open(r"C:\data\FF_Rate_Modify.csv","w")

    # 元ファイルのレコード部分をreadlinesメソッドで全行を読み取る
    lines = file.readlines()

    # for文で1行ずつ取得
    for line in lines:

        if(line[-2:]==",\n" or line[-4:]==",ND\n"):
            pass
        else:
            # ダブルコーテーションでくくる
            word = line.split(',')
            line = '"' + word[0].lstrip("H15/H15/").rstrip("_N.WW") + '",' + word[1] + ',' + word[2]
            # 書き出し用のファイルに出力
            out_file.write(line)

    # 2つのファイルを閉じる
    file.close()
    out_file.close()

    # 編集したファイルを開く
    csv_file = open(r"C:\data\FF_Rate_Modify.csv", "r", encoding="utf_8", errors="", newline="" )

    #リスト形式
    Modifydata = csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\n", quotechar='"', skipinitialspace=True)

    connect = sqlc.connect(
        user = Con.user(),
        password = Con.password(),
        host = Con.host(),
        database = Con.database(),
        charset = Con.charset()
        )

    cursor = connect.cursor()

    query = "INSERT INTO IR_DT (TICKER,DATE,DATA) VALUES (%s, %s, %s)"
    cursor.executemany(query, Modifydata)

except sqlc.Error as error:
    connect.rollback()
    print ("エラー",error)
except Exception:
    e = sys.exc_info()[1]
    print("エラー",e.args)
else:
    cursor.close()
    connect.commit()
    connect.close()
    # 編集したファイルを閉じる
    csv_file.close()
finally:
    # 実行時間を測るEnd
    elapsed_time = time.time() - start
    print ("処理時間:{0}".format(elapsed_time) + "[sec]")

 

以下のmysqlで作成したデータベースに格納するように作成しています。

create table IR_DT(
    TICKER varchar(30) not null,
    DATE datetime not null,
    DATA decimal(25, 15) not null,
    PRIMARY KEY(TICKER,DATE)
)
ALTER TABLE IR_DT CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE IR_DT ADD INDEX CD_INDEX(TICKER,DATE);

 

以下のSQLを使用すれば、時系列で金利が表示されるはずです。

SELECT
    DATE,
    SUM(CASE WHEN TICKER like 'RIFLGFCY01' THEN DATA ELSE 0 END) AS 'RIFLGFCY01',
    SUM(CASE WHEN TICKER like 'RIFLGFCY02' THEN DATA ELSE 0 END) AS 'RIFLGFCY02',
    SUM(CASE WHEN TICKER like 'RIFLGFCY03' THEN DATA ELSE 0 END) AS 'RIFLGFCY03',
    SUM(CASE WHEN TICKER like 'RIFLGFCY05' THEN DATA ELSE 0 END) AS 'RIFLGFCY05',
    SUM(CASE WHEN TICKER like 'RIFLGFCY07' THEN DATA ELSE 0 END) AS 'RIFLGFCY07',
    SUM(CASE WHEN TICKER like 'RIFLGFCY10' THEN DATA ELSE 0 END) AS 'RIFLGFCY10',
    SUM(CASE WHEN TICKER like 'RIFLGFCY20' THEN DATA ELSE 0 END) AS 'RIFLGFCY20',
    SUM(CASE WHEN TICKER like 'RIFLGFCY30' THEN DATA ELSE 0 END) AS 'RIFLGFCY30'
FROM IR_DT
where date = '1980/1/1'
GROUP BY DATE order by DATE desc

 

何かわからないことがありましたらご連絡お待ちしています。







お・す・す・め・!

1

目次1 マコトのプロフィール1.1 自己紹介1.2 タイトルの由来1.3 サブタイトルの由来1.4 趣味1.5 ほしいも ...

-Python, プログラム

Copyright© 心ゆく日並 , 2020 AllRights Reserved.