|
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") |
|
|