Googleスプレッドシートにスプレッドシート「暗号資産 取得用」、シート名「BTC_D」「BTC_M」「BTC_Y」「ETH_D」「ETH_M」「XRP_D」「XRP_M」を作成し、以下のプログラムを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
import requests
import io
# 認証のためのコード
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.today()
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 WriteSheets(df,start_cell,filename,sheetname,Clearflg):
## スプレッドシートを開く(名前から)
ss = gc.open(filename)
# シートを特定する(シート名で特定)
st = ss.worksheet(sheetname)
col_lastnum = len(df.columns) # DataFrameの列数
row_lastnum = len(df.index) # DataFrameの行数
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))
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)
if Clearflg == 1:
st.clear()
st.update_cells(cell_list)
def getstooq(codes,term,open,stop):
#CodesがListでない場合、Listに変換
if type(codes) is not list:
codes = eval("['" + codes + "']")
cnt = 0
for code in codes:
URL = "https://stooq.com/q/d/l/?s=" + code + "&d1=" + open + "&d2=" + stop + "&i=" + term
response = requests.get(URL, stream=True)
df = pd.read_csv(io.BytesIO(response.content),sep=",")
# 複数がListにある場合、Closeのみを取得
if len(codes) != 1:
df = df[["Date","Close"]]
#日付を日付型に変換
df["Date"] = pd.to_datetime(df["Date"])
# Dateをインデックスに変更
df = df.set_index("Date")
# ヘッダーをCodeに変更
df = df.rename(columns = {'Close':code})
else:
#日付を日付型に変換
df["Date"] = pd.to_datetime(df["Date"])
# Dateをインデックスに変更
df = df.set_index("Date")
if cnt == 0:
dfs = df
else:
dfs = pd.merge(dfs, df, how='outer', left_index=True, right_index=True)
cnt =+1
#欠損値を前のデータで保管
dfs = dfs.fillna(method = 'ffill')
return dfs
# d 日
# w 週
# M 月
# q 四半期
# Y 年
df = getstooq("btc.v","d",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','BTC_D',1)
df = getstooq("btc.v","m",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','BTC_M',1)
df = getstooq("btc.v","y",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','BTC_Y',1)
df = getstooq("eth.v","d",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','ETH_D',1)
df = getstooq("eth.v","m",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','ETH_M',1)
df = getstooq("XRP.v","d",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','XRP_D',1)
df = getstooq("XRP.v","m",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','XRP_M',1)
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.today()
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からデータ取得
def getstooq(codes,term,open,stop):
#CodesがListでない場合、Listに変換
if type(codes) is not list:
codes = eval("['" + codes + "']")
cnt = 0
for code in codes:
URL = "https://stooq.com/q/d/l/?s=" + code + "&d1=" + open + "&d2=" + stop + "&i=" + term
response = requests.get(URL, stream=True)
df = pd.read_csv(io.BytesIO(response.content),sep=",")
# 複数がListにある場合、Closeのみを取得
if len(codes) != 1:
df = df[["Date","Close"]]
#日付を日付型に変換
df["Date"] = pd.to_datetime(df["Date"])
# Dateをインデックスに変更
df = df.set_index("Date")
# ヘッダーをCodeに変更
df = df.rename(columns = {'Close':code})
else:
#日付を日付型に変換
df["Date"] = pd.to_datetime(df["Date"])
# Dateをインデックスに変更
df = df.set_index("Date")
if cnt == 0:
dfs = df
else:
dfs = pd.merge(dfs, df, how='outer', left_index=True, right_index=True)
cnt =+1
#欠損値を前のデータで保管
dfs = dfs.fillna(method = 'ffill')
return dfs
googleスプレッドシートに記述
def WriteSheets(df,start_cell,filename,sheetname,Clearflg):
## スプレッドシートを開く(名前から)
ss = gc.open(filename)
# シートを特定する(シート名で特定)
st = ss.worksheet(sheetname)
col_lastnum = len(df.columns) # DataFrameの列数
row_lastnum = len(df.index) # DataFrameの行数
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))
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)
if Clearflg == 1:
st.clear()
st.update_cells(cell_list)
暗号資産を指定している箇所
df = getstooq("btc.v","d",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','BTC_D',1)
df = getstooq("btc.v","m",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','BTC_M',1)
df = getstooq("btc.v","y",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','BTC_Y',1)
df = getstooq("eth.v","d",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','ETH_D',1)
df = getstooq("eth.v","m",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','ETH_M',1)
df = getstooq("XRP.v","d",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','XRP_D',1)
df = getstooq("XRP.v","m",open.strftime('%Y%m%d'),stop.strftime('%Y%m%d'))
#スプレッドに記述
WriteSheets(df,'A1','暗号資産 取得用','XRP_M',1)
プログラムで取得できる暗号資産
- ビットコイン
- イーサリアム
- リップル
プログラミングを学びたいなら、テックジムへ!
テックジムは、2016年に設立された自習型・定額制プログラミングスクールです。全国に12校(2023年11月現在)を展開しており、プログラミング初心者から経験者まで、幅広い層の受講者がいます。
テックジムの特徴は、以下の3点
- 自習型で、自分のペースで学習できる
テックジムでは、講師による授業は行われません。受講生は、専用の教材とカリキュラムに沿って、自習でプログラミングを学習します。そのため、自分のペースで学習を進めることができ、プログラミングに集中することができます。
- 200時間でビジネスで使えるスキルを身につけることができる
テックジムのカリキュラムは、プログラミング初心者でも200時間でビジネスで使えるスキルを身につけることができるように設計されています。カリキュラムは、基礎から実践まで、段階的に学習できるようになっており、受講生は着実にスキルを向上させることができます。
- 転職・就職サポートも充実している
テックジムでは、転職・就職サポートも充実しています。転職・就職活動に必要なスキルや知識を身につけるための講座や、転職・就職相談会など、受講生のニーズに合わせてサポートを受けることができます。
テックジムで学んだら、こんなことができるようになります!
- 自分のオリジナルのWebサイトやアプリを作れる
- データサイエンスやAIを使って、ビジネスに貢献できる
- プログラミングスキルを活かして、転職や就職に成功できる
テックジムは、プログラミングを学習したい人にとって、まさに理想のスクール!
- 自分のペースで、効率的にプログラミングを学びたい人
- ビジネスで使えるスキルを身につけたい人
- 転職や就職に成功したい人
そんな方に、テックジムをぜひおすすめします。
テックジムに入会して、プログラミングのスキルを身につけて、新しい世界を切り拓きませんか?
コメント