Colaboratoryを使用して、FREDのデータをGoogleスプレッドシートに記入する方法

ども♪真毅です。

↓良ければ応援クリックお願いします!
にほんブログ村 株ブログへ

Googleスプレッドシートにスプレッドシート「経済指標 取得用」、シート名「雇用統計」「新規失業保険申請件数」「CPI&PPI」「マネーストック」を作成し、以下のプログラムをColaboratoryで実行すれば、データを取得できるはずです。

import sys
import time

import pandas as pd
import datetime as dt
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import re

# 認証のためのコード
from google.colab import auth
auth.authenticate_user()

import gspread
from google.auth import default
creds, _ = default()
gc = gspread.authorize(creds)


open = dt.date(1900,1,1)
stop = dt.date(2024,1,1)

try:

  # 実行時間を測るStart
  start = time.time()
  print ("開始時間:{0}".format(time.strftime('%Y/%m/%d %H:%M:%S')) )

  def toAlpha(num):
    if num<=26:
        return chr(64+num)
    elif num%26==0:
        return toAlpha(num//26-1)+chr(90)
    else:
        return toAlpha(num//26)+chr(64+num%26)

  def Getdata(code,start,stop,start_cell,filename,sheetname):
    ## スプレッドシートを開く(名前から)
    ss = gc.open(filename)
    # シートを特定する(シート名で特定)
    st = ss.worksheet(sheetname)

    # FREDからデータを取得
    df = web.DataReader(code, 'fred', open, stop)

    col_lastnum = len(df.columns) # DataFrameの列数
    row_lastnum = len(df.index)   # DataFrameの行数

    #googleスプレッドシートの開始位置
    start_cell_col = re.sub(r'[\d]', '', start_cell)
    start_cell_row = int(re.sub(r'[\D]', '', start_cell))

    # アルファベットから数字を返すラムダ式(A列~Z列まで)
    # 例:A→1、Z→26
    alpha2num = lambda c: ord(c) - ord('A') + 1

    # 展開を開始するセルからA1セルの差分
    row_diff = start_cell_row-1
    col_diff = alpha2num(start_cell_col)-alpha2num('A')

    cell_list = st.range(start_cell+':'+toAlpha(col_lastnum+1+col_diff)+str(row_lastnum+1+row_diff))

    #googleスプレッドシートに記載
    for cell in cell_list:
        if cell.col == 1+col_diff and cell.row == 1+row_diff:
            val = ''
        elif cell.col == 1+col_diff:
            val = df.index[cell.row-(2+row_diff)]
        elif cell.row == 1+row_diff:
            val = df.columns[cell.col-(2+col_diff)]
        else:
            val = df.iloc[cell.row-(2+row_diff)][cell.col-(2+col_diff)]

        cell.value = str(val)

    st.update_cells(cell_list)

  #PAYEMS 全従業員、非農業部門合計
  #UNRATE 失業率
  #CIVPART 労働力参加率
  #CES0500000003 平均時給
  Getdata(["PAYEMS","UNRATE","CIVPART","CES0500000003"],open,stop,'A2','経済指標 取得用','雇用統計')
  #ICSA 新規失業保険申請件数
  Getdata('ICSA',open,stop,'A2','経済指標 取得用','新規失業保険申請件数')

  #CPIAUCSL CPI
  #CPILFESL CPI 食料とエネルギーを除く
  #CORESTICKM159SFRBATL スティッキープライス消費者物価指数(食料とエネルギーを除く)
  #PPIACO PPI
  #PPIFIS PPI 最終需要 
  #PPICOR PPI 最終需要 食料とエネルギーを除く
  #PCE 個人消費支出
  #DPCERD3Q086SBEA 個人消費支出 (暗黙の価格デフレーター)
  #PCEPILFE 食料・エネルギーを除く個人消費支出(連鎖型物価指数)
  Code = ["CPIAUCSL","CPILFESL","CORESTICKM159SFRBATL","PPIACO","PPIFIS","PPICOR","PCE","DPCERD3Q086SBEA","PCEPILFE"]
  Getdata(Code,open,stop,'A2','経済指標 取得用','CPI&PPI')

  #M2REAL 米M2マネーストック

  Code = ["M2REAL"]
  Getdata(Code,open,stop,'A2','経済指標 取得用','マネーストック')

except Exception:

  e = sys.exc_info()[1]
  print("エラー",e.args)

finally:

  # 実行時間を測るEnd
  print ("終了時間:{0}".format(time.strftime('%Y/%m/%d %H:%M:%S')) )
  elapsed_time = time.time() - start
  print ("処理時間:{0}".format(elapsed_time) + "[sec]")
目次

各プログラムの説明

googleスプレッドと連携

# 認証のためのコード
from google.colab import auth
auth.authenticate_user()

import gspread
from google.auth import default
creds, _ = default()
gc = gspread.authorize(creds)

fredで取得する期間

open = dt.date(1900,1,1)
stop = dt.date(2024,1,1)

googleスプレッドシートの行のアルファベットを数値に変換

  def toAlpha(num):
    if num<=26:
        return chr(64+num)
    elif num%26==0:
        return toAlpha(num//26-1)+chr(90)
    else:
        return toAlpha(num//26)+chr(64+num%26)

FREDからデータ取得及び、googleスプレッドシートに記述

  def Getdata(code,start,stop,start_cell,filename,sheetname):
    ## スプレッドシートを開く(名前から)
    ss = gc.open(filename)
    # シートを特定する(シート名で特定)
    st = ss.worksheet(sheetname)

    # FREDからデータを取得
    df = web.DataReader(code, 'fred', open, stop)

    col_lastnum = len(df.columns) # DataFrameの列数
    row_lastnum = len(df.index)   # DataFrameの行数

    #googleスプレッドシートの開始位置
    start_cell_col = re.sub(r'[\d]', '', start_cell)
    start_cell_row = int(re.sub(r'[\D]', '', start_cell))

    # アルファベットから数字を返すラムダ式(A列~Z列まで)
    # 例:A→1、Z→26
    alpha2num = lambda c: ord(c) - ord('A') + 1

    # 展開を開始するセルからA1セルの差分
    row_diff = start_cell_row-1
    col_diff = alpha2num(start_cell_col)-alpha2num('A')

    cell_list = st.range(start_cell+':'+toAlpha(col_lastnum+1+col_diff)+str(row_lastnum+1+row_diff))

    #googleスプレッドシートに記載
    for cell in cell_list:
        if cell.col == 1+col_diff and cell.row == 1+row_diff:
            val = ''
        elif cell.col == 1+col_diff:
            val = df.index[cell.row-(2+row_diff)]
        elif cell.row == 1+row_diff:
            val = df.columns[cell.col-(2+col_diff)]
        else:
            val = df.iloc[cell.row-(2+row_diff)][cell.col-(2+col_diff)]

        cell.value = str(val)

    st.update_cells(cell_list)

  #PAYEMS 全従業員、非農業部門合計
  #UNRATE 失業率
  #CIVPART 労働力参加率
  #CES0500000003 平均時給
  Getdata(["PAYEMS","UNRATE","CIVPART","CES0500000003"],open,stop,'A2','経済指標 取得用','雇用統計')
  #ICSA 新規失業保険申請件数
  Getdata('ICSA',open,stop,'A2','経済指標 取得用','新規失業保険申請件数')

  #CPIAUCSL CPI
  #CPILFESL CPI 食料とエネルギーを除く
  #CORESTICKM159SFRBATL スティッキープライス消費者物価指数(食料とエネルギーを除く)
  #PPIACO PPI
  #PPIFIS PPI 最終需要 
  #PPICOR PPI 最終需要 食料とエネルギーを除く
  #PCE 個人消費支出
  #DPCERD3Q086SBEA 個人消費支出 (暗黙の価格デフレーター)
  #PCEPILFE 食料・エネルギーを除く個人消費支出(連鎖型物価指数)
  Code = ["CPIAUCSL","CPILFESL","CORESTICKM159SFRBATL","PPIACO","PPIFIS","PPICOR","PCE","DPCERD3Q086SBEA","PCEPILFE"]
  Getdata(Code,open,stop,'A2','経済指標 取得用','CPI&PPI')

  #M2REAL 米M2マネーストック

  Code = ["M2REAL"]
  Getdata(Code,open,stop,'A2','経済指標 取得用','マネーストック')

プログラムで取得できる経済指標

  • PAYEMS 全従業員、非農業部門合計
  • UNRATE 失業率
  • CIVPART 労働力参加率
  • CES0500000003 平均時給
  • ICSA 新規失業保険申請件数
  • CPIAUCSL CPI
  • CPILFESL CPI 食料とエネルギーを除く
  • CORESTICKM159SFRBATL スティッキープライス消費者物価指数(食料とエネルギーを除く)
  • PPIACO PPI
  • PPIFIS PPI 最終需要
  • PPICOR PPI 最終需要 食料とエネルギーを除く
  • PCE 個人消費支出
  • DPCERD3Q086SBEA 個人消費支出 (暗黙の価格デフレーター)
  • PCEPILFE 食料・エネルギーを除く個人消費支出(連鎖型物価指数)
  • M2REAL 米M2マネーストック

プログラミングを学びたいなら、テックジムへ!

テックジムは、2016年に設立された自習型・定額制プログラミングスクールです。全国に12校(2023年11月現在)を展開しており、プログラミング初心者から経験者まで、幅広い層の受講者がいます。

テックジムの特徴は、以下の3点

  • 自習型で、自分のペースで学習できる

テックジムでは、講師による授業は行われません。受講生は、専用の教材とカリキュラムに沿って、自習でプログラミングを学習します。そのため、自分のペースで学習を進めることができ、プログラミングに集中することができます。

  • 200時間でビジネスで使えるスキルを身につけることができる

テックジムのカリキュラムは、プログラミング初心者でも200時間でビジネスで使えるスキルを身につけることができるように設計されています。カリキュラムは、基礎から実践まで、段階的に学習できるようになっており、受講生は着実にスキルを向上させることができます。

  • 転職・就職サポートも充実している

テックジムでは、転職・就職サポートも充実しています。転職・就職活動に必要なスキルや知識を身につけるための講座や、転職・就職相談会など、受講生のニーズに合わせてサポートを受けることができます。

テックジムで学んだら、こんなことができるようになります!

  • 自分のオリジナルのWebサイトやアプリを作れる
  • データサイエンスやAIを使って、ビジネスに貢献できる
  • プログラミングスキルを活かして、転職や就職に成功できる

テックジムは、プログラミングを学習したい人にとって、まさに理想のスクール!

  • 自分のペースで、効率的にプログラミングを学びたい人
  • ビジネスで使えるスキルを身につけたい人
  • 転職や就職に成功したい人

そんな方に、テックジムをぜひおすすめします。

テックジムに入会して、プログラミングのスキルを身につけて、新しい世界を切り拓きませんか


この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

真毅のアバター 真毅 自由人

趣味はカメラ、ランニング、読書。職業はシステムエンジニア。昔はリサーチハウスで企業調査、産業分析を行っていました。目標は投資で稼いでゆっくり生きる。資格はFP2級、証券アナリスト。投資対象は日本株、米国ETF、金、暗号資産、不動産。金融資産と実物資産の両輪で資産形成。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次