首页 > 解决方案 > 破折号返回't.split 不是函数'错误'

问题描述

我开始探索 dash 作为一种允许一些内部业务合作伙伴手动选择值的方法,以查看这些值将如何改变我训练过的模型的预测。下面是我的代码。

但是,当我尝试运行它时,我收到一个错误,即 t.split 不是函数。我试图在文档中查找错误,但没有成功。我知道这个错误是一个 Java 错误,但这是我所能得到的。我哪里错了?

#import sklearn.external.joblib as extjoblib
import joblib
#from sklearn.externals import joblib
import plotly.graph_objs as go
import pandas as pd
import plotly.express as px
import numpy as np

import dash
import dash_daq as daq
import dash_html_components as html
import dash_core_components as dcc
import dash_bootstrap_components as dbc
from dash.dependencies import Input, Output, State

app = dash.Dash()

input_columns = ['incoming_volume','handled_volume','call_handle_time','transfer_rate',
 'call_to_suppt_rate','scheduled_hours','overtime_hours','phone_hours','off_phone_hours']

model = joblib.load("./beta_srv_lvl.pkl")
scaler = joblib.load("./beta_srv_lvl_scaler.pkl")
unscaled_train = pd.read_pickle("./unscaled_train.pkl")
pred_mean_data = pd.DataFrame([unscaled_train[input_columns].mean().tolist()], columns=input_columns)

fig = px.line(unscaled_train, x="rowdate", y="service_level")


app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
server = app.server
#cache = Cache(
#    app.server,
#    config={"CACHE_TYPE": "redis", "CACHE_REDIS_URL": os.environ.get("REDIS_URL", "")},
#)


# Build component parts
svc_graph = dcc.Graph(id="svc_lvl_graph", figure=fig, style={"height": "500px"})


#div_alert = dbc.Spinner(html.Div(id="alert-msg"))
query_card = dbc.Card(
    [
        html.H4("Service Level Prediction", className="card-title"),
        dcc.Markdown(id="svc_lvl_prediction"),
    ],
    body=True,
)

controls = [
        dbc.FormGroup(
        [
            dbc.Label('Incoming Volume'),
            daq.Slider(id='incoming_volume_slider'
                    ,min=unscaled_train.incoming_volume.min()
                    ,max=unscaled_train.incoming_volume.max()
                    #,marks={i: 'Label {}'.format(i) if i == 1 else str(i) 
                    #        for i in range(unscaled_train.incoming_volume.min(), unscaled_train.incoming_volume.max())}
                    ,value=np.round(unscaled_train.incoming_volume.mean(),0)
        
    )]),
    dbc.FormGroup(
        [
            dbc.Label('Handled Volume'),daq.Slider(id='handled_volume_slider'
                    ,min=unscaled_train.handled_volume.min()
                    ,max=unscaled_train.handled_volume.max()
                    #,marks={i: 'Label {}'.format(i) if i == 1 else str(i) 
                    #        for i in range(unscaled_train.incoming_volume.min(), unscaled_train.incoming_volume.max())}
                    ,value=np.round(unscaled_train.handled_volume.mean(),0)
                   
                  )]),
    dbc.FormGroup(
        [
            dbc.Label('Call Handle Time'),daq.Slider(id='call_handle_time_slider'
                    ,min=unscaled_train.call_handle_time.min()
                    ,max=unscaled_train.call_handle_time.max()
                    #,marks={i: 'Label {}'.format(i) if i == 1 else str(i) 
                    #        for i in range(unscaled_train.incoming_volume.min(), unscaled_train.incoming_volume.max())}
                    ,value=np.round(unscaled_train.call_handle_time.mean(),0)
                   
          )]),
    dbc.FormGroup(
        [
            dbc.Label('Transfer Rate'),daq.Slider(id='transfer_rate_slider'
                    ,min=unscaled_train.transfer_rate.min()
                    ,max=unscaled_train.transfer_rate.max()
                    #,marks={i: 'Label {}'.format(i) if i == 1 else str(i) 
                    #        for i in range(unscaled_train.incoming_volume.min(), unscaled_train.incoming_volume.max())}
                    ,value=unscaled_train.transfer_rate.mean()
           
          )]),
    dbc.FormGroup(
        [
            dbc.Label('Call to Support Rate'),daq.Slider(id='call_to_suppt_rate_slider'
                    ,min=unscaled_train.call_to_suppt_rate.min()
                    ,max=unscaled_train.call_to_suppt_rate.max()
                    #,marks={i: 'Label {}'.format(i) if i == 1 else str(i) 
                    #        for i in range(unscaled_train.incoming_volume.min(), unscaled_train.incoming_volume.max())}
                    ,value=unscaled_train.call_to_suppt_rate.mean()
           
          )]),
    dbc.FormGroup(
        [
            dbc.Label('Scheduled Hours'),daq.Slider(id='scheduled_hours_slider'
                    ,min=unscaled_train.scheduled_hours.min()
                    ,max=unscaled_train.scheduled_hours.max()
                    #,marks={i: 'Label {}'.format(i) if i == 1 else str(i) 
                    #        for i in range(unscaled_train.incoming_volume.min(), unscaled_train.incoming_volume.max())}
                    ,value=np.round(unscaled_train.scheduled_hours.mean(),0)
           
          )]),
    dbc.FormGroup(
        [
            dbc.Label('Overtime hours'),daq.Slider(id='overtime_hours_slider'
                    ,min=unscaled_train.overtime_hours.min()
                    ,max=unscaled_train.overtime_hours.max()
                    #,marks={i: 'Label {}'.format(i) if i == 1 else str(i) 
                    #        for i in range(unscaled_train.incoming_volume.min(), unscaled_train.incoming_volume.max())}
                    ,value=np.round(unscaled_train.overtime_hours.mean(),0)
           
          )]),
    dbc.FormGroup(
        [
            dbc.Label('Phone Hours'),daq.Slider(id='phone_hours_slider'
                    ,min=unscaled_train.phone_hours.min()
                    ,max=unscaled_train.phone_hours.max()
                    #,marks={i: 'Label {}'.format(i) if i == 1 else str(i) 
                    #        for i in range(unscaled_train.incoming_volume.min(), unscaled_train.incoming_volume.max())}
                    ,value=np.round(unscaled_train.phone_hours.mean(),0)
           
          )]),
    dbc.FormGroup(
        [
            dbc.Label('Off Phone Hours'),daq.Slider(id='off_phone_hours_slider'
                    ,min=unscaled_train.off_phone_hours.min()
                    ,max=unscaled_train.off_phone_hours.max()
                    #,marks={i: 'Label {}'.format(i) if i == 1 else str(i) 
                    #        for i in range(unscaled_train.incoming_volume.min(), unscaled_train.incoming_volume.max())}
                    ,value=np.round(unscaled_train.off_phone_hours.mean(),0)
           
          )]),
    
    
    dbc.Button("Predict Service Level", color="primary", id="button-train"),
]



# Define Layout
app.layout = dbc.Container(
    fluid=True,
    children=[
        html.H1("Service Level"),
        html.Hr(),
        dbc.Row(
            [
                dbc.Col([dbc.Card(controls, body=True)], md=3),
                dbc.Col([svc_graph, query_card], md=6),
                
            ]
        ),
    ],
    style={"margin": "auto"},
)

#Callbacks

@app.callback(
    [
        #Output("alert-msg", "children"),
        Output("svc_lvl_prediction", "children")
        #Output("svc_lvl_prediction", "children"),
    ],
    [Input("button-train", "n_clicks")],
    [
        State('incoming_volume_slider', "value"),
        State('handled_volume_slider', "value"),
        State('call_handle_time_slider', "value"),
        State('transfer_rate_slider', "value"),
        State("call_to_suppt_rate_slider", "value"),
        State("scheduled_hours_slider", "value"),
        State("overtime_hours_slider", "value"),
        State("phone_hours_slider", "value"),
        State("off_phone_hours_slider", "value"),
    ],
)

def query_and_train(n_clicks, inc_volume, hand_volume, call_handle, transfer_rate, suppt_rate, scheduled_hour, overtime, phone_hour, off_phone):
    pred_mean_data.loc[0,'incoming_volume'] = inc_volume
    pred_mean_data.loc[0,'handled_volume'] = hand_volume
    pred_mean_data.loc[0,'call_handle_time'] = call_handle
    pred_mean_data.loc[0,'transfer_rate'] = transfer_rate
    pred_mean_data.loc[0,'call_to_suppt_rate'] = suppt_rate
    pred_mean_data.loc[0,'scheduled_hours'] = scheduled_hour
    pred_mean_data.loc[0,'overtime_hours'] = overtime
    pred_mean_data.loc[0,'phone_hours'] = phone_hour
    pred_mean_data.loc[0,'off_phone_hours'] = off_phone
                       
    test_scaled = scaler.transform(pred_mean_data.values)
    input_scale = pd.DataFrame(test_scaled, columns = input_columns)
    svc_lvl_pred_value = model.predict(test_scaled)
    
    return [svc_lvl_pred_value[0]]

        
if __name__ == '__main__':

    app.run_server(debug=True)
    
    
    
#####
"""
Layout:
Title
Graph of training data service levels
Sliders of input data centered at mean of training data
Ouput cell

"""

标签: pythonplotly-dash

解决方案


推荐阅读