nielsr's picture
nielsr HF staff
Big improvements to simplify code
570845b
raw
history blame
3.14 kB
from datetime import datetime
import streamlit as st
import pandas as pd
# from load_dataframe import get_data
# Main Streamlit app
def main():
st.title("Hugging Face Papers KPI Dashboard")
# 2 tabs: one for daily data, one for weekly data
st.sidebar.title("Navigation")
selection = st.sidebar.selectbox("Go to", ["Daily/weekly/monthly data", "Aggregated data"])
if selection == "Daily/weekly/monthly data":
# TODO use this instead
# df = get_data()
df = pd.read_csv('/Users/nielsrogge/Downloads/daily_papers_enriched (1).csv')
df = df.drop(['Unnamed: 0'], axis=1)
# Use date as index
df = df.set_index('date')
df.index = pd.to_datetime(df.index)
df = df.sort_index()
# Button to select day, month or week
# Add streamlit selectbox.
view_level = st.selectbox(label="View data per day, week or month", options=["day", "week", "month"])
if view_level == "day":
# make a button to select the day, defaulting to today
day = st.date_input("Select day", value="today", format="DD/MM/YYYY")
# convert to the day of a Pandas Timestamp
day = pd.Timestamp(day)
print("Day:", day)
df = df[df.index.date == day.date()]
st.write(f"Showing data for {day.strftime('%d/%m/%Y')}")
num_artifacts = df[(df['num_models'] > 0) | (df['num_datasets'] > 0) | (df['num_spaces'] > 0)].shape[0]
st.markdown(f"""
## Number of papers: {df.shape[0]}
#### Number of papers with a Github link: {df['github'].notnull().sum()}
#### Number of papers with at least one HF artifact: {num_artifacts}
""")
st.dataframe(df,
hide_index=True,
column_order=("paper_page", "title", "github", "num_models", "num_datasets", "num_spaces"),
column_config={"github": st.column_config.LinkColumn(),
"paper_page": st.column_config.LinkColumn()},
width=2000)
elif view_level == "week":
# make a button to select the week
week = st.number_input("Select week", value=datetime.today().isocalendar()[1], min_value=1, max_value=52)
df = df.loc[df['date'].dt.isocalendar().week == week.isocalendar().week]
st.write(f"Showing data for {day}")
st.dataframe(df)
elif view_level == "month":
# make a button to select the month, defaulting to current month
month = st.sidebar.date_input("Select month", value=pd.Timestamp.today().month_name())
df = df.loc[df['date'].dt.month_name() == month]
st.write(f"Showing data for {day}")
st.dataframe(df)
elif selection == "Aggregated data":
st.write("Aggregated data")
else:
st.write("Error: selection not recognized")
# Display data based on aggregation level
if __name__ == "__main__":
main()