Compare commits
3 commits
a766f6ff0d
...
8916d10b63
| Author | SHA1 | Date | |
|---|---|---|---|
| 8916d10b63 | |||
| 02008d1a93 | |||
| 54a019693f |
8 changed files with 25 additions and 24 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -9,3 +9,4 @@ dist/
|
||||||
build/
|
build/
|
||||||
.pytest_cache/
|
.pytest_cache/
|
||||||
planning/
|
planning/
|
||||||
|
dashboard.log
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ All data is drawn from public, open-access sources:
|
||||||
| Source | Publisher | What We Use | Coverage |
|
| Source | Publisher | What We Use | Coverage |
|
||||||
|--------|-----------|-------------|----------|
|
|--------|-----------|-------------|----------|
|
||||||
| **IPEDS** | U.S. Dept. of Education, NCES | Institutional directory, expenses by function, staffing by occupation, enrollment, endowment, philanthropic gifts | 2005-2024 |
|
| **IPEDS** | U.S. Dept. of Education, NCES | Institutional directory, expenses by function, staffing by occupation, enrollment, endowment, philanthropic gifts | 2005-2024 |
|
||||||
| **IRS Form 990** | Internal Revenue Service | Executive compensation (Schedule J), filing financials for UD and UD Research Foundation | Tax years 2015-2023 |
|
| **IRS Form 990** | Internal Revenue Service | Executive compensation (Schedule J), filing financials for UD and UD Research Foundation | Tax years 2015-2025 |
|
||||||
| **BLS CPI-U** | Bureau of Labor Statistics | Consumer Price Index for inflation adjustment (series CUUR0000SA0) | Full history |
|
| **BLS CPI-U** | Bureau of Labor Statistics | Consumer Price Index for inflation adjustment (series CUUR0000SA0) | Full history |
|
||||||
| **UD Staff Directories** | University of Delaware public web pages | Administrative office headcounts (College of Engineering line management, Provost's Office) | Current snapshot |
|
| **UD Staff Directories** | University of Delaware public web pages | Administrative office headcounts (College of Engineering line management, Provost's Office) | Current snapshot |
|
||||||
|
|
||||||
|
|
@ -80,6 +80,6 @@ employees only (FTPT=2).
|
||||||
|
|
||||||
### License
|
### License
|
||||||
|
|
||||||
This project is released under the MIT License. Copyright (c) 2026 Eric Furst.
|
This project is released under the MIT License.
|
||||||
"""),
|
"""),
|
||||||
], style={"maxWidth": "900px", "margin": "0 auto", "lineHeight": "1.6"})
|
], style={"maxWidth": "900px", "margin": "0 auto", "lineHeight": "1.6"})
|
||||||
|
|
|
||||||
|
|
@ -164,12 +164,12 @@ def layout(conn: duckdb.DuckDBPyConnection):
|
||||||
),
|
),
|
||||||
html.Div(
|
html.Div(
|
||||||
[
|
[
|
||||||
html.Div(dcc.Graph(id="comp-breakdown-chart"), style={"flex": "1"}),
|
html.Div(dcc.Graph(id="comp-breakdown-chart", config={"displaylogo": False}), style={"flex": "1"}),
|
||||||
html.Div(dcc.Graph(figure=cpi_fig), style={"flex": "1"}),
|
html.Div(dcc.Graph(figure=cpi_fig, config={"displaylogo": False}), style={"flex": "1"}),
|
||||||
],
|
],
|
||||||
style={"display": "flex", "gap": "16px", "marginTop": "16px"},
|
style={"display": "flex", "gap": "16px", "marginTop": "16px"},
|
||||||
),
|
),
|
||||||
dcc.Graph(figure=role_fig),
|
dcc.Graph(figure=role_fig, config={"displaylogo": False}),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -190,12 +190,12 @@ def layout(conn: duckdb.DuckDBPyConnection):
|
||||||
|
|
||||||
charts = [
|
charts = [
|
||||||
kpi_row,
|
kpi_row,
|
||||||
dcc.Graph(figure=value_fig),
|
dcc.Graph(figure=value_fig, config={"displaylogo": False}),
|
||||||
dcc.Graph(figure=eps_fig),
|
dcc.Graph(figure=eps_fig, config={"displaylogo": False}),
|
||||||
dcc.Graph(figure=components_fig),
|
dcc.Graph(figure=components_fig, config={"displaylogo": False}),
|
||||||
dcc.Graph(figure=rate_fig),
|
dcc.Graph(figure=rate_fig, config={"displaylogo": False}),
|
||||||
]
|
]
|
||||||
if cio_df.height > 1:
|
if cio_df.height > 1:
|
||||||
charts.append(dcc.Graph(figure=cio_fig))
|
charts.append(dcc.Graph(figure=cio_fig, config={"displaylogo": False}))
|
||||||
|
|
||||||
return html.Div(charts)
|
return html.Div(charts)
|
||||||
|
|
|
||||||
|
|
@ -107,10 +107,10 @@ def layout(conn: duckdb.DuckDBPyConnection):
|
||||||
kpi_row,
|
kpi_row,
|
||||||
html.Div(
|
html.Div(
|
||||||
[
|
[
|
||||||
html.Div(dcc.Graph(figure=unit_fig), style={"flex": "1"}),
|
html.Div(dcc.Graph(figure=unit_fig, config={"displaylogo": False}), style={"flex": "1"}),
|
||||||
html.Div(dcc.Graph(figure=pie_fig), style={"flex": "1"}),
|
html.Div(dcc.Graph(figure=pie_fig, config={"displaylogo": False}), style={"flex": "1"}),
|
||||||
],
|
],
|
||||||
style={"display": "flex", "gap": "16px"},
|
style={"display": "flex", "gap": "16px"},
|
||||||
),
|
),
|
||||||
dcc.Graph(figure=cat_fig),
|
dcc.Graph(figure=cat_fig, config={"displaylogo": False}),
|
||||||
])
|
])
|
||||||
|
|
|
||||||
|
|
@ -156,12 +156,12 @@ def layout(conn: duckdb.DuckDBPyConnection):
|
||||||
|
|
||||||
return html.Div([
|
return html.Div([
|
||||||
kpi_row,
|
kpi_row,
|
||||||
dcc.Graph(figure=ratio_fig),
|
dcc.Graph(figure=ratio_fig, config={"displaylogo": False}),
|
||||||
dcc.Graph(figure=breakdown_fig),
|
dcc.Graph(figure=breakdown_fig, config={"displaylogo": False}),
|
||||||
html.Div(
|
html.Div(
|
||||||
[
|
[
|
||||||
html.Div(dcc.Graph(figure=aps_fig), style={"flex": "1"}),
|
html.Div(dcc.Graph(figure=aps_fig, config={"displaylogo": False}), style={"flex": "1"}),
|
||||||
html.Div(dcc.Graph(figure=afr_fig), style={"flex": "1"}),
|
html.Div(dcc.Graph(figure=afr_fig, config={"displaylogo": False}), style={"flex": "1"}),
|
||||||
],
|
],
|
||||||
style={"display": "flex", "gap": "16px"},
|
style={"display": "flex", "gap": "16px"},
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -123,10 +123,10 @@ def layout(conn: duckdb.DuckDBPyConnection):
|
||||||
|
|
||||||
charts = [
|
charts = [
|
||||||
kpi_row,
|
kpi_row,
|
||||||
dcc.Graph(figure=gifts_fig),
|
dcc.Graph(figure=gifts_fig, config={"displaylogo": False}),
|
||||||
dcc.Graph(figure=split_fig),
|
dcc.Graph(figure=split_fig, config={"displaylogo": False}),
|
||||||
]
|
]
|
||||||
if cvp_df.height > 1:
|
if cvp_df.height > 1:
|
||||||
charts.append(dcc.Graph(figure=cvp_fig))
|
charts.append(dcc.Graph(figure=cvp_fig, config={"displaylogo": False}))
|
||||||
|
|
||||||
return html.Div(charts)
|
return html.Div(charts)
|
||||||
|
|
|
||||||
|
|
@ -85,17 +85,17 @@ def layout(conn: duckdb.DuckDBPyConnection):
|
||||||
))
|
))
|
||||||
growth_fig.add_hline(y=100, line_dash="dot", line_color="#ccc")
|
growth_fig.add_hline(y=100, line_dash="dot", line_color="#ccc")
|
||||||
growth_fig.update_layout(
|
growth_fig.update_layout(
|
||||||
title="Management vs Faculty vs Enrollment Growth (Indexed, Base Year = 100)",
|
title="Management Growth (Indexed, Base Year = 100)",
|
||||||
xaxis_title="Year", yaxis_title="Index",
|
xaxis_title="Year", yaxis_title="Index",
|
||||||
template="plotly_white", height=380,
|
template="plotly_white", height=380,
|
||||||
)
|
)
|
||||||
|
|
||||||
return html.Div([
|
return html.Div([
|
||||||
dcc.Graph(figure=comp_fig),
|
dcc.Graph(figure=comp_fig, config={"displaylogo": False}),
|
||||||
html.Div(
|
html.Div(
|
||||||
[
|
[
|
||||||
html.Div(dcc.Graph(figure=ratio_fig), style={"flex": "1"}),
|
html.Div(dcc.Graph(figure=ratio_fig, config={"displaylogo": False}), style={"flex": "1"}),
|
||||||
html.Div(dcc.Graph(figure=growth_fig), style={"flex": "1"}),
|
html.Div(dcc.Graph(figure=growth_fig, config={"displaylogo": False}), style={"flex": "1"}),
|
||||||
],
|
],
|
||||||
style={"display": "flex", "gap": "16px"},
|
style={"display": "flex", "gap": "16px"},
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue