GoogleのColab+TensorFlowを使用して仮想通貨(暗号通貨)の明日の価格を予測するには【Free CPU+GPU】
ここではGoogleのColaboratory(クラウド)環境下で、
Keras + TensorFlowを使用して仮想通貨(暗号通貨)の未来(明日)の価格を予測する手順を解説します。
GoogleのColaboratory(Colab)を使用すると、
Pythonのライブラリ(TensorFlow, Keras, Sklearn, Pandas, Matplotlib等)を一切インストールする必要がありません。
さらに、Googleの最新のハードウェア(CPU+GUP)を無料で使用することができます。
必要なのはGoogleのアカウントを作成するだけです。
GoogleのColabの環境下でアプリを作成するときはブラウザ上で動作するJupter Notebookを使用します。
なので、自分のPCにGPUが搭載されていない環境でもブラウザが動く環境であれば、
Googleの最新のハードウェア環境を無料で使用することが可能です。
ぜひ、この機会にGoogleのColabを使いこなして株価、仮想通貨(暗号通貨)等の予測に活用してください。
説明文の左側に図の画像が表示されていますが縮小されています。
画像を拡大するにはマウスを画像上に移動してクリックします。
画像が拡大表示されます。拡大された画像を閉じるには右上の[X]をクリックします。
画像の任意の場所をクリックして閉じることもできます。
GoogleのColab環境下で仮想通貨(暗号通貨)(DOGE)の明日の価格を予測する
ここでは仮想通貨(暗号通貨)(DOGE)の明日の価格をTensorFlowを使用してGoogleのColab環境下で予測します。
GoogleのColab環境で仮想通貨(暗号通貨)の価格を予測するには前準備が必要になります。
前準備では、仮想通貨(暗号通貨)の過去の価格情報をYahoo!FinanceからダウンロードしてCSVファイルに保存します。
この前準備の処理はローカルPCで行います。
価格の予測は、
ローカルPCで作成したCSVファイルをGoogleのクラウド上にアップロードする処理と、
仮想通貨(暗号通貨)の価格を予測する処理に分かれます。
これらの処理はすべてGoogleのColab環境下で行います。
-
前準備として仮想通貨(暗号通貨)の価格をYahoo!FinanceからダウンロードしてCSVファイルに保存する
Visual Studio Code(VSC)を起動したら行1-25をコピペして実行します。
行2-4ではPythonのライブラリを取り込んでいます。
行6-7では仮想通貨(暗号通貨)「DOGE」のシンボルを定義しています。
行9-10ではYahoo!Financeから取得するDOGEコインの価格情報の範囲(開始日・終了日)を定義しています。
行12ではPandasのDataReader()メソッドでYahoo!FinanceからDOGEコインの価格情報を取り込んでDataFrameに格納しています。
行13ではDataFrameのIndex(Date)を解除しています。
これで列(Date)は通常の列になります。
行14では保存するCSVファイルのパスを定義しています。
行15ではPandasのto_csv()メソッドでDataFrameの内容をCSVファイルに出力しています。
to_csv()メソッドの引数に「index=False」を指定しているのでindexが除外されます。
行16では行15で作成したCSVファイルをPandasのread_csv()メソッドで取り込んでいます。
read_csv()メソッドの引数に「parse_date=['Date'」の指定があるので列「Date」の日付はstr型からdatetime型に自動的に変換されます。
行18-19ではPandasのDataReader()で取り込むDOGEコインの価格情報の範囲(開始日・終了日)を定義しています。
行21-25ではYahoo!FinanceからDOGEコインの価格情報をCSVファイルに保存して、そのCSVファイルを取り込んでいます。
# Import the libraries
import pandas as pd # pip install pandas
import pandas_datareader as web # pip install pandas-datareader
import datetime as dt
crypto_currency = 'DOGE'
against_currency = 'USD'
start = dt.datetime(2016,1,1)
end = dt.datetime.now()
data = web.DataReader(f'{crypto_currency}-{against_currency}', 'yahoo', start, end)
data = data.reset_index()
csv_file = f'data/csv/article027/crypto({crypto_currency}-{against_currency}).csv' # crypto(XXX-USD).csv
data.to_csv(csv_file, index=False)
data = pd.read_csv(csv_file, parse_dates=['Date'])
test_start = dt.datetime(2020,1,1)
test_end = dt.datetime.now()
test_data = web.DataReader(f'{crypto_currency}-{against_currency}', 'yahoo', test_start, test_end)
test_data = test_data.reset_index()
csv_file2 = f'data/csv/article027/crypto2({crypto_currency}-{against_currency}).csv' # crypto2(XXX-USD).csv
test_data.to_csv(csv_file2, index=False)
test_data = pd.read_csv(csv_file2, parse_dates=['Date'])
図1-1では行16のread_csv()メソッドで取り込んだCSVファイルの内容を表示しています。
CSVファイルにはYahoo!FinanceからダウンロードしたDOGEコインの価格情報(2016/1/1~2021/11/5)が格納されています。
図1-2では行25のread_csv()メソッドで取り込んだCSVファイルの内容を表示しています。
CSVファイルにはYahoo!FinanceからダウンロードしたDOGEコインの価格情報(2020/1/1~2021/11/5)が格納されています。
-
ローカルPCで作成したCSVファイルをGoogleのクラウド上にアップロードする
まずは、Googleのgmailのアカウントを作成してください。
アカウントの作成が完了したら、
「ここ」をクリックして、
Googleの「Colaboratory(Colab)」のサイトに移動します。
ブラウザに「Welcome To Colaboratory」のページが表示されたら「File」メニューをクリックします。
以降の手順は図の説明をご覧ください。
「File」メニューから「New notebook」をクリックします。
GoogleのColab上にJupter Notebookが表示されます。
Jupter Notebookのセルに行1-3のコードをコピペしたら[▶]ボタンをクリックして実行します。
行1ではPythonのライブラリを取り込んでいます。
行2-3ではローカルPCに保存したCSVファイルをGoogleのクラウド(Colab)にアップロードします。
ローカルのファイルをクラウドにアップロードするには、google.colabのupload()メソッドを実行します。
uoload()メソッドを実行すると、
ファイル選択のボタンが表示されるのでボタンをクリックしてアップロードするCSVファイルを選択します。
アップロード処理が開始されます。
アップロードの途中経過が表示されるので「100% done」が表示されるまで待ちます。
同様の手順で2番目のCSVファイルをアップロードします。
from google.colab import files
uploaded = files.upload() # upload 'crypto(DOGE-USD).csv'
uploaded2 = files.upload() # upload 'crypto2(DOGE-USD).csv'
-
GoogleのColab上にアップロードしたCSVファイルを取り込む
Jupter Notebookにセルを追加したら行1-7をコピペして[▶]で実行します。
2個のCSVファイルの内容が表示されます。
行1-2ではPythonのライブラリを取り込んでいます。
行3ではGoogleのクラウド(Colab)にアップロードしたCSVファイルをPandasのread_csv()メソッドでDataFrameに取り込んでいます。
read_csv()メソッドの引数にはCSVファイルをアップロードしたときの戻り値(uploaded)を指定します。
行4ではPandasのDataFrameの先頭レコードを表示しています。
行6-7では2番目のCSVファイルに対して同様の処理を行っています。
import pandas as pd
import io
df = pd.read_csv(io.StringIO(uploaded['crypto(DOGE-USD).csv'].decode('utf-8')))
print(df.head())
df2 = pd.read_csv(io.StringIO(uploaded2['crypto2(DOGE-USD).csv'].decode('utf-8')))
print(df2.head())
Pandasのread_csv()メソッドで取り込んだCSVファイルの先頭から5件が表示されています。
-
仮想通貨(暗号通貨)(DOGE)の明日の価格を予測する
Jupter Notebookに新規セルを追加したら行1-108をコピペして[▶]で実行します。
行2-20ではPythonのライブラリを取り込んでいます。
行22-23では仮想通貨(暗号通貨)(DOGE)のシンボルを定義しています。
行25ではGoogleのクラウド(Clab)にアップロートしたCSVファイルをPandasのread_csv()メソッドでDataFrameに取り込んでいます。
read_csv()メソッドの引数にはアップロードしたときの戻り値(uploaded)を指定します。
行27-50ではTensorFlowが学習するためのデータを用意しています。
行52-53では学習用のデータをコンパイルして学習します。
行57-75では仮想通貨(暗号通貨)の価格を予測しています。
行77-83では学習の成果をグラフに表示して可視化しています。
行86-93では未来(明日)の価格を予測しています。
行95-108では予測価格をカラー(緑色)で表示しています。
# TensorFlow Predicting Crypto Prices in Python(XXX-USD)
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
# In detail:-
# 0 = all messages are logged (default behavior)
# 1 = INFO messages are not printed
# 2 = INFO and WARNING messages are not printed
# 3 = INFO, WARNING, and ERROR messages are not printed
import numpy as np # pip install numpy or # pip install numpy==1.19.5
import matplotlib.pyplot as plt # pip install matplotlib
import pandas as pd # pip install pandas
import pandas_datareader as web # pip install pandas-datareader
import datetime as dt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras import models
from tensorflow.keras.layers import Dense, Dropout, LSTM
from tensorflow.keras.models import Sequential
from tensorflow.python.keras.backend import dropout
crypto_currency = 'DOGE'
against_currency = 'USD'
data = pd.read_csv(io.StringIO(uploaded['crypto(DOGE-USD).csv'].decode('utf-8')))
# Prepare data
scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1,1))
prediction_days = 60
x_train, y_train = [], []
for x in range(prediction_days, len(scaled_data)):
x_train.append(scaled_data[x-prediction_days:x, 0])
y_train.append(scaled_data[x, 0])
x_train, y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
# Create Neural Network
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(x_train, y_train, epochs=25, batch_size=32)
# Testing model
test_data = pd.read_csv(io.StringIO(uploaded2['crypto2(DOGE-USD).csv'].decode('utf-8')))
actual_prices = test_data['Close'].values
total_dataset = pd.concat((data['Close'], test_data['Close']), axis=0)
model_inputs = total_dataset[len(total_dataset) - len(test_data) - prediction_days:].values
model_inputs = model_inputs.reshape(-1, 1)
model_inputs = scaler.fit_transform(model_inputs)
x_test = []
for x in range(prediction_days, len(model_inputs)):
x_test.append(model_inputs[x-prediction_days:x, 0])
x_test = np.array(x_test)
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
prediction_prices = model.predict(x_test)
prediction_prices = scaler.inverse_transform(prediction_prices)
plt.plot(actual_prices, color='black', label='Actual Prices')
plt.plot(prediction_prices, color='green', label='Predicted Prices')
plt.title(f'{crypto_currency}-{against_currency} price prediction')
plt.xlabel('Time')
plt.ylabel('Price')
plt.legend(loc='upper left')
plt.show()
# Predict Next day
real_data = [model_inputs[len(model_inputs) + 1 - prediction_days:len(model_inputs) + 1, 0]]
real_data = np.array(real_data)
real_data = np.reshape(real_data, (real_data.shape[0], real_data.shape[1], 1))
prediction = model.predict(real_data)
prediction = scaler.inverse_transform(prediction)
#print(f'{crypto_currency}-{against_currency} prediction: $ {prediction[0][0]:,.2f}' )
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
print(f'{bcolors.OKGREEN}')
print(f'{crypto_currency}-{against_currency} prediction: $ {prediction[0][0]:,.2f}' )
print(f'{bcolors.ENDC}')
セルに行1-93をコピペしたら[▶]をクリックして実行します。
実行ボタンをクリックすると処理の途中経過が表示されます。
数分経過すると線グラフと明日の予測価格が表示されます。
ここでは明日のDOGEコインの予測価格はUSD $「0.29」になっています。
これを繰り返して機械学習の各種パラメータを調整して精度を高めます。