У меня есть следующий CSV-файл с 4 различными серверами и двумя переменными: загрузка процессора и использование памяти.
Server,Time_floor,variable,Value
A,0,CPU Usage,0.4544871794871793
A,0,Memory Usage,0.49389743589743573
A,1,CPU Usage,0.4865365853658536
A,1,Memory Usage,0.4246829268292683
A,2,CPU Usage,0.5371627906976744
A,2,Memory Usage,0.43420930232558136
A,3,CPU Usage,0.5200689655172416
A,3,Memory Usage,0.4970344827586206
B,0,CPU Usage,0.5252307692307693
B,0,Memory Usage,0.4178461538461538
B,1,CPU Usage,0.4401428571428571
B,1,Memory Usage,0.41678571428571426
B,2,CPU Usage,0.5404285714285715
B,2,Memory Usage,0.3617857142857143
B,3,CPU Usage,0.5288999999999999
B,3,Memory Usage,0.5067999999999999
Я хотел бы иметь приложение da sh с выпадающим меню, которое для каждого сервера позволяет мне выбрать, какую переменную я хочу построить. График будет иметь time_floor в качестве оси x и значение переменной на его оси y.
У меня есть скрипт python, который приводит к следующему приложению da sh, где раскрывающееся меню переменной зависит от выпадающий список сервера:
Код следующий:
import dash
import pandas as pd
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
df = pd.read_csv('Manual_Log_Filtered.csv')
print(df.columns)
servers = df['Server'].unique()
print(servers)
metrics = df['variable'].unique()
print(metrics)
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
dcc.RadioItems(
id='servers-radio',
options=[{'label': k, 'value': k} for k in servers],
value='A'
),
html.Hr(),
dcc.RadioItems(id='metrics-radio'),
html.Hr(),
html.Div(id='display-selected-values'),
dcc.Graph(id='indicator-graphic')
])
@app.callback(
Output('metrics-radio', 'options'),
[Input('servers-radio', 'value')])
def set_metrics_options(selected_country):
return [{'label': i, 'value': i} for i in metrics]
@app.callback(
Output('metrics-radio', 'value'),
[Input('metrics-radio', 'options')])
def set_metrics_value(available_options):
print(available_options[0]['value'])
return available_options[0]['value']
@app.callback(
Output('indicator-graphic', 'figure'),
[Input('metrics-radio', 'value')])
def update_graph(metrics,
year_value):
dff = df[df['Time_floor'] == year_value]
print(dff)
return {
'data': [dict(
x=dff[dff['Time_floor'] == year_value],
y=dff[dff['variable'] == metrics["Value"]],
mode='markers',
marker={
'size': 15,
'opacity': 0.5,
'line': {'width': 0.5, 'color': 'white'}
}
)],
'layout': dict(
xaxis={
'title': year_value
},
yaxis={
'title': metrics
},
margin={'l': 40, 'b': 40, 't': 10, 'r': 0},
hovermode='closest'
)
}
if __name__ == '__main__':
app.run_server()
То, что я хотел бы видеть в выводе графика, выглядит примерно так (игнорировать красные точки):
Любая помощь будет принята с благодарностью.
Спасибо!