import os import scholarpy import pandas as pd import streamlit as st import leafmap.foliumap as leafmap import plotly.express as px import datetime if "dsl" not in st.session_state: st.session_state["dsl"] = scholarpy.Dsl() current_year = datetime.datetime.now().year def app(): st.title("Search Grants") dsl = st.session_state["dsl"] ( row1_col1, row1_col2, row1_col3, row1_col4, row1_col5, ) = st.columns([1, 0.5, 1, 1, 1]) ( row2_col1, row2_col2, row2_col3, row2_col4, row2_col5, ) = st.columns([1, 0.5, 1, 1, 1]) with row1_col1: keywords = st.text_input("Enter a keyword to search for") with row1_col2: exact_match = st.checkbox("Exact match", True) with row1_col3: scope = st.selectbox( "Select a search scope", [ "concepts", "full_data", "investigators", "title_abstract_only", "title_only", ], index=4, ) with row1_col4: years = st.slider( "Select the start and end year:", 1950, current_year + 6, (2010, current_year + 4), ) with row1_col5: limit = st.slider("Select the number of grants to return", 1, 1000, 100) if keywords: result = dsl.search_grants_by_keyword( keywords, exact_match, scope, start_year=years[0], end_year=years[1], limit=limit, ) df = scholarpy.json_to_df(result) if limit > result.count_total: limit = result.count_total markdown = f""" Returned grants: {limit} (total = {result.count_total}) """ with row2_col1: st.markdown(markdown) with row2_col2: filter = st.checkbox("Apply a filter") if filter: countries = [] for row in df.itertuples(): countries.append(eval(row.funder_countries)[0]["name"]) df["funder_country"] = countries with row2_col3: filter_by = st.selectbox( "Select a filter", [ "funder_country", "funding_org_name", "funding_org_acronym", "research_org_name", ], ) df["funding_org_acronym"] = df["funding_org_acronym"].astype(str) df["research_org_name"] = df["research_org_name"].astype(str) options = df[filter_by].unique() options.sort() with row2_col4: selected = st.selectbox("Select a filter value", options) df = df[df[filter_by] == selected] with row2_col5: st.write("") if df is not None: st.dataframe(df) leafmap.st_download_button("Download data", df, csv_sep="\t")