|
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") |
|
|
|
|
|
hide_meu = """<style> #MainMenu {visibility: hidden;} |
|
footer {visibility: hidden;} </style>""" |
|
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('<h1 style="text-align: center; color: black; font: serif">MUP: Measuring University Performance</h1>', unsafe_allow_html=True) |
|
st.write("##") |
|
|
|
col1, col2 = st.columns([2, 1]) |
|
|
|
with col1: |
|
st.markdown('<h2 style=" color: black;">Blazing fast university analytics at your fingertips</h2>', unsafe_allow_html=True) |
|
st.markdown('<h3 style=" color: black;">Administrators looking for peer institution data?</h3>', unsafe_allow_html=True) |
|
st.markdown('<h3 style=" color: black;">Students finding the right institution for your research career?</h3>', unsafe_allow_html=True) |
|
st.markdown('<h3 style=" color: black;">Researchers looking for the right university for your careers?</h3>', unsafe_allow_html=True) |
|
st.markdown('<h2 style=" color: black;">You have come to the right place!</h2>', unsafe_allow_html=True) |
|
|
|
with col2: |
|
st.image('data/chart_image.jpeg') |
|
|
|
def display_uni_view_page(): |
|
|
|
|
|
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('<h3 style="text-align: center; color: black; font: serif">Table View</h3>', 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): |
|
|
|
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"])) |
|
line_charts.append(plot_helper(total_research, ["Year", "Spending"])) |
|
line_charts.append(plot_helper(aamc, ["Year", "Spending"])) |
|
line_charts.append(plot_helper(endowment, ["Year", "Fund size"])) |
|
line_charts.append(plot_helper(giving, ["Year", "Giving"])) |
|
line_charts.append(plot_helper(doctorates, ["Year", "Number of PhD's"])) |
|
line_charts.append(plot_helper(postdocs, ["Year", "Number of Fellows"])) |
|
line_charts.append(plot_helper(headcount, ["Year", "Headcount"])) |
|
line_charts.append(plot_helper(national_academy, ["Year", "Number of Members"])) |
|
line_charts.append(plot_helper(faculty_awards, ["Year", "Number of Awards"])) |
|
|
|
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("<h3 style='text-align: center; color: black;'>" + "Federal Research Spending (in USD)" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[0], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Medical Research Spending (in USD)" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[2], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Annual Giving (in USD)" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[4], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Number of Postdoctoral Fellows" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[6], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Number of National Academy Members" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[8], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "R&D Breakup (Federal Dollars)" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(rnd_fed_figure, use_container_width=True) |
|
with col2: |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Total Research Spending (in USD)" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[1], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Endowment Size (in USD)" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[3], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Number of PhD's graduated" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[5], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Total Student Headcount (all levels)" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[7], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Annual Faculty Awards achieved" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(line_charts[9], use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "R&D Breakup (All Dollars)" + "</h3>", 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: |
|
|
|
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("<h3 style='text-align: center; color: black;'>" + "Researcher View" + "</h3>", unsafe_allow_html=True) |
|
st.write("##") |
|
col1, col2 = st.columns(2) |
|
with col1: |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Number of PhD's graduated" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(doctorates, ["Year", "Number of PhD's graduated"]), use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Federal Research Spending" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(federal_research, ["Year", "Spending (in USD)"]), use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "National Academy Members" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(national_academy, ["Year", "Number of Academy Members"]), use_container_width=True) |
|
with col2: |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Number of Postdoctoral Fellows" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(postdocs, ["Year", "Number of Postdocs"]), use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Total Research Spending" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(total_research, ["Year", "Spending (in USD)"]), use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Annual Faculty Awards achieved" + "</h3>", 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("<h3 style='text-align: center; color: black;'>" + "Recruiter View" + "</h3>", unsafe_allow_html=True) |
|
st.write("##") |
|
col1, col2 = st.columns(2) |
|
with col1: |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Total Research Spending" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(total_research, ["Year", "Spending (in USD)"]), use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Number of PhD's graduated" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(doctorates, ["Year", "Number of PhD's graduated"]), use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "National Academy Members" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(national_academy, ["Year", "Number of Academy Members"]), use_container_width=True) |
|
with col2: |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Annual Giving" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(giving, ["Year", "Annual Giving (in USD)"]), use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Total Student Headcount" + "</h3>", unsafe_allow_html=True) |
|
st.plotly_chart(plot_helper(headcount, ["Year", "Headcount"]), use_container_width=True) |
|
st.write("<h3 style='text-align: center; color: black;'>" + "Annual Faculty Awards achieved" + "</h3>", 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() |