Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from huggingface_hub import list_models, list_datasets, list_spaces | |
| import pandas as pd | |
| from datetime import datetime | |
| def get_user_stats(): | |
| users = {} | |
| for k, fn in zip(['model', 'dataset', 'space'], [list_models, list_datasets, list_spaces]): | |
| for repo in fn(full=True): | |
| if repo.author is None: | |
| continue | |
| if repo.author not in users: | |
| users[repo.author] = { | |
| x: 0 for x in [ | |
| 'model_likes', | |
| 'num_models', | |
| 'dataset_likes', | |
| 'num_datasets', | |
| 'space_likes', | |
| 'num_spaces', | |
| 'total_likes', | |
| 'total_repos' | |
| ] | |
| } | |
| users[repo.author][f"{k}_likes"] += repo.likes | |
| users[repo.author][f"num_{k}s"] += 1 | |
| for username, user_stats in users.items(): | |
| users[username]['total_likes'] += sum([v for k, v in user_stats.items() if "likes" in k]) | |
| users[username]['total_repos'] += sum([v for k, v in user_stats.items() if "num_" in k]) | |
| for k, v in users.items(): | |
| users[k] = dict(users[k]) | |
| return users | |
| def make_clickable_user(user_id): | |
| link = "https://huggingface.co/" + user_id | |
| return f'<a target="_blank" href="{link}">{user_id}</a>' | |
| def get_user_stats_df(limit=1000): | |
| users = get_user_stats() | |
| df = pd.DataFrame([{'username': make_clickable_user(k), **v} for k, v in users.items()]) | |
| df.sort_values(by=["total_likes"], ascending=False, inplace=True) | |
| df.insert(0, "rank", list(range(1, len(df) + 1))) | |
| df = df[ | |
| [ | |
| 'rank', | |
| 'username', | |
| 'total_likes', | |
| 'model_likes', | |
| 'num_models', | |
| 'dataset_likes', | |
| 'num_datasets', | |
| 'space_likes', | |
| 'num_spaces', | |
| 'total_repos' | |
| ] | |
| ] | |
| if limit: | |
| df = df.head(limit) | |
| return df | |
| df = get_user_stats_df() | |
| desc = f""" | |
| # π€ Hugging Face User Stats | |
| Here are some stats on the top 1000 users/organizations on the Hugging Face Hub. **Updated {datetime.now().strftime("%d/%m/%y")}** | |
| """ | |
| with gr.Blocks() as demo: | |
| gr.Markdown(desc) | |
| data = gr.components.Dataframe( | |
| df, | |
| type="pandas", | |
| datatype=["number", "markdown", "number", "number", "number", "number", "number", "number", "number", "number"], | |
| ) | |
| demo.launch() |