File size: 3,534 Bytes
81050a5
 
 
c9e326b
 
81050a5
 
 
 
 
c9e326b
81050a5
 
 
 
c9e326b
 
 
81050a5
c9e326b
81050a5
c9e326b
 
 
 
 
81050a5
 
 
c9e326b
 
 
 
 
 
 
 
81050a5
 
c9e326b
 
 
 
 
 
 
 
 
 
 
81050a5
c9e326b
 
 
 
 
 
 
 
 
 
 
81050a5
 
 
 
 
 
 
c9e326b
 
 
81050a5
 
 
c9e326b
 
 
 
81050a5
c9e326b
81050a5
 
 
 
c9e326b
 
81050a5
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import pandas as pd
import numpy as np
import gradio as gr
import datetime
import calendar
import matplotlib.pyplot as plt
import japanize_matplotlib
import matplotlib.dates as mdates
from dateutil.relativedelta import relativedelta
import datetime
from func import get_fish_qty, get_estat, dr_prediction_deployment, prediction_func, train_modeling

import yaml
with open('config.yaml') as file:
    config = yaml.safe_load(file.read())
    
def retrain():
    get_prediction_result(retrain = True)

def get_prediction_result(retrain = False):
    today = datetime.datetime.now()
    if retrain:
        train_modeling.modeling()
    prediction_month = (today+relativedelta(months=1)).strftime('%Y%m')
    month_days = month_days = [pd.to_datetime(prediction_month + str(i+1).zfill(2)) for i in range(calendar.monthrange((today+relativedelta(months=1)).year, (today+relativedelta(months=1)).month)[1])]
    dfc = pd.DataFrame({'target_date':month_days})
    df = prediction_func.prediction_to_dr(config['oil_price_url'], config['fuel_procurement_cost_url'])
    df = df.loc[df['target_date'].astype(str).str[:6]==prediction_month]
    df['target_date'] = pd.to_datetime(df['target_date'].astype(str))
    df['forecast_point'] = pd.to_datetime(df['forecast_point'].astype(str))
    df = pd.merge(dfc,
                  df,
                  on='target_date',
                  how='left')
    df.loc[df['forecast_point'].isnull(), 'forecast_point'] = df['target_date'].apply(lambda x:x-relativedelta(months=1))
    df = df.loc[~((df['target_date']<(today+relativedelta(months=1)))&(df['電気代'].isnull()))]
    return df[['forecast_point', 'target_date', '電気代']]

def plot_prediction_result():
    update = gr.LinePlot.update(
        value=get_prediction_result(),
        x="target_date",
        y="電気代",
        title="昨日までの魚の卸売り量から予測された、来月の2人世帯の平均電気料金の推移",
        width=500,
        height=400,
    )
    return update
# def plot_prediction_result():
#     df = get_prediction_result()

#     fig, ax1 = plt.subplots(1, 1, figsize=(30, 10))
#     fig.autofmt_xdate()
#     ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y/%m/%d"))
#     ax1.xaxis.set_major_locator(mdates.DayLocator(interval=1))
#     plt.rcParams["font.size"] = 14
#     ax1.grid(True)
#     ax1.set_xlim(df['target_date'].min(), df['target_date'].max())
#     ax1.set_xlabel('target_date')
#     ax1.set_ylabel('電気代(円)')
#     ax1.plot(df['target_date'], df['電気代'])
#     ax1.legend(loc="upper left", bbox_to_anchor=(1.0, 1.0))
    
    return fig


with gr.Blocks() as electoric_ploting:
    gr.Markdown("# 📈 Real-Time Line Plot")
    with gr.Row():
        with gr.Column():
            plot = gr.LinePlot(show_label=False)
#             plot = gr.Plot(label="昨日までの魚の卸売り量から予測された、来月の2人世帯の平均電気料金の推移")
    with gr.Row():
        gr.DataFrame(get_prediction_result)

        with gr.Column():
            btn= gr.Button(value="再学習")
            btn.click(retrain, inputs=None, outputs=None)
        

    # demo.load(make_plot, inputs=[button], outputs=[plot])
    
    electoric_ploting.load(lambda: datetime.datetime.now(), 
                           None,
                           # c_time2,
                           every=3600)
    dep = electoric_ploting.load(plot_prediction_result, None, plot, every=3600)

    electoric_ploting.queue().launch()
    
plt.close()