luc-cs is a Streamlit-based utility for exploring and analyzing Loyola
University Chicago course scheduling data exported from Locus as Excel files.
The app loads schedule data into SQLite, normalizes key fields, and exposes interactive analytics to help department leadership and faculty review enrollment, assignments, scheduling patterns, and potential issues.
- What This Project Is
- Requirements
- Create the Virtual Environment
- Build the Project
- Run the Project
- Use the Application
- Input Data Schema
- Troubleshooting
- Architecture Overview
- Development Checks
- Testing
- License
This project provides a local analytics app for course scheduling workflows.
You can select an existing .xlsx file in the project directory or upload one
in the UI, then run analytics such as:
- Course Schedule
- Online Only Courses
- Schedule Density
- Course Enrollment Health
- Instructor Assignments
- Courses with No Enrollments
- Number of Assignments Per Faculty Member
- Course by Number
- Teaching Distribution by Weighted Enrollment
- Enrollments by Course Level
- In Trouble Courses
- Filter Course Schedule
- School Credit Hours
- Python
~=3.13 uvfor environment and dependency management- A course schedule Excel export (
.xlsx) from Locus
The recommended setup command is:
uv syncThis creates/updates .venv and installs all project dependencies.
Optional activation commands:
# Linux / macOS
source .venv/bin/activate
# Windows (PowerShell)
.venv\Scripts\Activate.ps1Preferred build path:
make buildEquivalent direct commands:
uv build
uv pip install dist/*.tar.gzStart the Streamlit app:
make runEquivalent direct command:
.venv/bin/streamlit run cs/app.pyYou can also run the package CLI entrypoint:
uv run luc-csNote: luc-cs prints runtime instructions; the Streamlit command starts the UI.
- Launch the app with one of the commands above.
- Choose an existing
.xlsxfile from the project folder, or upload one. - Click any analytic button to generate charts/tables.
- Use the zero-enrollment filter checkbox when relevant to your review.
The app expects a Locus-exported Excel workbook (.xlsx) with course schedule
columns. During ingestion, columns are normalized to uppercase and additional
derived fields are computed.
Required input columns used by the app:
SUBJECTCATALOG NUMBERSECTIONCLASS TITLEINSTRUCTORFACILITYMEETING PATTERNCLASS START TIME(time-like values)CLASS END TIME(time-like values)ENROLLMENT TOTAL
Key normalized/derived columns created in the pipeline:
ENROLL TOTAL(fromENROLLMENT TOTAL)FQ CATALOG NUMBER(SUBJECT-CATALOG NUMBER)FQ CLASS SECTION(CATALOG NUMBER-SECTION)TRAD MEETING PATTERN(normalized meeting pattern)UNIT CLASS DURATION(minutes)COMBINED IDINSTRUCTIONAL TIMEWEIGHTED ENROLL TOTALWEIGHTED SCH TOTAL
Data handling notes:
- Missing
INSTRUCTORvalues are filled withTuring,Alan. - Missing
FACILITYvalues are filled withDoyole Hall. - Duplicate rows are dropped by
FQ CLASS SECTION.
Common issues and fixes:
uv: command not found- Install
uvfirst, then rerunuv sync.
- Install
- Python version mismatch
- The project requires Python
~=3.13; ensure your interpreter matches.
- The project requires Python
- No
.xlsxfile appears in the selector- Place an Excel export in the repository root or upload through the app.
- Streamlit fails to start
- Re-run
uv syncand then usemake runor.venv/bin/streamlit run cs/app.py.
- Re-run
- Build fails on version/tag step in
make build- Ensure Git tags are available locally; otherwise use direct build commands:
uv buildanduv pip install dist/*.tar.gz.
- Ensure Git tags are available locally; otherwise use direct build commands:
- Pre-commit checks fail
- Run
pre-commit run --all-files, apply suggested fixes, and re-run.
- Run
High-level module layout:
cs/app.py- Streamlit entrypoint and UI orchestration.
- Handles file selection/upload and analytic button routing.
cs/excel2db.py- Excel ingestion and normalization.
- Loads transformed schedule data into SQLite.
cs/analytics/- Individual analytics modules (tables/plots) for scheduling and enrollment analysis.
cs/utils/__init__.py- Shared session-state and utility helpers.
cs/main.py- CLI helper entrypoint that prints run instructions.
Runtime flow:
- User launches Streamlit app.
- App ingests selected/uploaded Excel data into SQLite.
- Analytics modules query/transform data and render DataFrames/figures.
- Results are displayed in Streamlit with shared session state.
Run all configured checks:
pre-commit run --all-filesUseful direct tooling commands:
uv run ruff format .
uv run ruff check .
uv run isort .
uv run bandit -r csThere is currently no tests/ directory in this repository.
When tests are added, run:
uv run pytestThis project is licensed under the GNU Affero General Public License v3.