Spaces:
Sleeping
Sleeping
File size: 6,008 Bytes
3bd8465 |
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
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
def impute_sub_channel(campaign):
if any([x in campaign for x in ['| Prospecting','| CPA','| Traffic','| CRM','Lead acquisition']]):
return 'TRAFFIC_DRIVING'
elif any([x in campaign for x in ['| Conversion','| Advantage+','| ASC+','Sales |','-Conversions']]):
return 'CONVERSION'
elif any([x in campaign for x in ['| Brand Awareness','| Reach']]):
return 'REACH'
else:
return 'OTHER'
df = pd.read_csv('meta_daily_ads_level_data/meta_ad_day_level_raw_data.csv.gz',compression='gzip',parse_dates=['Date'])
df.rename(columns={'Ad Set Name':'ad_set_name', 'Campaign Name':'campaign', 'Country':'country',
'Date':'date', 'Amount Spent (SEK)':'cost', 'Clicks (all)':'clicks','Impressions':'impressions',
'Purchases Conversion Value (SEK)':'platform_revenue','Ad Set Name':'ad_name',},inplace=True)
df.set_index('date',inplace=True)
df['cpc']=df['cost']/df['clicks']
df['platform']='meta'
df['sub_channel']=df.campaign.apply(impute_sub_channel)
# 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'))
input_sub_channel = st.selectbox('Tactic / Sub channel:',
('','CONVERSION','TRAFFIC_DRIVING','REACH'))
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}")
fig,output_msg = 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}")
fig,output_msg = 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) |