Business-Report / app.py
mayankjen's picture
first upload
ae742c6 verified
import streamlit as st
import os
import json
from openai import OpenAI
from serpapi import GoogleSearch
from pytrends.request import TrendReq
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# API keys setup
openai_api_key = "sk-proj-lBJDg3ctG647l39CZXXyT3BlbkFJdQ6rDkYQGgbQClZwkjGn"
serpapi_key = "your_serpapi_key_here" # Replace with your actual SERP API key
client = OpenAI(api_key=openai_api_key)
# Initialize Google Trends
pytrends = TrendReq(hl='en-US', tz=360)
# Function to save data
def save_data(data):
with open('marketing_plan_data.json', 'w') as f:
json.dump(data, f)
# Function to load data
def load_data():
if os.path.exists('marketing_plan_data.json'):
with open('marketing_plan_data.json', 'r') as f:
return json.load(f)
return {}
# Initialize session state
if 'data' not in st.session_state:
st.session_state.data = load_data()
if 'current_page' not in st.session_state:
st.session_state.current_page = 0
# Function to get GPT response with specific system prompt
def get_gpt_response(system_prompt, user_prompt, max_tokens=1000):
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
max_tokens=max_tokens,
temperature=0.7
)
return completion.choices[0].message.content
# Streamlit app
st.title("Marketing Plan Generator")
# Define pages
pages = ["Business Info", "Problem & Solution", "Business Details",
"Customer Segmentation", "Products/Services",
"Success Drivers & Weaknesses", "Competition",
"Marketing Report"]
# Navigation
st.sidebar.title("Navigation")
selected_page = st.sidebar.radio("Go to", pages, index=st.session_state.current_page)
st.session_state.current_page = pages.index(selected_page)
# Report sections and their system prompts
report_sections = {
"Company Description": "You are an expert in crafting concise and compelling company descriptions.",
"What Marketers Need to Do": "You are a marketing strategist who provides actionable advice based on competition levels.",
"Competitive Advantage": "You are a business analyst specializing in identifying and articulating competitive advantages.",
"Consumer Decision-Making Stage": "You are an expert in consumer behavior and decision-making processes.",
"Context Issues (PESTLE)": "You are a macro-environment analyst proficient in applying the PESTLE framework.",
"SWOT Analysis": "You are a strategic planner skilled in conducting comprehensive SWOT analyses.",
"Segmentation Based on Need": "You are a market segmentation specialist focusing on need-based segmentation.",
"Customer Personas": "You are an expert in creating detailed and realistic customer personas.",
"Target Market": "You are a market targeting strategist who can identify the most promising market segments.",
"Positioning": "You are a brand positioning expert who can articulate points of parity and difference.",
"Marketing Mix": "You are a marketing mix specialist who can provide detailed 4P or 7P strategies.",
"Market Sizing": "You are a market research analyst specializing in estimating market sizes and potential."
}
# Main app logic
if selected_page == "Business Info":
st.header("Business Information")
st.session_state.data['business_name'] = st.text_input("Business Name", st.session_state.data.get('business_name', ''))
st.session_state.data['business_description'] = st.text_area("Business Description", st.session_state.data.get('business_description', ''))
if st.button("Next"):
save_data(st.session_state.data)
st.success("Data saved successfully!")
st.session_state.current_page += 1
st.experimental_rerun()
elif selected_page == "Problem & Solution":
st.header("Problem & Solution")
st.session_state.data['problem'] = st.text_area("What problem is your business solving?", st.session_state.data.get('problem', ''))
st.session_state.data['solution'] = st.text_area("What solution are you providing?", st.session_state.data.get('solution', ''))
if st.button("Next"):
save_data(st.session_state.data)
st.success("Data saved successfully!")
st.session_state.current_page += 1
st.experimental_rerun()
elif selected_page == "Business Details":
st.header("Business Details")
st.session_state.data['business_type'] = st.radio("Is your business offering a product or service?",
('Product', 'Service', 'Both'),
index=['Product', 'Service', 'Both'].index(st.session_state.data.get('business_type', 'Product')))
st.session_state.data['employee_count'] = st.number_input("Number of Employees",
min_value=1,
value=st.session_state.data.get('employee_count', 1))
st.session_state.data['customer_access'] = st.selectbox("How can customers get your product or service?",
('Online', 'Physical Location', 'Both online and physical location'),
index=['Online', 'Physical Location', 'Both online and physical location'].index(st.session_state.data.get('customer_access', 'Online')))
st.session_state.data['business_location'] = st.text_input("Location of Business", st.session_state.data.get('business_location', ''))
if st.button("Next"):
save_data(st.session_state.data)
st.success("Data saved successfully!")
st.session_state.current_page += 1
st.experimental_rerun()
elif selected_page == "Customer Segmentation":
st.header("Customer Segmentation")
for i in range(1, 4):
st.subheader(f"Customer Group {i}")
description_key = f'customer_group_{i}_description'
income_key = f'customer_group_{i}_income'
description = st.text_area(f"Customer Group {i} Description", st.session_state.data.get(description_key, ''))
income = st.selectbox(f"Income Level for Group {i}",
('Low', 'Medium', 'High'),
index=['Low', 'Medium', 'High'].index(st.session_state.data.get(income_key, 'Medium')))
st.session_state.data[description_key] = description
st.session_state.data[income_key] = income
if st.button("Next"):
save_data(st.session_state.data)
st.success("Data saved successfully!")
st.session_state.current_page += 1
st.experimental_rerun()
elif selected_page == "Products/Services":
st.header("Products/Services Details")
for i in range(1, 6):
st.subheader(f"Product/Service {i}")
name_key = f'product_service_{i}_name'
description_key = f'product_service_{i}_description'
name = st.text_input(f"Name of Product/Service {i}", st.session_state.data.get(name_key, ''))
description = st.text_area(f"Description of Product/Service {i}", st.session_state.data.get(description_key, ''))
st.session_state.data[name_key] = name
st.session_state.data[description_key] = description
if st.button("Next"):
save_data(st.session_state.data)
st.success("Data saved successfully!")
st.session_state.current_page += 1
st.experimental_rerun()
elif selected_page == "Success Drivers & Weaknesses":
st.header("Success Drivers & Weaknesses")
st.subheader("Success Drivers")
for i in range(1, 4):
st.session_state.data[f'success_driver_{i}'] = st.text_input(f"Success Driver {i}", st.session_state.data.get(f'success_driver_{i}', ''))
st.subheader("Weaknesses")
for i in range(1, 4):
st.session_state.data[f'weakness_{i}'] = st.text_input(f"Potential Weakness {i}", st.session_state.data.get(f'weakness_{i}', ''))
if st.button("Next"):
save_data(st.session_state.data)
st.success("Data saved successfully!")
st.session_state.current_page += 1
st.experimental_rerun()
elif selected_page == "Competition":
st.header("Competition")
st.session_state.data['competition_level'] = st.selectbox("What is the level of competition in your market?",
('Very Low', 'Low', 'Medium', 'High'),
index=['Very Low', 'Low', 'Medium', 'High'].index(st.session_state.data.get('competition_level', 'Medium')))
if st.button("Next"):
save_data(st.session_state.data)
st.success("Data saved successfully!")
st.session_state.current_page += 1
st.experimental_rerun()
else: # Marketing Report page
st.header("Marketing Report")
for section, system_prompt in report_sections.items():
st.subheader(section)
if section != "Market Sizing":
user_prompt = f"Based on the following business information, generate a {section} section for a marketing report:\n\n{json.dumps(st.session_state.data)}"
content = get_gpt_response(system_prompt, user_prompt)
st.write(content)
else:
search_query = st.session_state.data.get('business_type', '')
# SERP API for search volume
params = {
"engine": "google",
"q": search_query,
"api_key": serpapi_key
}
search = GoogleSearch(params)
results = search.get_dict()
search_volume = results.get('search_information', {}).get('total_results', 'N/A')
st.write(f"Search volume for '{search_query}': {search_volume}")
# Google Trends for interest over time
pytrends.build_payload([search_query], timeframe='today 12-m')
interest_over_time = pytrends.interest_over_time()
if not interest_over_time.empty:
fig, ax = plt.subplots(figsize=(10, 6))
sns.lineplot(data=interest_over_time[search_query], ax=ax)
ax.set_title(f"Interest Over Time for '{search_query}'")
ax.set_xlabel("Date")
ax.set_ylabel("Interest")
st.pyplot(fig)
else:
st.write("No Google Trends data available for the given query.")
st.markdown("---")
st.subheader("Full Report")
full_report = ""
for section, system_prompt in report_sections.items():
full_report += f"## {section}\n\n"
if section != "Market Sizing":
user_prompt = f"Based on the following business information, generate a {section} section for a marketing report:\n\n{json.dumps(st.session_state.data)}"
content = get_gpt_response(system_prompt, user_prompt)
full_report += content + "\n\n"
else:
full_report += f"Search volume for '{search_query}': {search_volume}\n"
full_report += "Google Trends data: See graph above\n\n"
st.markdown(full_report)
# Add any additional Streamlit components or logic here
if __name__ == "__main__":
st.sidebar.info("Navigate through the sections using the radio buttons above.")
st.sidebar.warning("Make sure to save your progress on each page before moving to the next.")