test / app.py
ayushsaini1207's picture
Upload 9 files
52d977e verified
import streamlit as st
import numpy as np
import pandas as pd
import pickle
youtube_model = pickle.load(open('algo_youtube.pkl', 'rb'))
instagram_model = pickle.load(open('algo_instagram.pkl', 'rb'))
maindataYoutube = pd.read_csv("maindataYoutube.csv")
maindataInstagram = pd.read_csv("maindataInstagram.csv")
age_df = pd.read_csv("age_range.csv")
category_df = pd.read_csv("category.csv")
country_df = pd.read_csv("country.csv")
st.title("Recommendation")
def format_gender(option):
if option == 0:
return "Male"
elif option == 1:
return "Female"
else:
return option
def format_age(option):
age = age_df.loc[age_df['Encoded_Value'] == option, 'Audience_age_range'].values[0]
return age
def format_category(option):
content_category = category_df.loc[category_df['Encoded_Value'] == option, 'Content_category'].values[0]
return content_category
def format_country(option):
country = country_df.loc[country_df['Encoded_Value'] == option, 'Audience_country'].values[0]
return country
target_gender = st.selectbox(label= "Select Target Gender", options= [0,1], format_func= format_gender)
platform = st.selectbox(label= "Select Platform", options= ["Instagram", "Youtube"])
category = st.selectbox(label= "Select Category", options= category_df['Encoded_Value'], format_func= format_category) # edit
budget = st.slider(label="Select Budget", min_value= 10000, max_value= 800000) #edit
min_engagement_rate = st.slider(label="Select Minimum Engagement Range", min_value= 1, max_value= 5) #edit
target_country = st.selectbox(label="Select Country" , options= country_df['Encoded_Value'],format_func= format_country ) #edit
target_age_range = st.selectbox(label="Select Target Age Range" ,options= age_df['Encoded_Value'], format_func= format_age) #edit
def filtered_influencer_youtube():
filtered_youtubers = []
for _,youtuber in maindataYoutube.iterrows():
if youtuber['Engagement_rate'] >= min_engagement_rate \
and youtuber['Majority_audience_gender'] == target_gender \
and youtuber['Audience_country'] == target_country \
and youtuber['Audience_age_range'] == target_age_range \
and youtuber['Cost_per_post'] <= budget:
filtered_youtubers.append((youtuber["YouTube_channel_name"],youtuber['Content_category'], youtuber['Cost_per_post']))
return filtered_youtubers
def filtered_influencer_instagram():
filtered_insta = []
for _, insta in maindataInstagram.iterrows():
if insta['Engagement_rate'] >= min_engagement_rate \
and insta['Majority_audience_gender'] == target_gender \
and insta['Audience_country'] == target_country \
and insta['Audience_age_range'] == target_age_range \
and insta['Cost_per_post'] <= budget:
filtered_insta.append((insta["Influencer_insta_username"],insta['Content_category'], insta['Cost_per_post']))
return filtered_insta
def get_recommendations_with_age_range_filter_youtube():
filtered = filtered_influencer_youtube()
dataset1 = [tup[:3] for tup in filtered]
predictions = {}
for uid, iid, category in dataset1:
pred = youtube_model.predict(uid, iid)
predictions[uid] = pred.est
sorted_predictions = sorted(predictions.items(), key=lambda x: x[1], reverse=True)
return sorted_predictions[:10]
def get_recommendations_with_age_range_filter_instagram():
filtered = filtered_influencer_instagram()
dataset1 = [tup[:3] for tup in filtered]
predictions = {}
for uid, iid, category in dataset1:
pred = instagram_model.predict(uid, iid)
predictions[uid] = pred.est
sorted_predictions = sorted(predictions.items(), key=lambda x: x[1], reverse=True)
return sorted_predictions[:10]
def checkPlatform():
if platform == "Youtube":
youtubers = get_recommendations_with_age_range_filter_youtube()
for youtuber, rating in youtubers:
youtuber_name = maindataYoutube.loc[maindataYoutube['YouTube_channel_name'] == youtuber , 'channel_name'].iloc[0]
st.success(youtuber_name + ' :thumbsup:')
else:
influencers = get_recommendations_with_age_range_filter_instagram()
for influencer, rating in influencers:
influencer_name = maindataInstagram.loc[maindataInstagram['Influencer_insta_username'] == influencer, 'Influencer_insta_id'].iloc[0]
st.success(influencer_name + ' :thumbsup:')
trigger = st.button('Recommend ', on_click=checkPlatform)