os1187's picture
Update app.py
b2c0262
import altair as alt
import gradio as gr
import pandas as pd
import numpy as np
def plot_usage_volume(system1, users1, timeline1, system2, users2, timeline2):
# 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]):
# Calculate the monthly usage volume based on the estimated number of users and timeline
usage = np.concatenate([
np.linspace(0, [users1, users2][i], int([timeline1, timeline2][i] * 0.25)),
np.linspace([users1, users2][i] * 0.5, [users1, users2][i], int([timeline1, timeline2][i] * 0.5)),
np.linspace([users1, users2][i], [users1, users2][i] * 0.75, int([timeline1, timeline2][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 multiline plot of the usage volume for each system
line = alt.Chart(data).mark_line().encode(
x=alt.X('Month', sort=list(data['Month'].unique())),
y='Usage:Q',
color='System:N'
).properties(title="System Rollout Usage Volume Plot")
# Create an aggregated line for the total usage across both systems
aggregated_data = data.groupby(['Month']).sum().reset_index()
aggregated_data['System'] = 'Total'
data = pd.concat([data, aggregated_data], axis=0)
aggregated_line = alt.Chart(aggregated_data).mark_line(color='black').encode(
x=alt.X('Month', sort=list(data['Month'].unique())),
y='Usage:Q'
)
# Combine the multiline and aggregated line plots
chart = alt.layer(line, aggregated_line)
# Return the plot as a Gradio output
return chart
# 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)
]
# Define the output component
output = gr.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()