|
|
import streamlit as st |
|
|
from pytrends.request import TrendReq |
|
|
import pandas as pd |
|
|
import matplotlib.pyplot as plt |
|
|
import seaborn as sns |
|
|
import plotly.express as px |
|
|
from wordcloud import WordCloud |
|
|
|
|
|
|
|
|
pytrends = TrendReq(hl='en-US', tz=360) |
|
|
|
|
|
st.set_page_config(layout="wide") |
|
|
st.title('Advanced Google Trends Analyzer') |
|
|
|
|
|
with st.sidebar: |
|
|
st.header('Analysis Options') |
|
|
keywords = st.text_area('Enter keywords to analyze (one per line):', 'Streamlit') |
|
|
kw_list = [kw.strip() for kw in keywords.split('\n') if kw.strip()] |
|
|
|
|
|
countries = ['US', 'FR', 'TH', 'DE', 'IN', 'JP', 'BR', 'GB', 'CA', 'AU'] |
|
|
geo = st.selectbox('Select geographical region:', countries) |
|
|
|
|
|
timeframes = ['now 1-H', 'now 4-H', 'now 1-d', 'now 7-d', 'today 1-m', 'today 3-m', 'today 12-m', 'today 5-y'] |
|
|
timeframe = st.selectbox('Select Time Range:', timeframes) |
|
|
|
|
|
data_sources = ['Web Search', 'Image Search', 'YouTube Search', 'News Search', 'Google Shopping'] |
|
|
data_source = st.selectbox('Select Data Source:', data_sources) |
|
|
|
|
|
chart_type = st.selectbox('Select Chart Type:', ['Line', 'Area', 'Bar']) |
|
|
|
|
|
advanced_options = st.expander('Advanced Options') |
|
|
with advanced_options: |
|
|
normalize = st.checkbox('Normalize Data', value=True) |
|
|
moving_average = st.checkbox('Apply Moving Average') |
|
|
if moving_average: |
|
|
ma_window = st.slider('Moving Average Window', 1, 30, 7) |
|
|
|
|
|
if kw_list: |
|
|
gprop_map = { |
|
|
'Web Search': '', 'Image Search': 'images', 'YouTube Search': 'youtube', |
|
|
'News Search': 'news', 'Google Shopping': 'froogle' |
|
|
} |
|
|
gprop = gprop_map[data_source] |
|
|
|
|
|
pytrends.build_payload(kw_list, cat=0, timeframe=timeframe, geo=geo, gprop=gprop) |
|
|
interest_over_time_df = pytrends.interest_over_time() |
|
|
|
|
|
if not interest_over_time_df.empty: |
|
|
st.subheader('Interest Over Time') |
|
|
|
|
|
if moving_average: |
|
|
for col in kw_list: |
|
|
interest_over_time_df[f'{col}_MA'] = interest_over_time_df[col].rolling(window=ma_window).mean() |
|
|
plot_columns = [f'{col}_MA' for col in kw_list] |
|
|
else: |
|
|
plot_columns = kw_list |
|
|
|
|
|
if chart_type == 'Line': |
|
|
fig = px.line(interest_over_time_df, x=interest_over_time_df.index, y=plot_columns) |
|
|
elif chart_type == 'Area': |
|
|
fig = px.area(interest_over_time_df, x=interest_over_time_df.index, y=plot_columns) |
|
|
else: |
|
|
fig = px.bar(interest_over_time_df, x=interest_over_time_df.index, y=plot_columns) |
|
|
|
|
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
csv = interest_over_time_df.to_csv().encode('utf-8') |
|
|
st.download_button(label="Download data as CSV", data=csv, file_name='google_trends_data.csv', mime='text/csv') |
|
|
|
|
|
st.subheader('Correlation Heatmap') |
|
|
corr = interest_over_time_df[kw_list].corr() |
|
|
fig, ax = plt.subplots(figsize=(10, 8)) |
|
|
sns.heatmap(corr, annot=True, cmap='coolwarm', ax=ax) |
|
|
st.pyplot(fig) |
|
|
|
|
|
st.subheader('Geographical Interest') |
|
|
interest_by_region = pytrends.interest_by_region(resolution='COUNTRY', inc_low_vol=True, inc_geo_code=True) |
|
|
fig = px.choropleth(interest_by_region, locations=interest_by_region.index, |
|
|
color=kw_list[0], |
|
|
hover_name=interest_by_region.index, |
|
|
color_continuous_scale=px.colors.sequential.Plasma) |
|
|
st.plotly_chart(fig, use_container_width=True) |
|
|
|
|
|
else: |
|
|
st.write('No data found for these keywords.') |
|
|
else: |
|
|
st.write('Please enter at least one keyword to analyze.') |
|
|
|
|
|
st.write('This is an advanced Google Trends analysis app.') |
|
|
|