vn_food / app.py
myquyen242's picture
Upload app.py
81aa782 verified
raw
history blame
No virus
7.11 kB
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import pandas_bokeh
import seaborn as sns
from pytrends.request import TrendReq
import time
import random
# ๊ธ€ ์“ฐ๊ธฐ(๋งํฌ ์‚ฝ์ž…)
st.title('VIETNAM DONGDAEMUN FOOOOOOOOOD!!!!!!!!!')
st.header('Selection of Vietnamese Restaurants in Dongdaemun Area')
st.subheader('Variety of dishes from different region in Vietnam, made affordable and delicious for local taste')
st.subheader('Items such as Pho Soup, Bun Bo Hue, Cha Gio or Com Chien')
st.write('''Write something here about the booming of Vietnamese Restaurant in Korea - particularly the fast growing food scene in Dongdaemun [ํ‘ธ๋“œํŠธ๋Ÿญ](https://namu.wiki/w/%EB%B2%A0%ED%8A%B8%EB%82%A8%20%EC%9A%94%EB%A6%AC)
.''' )
# ์‚ฌ์ง„ ์‚ฝ์ž…
st.image('final_image_2.jpg', caption='A Spread of Vietnamese Dishes You Might Be Able To Find')
st.image('final_image_4.jpg', caption='A popular choice everywhere: Vietnamese Pho Soup')
st.image('final_image_3.jpg', caption='Hidden Gem: Banh Xeo')
st.header('Cheap and Delicious: One can find a variety of Vietnamese Restaurant in Dongdaemun Area')
st.subheader('Hosting dishes from North to South Vietnam')
st.subheader('The almost infinite choices will leave you looking for reviews!')
st.write('''Before deciding on which dish you'd want ~ carefully browse through the Blog section for an intimate look at the local food joints''' )
# ๋ฐ์ดํ„ฐ ๋ณด์—ฌ์ฃผ๊ธฐ
df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘ = pd.read_excel('vietnam_food_dongdaemun_BLOGS.xlsx', index_col=0)
st.write('We have narrowed down to 150 most relevant blogs!!',df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘)
df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘_keyword = pd.read_excel('vietnam_food_KEYWORDS.xlsx', index_col=0)
st.write('๋ธ”๋กœ๊ทธ ๊ธ€์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์ถœํ˜„ํ•œ ๋‹จ์–ด๋Š” ~~~ ์„ค๋ช…~~~', df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘_keyword)
# ์›Œ๋“œํด๋ผ์šฐ๋“œ - WORDCLOUD
st.write('์ฃผ์š” ๋‹จ์–ด๋“ค์„ ์›Œ๋“œํด๋ผ์šฐ๋“œ๋กœ ๋ณด์—ฌ์ฃผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค')
st.image('final_WORDCLOUD.png')
# ์—ฐ๊ฒฐ๋ง ๋ถ„์„ - NETWORK
st.write('''์ทจ์žฌํŒ€์€ ์ฃผ์š” ๋‹จ์–ด๋“ค ๊ฐ„์— ๊ณต๋™์ถœํ˜„ํ•˜๋Š” ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์˜๋ฏธ์—ฐ๊ฒฐ๋ง์„ ๊ทธ๋ ค๋ณด์•˜๋‹ค.
๋ถ„์„๊ฒฐ๊ณผ, ~~์„ค๋ช…~~''')
st.image('final_NETWORK.png')
#### The Section Below Is Extra Stuff We Gotta Think About
#
df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘_2 = pd.read_excel('vietnam_food_dongdaemun_BLOGS.xlsx', index_col=0)
st.write('Again, the list of blog posts on Dongdaemun Vietnamese Restaurant', df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘_2)
# ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ ๋ฐ›์•„ ์ถœ๋ ฅ
query = st.text_input('Enter Keyword such as: food name, restaurant name', key='region1_input')
df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘_2['select1']=df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘_2['text'].apply(lambda x: 1 if query in x else 0)
st.write('๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ:', df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘_2[df_๋™๋Œ€๋ฌธ๊ตฌ_๋ฒ ํŠธ๋‚จ_๋ง›์ง‘_2['select1']==1])
##### HEATMAP #####
# List of user-agents to rotate
USER_AGENTS = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0'
]
def fetch_trends_data(kw_list, timeframe, geo):
pytrends = TrendReq(hl='en-US', tz=360)
pytrends.build_payload(kw_list, timeframe=timeframe, geo=geo)
df_trends = pytrends.interest_over_time()
# Introduce random delays to avoid being blocked
time.sleep(random.uniform(1, 5))
# Rotate user-agents
user_agent = random.choice(USER_AGENTS)
pytrends = TrendReq(hl='en-US', tz=360, custom_useragent=user_agent)
pytrends.build_payload(kw_list, timeframe=timeframe, geo=geo)
df_trends = pytrends.interest_over_time()
return df_trends
# Fetch data for the year 2023
kw_list = ['๋ฒ ํŠธ๋‚จ ์Œ์‹']
timeframe = '2023-01-01 2023-12-31'
geo = 'KR'
df_trends = fetch_trends_data(kw_list, timeframe, geo)
# Streamlit app
st.title('Monthly Google Trends Data for Vietnamese Food in Seoul (2023)')
if not df_trends.empty:
df_trends = df_trends.drop(columns=['isPartial'])
df_trends.reset_index(inplace=True)
# Extract month from date
df_trends['month'] = df_trends['date'].dt.to_period('M')
monthly_counts = df_trends.groupby('month')[kw_list].sum().reset_index()
# Display the data
st.write('Number of searches for each month:')
st.write(monthly_counts)
# Create the heatmap
plt.figure(figsize=(10, 6))
monthly_counts_pivot = monthly_counts.pivot_table(index='month', values=kw_list)
sns.heatmap(monthly_counts_pivot.T, annot=True, fmt="d", cmap='YlGnBu', cbar=False)
st.pyplot(plt)
else:
st.write("No data received from Google Trends.")
# ๊ตํ†ต์‚ฌ๊ณ  ์œ ํ˜•๊ณผ ์—ฐ๋„์— ๋”ฐ๋ฅธ pivot table ๋ณด์—ฌ์ฃผ๊ธฐ
#df_๊ตํ†ต์‚ฌ๊ณ _pivot=df_๊ตํ†ต์‚ฌ๊ณ .pivot_table(index='์‚ฌ๊ณ ์œ ํ˜•๊ตฌ๋ถ„', columns='์‚ฌ๊ณ ์—ฐ๋„', values='์‚ฌ๊ณ ๊ฑด์ˆ˜', aggfunc='sum')
#df_๊ตํ†ต์‚ฌ๊ณ _heatmap=df_๊ตํ†ต์‚ฌ๊ณ _pivot.style.background_gradient(cmap='Oranges').format("{:.2f}")
#st.write('๋‹ค์Œ ํ‘œ๋Š” ๊ตํ†ต์‚ฌ๊ณ  ๊ฑด์ˆ˜๋ฅผ ์œ ํ˜•๊ณผ ์—ฐ๋„์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•œ ๊ฒƒ์ด๋‹ค', df_๊ตํ†ต์‚ฌ๊ณ _heatmap)
# ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ ๋ฐ›์•„ pivot table ์ถœ๋ ฅ
#query_pivot = st.text_input('์ด ๊ณณ์— ์ง€์—ญ๋ช…(์‹œ๊ตฐ๊ตฌ)์„ ์ž…๋ ฅํ•˜๋ฉด ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋งŒ ๊ฒ€์ƒ‰ํ•ด ๋ณด์—ฌ์ค๋‹ˆ๋‹ค', key='region2_input')
#df_๊ตํ†ต์‚ฌ๊ณ ['select2']=df_๊ตํ†ต์‚ฌ๊ณ ['์‚ฌ๊ณ ์ง€์—ญ์œ„์น˜๋ช…'].apply(lambda x: 1 if query_pivot in x else 0)
#df_๊ตํ†ต์‚ฌ๊ณ _pivot_selected=df_๊ตํ†ต์‚ฌ๊ณ [df_๊ตํ†ต์‚ฌ๊ณ ['select2']==1].pivot_table(index='์‚ฌ๊ณ ์œ ํ˜•๊ตฌ๋ถ„', columns='์‚ฌ๊ณ ์—ฐ๋„', values='์‚ฌ๊ณ ๊ฑด์ˆ˜', aggfunc='sum')
#df_๊ตํ†ต์‚ฌ๊ณ _heatmap_selected=df_๊ตํ†ต์‚ฌ๊ณ _pivot_selected.style.background_gradient(cmap='Oranges').format("{:.2f}")
#st.write('๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ:', df_๊ตํ†ต์‚ฌ๊ณ _heatmap_selected)
# pandas_bokeh ๊ทธ๋ž˜ํ”„ ๋ณด์—ฌ์ฃผ๊ธฐ
#st.write('์ „๊ตญ ๊ตํ†ต์‚ฌ๊ณ  ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ฅด๋ฉด, ์‚ฌ๊ณ ๊ฑด์ˆ˜์™€ ์ค‘์ƒ์ž์ˆ˜๋Š” ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์„ ๋งบ๊ณ  ์žˆ๋‹ค. ~~~์„ค๋ช…~~. *๊ทธ๋ž˜ํ”„ ๋‚ด ์ ์— ์ปค์„œ๋ฅผ ๋Œ€๋ฉด ์ง€์—ญ๋ช…์ด ๋‚˜ํƒ€๋‚œ๋‹ค')
#p_scatter = df_๊ตํ†ต์‚ฌ๊ณ .plot_bokeh.scatter(
# x="์‚ฌ๊ณ ๊ฑด์ˆ˜",
# y="์ค‘์ƒ์ž์ˆ˜",
# title="์‚ฌ๊ณ ๊ฑด์ˆ˜์™€ ์ค‘์ƒ์ž์ˆ˜",
# size=10,
# hovertool_string="""<h6>์œ„์น˜:@{์‚ฌ๊ณ ์ง€์—ญ์œ„์น˜๋ช…}</h6>"""
#)
#st.bokeh_chart(p_scatter, use_container_width=True)
# ์„ ํƒํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ถœ๋ ฅ
#option = st.selectbox('์—ฐ๋„๋ฅผ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ์‹œ๊ธฐ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค',
# (2012, 2013, 2014, 2015, 2016, 2018, 2017, 2019, 2020, 2021), key='year_input')
#p_scatter_selected = df_๊ตํ†ต์‚ฌ๊ณ [df_๊ตํ†ต์‚ฌ๊ณ ['์‚ฌ๊ณ ์—ฐ๋„']==option].plot_bokeh.scatter(
# x="์‚ฌ๊ณ ๊ฑด์ˆ˜",
# y="์ค‘์ƒ์ž์ˆ˜",
# title="์‚ฌ๊ณ ๊ฑด์ˆ˜์™€ ์ค‘์ƒ์ž์ˆ˜",
# size=10,
# hovertool_string="""<h6>์œ„์น˜:@{์‚ฌ๊ณ ์ง€์—ญ์œ„์น˜๋ช…}</h6>"""
#)
#st.write('๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ:')
#st.bokeh_chart(p_scatter_selected, use_container_width=True)