import streamlit as st import streamlit_option_menu as som import plotly.graph_objects as go import pandas as pd import csv import json st.set_page_config(page_title="MUP", page_icon="bar-chart", layout = "wide") #hiding default elememnts hide_meu = """""" st.markdown(hide_meu, unsafe_allow_html=True) main_bar_selected = som.option_menu(None, ["Home", "University View", "Institutional Comparison"], icons = ["house-fill", "building", "book-fill"], orientation = "horizontal") st.write("####") def display_home_page(): st.markdown('

MUP: Measuring University Performance

', unsafe_allow_html=True) st.write("##") col1, col2 = st.columns([2, 1]) with col1: st.markdown('

Blazing fast university analytics at your fingertips

', unsafe_allow_html=True) st.markdown('

Administrators looking for peer institution data?

', unsafe_allow_html=True) st.markdown('

Students finding the right institution for your research career?

', unsafe_allow_html=True) st.markdown('

Researchers looking for the right university for your careers?

', unsafe_allow_html=True) st.markdown('

You have come to the right place!

', unsafe_allow_html=True) with col2: st.image('data/chart_image.jpeg') def display_uni_view_page(): #code to filter by type and select the institutions col1, col2 = st.columns(2) with col1: type_select = st.radio("Filter by Institution Type", ["All", "Private", "Public"], horizontal=True) with col2: view_type = st.radio("View Type", ["Latest Stats", "Chart View"], horizontal=True) institution_list = [] if type_select == "Private": with open("data/private_institution_list.csv", "r") as f: reader = csv.reader(f) for row in reader: institution_list.append(row[0]) elif type_select == "Public": with open("data/public_institution_list.csv", "r") as f: reader = csv.reader(f) for row in reader: institution_list.append(row[0]) else: with open("data/institution_list.csv", "r") as f: reader = csv.reader(f) for row in reader: institution_list.append(row[0]) institution_select = st.selectbox("Select colleges to view", options = institution_list) st.write("##") def load_data(input_file_path, institution_name): data = pd.read_excel(input_file_path) data = data[data["Institution"] == institution_name] return data aamc = load_data("data/aamc.xlsx", institution_select) doctorates = load_data("data/doctorates.xlsx", institution_select) endowment = load_data("data/endowment.xlsx", institution_select) faculty_awards = load_data("data/faculty_awards.xlsx", institution_select) federal_research = load_data("data/federal_research.xlsx", institution_select) giving = load_data("data/giving.xlsx", institution_select) headcount = load_data("data/headcount.xlsx", institution_select) national_academy = load_data("data/national_academy.xlsx", institution_select) non_federal_research = load_data("data/non_federal_research.xlsx", institution_select) postdocs = load_data("data/postdocs.xlsx", institution_select) rnd_federal = load_data("data/rnd_by_discipline_federal.xlsx", institution_select) rnd_total = load_data("data/rnd_by_discipline_total.xlsx", institution_select) total_research = load_data("data/total_research.xlsx", institution_select) def latest_stats(institution_select): display_dict = {} display_dict['Medical Research Spending (in USD)']= str(int(aamc['2018']) / 1000000) + " Million" display_dict["PhD's graduated"]= int(doctorates['2018']) display_dict["Endowment (in USD)"]= str(int(endowment['2018']) / 1000000) + " Million" display_dict["Number of annual Faculty Awards"]= int(faculty_awards['2018']) display_dict["Federal Research Spending (in USD)"]= str(int(federal_research['2018']) / 1000000) + " Million" display_dict["Annual Giving (in USD)"]= str(int(giving['2018']) / 1000000) + " Million" display_dict["Student Headcount"]= int(headcount['2018']) display_dict["National Academy Members"]= int(national_academy['2018']) display_dict["Non-Federal Research Spending (in USD)"]= str(int(non_federal_research['2018']) / 1000000) + " Million" display_dict["Postdoctoral Fellows"]= int(postdocs['2018']) display_dict["Total Research Spending (in USD)"]= str(int(total_research['2018']) / 1000000) + " Million" df = pd.DataFrame.from_dict(display_dict, orient='index') df.rename(columns = {0:'Values'}, inplace = True) st.markdown('

Table View

', unsafe_allow_html=True) st.table(df.astype(str)) col1, col2 = st.columns(2) with col1: st.download_button("Download this data as CSV", data = df.to_csv(), file_name = str(institution_select) + "_at_a_glance.csv") with col2: st.download_button("Download this data as JSON", data = json.dumps(display_dict), file_name = str(institution_select) + "_at_a_glance.json") def chart_view(institution_select): #figure details should have x-axis title and y-axis title, in that order def plot_helper(df, figure_details): data = df.copy() series = data.T[3:][::-1] series.reset_index(inplace=True) series.columns = ["Year", "Value"] figure = go.Figure() figure.add_trace(go.Scatter(x=series["Year"], y=series["Value"], name=list(data['Institution'])[0])) del data figure.update_layout(height = 600, width = 900, legend_orientation = 'h', xaxis_title = figure_details[0], yaxis_title = figure_details[1], font = dict(family = 'Serif')) figure.update_xaxes(nticks = 5) figure.update_yaxes(rangemode="tozero") return figure line_charts = [] line_charts.append(plot_helper(federal_research, ["Year", "Spending"])) #0 line_charts.append(plot_helper(total_research, ["Year", "Spending"])) #1 line_charts.append(plot_helper(aamc, ["Year", "Spending"])) #2 line_charts.append(plot_helper(endowment, ["Year", "Fund size"])) #3 line_charts.append(plot_helper(giving, ["Year", "Giving"])) #4 line_charts.append(plot_helper(doctorates, ["Year", "Number of PhD's"])) #5 line_charts.append(plot_helper(postdocs, ["Year", "Number of Fellows"])) #6 line_charts.append(plot_helper(headcount, ["Year", "Headcount"])) #7 line_charts.append(plot_helper(national_academy, ["Year", "Number of Members"])) #8 line_charts.append(plot_helper(faculty_awards, ["Year", "Number of Awards"]))#9 rnd_fed_subjects = ["Fed_Life_Sci", "Fed_Phy_Sci", "Fed_Envir_Sci", "Fed_Eng","Fed_Comp_Sci", "Fed_Math","Fed_Psych","Fed_Social_Sci","Fed_Other_Sci"] rnd_total_subjects = ["Tot_Life_Sci", "Tot_Phy_Sci", "Tot_Envir_Sci", "Tot_Eng","Tot_Comp_Sci", "Tot_Math","Tot_Psych","Tot_Social_Sci","Tot_Other_Sci"] rnd_fed_bar = rnd_federal[rnd_fed_subjects] rnd_fed_bar.reset_index(inplace=True) rnd_fed_bar = rnd_fed_bar.T[1:] fed_xlist = list(rnd_fed_bar.index) fed_ylist = list(rnd_fed_bar[0]) rnd_fed_figure = go.Figure() rnd_fed_figure.add_trace(go.Bar(x=fed_xlist, y=fed_ylist)) rnd_fed_figure.update_layout(xaxis_title = "Discipline", yaxis_title = "R&D (in USD)", font = dict(family = 'Serif')) rnd_total_bar = rnd_total[rnd_total_subjects] rnd_total_bar.reset_index(inplace=True) rnd_total_bar = rnd_total_bar.T[1:] total_xlist = list(rnd_total_bar.index) total_ylist = list(rnd_total_bar[0]) rnd_total_figure = go.Figure() rnd_total_figure.add_trace(go.Bar(x=total_xlist, y=total_ylist)) rnd_total_figure.update_layout(xaxis_title = "Discipline", yaxis_title = "R&D (in USD)", font = dict(family = 'Serif')) col1, col2 = st.columns(2) with col1: st.write("

" + "Federal Research Spending (in USD)" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[0], use_container_width=True) st.write("

" + "Medical Research Spending (in USD)" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[2], use_container_width=True) st.write("

" + "Annual Giving (in USD)" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[4], use_container_width=True) st.write("

" + "Number of Postdoctoral Fellows" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[6], use_container_width=True) st.write("

" + "Number of National Academy Members" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[8], use_container_width=True) st.write("

" + "R&D Breakup (Federal Dollars)" + "

", unsafe_allow_html=True) st.plotly_chart(rnd_fed_figure, use_container_width=True) with col2: st.write("

" + "Total Research Spending (in USD)" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[1], use_container_width=True) st.write("

" + "Endowment Size (in USD)" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[3], use_container_width=True) st.write("

" + "Number of PhD's graduated" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[5], use_container_width=True) st.write("

" + "Total Student Headcount (all levels)" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[7], use_container_width=True) st.write("

" + "Annual Faculty Awards achieved" + "

", unsafe_allow_html=True) st.plotly_chart(line_charts[9], use_container_width=True) st.write("

" + "R&D Breakup (All Dollars)" + "

", unsafe_allow_html=True) st.plotly_chart(rnd_total_figure, use_container_width=True) if view_type == "Latest Stats": latest_stats(institution_select) elif view_type == "Chart View": chart_view(institution_select) def display_institution_comparison(): col1, col2 = st.columns(2) with col1: type_select = st.radio("Filter by Institution Type", ["All", "Private", "Public"], horizontal=True) with col2: view = st.selectbox("Choose a view", ["Researcher View", "Recruiter View"]) institution_list = [] if type_select == "Private": with open("data/private_institution_list.csv", "r") as f: reader = csv.reader(f) for row in reader: institution_list.append(row[0]) elif type_select == "Public": with open("data/public_institution_list.csv", "r") as f: reader = csv.reader(f) for row in reader: institution_list.append(row[0]) else: with open("data/institution_list.csv", "r") as f: reader = csv.reader(f) for row in reader: institution_list.append(row[0]) institution_mselect = st.multiselect("Select Institutions to Compare", options = institution_list, help = "For best results, select 2-3 institutions") def load_data(input_file_path, institution_list): data = pd.read_excel(input_file_path) data = data[data["Institution"].isin(institution_list)] return data def plot_helper(df, figure_details): data = df.copy() series = (data.drop(columns = ["UnitID", "Control"]).T) series.columns = series.iloc[0] series.reset_index(inplace=True) series = series.iloc[1:, :][::-1] series.rename(columns = {"index": "Year"}, inplace = True) figure = go.Figure() for i in institution_mselect: #add a line chart for each institution figure.add_trace(go.Scatter(x = series["Year"], y = series[i], name = i)) figure.update_layout(height = 600, width = 900, legend_orientation = 'h', xaxis_title = figure_details[0], yaxis_title = figure_details[1], legend_title = "Institution Key", font = dict(family = 'Serif')) figure.update_xaxes(nticks = 5) figure.update_yaxes(rangemode = "tozero") del data return figure doctorates = load_data("data/doctorates.xlsx", institution_mselect) faculty_awards = load_data("data/faculty_awards.xlsx", institution_mselect) federal_research = load_data("data/federal_research.xlsx", institution_mselect) national_academy = load_data("data/national_academy.xlsx", institution_mselect) postdocs = load_data("data/postdocs.xlsx", institution_mselect) total_research = load_data("data/total_research.xlsx", institution_mselect) giving = load_data("data/giving.xlsx", institution_mselect) headcount = load_data("data/headcount.xlsx", institution_mselect) rnd_fed = load_data("data/rnd_by_discipline_federal.xlsx", institution_mselect) rnd_total = load_data("data/rnd_by_discipline_total.xlsx", institution_mselect) def researcher_content_writer(): st.write("##") st.write("

" + "Researcher View" + "

", unsafe_allow_html=True) st.write("##") col1, col2 = st.columns(2) with col1: st.write("

" + "Number of PhD's graduated" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(doctorates, ["Year", "Number of PhD's graduated"]), use_container_width=True) st.write("

" + "Federal Research Spending" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(federal_research, ["Year", "Spending (in USD)"]), use_container_width=True) st.write("

" + "National Academy Members" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(national_academy, ["Year", "Number of Academy Members"]), use_container_width=True) with col2: st.write("

" + "Number of Postdoctoral Fellows" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(postdocs, ["Year", "Number of Postdocs"]), use_container_width=True) st.write("

" + "Total Research Spending" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(total_research, ["Year", "Spending (in USD)"]), use_container_width=True) st.write("

" + "Annual Faculty Awards achieved" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(faculty_awards, ["Year", "Number of Awards"]), use_container_width=True) def recruiter_content_writer(): st.write("##") st.write("

" + "Recruiter View" + "

", unsafe_allow_html=True) st.write("##") col1, col2 = st.columns(2) with col1: st.write("

" + "Total Research Spending" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(total_research, ["Year", "Spending (in USD)"]), use_container_width=True) st.write("

" + "Number of PhD's graduated" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(doctorates, ["Year", "Number of PhD's graduated"]), use_container_width=True) st.write("

" + "National Academy Members" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(national_academy, ["Year", "Number of Academy Members"]), use_container_width=True) with col2: st.write("

" + "Annual Giving" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(giving, ["Year", "Annual Giving (in USD)"]), use_container_width=True) st.write("

" + "Total Student Headcount" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(headcount, ["Year", "Headcount"]), use_container_width=True) st.write("

" + "Annual Faculty Awards achieved" + "

", unsafe_allow_html=True) st.plotly_chart(plot_helper(faculty_awards, ["Year", "Number of Awards"]), use_container_width=True) if view == "Researcher View": researcher_content_writer() elif view == "Recruiter View": recruiter_content_writer() if main_bar_selected == "Home": display_home_page() elif main_bar_selected == "University View": display_uni_view_page() elif main_bar_selected == "Institutional Comaprison": display_institution_comparison()