def push(): # DBから必要なデータを取得 today = db_session.query(Data).all()[-2].date nextday = db_session.query(Data).all()[-1].date price_today = db_session.query(Data).all()[-2].real_price price_nextday = db_session.query(Data).all()[-1].pred_price # 送信するメッセージを記述 text = ( "おはようございます!🌅 \n本日のビットコイン相場予測配信です!💹\n\n" f"{today.strftime('%Y-%m-%d %H:%M')}の実際相場\n" f"¥{price_today} (BTC/JPY)\n\n" f"{nextday.strftime('%Y-%m-%d %H:%M')}の予測相場\n" f"¥{price_nextday} (BTC/JPY)\n\n" "アプリケーションのURL \n" "https://predict-bitcoin.herokuapp.com/" ) messages = TextSendMessage(text=text) # アカウントを追加している全ユーザーにメッセージを送信 line_bot_api.broadcast(messages=messages)
def predict_nextday(): # 価格情報を取得しデータフレームに格納 today_data = db_session.query(Data).all()[-1] today_data.real_price = get_price() # 上書き(上書きする前はNoneになっている) db_session.add(today_data) db_session.commit() # windowを作成し標準化 window = 5 data_five = db_session.query(Data).all()[-window:] input_will = [] for price in data_five: input_will.append(price.real_price) input_will = np.array(input_will).reshape(1, window, 1) input_mean = np.mean(input_will) input_std = np.std(input_will) sta_input = (input_will - input_mean) / input_std # 学習済みモデルを取得 with open("lstm_model.pickle", "rb") as f: model = pickle.load(f) # 翌日の価格を予測、標準化してあるので元に戻す future_price = model.predict(sta_input) future_price = future_price.reshape(-1) future_price = future_price * input_std + input_mean future_price = float(future_price) # 翌日の日付を取得 today = db_session.query(Data).all()[-1].date next_day = today + timedelta(days=1) # 翌日の日付、予測した価格をデータベースに格納 row = Data(date=next_day, real_price=None, pred_price=future_price) db_session.add(row) db_session.commit()
import dash import dash_core_components as dcc import dash_html_components as html import plotly.graph_objects as go import pandas as pd import datetime from assets.database import db_session from assets.models import Data external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css'] data = db_session.query(Data.date, Data.subscribers, Data.reviews).all() dates = [] subscribers = [] reviews = [] for datum in data: dates.append(datum.date) subscribers.append(datum.subscribers) reviews.append(datum.reviews) diff_subscribers = pd.Series(subscribers).diff().values diff_reviews = pd.Series(reviews).diff().values app = dash.Dash(__name__, external_stylesheets=external_stylesheets) server = app.server #herokuにデプロイする際に必要 app.layout = html.Div(children=[ html.H2(children='PythonによるWebスクレイピング~アプリケーション偏~'),
from assets.database import init_db from assets.models import Data import datetime init_db() #create date = datetime.date.today() row1 = Data(date=date, subscribers=6500, reviews=210) row2 = Data(date=date, subscribers=1500, reviews=220) db_session.add(row1) db_session.add(row2) db_session.commit() #commitでデータベースに保存 #read read1 = db_session.query(Data).all()[0].subscribers #update datum = db_session.query(Data).all()[0] datum.subscribers = 1000 db_session.add(datum) db_session.commit() #dalete datum = db_session.query(Data).filter_by(subscribers=1000).one() db_session.delete(datum) db_session.commit() #全削除 #Data.query.delete() print(db_session.query(Data).all())
import dash_core_components as dcc import dash_html_components as html import plotly.graph_objs as go from assets.database import db_session from assets.models import Data # 外部のスタイルシートを取得 external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css'] # インスタンスを生成 app = dash.Dash(__name__, external_stylesheets=external_stylesheets) server = app.server # DBからデータを取得 data = db_session.query(Data.date, Data.real_price, Data.pred_price).all() # 取得したデータを項目ごとに分配 dates = [] real_prices = [] pred_prices = [] for _data in data: dates.append(_data.date) real_prices.append(_data.real_price) pred_prices.append(_data.pred_price) # トップのコンポーネントを作成 top = html.H2(children='ビットコインの相場予測 ( BTC / JPY )', style={ 'textAlign': 'center',