Simulator-UOPX / pages /1_Model_Quality.py
Pragya Jatav
m1
803ac82
raw
history blame
5.67 kB
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
import Streamlit_functions as sf
import response_curves_model_quality_base as rc1
st.set_page_config(
layout="wide"
)
from pptx import Presentation
from pptx.util import Inches
from io import BytesIO
import plotly.io as pio
import Streamlit_functions as sf
import response_curves_model_quality_base as rc1
def save_ppt_file():
# Initialize PowerPoint presentation
prs = Presentation()
# Helper function to add Plotly figure to slide
def add_plotly_chart_to_slide(slide, fig, left, top, width, height):
img_stream = BytesIO()
pio.write_image(fig, img_stream, format='png',engine="orca")
slide.shapes.add_picture(img_stream, left, top, width, height)
# Slide 1: Model Quality with Chart
slide_1 = prs.slides.add_slide(prs.slide_layouts[5])
title_1 = slide_1.shapes.title
title_1.text = "Model Quality"
i = 0
# print (i)
# Generate Plotly chart
fig = sf.mmm_model_quality()
# Add the Plotly chart to the slide
add_plotly_chart_to_slide(slide_1, fig, Inches(1), Inches(2), width=Inches(9), height=Inches(4.5))
i = i+1
# print (i)
# Slide 2: Media Data Elasticity
slide_2 = prs.slides.add_slide(prs.slide_layouts[5])
title_2 = slide_2.shapes.title
title_2.text = "Media Data Elasticity"
i = i+1
# print (i)
# Generate Elasticity chart
media_df = sf.media_data()
fig = sf.elasticity(media_df)
fig.update_layout(
margin=dict(l=150, r=50, t=50, b=50), # Adjust margins
# xaxis=dict(tickangle=-45) # Rotate x-axis labels if needed
)
i = i+1
# print (i)
# Add the Plotly chart to the slide
add_plotly_chart_to_slide(slide_2, fig, Inches(1), Inches(2), width=Inches(8), height=Inches(4.5))
i = i+1
# print (i)
# Slide 3: Half-Life Analysis
slide_3 = prs.slides.add_slide(prs.slide_layouts[5])
title_3 = slide_3.shapes.title
title_3.text = "Half-Life Analysis"
i = i+1
# print (i)
# Generate Half-Life chart
fig = sf.half_life(media_df)
fig.update_layout(
margin=dict(l=150, r=100, t=50, b=50), # Adjust margins
# xaxis=dict(tickangle=-45) # Rotate x-axis labels if needed
)
i = i+1
# print (i)
# Add the Plotly chart to the slide
add_plotly_chart_to_slide(slide_3, fig, Inches(1), Inches(2), width=Inches(8), height=Inches(4.5))
i = i+1
# print (i)
# Slide 4: Response Curves
# Generate Response Curves chart
channels = [
'Broadcast TV',
'Cable TV',
'Connected & OTT TV',
'Display Prospecting',
'Display Retargeting',
'Video',
'Social Prospecting',
'Social Retargeting',
'Search Brand',
'Search Non-brand',
'Digital Partners',
'Audio',
'Email']
i = 4
for channel_name in channels:
slide_4 = prs.slides.add_slide(prs.slide_layouts[5])
title_4 = slide_4.shapes.title
title_4.text = "Response Curves"
i = i+1
# print (i)
selected_option = channel_name
selected_option2 = 'View Line Plot'
fig = rc1.response_curves(selected_option, selected_option2)
# Add the Plotly chart to the slide
add_plotly_chart_to_slide(slide_4, fig, Inches(1), Inches(2), width=Inches(6), height=Inches(4.5))
# Save the PowerPoint presentation
# prs.save('MMM_Model_Quality_Presentation.pptx')
# # print("PowerPoint slides created successfully.")
# Save to a BytesIO object
ppt_stream = BytesIO()
prs.save(ppt_stream)
ppt_stream.seek(0)
return ppt_stream.getvalue()
st.header("Model Quality")
# st.write("MMM Model Quality")
st.plotly_chart(sf.mmm_model_quality(),use_container_width=True)
fig = sf.mmm_model_quality()
# print("aaa")
fig.write_image("chart.png",engine="orca")
# print("bbb")
media_df = sf.media_data()
# Create two columns for start date and end date input
col1, col2 , col3 = st.columns([1,0.2,1])
df1 = sf.model_metrics_table_func()
st.dataframe(df1,hide_index = True,use_container_width=True)
# st.plotly_chart(sf.elasticity_and_media(media_df))
with col1:
st.plotly_chart(sf.elasticity(media_df))
fig = sf.elasticity(media_df)
fig.write_image("chart.png",engine="orca")
with col2:
st.write("")
with col3:
st.plotly_chart(sf.half_life(media_df))
fig = sf.elasticity(media_df)
fig.write_image("chart.png",engine="orca")
# Dropdown menu options
options = [
'Broadcast TV',
'Cable TV',
'Connected & OTT TV',
'Display Prospecting',
'Display Retargeting',
'Video',
'Social Prospecting',
'Social Retargeting',
'Search Brand',
'Search Non-brand',
'Digital Partners',
'Audio',
'Email']
options1 = [
'View Line Plot',
'View Scattered Plot',
"View Both"]
col1, col2 = st.columns(2)
# Create a dropdown menu
with col1:
selected_option = st.selectbox('Select A Media Channel:', options)
selected_option2 = st.selectbox('Select A Chart Type', options1)
# Display the selected option
with col2:
st.write("")
st.plotly_chart(rc1.response_curves(selected_option,selected_option2))
if st.button("Prepare Analysis Download"):
ppt_file = save_ppt_file()
# Add a download button
st.download_button(
label="Download Analysis",
data=ppt_file,
file_name="MMM_Model_Quality_Presentation.pptx",
mime="application/vnd.openxmlformats-officedocument.presentationml.presentation"
)