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("

Made with ❤️ for Happy Socks by Vivek

", unsafe_allow_html=True)