File size: 2,742 Bytes
e0d0f44 02a59bc e15f060 f1f85ae ff0096b e0d0f44 d401e08 e0d0f44 d401e08 e0d0f44 0c3b8f9 e0d0f44 d74ff22 0c3b8f9 e15f060 d401e08 ff0096b e15f060 2020bbe d401e08 875d1be f1f85ae e15f060 875d1be f1f85ae 0c3b8f9 f1f85ae 0c3b8f9 e15f060 |
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 |
import pandas as pd
import numpy as np
import plotly
import plotly.graph_objs as go
import gradio as gr
import json
def plot_usage_volume(system1, users1, timeline1, system2, users2, timeline2, system3, users3, timeline3):
# Create empty dataframe to hold usage data
data = pd.DataFrame(columns=["System", "Month", "Usage"])
# Generate usage data for each system based on typical rollout behaviors
for i, system in enumerate([system1, system2, system3]):
# Calculate the monthly usage volume based on the estimated number of users and timeline
usage = np.concatenate([
np.linspace(0, [users1, users2, users3][i], int([timeline1, timeline2, timeline3][i] * 0.25)),
np.linspace([users1, users2, users3][i] * 0.5, [users1, users2, users3][i], int([timeline1, timeline2, timeline3][i] * 0.5)),
np.linspace([users1, users2, users3][i], [users1, users2, users3][i] * 0.75, int([timeline1, timeline2, timeline3][i] * 0.25))
])
# Add the usage data to the dataframe
months = ["Month {}".format(j) for j in range(1, len(usage) + 1)]
system_data = pd.DataFrame({"System": [system] * len(usage), "Month": months, "Usage": usage})
data = pd.concat([data, system_data], axis=0)
# Create a line plot of the usage volume for each system
fig = go.Figure()
for system in data["System"].unique():
system_data = data[data["System"] == system]
fig.add_trace(go.Scatter(x=system_data["Month"], y=system_data["Usage"], mode="lines+markers", name=system))
fig.update_layout(title="System Rollout Usage Volume Plot", xaxis_title="Month", yaxis_title="Usage")
# Convert the plot to a JSON string
plot_json = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder)
# Return the plot as a Gradio output
return plot_json
# Define the input components
inputs = [
gr.inputs.Textbox(label="System 1 Name", default="System1"),
gr.inputs.Number(label="System 1 Users", default=1000),
gr.inputs.Number(label="System 1 Timeline (months)", default=12),
gr.inputs.Textbox(label="System 2 Name", default="System2"),
gr.inputs.Number(label="System 2 Users", default=500),
gr.inputs.Number(label="System 2 Timeline (months)", default=18),
gr.inputs.Textbox(label="System 3 Name", default="System3"),
gr.inputs.Number(label="System 3 Users", default=2000),
gr.inputs.Number(label="System 3 Timeline (months)", default=24)
]
# Define the output component
output = gr.outputs.Plot(label="Usage Volume Plot")
# Create the interface
iface = gr.Interface(fn=plot_usage_volume, inputs=inputs, outputs=output, title="System Rollout Usage Volume Plot")
# Launch the interface
iface.launch()
|