Download app.py from yashm/OpenTrend: direct link, hf CLI and curl.
- Browser
- Download file 3.82 kB
-
https://huggingface.co/spaces/yashm/OpenTrend/resolve/main/app.py
- Command line
-
hf download hf://spaces/yashm/OpenTrend/app.py
-
curl -L -o app.py https://huggingface.co/spaces/yashm/OpenTrend/resolve/main/app.py
3.82 kB
| 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 | |
| # Initialize pytrends | |
| 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: # Bar | |
| 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], # You can allow users to select which keyword to display | |
| 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.') | |