2022 Math Schedule Project — 부산대학교 수학과
과거 강의 시간표 데이터(2016~2021년)를 기반으로 교수별 선호 시간대를 분석하고, 강의 시간·요일·강의실을 자동 배정하는 데스크톱 프로그램입니다.
기존 시간표 배정은 다음과 같은 수동 절차로 진행되었습니다:
- 회의를 통한 학부 개설 교과목 확정
- 학부 개설 교과목 담당 교수 확정
- 대학원 개설 교과목 확정
- 학부 개설 교과목 시간표 배정
- 대학원 시간표 배정
이 과정에서 일일이 임용 순대로 선호 시간대를 물어보는 과정이 번거롭고 시간이 많이 소요되어, 자동화된 시스템이 필요했습니다.
- 마스터데이터 관리 — 강좌, 교수, 강의실 정보의 조회·등록·수정·삭제
- 자동 강의 배정 — 과거 시간표 데이터셋을 분석하여 교수별 요일·시간·강의실을 랜덤 배정 (시간 충돌 자동 검증)
- 수동 강의 배정 — 사용자가 직접 교수·강좌·요일·시간을 지정하여 배정
- 시간표 미리보기 — 학부/대학원별 시간표를 요일×시간 테이블 형태로 확인
- 강의 확정 및 엑셀 내보내기 — 배정 결과를 확정하고 Excel 파일로 저장
┌────────────────────────────────────────────────────────────┐
│ Main Screen │
│ 강의 정보 │ 강의실 정보 │ 교수 정보 │ 강의 배정 │
└──────┬──────────┬─────────┬──────────┬─────────────────────┘
│ │ │ │
┌────▼────┐┌────▼────┐┌───▼────┐┌────▼──────────┐
│강의 관리 ││ 강의실관리 ││ 교수관리 ││ 강의 배정 관리 │
└────┬────┘└────┬────┘└───┬────┘└────┬──────────┘
│ │ │ │
┌────▼──────────▼──────────▼───┐ ┌────▼──────────────┐
│ Master DB │ │ Lesson DB │
│ 강의정보·강의실정보·교수정보 │ │ 시간표정보·배정정보 │
└──────────────────────────────┘ │ (학부/대학원) │
└───────────────────┘
- Master DB —
data/내 강의·교수·강의실 Excel 파일 - Lesson DB — 확정 시간표, 학부/대학원 배정 데이터, 과거 데이터셋
- Python 3.8
- PyQt5 (GUI)
- pandas / numpy (데이터 처리)
- openpyxl (Excel 입출력)
classschedule/
├── main.py # 프로그램 진입점 (메인 화면)
├── dialog.py # 마스터데이터 관리 화면 (강좌/교수/강의실 CRUD)
├── timetable.py # 시간표 화면 (학년도·학기별 조회)
├── users_lesson_assign.py # 강의 배정 핵심 로직 (자동/수동 배정, 충돌 검증)
├── show_timetable.py # 시간표 미리보기 화면 (학부/대학원)
├── data_load.py # 데이터 로드 및 과거 데이터셋 전처리
├── global_py.py # 공통 UI 유틸리티 (폰트, 버튼, 메시지박스)
├── imports.py # 공통 import 모듈
├── info_type.json # 화면 간 상태 전달용 설정 파일
├── data/ # 마스터데이터 (Excel)
│ ├── classroom_info.xlsx # 강의실 정보
│ ├── professor_info.xlsx # 교수 정보
│ ├── lesson_info.xlsx # 강좌 정보
│ ├── lesson_assign.xlsx # 강의 배정 결과 (확정)
│ ├── lesson_assign_under.xlsx # 학부 배정 데이터
│ ├── lesson_assign_dae.xlsx # 대학원 배정 데이터
│ ├── time_period.xlsx # 시간대 정보 (30분 간격)
│ ├── global_master.xlsx # 글로벌 마스터
│ ├── class_dataset/ # 과거 강의 시간표 (2016~2021, 학기별 12개 파일)
│ └── backup/ # 백업 데이터
├── development_procedure/ # 개발 문서
│ ├── 강의배정_프로젝트_발표자료.pdf
│ ├── 강의배정_program_manual.pdf
│ ├── System_Diagram.pdf
│ └── 프로젝트_일정.pdf
├── img/ # UI 아이콘 이미지
└── format/ # 데이터 포맷 유틸리티
pip install PyQt5 pandas numpy openpyxl
python main.py- 메인 화면에서 강좌/교수/강의실 정보를 등록·관리합니다.
- 강의 배정 메뉴에서 학부 또는 대학원을 선택합니다.
- 배정(▶) 버튼을 클릭하면 과거 데이터 기반으로 자동 배정이 수행됩니다.
- 충돌 발생 시 다른 시간대로 재배정을 시도합니다 (재귀 호출, 최대 10회 반복).
- 필요 시 수동으로 교수·강좌·요일·시간을 지정하여 수정할 수 있습니다.
- 시간표 미리보기로 요일×시간 테이블을 확인한 후 강의 확정 및 엑셀 다운로드를 수행합니다.
data/class_dataset/내 과거 시간표(2016~2021년, 학기별 12개 파일)를 하나의 데이터프레임으로 통합합니다.- 학부(수학과)와 대학원 데이터를 분리합니다.
- 강의시간을 30분 간격 시간ID로 변환하여
[교수명, 과목명, 요일, 시간ID, 강의실명]형태로 전처리합니다.
과거 데이터를 분석한 결과, 교수별로 뚜렷한 선호 시간대 패턴이 존재합니다:
| 교수 | 선호 요일 | 선호 시간 | 빈도 |
|---|---|---|---|
| 이용훈 | 화, 목 | 13:30 | 4회 |
| 이상율 | 월, 수 | 15:00 | 5회 |
| 정일효 | 화, 목 | 09:00 | 3회 |
| 조홍래 | 화, 목 | 15:00 | 5회 |
| 이동희 | 월, 수 | 16:30 | 7회 |
| 김준교 | 화, 목 | 09:00 | 3회 |
| 표준철 | 화, 목 | 15:00 | 3회 |
| 윤지훈 | 화, 목 | 10:30 | 4회 |
| 최영준 | 월, 수 | 10:30 | 3회 |
| 김상일 | 화, 목 | 10:30 | 3회 |
- 교수 순번에 따라 배정 순서를 결정합니다.
- 각 교수의 과거 데이터셋에서 랜덤으로 시간대를 선택합니다.
- 선택된 시간대가 기존 배정과 충돌하는지 검증합니다.
- 충돌이 없으면 배정을 확정하고, 충돌 시 다음 반복에서 재시도합니다.
- 모든 배정이 끝날 때까지 재귀함수 형태로 반복 실행합니다 (무한 루프 방지를 위해 최대 횟수 제한).
배정 시 다음 3가지 규칙을 검증합니다:
- 교수 중복 방지 — 같은 요일, 같은 시간에 동일 교수가 중복 배정될 수 없음
- 강의실 중복 방지 — 같은 요일, 같은 시간에 동일 강의실이 중복 사용될 수 없음
- 학년별 필수과목 충돌 방지 — 같은 학년 대상 강의가 동일 시간대에 겹치지 않도록 배정
검증 데이터 구조: [교수명, 강의실명, 학년] 을 시간ID × 요일(월~금) 2차원 배열로 관리합니다.
실제 배정 결과와 교수 선호시간을 비교한 결과:
- 선호시간 일치: 6 / 11명 (55%)
- 선호시간 유사: 2 / 11명 (27%)
| 화면 | 설명 |
|---|---|
| 메인 화면 | 강의정보, 교수정보, 강의실 정보, 강의 배정 4개 메뉴 |
| 강의 정보 | 강좌명, 학기, 대상학과, 과정(학년), 학점 관리 |
| 교수 정보 | 성명, 직급, 순번 관리 |
| 강의실 정보 | 강의실명, 제한인원 관리 |
| 강의 배정 | 학년도·학기별 시간표 조회 (요일×시간 테이블) |
| 사용자 지정 배정 | 학부/대학원 선택, 자동 배정(▶), 수동 입력, 시간표 미리보기 |
development_procedure/ 디렉토리에 아래 문서가 포함되어 있습니다:
- 강의배정_프로젝트_발표자료.pdf — 프로젝트 발표 자료 (시스템 구조, 알고리즘, 결과 분석)
- 강의배정_program_manual.pdf — 프로그램 사용 매뉴얼
- System_Diagram.pdf — 시스템 다이어그램
- 프로젝트_일정.pdf — 프로젝트 일정표