Ranking-Tracker / app.py
ginipick's picture
Update app.py
1597f7e verified
raw
history blame
3.19 kB
import gradio as gr
import pandas as pd
import plotly.express as px
from datetime import datetime, timedelta
import requests
from io import BytesIO
def load_and_process_data():
# Hugging Face ๋ฐ์ดํ„ฐ์…‹์—์„œ parquet ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
url = "https://huggingface.co/datasets/cfahlgren1/hub-stats/resolve/main/spaces.parquet"
response = requests.get(url)
df = pd.read_parquet(BytesIO(response.content))
# 30์ผ ์ „ ๋‚ ์งœ ๊ณ„์‚ฐ
thirty_days_ago = datetime.now() - timedelta(days=30)
# SQL ์ฟผ๋ฆฌ์™€ ๋™์ผํ•œ ์ฒ˜๋ฆฌ
df['createdAt'] = pd.to_datetime(df['createdAt'])
filtered_df = df[df['createdAt'] >= thirty_days_ago].copy()
filtered_df['created'] = filtered_df['createdAt'].dt.date
filtered_df = filtered_df.sort_values('trendingScore', ascending=False)
return filtered_df.head(100)
def create_trend_chart(selected_id, df):
if not selected_id:
return None
space_data = df[df['id'] == selected_id]
if space_data.empty:
return None
# ์„ ํƒ๋œ space์˜ ํŠธ๋ Œ๋“œ ์ฐจํŠธ ์ƒ์„ฑ
fig = px.line(
space_data,
x='created',
y='trendingScore',
title=f'Trending Score for {selected_id}',
labels={'created': 'Date', 'trendingScore': 'Trending Score'}
)
fig.update_layout(
xaxis_title="Date",
yaxis_title="Trending Score",
hovermode='x unified',
plot_bgcolor='white',
paper_bgcolor='white'
)
return fig
def update_display(selected_id, df):
if selected_id is None:
return None, ""
space_data = df[df['id'] == selected_id].iloc[0]
info_text = f"""ID: {space_data['id']}
Created At: {space_data['createdAt'].strftime('%Y-%m-%d')}
Trending Score: {space_data['trendingScore']:.2f}"""
chart = create_trend_chart(selected_id, df)
return chart, info_text
# ๋ฐ์ดํ„ฐ ๋กœ๋“œ
df = load_and_process_data()
# Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# Trending Spaces Dashboard")
with gr.Row():
# ์™ผ์ชฝ ํŒจ๋„ - ์ŠคํŽ˜์ด์Šค ๋ฆฌ์ŠคํŠธ
with gr.Column(scale=1):
space_list = gr.Dropdown(
choices=[(row['id'], f"{row['id']} (Score: {row['trendingScore']:.2f})")
for _, row in df.iterrows()],
label="Select a Space",
info="Click to select a space and view its trend",
value=df['id'].iloc[0] if not df.empty else None
)
# ์ŠคํŽ˜์ด์Šค ์ •๋ณด ํ‘œ์‹œ
info_box = gr.Textbox(
label="Space Details",
value="",
interactive=False,
lines=3
)
# ์˜ค๋ฅธ์ชฝ ํŒจ๋„ - ํŠธ๋ Œ๋“œ ์ฐจํŠธ
with gr.Column(scale=2):
trend_plot = gr.Plot(
label="Trending Score Over Time"
)
# ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ
space_list.change(
fn=update_display,
inputs=[space_list],
outputs=[trend_plot, info_box]
)
# ๋Œ€์‹œ๋ณด๋“œ ์‹คํ–‰
if __name__ == "__main__":
demo.launch()