Compute, per Campus and Study Program, the share of semester weekly hours (SWS) taught by in‑house professors, based on course and professor datasets.
Data protection note: this repository is designed so that raw inputs never need to be committed. Put real files in
data/raw/locally (or in a secure storage), and keep the Git history clean.
In reports/:
-
sws_quota_by_campus.xlsx
One sheet per campus with:StudyProgram,TotalSWS,OwnSWS,OwnSWS%. -
sws_quota_by_campus_colored.xlsx(optional)
Same report, with conditional color gradient on the percentages. -
campus_workbooks/(optional)
One Excel workbook per campus, one tab per study program, listing:- Course name
- Lecturer name
- Is professor?
- Other study programs (same campus)
- Quota recap at the end
.
├─ src/quotas_professors/ # Python package (pipeline + modules)
├─ scripts/ # Convenience entrypoints
├─ data/ # Local-only inputs (gitignored)
│ ├─ raw/
│ └─ processed/
├─ reports/ # Generated outputs (gitignored)
├─ notebooks/ # Exploration (optional)
├─ tests/ # Unit tests (optional)
└─ docs/ # Project notes (optional)
python -m venv .venv
# Windows: .venv\Scripts\activate
source .venv/bin/activate
pip install -U pip
pip install -e .Put your files here:
data/raw/CoursesSS25.csvdata/raw/Professors.xlsx
Your
Courses*.csvis expected to be;separated (configurable).
quotas-professors --semester SS25Outputs will be written to reports/.
quotas-professors --helpCommon examples:
# Custom folders
quotas-professors --data-dir /secure/share/raw --output-dir ./reports
# Skip colorized report
quotas-professors --no-colored
# Skip detailed per-campus workbooks
quotas-professors --no-campus-workbooks
# Override filenames
quotas-professors --courses MyCourses.csv --professors Professors_2025.xlsx- Lecturer names are normalized (case/accents/punctuation) before matching.
- Matching is intentionally conservative to reduce false positives.
- Ambiguous names should be reviewed in the detailed campus workbooks.
If you need an audit trail, consider adding an "unmatched lecturers" export and a manual mapping file
(data/processed/name_overrides.csv) that you can maintain locally.
- Keep the repo private.
- Never commit
data/orreports/(already gitignored). - Enable secret scanning and push protection in GitHub settings.
- If you ever accidentally commit sensitive files:
- rotate credentials if any were included
- rewrite history (e.g.,
git filter-repo) and force-push
pip install pre-commit
pre-commit install
pre-commit run --all-filespytest -qProprietary — internal use only.