import os import scholarpy import pandas as pd import streamlit as st import leafmap.foliumap as leafmap import plotly.express as px import datetime current_year = datetime.datetime.now().year if "dsl" not in st.session_state: st.session_state["dsl"] = scholarpy.Dsl() def app(): st.title("Search Organizations") dsl = st.session_state["dsl"] row1_col1, row1_col2 = st.columns([1, 1]) with row1_col1: name = st.text_input("Enter an organization name:", "") if name: orgs = dsl.search_org_by_name(name, exact_match=False, return_list=True) if orgs is not None: with row1_col1: selected_org = st.selectbox("Select a organization id:", orgs) org_id = selected_org.split("|")[0].strip() id_info = dsl.search_org_by_id(org_id) info_df = scholarpy.json_to_df(id_info, transpose=True) info_df.rename( columns={info_df.columns[0]: "Type", info_df.columns[1]: "Value"}, inplace=True, ) with row1_col1: st.header("Organization Information") if not info_df.empty: st.dataframe(info_df) leafmap.st_download_button( "Download data", info_df, csv_sep="\t" ) else: st.text("No information found") with row1_col2: years = st.slider( "Select the start and end year:", 1950, current_year + 6, (1980, current_year), ) st.header("Publications by year") pubs, fig = dsl.org_pubs_annual_stats( org_id, start_year=years[0], end_year=years[1], return_plot=True ) st.text(f'Total number of publications: {pubs["count"].sum():,}') if fig is not None: st.plotly_chart(fig) leafmap.st_download_button( "Download data", pubs, file_name="data.csv", csv_sep="\t", ) else: st.text("No publications found") with row1_col1: st.header("Top funders") funder_count = st.slider( "Select the number of funders:", 1, 100, 20 ) funders, fig = dsl.org_grant_funders( org_id, limit=funder_count, return_plot=True ) st.text(f'Total funding amount: ${funders["funding"].sum():,}') if fig is not None: st.plotly_chart(fig) leafmap.st_download_button( "Download data", funders, file_name="data.csv", csv_sep="\t", ) else: st.text("No funders found") with row1_col2: st.header("The number of grants by year") grants, fig_count, fig_amount = dsl.org_grants_annual_stats( org_id, start_year=years[0], end_year=years[1], return_plot=True ) st.plotly_chart(fig_count) st.plotly_chart(fig_amount) leafmap.st_download_button( "Download data", grants, file_name="data.csv", csv_sep="\t", ) with row1_col1: st.header("List of grants") st.text("Only the first 1000 grants are shown") result = dsl.search_grants_by_org( org_id, start_year=years[0], end_year=years[1] ) df = result.as_dataframe() if not df.empty: st.dataframe(df) leafmap.st_download_button( "Download data", df, file_name="data.csv", csv_sep="\t" ) with row1_col1: st.header("Publications most cited in last 2 years") result = dsl.org_pubs_most_cited(org_id, recent=True, limit=100) df = scholarpy.json_to_df(result, transpose=False) if not df.empty: st.dataframe(df) leafmap.st_download_button( "Download data", df, file_name="data.csv", csv_sep="\t" ) with row1_col2: st.header("Publications most cited - all time") result = dsl.org_pubs_most_cited(org_id, recent=False, limit=100) df = scholarpy.json_to_df(result, transpose=False) if not df.empty: st.dataframe(df) leafmap.st_download_button( "Download data", df, file_name="data.csv", csv_sep="\t" ) df, area_fig, journal_fig = dsl.org_pubs_top_areas( org_id, return_plot=True ) if not df.empty: with row1_col1: st.header("Research areas of most cited publications") st.plotly_chart(area_fig) # leafmap.st_download_button( # "Download data", df, file_name="data.csv", csv_sep="\t" # ) with row1_col2: st.header("Journals of most cited publications") st.plotly_chart(journal_fig) leafmap.st_download_button( "Download data", df, file_name="data.csv", csv_sep="\t" ) else: st.text("No organizations found")