Spaces:
Sleeping
Sleeping
import streamlit as st | |
from PIL import Image | |
from marginal_cpc_calculator import * | |
st.set_page_config( | |
page_title="mCPC dashboard", | |
page_icon="socks", | |
layout="wide", | |
initial_sidebar_state="auto", | |
) | |
# dataframe operations first time | |
df = pd.read_csv('input_data/combined_mcpc_data.csv.gz',compression='gzip',parse_dates=['date']) | |
# df.set_index('date',inplace=True) | |
# dashboard operations | |
def add_logo(logo_path, width, height): | |
"""Read and return a resized logo""" | |
logo = Image.open(logo_path) | |
modified_logo = logo.resize((width, height)) | |
return modified_logo | |
def get_date(input_min_date_month,input_min_date_year,input_max_date_month,input_max_date_year): | |
month_converter = {'Jun':'06','Jul':'07','Aug':'08','Sep':'09', | |
'Oct':'10','Nov':'11','Dec':'12','Jan':'01','Feb':'02', | |
'Mar':'03','Apr':'04','May':'05'} | |
min_date = input_min_date_year+'-'+month_converter[input_min_date_month]+'-01' | |
max_date = input_max_date_year+'-'+month_converter[input_max_date_month]+'-01' | |
return min_date,max_date | |
my_logo = add_logo(logo_path="hs_logo.png", width=180, height=60) | |
st.sidebar.image(my_logo) | |
st.title("mCPC & ad spend insights ✨") | |
# INLCUDE SECTION FOR INPUTS AND BUTTON TO GENERATE INSIGHTS | |
with st.sidebar: | |
st.write("Enter selections for mCPC spend profile") | |
input_country = st.selectbox('Country:', | |
('','DE', 'US', 'UK','NL','SE','AU','CH','FR','BE')) | |
input_platform = st.selectbox('Platform:', | |
('','meta','google','tiktok')) | |
input_sub_channel = st.selectbox('Tactic / Sub channel:', | |
('','CONVERSION','TRAFFIC_DRIVING','REACH','SEARCH','PERFORMANCE_MAX', | |
'VIDEO','DISPLAY','SHOPPING','DISCOVERY')) | |
col1, col2 = st.columns(2) | |
with col1: | |
input_min_date_month = st.selectbox('From Month:', | |
('','Jun','Jul','Aug','Sep','Oct','Nov','Dec','Jan','Feb','Mar','Apr','May')) | |
with col2: | |
input_min_date_year = st.selectbox('From Year:', | |
('','2022','2023')) | |
col3, col4 = st.columns(2) | |
with col3: | |
input_max_date_month = st.selectbox('To Month:', | |
('','Jun','Jul','Aug','Sep','Oct','Nov','Dec','Jan','Feb','Mar','Apr','May')) | |
with col4: | |
input_max_date_year = st.selectbox('To Year:', | |
('','2022','2023')) | |
start = st.button("Generate mCPC curves", type='primary') | |
text_error_value = '' | |
if start: | |
for var,varname in [(input_country,'Country'), | |
(input_platform,'Platform'), | |
(input_min_date_month,'From Date'), | |
(input_min_date_year,'From Date'), | |
(input_max_date_month,'To Date'), | |
(input_max_date_year,'To Date')]: | |
if var=='': | |
text_error_value = f'{varname} cant be empty' | |
st.error(text_error_value) | |
break | |
# CHECKS TO ENSURE INPUTS ARE CLEAN BEFORE CALLING FUNCTIONS | |
if start: | |
if text_error_value=='': | |
min_date, max_date = get_date(input_min_date_month, | |
input_min_date_year, | |
input_max_date_month, | |
input_max_date_year) | |
st.markdown("""---""") | |
mid, mad = get_comparison_dates(min_date,max_date,period='previous_period') | |
st.subheader(f"Calculating for dates between {mid} & {mad}") | |
print(f"Calculating for dates between {mid} & {mad}") | |
fig,output_msg,values = calculate_max_spend(df,mid,mad, | |
revenue_or_ebitda='revenue', | |
country=input_country, | |
platform=input_platform, | |
sub_channel=input_sub_channel, | |
pprint=True) | |
st.write(fig) | |
for l in output_msg: | |
st.write(l) | |
st.markdown("""---""") | |
mid, mad = get_comparison_dates(min_date,max_date,period='LY') | |
st.subheader(f"Calculating for dates between {mid} & {mad}") | |
print(f"Calculating for dates between {mid} & {mad}") | |
fig,output_msg,values = calculate_max_spend(df,mid,mad, | |
revenue_or_ebitda='revenue', | |
country=input_country, | |
platform=input_platform, | |
sub_channel=input_sub_channel, | |
pprint=True) | |
st.write(fig) | |
for l in output_msg: | |
st.write(l) | |
st.markdown("""---""") | |
mid, mad = get_comparison_dates(mid,mad,period='previous_period') | |
st.subheader(f"Calculating for dates between {mid} & {mad}") | |
fig,output_msg,values = calculate_max_spend(df,mid,mad, | |
revenue_or_ebitda='revenue', | |
country=input_country, | |
platform=input_platform, | |
sub_channel=input_sub_channel, | |
pprint=True) | |
st.write(fig) | |
for l in output_msg: | |
st.write(l) | |
else: | |
st.write(f'Text error value is {text_error_value}') | |
# DISPLAY INSIGHTS FOR PREVIOUS PERIOD AND LAST YEAR | |
# TEST FUNCTIONALITY OF APP | |
# DEPLOY TO HUGGINGFACE | |
# INCORPORATE GOOGLE | |
# INCORPORATE TIKTOK | |
st.markdown("<br><hr><center>Made with ❤️ for Happy Socks by <a href='mailto:vivekbharadwaj.ca@gmail.com?subject=mCPC dashboard queries&body=Please specify the issue you are facing with the dashboard.'><strong>Vivek</strong></a> ✨</center><hr>", unsafe_allow_html=True) |