├── .gitignore ├── misc ├── assets │ ├── rundown.png │ ├── thanks_cse.png │ └── project_banner.png ├── rust │ ├── README.md │ ├── combine_multiple │ │ ├── Cargo.lock │ │ ├── Cargo.toml │ │ ├── README.md │ │ └── src │ │ │ └── main.rs │ └── separate_grad_courses │ │ ├── Cargo.toml │ │ ├── Cargo.lock │ │ ├── README.md │ │ └── src │ │ └── main.rs ├── executables │ ├── combine_multiple.zip │ ├── separate_grad_courses.zip │ └── README.md ├── .gitignore_example ├── old_scripts │ ├── run.sh │ ├── clean_wlcsv.py │ ├── list_all_files.ps1 │ ├── run_all_wl.py │ ├── create_new_folder.py │ ├── multplot.sh │ ├── waitlist.py │ ├── sep_grad_courses.py │ └── ind_sec.py ├── other_scripts │ └── rename_all.ps1 └── config_examples │ ├── plotconfig.txt │ └── plotconfig2.txt ├── scripts ├── requirements.txt ├── gitdata.ps1 ├── README.md ├── list_files.py ├── clean_raw_csvs.py ├── in_progress │ ├── run.sh │ └── plot2.py ├── fix_inconsistent_csv.py ├── run.ps1 ├── enroll_data_cleaner.py ├── generate_toc.py └── plot.py ├── LICENSE ├── docs ├── setup.md ├── scripts.md ├── background.md ├── data_repo_info.md └── csv_info.md ├── data ├── README.md └── schedules │ ├── S324.tsv │ ├── S323.tsv │ ├── S325.tsv │ └── S124.tsv └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | .idea/ 3 | misc/rust/*/target/* 4 | 5 | *.exe 6 | !misc/executables/*.exe -------------------------------------------------------------------------------- /misc/assets/rundown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UCSD-Historical-Enrollment-Data/UCSDHistEnrollData/HEAD/misc/assets/rundown.png -------------------------------------------------------------------------------- /misc/rust/README.md: -------------------------------------------------------------------------------- 1 | # Rust Projects 2 | This folder contains some rewrites of the Python scripts using the Rust programming language. -------------------------------------------------------------------------------- /misc/assets/thanks_cse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UCSD-Historical-Enrollment-Data/UCSDHistEnrollData/HEAD/misc/assets/thanks_cse.png -------------------------------------------------------------------------------- /scripts/requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UCSD-Historical-Enrollment-Data/UCSDHistEnrollData/HEAD/scripts/requirements.txt -------------------------------------------------------------------------------- /misc/assets/project_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UCSD-Historical-Enrollment-Data/UCSDHistEnrollData/HEAD/misc/assets/project_banner.png -------------------------------------------------------------------------------- /misc/executables/combine_multiple.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UCSD-Historical-Enrollment-Data/UCSDHistEnrollData/HEAD/misc/executables/combine_multiple.zip -------------------------------------------------------------------------------- /misc/executables/separate_grad_courses.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UCSD-Historical-Enrollment-Data/UCSDHistEnrollData/HEAD/misc/executables/separate_grad_courses.zip -------------------------------------------------------------------------------- /scripts/gitdata.ps1: -------------------------------------------------------------------------------- 1 | # A helper script to commit all datasets to git. 2 | git pull 3 | git add . 4 | git commit -m (Get-Date -UFormat "%B %d, %Y - update (datasets)") 5 | git push -------------------------------------------------------------------------------- /misc/.gitignore_example: -------------------------------------------------------------------------------- 1 | # This .gitignore is for data repositories only. 2 | 3 | __pycache__/ 4 | .idea/ 5 | enrollment.csv 6 | 7 | # Exclude all scripts 8 | *.py 9 | *.ps1 10 | -------------------------------------------------------------------------------- /misc/rust/combine_multiple/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "combine_multiple" 7 | version = "0.1.0" 8 | -------------------------------------------------------------------------------- /misc/rust/combine_multiple/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "combine_multiple" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | -------------------------------------------------------------------------------- /misc/rust/separate_grad_courses/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "separate_grad_courses" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | anyhow = "1.0" -------------------------------------------------------------------------------- /misc/executables/README.md: -------------------------------------------------------------------------------- 1 | # Executables 2 | This folder contains some executables that were directly compiled from the source code in the `rust` folder. 3 | 4 | If you'd like to recompile the code for yourself, be sure to install [Rust](https://www.rust-lang.org/), and then run `cargo build --release` in the project folder. -------------------------------------------------------------------------------- /misc/old_scripts/run.sh: -------------------------------------------------------------------------------- 1 | # Check if any arguments were passed in 2 | if [ $# -eq 0 ]; then 3 | echo "Usage: run.sh " 4 | exit 1 5 | fi 6 | 7 | # Check if the first parameter is equal to "SP22" 8 | if [ "$1" = "SP22" ]; then 9 | echo "Cannot run SP22 due to changes in CSV format." 10 | exit 1 11 | fi 12 | 13 | # Run both scripts 14 | python clean_raw_csvs.py $1 15 | python enroll_data_cleaner.py $1 16 | 17 | exit 0 -------------------------------------------------------------------------------- /misc/rust/separate_grad_courses/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "anyhow" 7 | version = "1.0.68" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" 10 | 11 | [[package]] 12 | name = "separate_grad_courses" 13 | version = "0.1.0" 14 | dependencies = [ 15 | "anyhow", 16 | ] 17 | -------------------------------------------------------------------------------- /misc/other_scripts/rename_all.ps1: -------------------------------------------------------------------------------- 1 | # A very quick ps script to change the term suffix in the name of each file into 2 | # a different term suffix. 3 | 4 | # Ask for term 5 | $term = Read-Host "Enter term to rename" 6 | 7 | # Ask for the new term 8 | $newTerm = Read-Host "Enter new term" 9 | 10 | # For each file in $term/raw, rename 11 | Get-ChildItem -Path $term/raw -File | ForEach-Object { 12 | $newName = $_.Name.Replace("_${term}.csv", "_${newTerm}.csv") 13 | Rename-Item -Path $_.FullName -NewName $newName 14 | } -------------------------------------------------------------------------------- /scripts/README.md: -------------------------------------------------------------------------------- 1 | # Scripts 2 | These are scripts that will be used (but not checked in) in the data repositories. 3 | 4 | ## Required 5 | The following scripts are required for each data repository where plotting takes place. 6 | - `clean_raw_csvs.py` 7 | - `enroll_data_cleaner.py` 8 | - `fix_inconsistent_csv.py` 9 | - `list_all_files.ps1` 10 | - `plot.py` 11 | 12 | The following scripts are required for each data repository where committing CSV files takes place. 13 | - `gitdata.ps1` 14 | 15 | ## In Progress 16 | Scripts in progress will be used for future projects, but should not be used now since they are in development. -------------------------------------------------------------------------------- /misc/old_scripts/clean_wlcsv.py: -------------------------------------------------------------------------------- 1 | term = input("Enter term: ").upper() 2 | 3 | with open(f"{term}/wl_percent.tsv", 'w') as f: 4 | with open(f"{term}/wl.csv", 'r') as g: 5 | next(g) 6 | f.write("course\tsection\tpercent\n") 7 | for line in g: 8 | line = line.split(',') 9 | course = line[0] 10 | section = line[1] 11 | off_waitlist = int(line[2]) 12 | total = int(line[3]) 13 | 14 | if total == 0: 15 | continue 16 | 17 | percent = off_waitlist / total 18 | f.write(f"{course}\t{section}\t{percent}\n") -------------------------------------------------------------------------------- /scripts/list_files.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | def get_all_files(dir, target): 4 | res = "" 5 | for file in os.listdir(dir): 6 | # check if the file isa ctually a file 7 | if not os.path.isfile(os.path.join(dir, file)): 8 | continue 9 | 10 | # check if file has extension .csv 11 | if not file.endswith(".csv"): 12 | continue 13 | 14 | # append file name to res, removing the extension 15 | res += file[:-4] + "\n" 16 | 17 | # write res to file with encoding UTF-8 18 | with open(target, "w", encoding="utf-8") as f: 19 | f.write(res) 20 | 21 | 22 | get_all_files("overall", "all_courses.txt") 23 | get_all_files("section", "all_sections.txt") -------------------------------------------------------------------------------- /misc/rust/separate_grad_courses/README.md: -------------------------------------------------------------------------------- 1 | # separate_grad_courses 2 | A Rust program designed to separate each **raw** CSV files in the `holding` folder into two **raw** CSV files: one raw CSV file containing just graduate courses, and another containing just undergraduate courses. 3 | 4 | ## Usage 5 | In the same directory that this executable is located, you should also have two directories: `holding`, and `split`. 6 | 7 | `holding` is where all CSV files should go for processing. `split` is where all CSV files will end up after processing. 8 | 9 | In terms of command usage: 10 | ``` 11 | ./separate_grad_courses 12 | ``` 13 | where 14 | - `` is the undergraduate term, 15 | - `` is the graduate term. 16 | 17 | This should be executed in the project's root directory. 18 | -------------------------------------------------------------------------------- /misc/old_scripts/list_all_files.ps1: -------------------------------------------------------------------------------- 1 | $res = "" 2 | $files = Get-ChildItem -Path "overall" -Recurse 3 | foreach ($file in $files) { 4 | if ( $file.Extension -ne ".csv" ) { 5 | continue 6 | } 7 | 8 | $res += $file.Name.Replace(".csv", "") + "`n" 9 | } 10 | 11 | $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False 12 | [System.IO.File]::WriteAllLines("$pwd\\all_courses.txt", $res, $Utf8NoBomEncoding) 13 | 14 | # =============================================================== # 15 | 16 | $res = "" 17 | $files = Get-ChildItem -Path "section" -Recurse 18 | foreach ($file in $files) { 19 | if ( $file.Extension -ne ".csv" ) { 20 | continue 21 | } 22 | 23 | $res += $file.Name.Replace(".csv", "") + "`n" 24 | } 25 | 26 | [System.IO.File]::WriteAllLines("$pwd\\all_sections.txt", $res, $Utf8NoBomEncoding) 27 | -------------------------------------------------------------------------------- /misc/old_scripts/run_all_wl.py: -------------------------------------------------------------------------------- 1 | """ 2 | Runs through all courses in individual_sections and calculates the number of students that got off the waitlist. 3 | """ 4 | 5 | import os 6 | from os.path import join 7 | import waitlist 8 | 9 | term = input("Enter term: ").upper() 10 | directory = f"{term}/individual_sections" 11 | 12 | # Get all files 13 | files = [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f)) and f.endswith('.csv')] 14 | 15 | with open(join(term, 'wl.csv'), 'w') as f: 16 | f.write("course,section,off_waitlist,total\n") 17 | for file in files: 18 | print(f"Processing {file}") 19 | course, section = file.replace(".csv", "").split("_") 20 | wl, ttl = waitlist.get_off_waitlist_ct(f"{term}/individual_sections/{file}", False) 21 | f.write(f"{course},{section},{wl},{ttl}\n") 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Edward Wang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /misc/old_scripts/create_new_folder.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | from os.path import exists, join 4 | 5 | if len(sys.argv) != 2: 6 | print('Usage: create_new_folder.py ') 7 | sys.exit(1) 8 | 9 | folder_name = sys.argv[1].upper() 10 | if exists(folder_name): 11 | print(f'{folder_name} already exists.') 12 | sys.exit(1) 13 | 14 | # Create the folders 15 | os.mkdir(folder_name) 16 | os.mkdir(join(folder_name, 'raw')) 17 | os.mkdir(join(folder_name, 'cleaned')) 18 | 19 | os.mkdir(join(folder_name, 'overall')) 20 | os.mkdir(join(folder_name, 'plot_overall')) 21 | 22 | os.mkdir(join(folder_name, 'section')) 23 | os.mkdir(join(folder_name, 'plot_section')) 24 | 25 | # and copy over the config file for plotting 26 | if exists('plotconfig_example.py'): 27 | with open('plotconfig_example.py', 'r') as g: 28 | with open(join(folder_name, 'plotconfig.py'), 'w') as f: 29 | f.write(g.read()) 30 | else: 31 | print('No plotconfig_example.py file found. Please create one manually.') 32 | 33 | with open(join(folder_name, 'README.md'), 'w') as r: 34 | r.write('# Term') 35 | 36 | with open(join(folder_name, 'plot_overall', 'README.md'), 'w') as r: 37 | r.write('This README file is here so that the folder appears on GitHub.') 38 | 39 | with open(join(folder_name, 'plot_section', 'README.md'), 'w') as r: 40 | r.write('This README file is here so that the folder appears on GitHub.') 41 | 42 | print('Created new folder successfully.') -------------------------------------------------------------------------------- /misc/old_scripts/multplot.sh: -------------------------------------------------------------------------------- 1 | # Check if the help argument is provied 2 | if [ "$1" = "-h" ] || [ "$1" = "--help" ] 3 | then 4 | echo "Usage: multplot.sh [OPTION]..." 5 | echo "Cleans & plots enrollment datasets. By default, this cleans and plots the datasets." 6 | echo " -h, --help display this help and exit" 7 | echo " --noplot do not plot the datasets" 8 | echo " --nocat do not clean the datasets" 9 | exit 0 10 | fi 11 | 12 | categorize=1 13 | plot=1 14 | 15 | # Check if any of the arguments is "noplot" or "nocat" 16 | for arg in $@ 17 | do 18 | if [ $arg = "--noplot" ] 19 | then 20 | plot=0 21 | fi 22 | if [ $arg = "--nocat" ] 23 | then 24 | categorize=0 25 | fi 26 | done 27 | 28 | # Define an array containing S122, S222, FA22, S122D 29 | terms=("FA22" "S122" "S222" "S122D") 30 | 31 | # Loop through each term 32 | for term in ${terms[@]}; do 33 | echo "================== Processing $term. ==================" 34 | # Check if we should categorize 35 | if [ $categorize -eq 1 ] 36 | then 37 | echo -e "\tCleaning raw CSVs." 38 | python clean_raw_csvs.py $term 39 | echo -e "\tCategorizing enroll data." 40 | python enroll_data_cleaner.py $term 41 | fi 42 | 43 | # Check if we should plot 44 | if [ $plot -eq 1 ] 45 | then 46 | echo -e "\tPlotting overall data." 47 | python plot.py $term o 48 | echo -e "\tPlotting section data." 49 | python plot.py $term s 50 | fi 51 | done 52 | -------------------------------------------------------------------------------- /scripts/clean_raw_csvs.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from genericpath import isfile 3 | from os import listdir, remove 4 | import sys 5 | from os.path import exists, join 6 | import fix_inconsistent_csv 7 | 8 | raw_path = 'raw' 9 | 10 | # Clean all raw files first 11 | for f in listdir(raw_path): 12 | if not isfile(join(raw_path, f)) or f.endswith('_fixed.csv'): 13 | continue 14 | if f.endswith('.csv'): 15 | new_file_name = join(raw_path, f.replace('.csv', '_fixed.csv')) 16 | print(f'Cleaning {f}') 17 | fix_inconsistent_csv.fix_inconsistent_csv(join(raw_path, f), new_file_name) 18 | 19 | cleaned_path = 'cleaned' 20 | 21 | # List all files in folder 22 | files = [f for f in listdir(raw_path) if isfile(join(raw_path, f)) and f.endswith('_fixed.csv')] 23 | d = {} 24 | for file in files: 25 | temp_name = file.replace('enrollment_', '').replace('_fixed.csv', '') 26 | time = datetime.strptime(temp_name[0:temp_name.rindex('_')], '%Y-%m-%dT%H_%M_%S') 27 | d[time] = file 28 | times = sorted(list(d.keys())) 29 | 30 | # Merge the files together 31 | init = False 32 | with open(join(cleaned_path, 'enrollment.csv'), 'w') as f: 33 | for time in times: 34 | file = d[time] 35 | with open(join(raw_path, file), 'r') as g: 36 | lines = g.readlines() 37 | 38 | if len(lines) == 0: 39 | continue 40 | 41 | if init: 42 | lines.pop(0) 43 | else: 44 | f.write(lines[0]) 45 | init = True 46 | lines.pop(0) 47 | 48 | for line in lines: 49 | f.write(line) 50 | 51 | # And then delete the fixed files from the raw directory 52 | for file in files: 53 | print(f'Deleting {file}') 54 | remove(join(raw_path, file)) 55 | -------------------------------------------------------------------------------- /scripts/in_progress/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | TERM="2023Fall" 4 | 5 | # check if the term folder exists 6 | # If it does, pull from repo for latest updates. 7 | # Otherwise, clone 8 | if [[ -d $TERM ]]; then 9 | cd $TERM 10 | git pull 11 | 12 | else 13 | echo "cloning..." 14 | git clone https://github.com/ewang2002/UCSDHistEnrollData/$TERM 15 | cd $TERM 16 | fi 17 | 18 | START_PLOT=`date +%s` # start timer 19 | 20 | echo "================== Processing $TERM. ==================" 21 | echo "Cleaning raw CSVs." 22 | # do we need python3? 23 | python clean_raw_csvs.py 24 | 25 | echo "Categorizing enroll data." 26 | python enroll_data_cleaner.py $term 27 | 28 | echo "Plotting overall data." 29 | python plot.py o 30 | echo "Plotting section data." 31 | python plot.py s 32 | 33 | python list_files.py 34 | python generate_toc.py 35 | 36 | END_PLOT=$(date +%s) 37 | 38 | PLOT_TIME=$((END_PLOT-START_PLOT)) 39 | 40 | # =============================================================== # 41 | # GIT # 42 | # =============================================================== # 43 | START_GIT=$(date +%s) 44 | 45 | BASE_MSG="$(date +%m-%d-%Y) - updated (plot, automated)" 46 | DUR_MSG="Took: $(printf "%.2f\n" $((10**2 * PLOT_TIME/60))e-2) minutes to plot." 47 | 48 | # commit 49 | echo "Committing changes." 50 | git add . 51 | git commit -m $BASE_MSG -m $DUR_MSG 52 | git push 53 | 54 | END_GIT=$(date +%s) 55 | 56 | GIT_TIME=$((END_GIT-START_GIT)) 57 | 58 | # =============================================================== # 59 | # DONE # 60 | # =============================================================== # 61 | 62 | echo "[plot] Took $(printf "%.2f\n" $((10**2 * PLOT_TIME/60))e-2) minutes to complete!" 63 | echo "[git ] Took $(printf "%.2f\n" $((10**2 * GIT_TIME/60))e-2) minutes to complete!" -------------------------------------------------------------------------------- /misc/old_scripts/waitlist.py: -------------------------------------------------------------------------------- 1 | """ 2 | Calculates the number of students that got off the waitlist for a course. 3 | 4 | Note that this is NOT guaranteed to be accurate. You can think of this as 5 | an estimate of the number of people that actually got off. In reality, this 6 | will most likely represent a lower bound. 7 | """ 8 | 9 | from typing import Tuple 10 | import pandas as pd 11 | 12 | def get_off_waitlist_ct(filename: str, print_data: bool = False) -> Tuple[int, int]: 13 | # Load the CSV file into a dataframe 14 | df = pd.read_csv(filename) 15 | 16 | prev_enrolled = 0 17 | prev_waitlist = 0 18 | max_total = 0 19 | 20 | # Iterate over each row in the dataframe 21 | num_off = 0 22 | for index, row in df.iterrows(): 23 | if prev_enrolled == 0 and prev_waitlist == 0: 24 | prev_enrolled = row["enrolled"] 25 | prev_waitlist = row["waitlisted"] 26 | continue 27 | 28 | # Get 'available', 'waitlisted', 'total' 29 | time = row["time"] 30 | enrolled = int(row['enrolled']) 31 | waitlisted = int(row['waitlisted']) 32 | total = int(row['total']) 33 | 34 | if total > max_total: 35 | max_total = total 36 | 37 | if enrolled > prev_enrolled and waitlisted < prev_waitlist: 38 | num_off += enrolled - prev_enrolled 39 | if print_data: 40 | print(f"[{time}]: {enrolled - prev_enrolled} student(s) got off the waitlist.") 41 | 42 | prev_enrolled = enrolled 43 | prev_waitlist = waitlisted 44 | 45 | if print_data: 46 | print(f"In total, {num_off} student(s) out of {max_total} students got off the waitlist ({round((num_off / max_total) * 100, 2)}%).") 47 | 48 | return num_off, max_total 49 | 50 | 51 | if __name__ == '__main__': 52 | term = input("Enter term: ").upper() 53 | course = input("Enter course: ").upper() 54 | section = input("Enter section: ").upper() 55 | 56 | # Open the corresponding CSV file 57 | if len(section) == 0: 58 | print("You need a section to run this script.") 59 | get_off_waitlist_ct(f"{term}/individual_sections/{course}_{section}.csv", True) 60 | -------------------------------------------------------------------------------- /misc/config_examples/plotconfig.txt: -------------------------------------------------------------------------------- 1 | { 2 | # Each marker will be shown as a vertical line in the graph. 3 | "markers": [ 4 | { 5 | # The date(s) that this event starts. 6 | # Index 0 means first pass, index 1 means second pass. 7 | 'd': ['2022-02-12', '2022-02-21'], 8 | 9 | # The hour (24hr format) in which this event begins. For example, 10 | # priorities can usually start enrolling at 8am. 11 | 't': 8, 12 | 13 | # The style of the vertical line. 14 | # See https://matplotlib.org/3.5.0/gallery/lines_bars_and_markers/linestyles.html. 15 | 'l': 'dotted', 16 | 17 | # The color of the vertical line. 18 | # See https://matplotlib.org/3.5.0/tutorials/colors/colors.html. 19 | 'c': '#e06d34', 20 | 21 | # The name of this vertical line. 22 | # This will be shown in the legend. 23 | 'n': 'Priorities Start', 24 | 25 | # Whether to shade the area between the previous vertical line and this one. 26 | 's': False 27 | }, 28 | 29 | # If you want to plot the first/second pass data, the last marker 30 | # must ALWAYS be the "last" event, i.e. no more events will ever 31 | # occur after the date corresponding to the last index of 32 | # the array corresponding to property 'd'. 33 | { 34 | 'd': ['2022-02-18', '2022-02-26'], 35 | 't': 22, 36 | 'l': 'solid', 37 | 'c': '#000000', 38 | 'n': 'End (FP/SP)' 39 | } 40 | ], 41 | "settings": { 42 | # The name of this term. For example, "Spring 2022" is an example. 43 | "termName": "Name of Term", 44 | 45 | # Whether this term is during Fall, Winter, or Spring quarters. 46 | "isNormal": True, 47 | 48 | # Whether to *also* plot the total number of seats (alongside 49 | # enrolled/available and waitlisted count). 50 | "showTotal": True, 51 | 52 | # Whether to plot the number of students enrolled (True) or the number 53 | # of free seats (False). For Spring 2022, use `False`. 54 | "useEnrolledTtl": False, 55 | 56 | # Whether to show any of the "markers" (the vertical lines denoting an 57 | # event). If this is False, then the markers array will not be used. 58 | "useMarkers": True, 59 | } 60 | } -------------------------------------------------------------------------------- /misc/rust/combine_multiple/README.md: -------------------------------------------------------------------------------- 1 | # Note 2 | Due to restructuring, this project is no longer in use. 3 | 4 | # CombineMultiple 5 | This program combines all [*real cleaned/processed CSV files*](https://github.com/ewang2002/UCSDHistEnrollData#types-of-csv-files) for each course from multiple terms into *one* cleaned/processed CSV file. 6 | 7 | For example, let's suppose we have `CSE 11.csv` for the terms FA22UG, FA22NS, and FA22A. That is, we might have the following files: 8 | - `FA22UG/raw/CSE 11.csv` 9 | - `FA22NS/raw/CSE 11.csv` 10 | - `FA22A/raw/CSE 11.csv` 11 | 12 | Let's suppose we want to merge these CSV files into one file and put the result in the term folder `FA22`. With this executable, we can combine these three CSV files into one CSV file and put it into said term folder. 13 | 14 | ## Usage 15 | ``` 16 | ./combine_multiple [term3] ... [termN] 17 | ``` 18 | where 19 | - `` and `` are required terms, and 20 | - `[term3]` and any other terms are optional terms. 21 | - `` is the target term. This must be the last argument. 22 | 23 | This should be executed in the project's root directory. 24 | 25 | ## Prerequisites for Program 26 | In order to run this program, the term folders that you choose must meet the following requirements: 27 | - They must each be for the same term. 28 | - For example, trying to combine data for the Fall 2022 and Spring 2022 term folders **will** lead to undesirable results. 29 | - The data from the real cleaned/processed CSV files must *not* overlap in content or time. 30 | - For example, if the `CSE 11.csv` file from the `FA22UG` and `FA22NS` term folders had data that overlapped in time (e.g., both CSV files had an entry with the same time), combination of the data will result in duplicate data in the final CSV file. 31 | - As a remark, this program does attempt to remove duplicates; however, it will not remove duplicates if the data from the duplicate entries differ. 32 | - As a remark, the easiest way to check if there are duplicates is to see if there exists duplicate *raw* CSV files (in the `raw` folder) for any two terms. 33 | - The data must be consistent. 34 | - For example, if `FA22UG` had undergraduate *and* graduate data, and `FA22NS` only had undergraduate, this will lead to incomplete graphs. 35 | 36 | Note that the program does not crash if any of the prerequisites aren't met. At most, a warning will be emitted. Thus, it is your responsibility to check and ensure that the prerequisites are met. -------------------------------------------------------------------------------- /docs/setup.md: -------------------------------------------------------------------------------- 1 | [← Go Back](https://github.com/ewang2002/UCSDHistEnrollData) 2 | 3 | # Setup 4 | Below are instructions on how you can generate your own plots. 5 | 6 | ### Required & Optional Software 7 | Make sure to get the latest versions of the required software. 8 | 9 | #### Required 10 | - [Python](https://www.python.org/). 11 | - [PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell) 12 | 13 | #### Optional 14 | - [git](https://git-scm.com/). 15 | 16 | ### Instructions 17 | 1. Obtain a copy of the following files from this repository: 18 | - `clean_raw_csvs.py` 19 | - `enroll_data_cleaner.py` 20 | - `fix_inconsistent_csv.py` 21 | - `list_all_files.ps1` 22 | - `plot.py` 23 | - `run.ps1` 24 | 25 | 2. Download, or clone, one of the data repositories. You can find a link to each data repository in the main README file in this repository. 26 | 27 | 3. Next, put all the files mentioned in the first step, **except** the `run.ps1` file, in the root directory of the data repository folder. Put the `run.ps1` file outside of the data repository folder. 28 | 29 | After completing this step, you should have a file structure that looks something like this: 30 | 31 | 32 | ``` 33 | Desktop 34 | ├─ run.ps1 35 | └─ 2022Fall (Data Repository) 36 | ├─ clean_raw_csvs.py 37 | ├─ enroll_data_cleaner.py 38 | ├─ fix_inconsistent_csv.py 39 | ├─ list_all_files.ps1 40 | ├─ plot.py 41 | | (remaining items are from the repository) 42 | ├─ raw 43 | ├─ overall 44 | ├─ section 45 | . 46 | . 47 | . 48 | └─ plotconfig.txt 49 | 50 | ``` 51 | 52 | 4. Install the relevant Python dependencies (`pandas`, `seaborn`, `matplotlib`). A `requirements.txt` file is provided in this directory that you can use to help you install those dependencies. 53 | 54 | 5. Make the appropriate modifications to the files. 55 | - In [`plot.py`](https://github.com/ewang2002/UCSDHistEnrollData/blob/master/plot.py), you should modify the value for `PROCESS_COUNT` if you're planning on running this program on a significantly weaker system (e.g., instead of `10`, use a value like `5`). If you're running `plot.py` in an environment that doesn't support running multiple processes, you will need to make the appropriate modifications to the code. 56 | - Make adjustments to the `plotconfig.txt` file as needed. 57 | 58 | 6. Finally, run `run.ps1` to start the cleaning & processing & plotting process. 59 | 60 | These instructions are not comprehensive, nor were they meant to be; thus, if you need any help, please create an issue [here](https://github.com/ewang2002/UCSDHistEnrollData/issues). 61 | -------------------------------------------------------------------------------- /scripts/fix_inconsistent_csv.py: -------------------------------------------------------------------------------- 1 | """ 2 | Attempts to fix inconsistent times (usually times off by <10ms) and rows in 3 | CSV file. 4 | 5 | In the original implementation of the tracker, the timestamp used was 6 | based on when the particular section was saved and not when all similar 7 | sections were saved. 8 | """ 9 | import sys 10 | from os.path import exists 11 | 12 | DELTA = 10 13 | 14 | 15 | def fix_inconsistent_csv(file_name: str, output_file_name: str) -> None: 16 | lines_changed = 0 17 | lined_iterated = 0 18 | removed = 0 19 | with open(output_file_name, 'w') as fixed_file: 20 | with open(file_name, "r") as f: 21 | init = False 22 | prev_time = -1 23 | for l in f: 24 | line = l.split(',') 25 | # remove meeting column 26 | # if len(line) == 9: 27 | # line.pop() 28 | # line[-1] += '\n' 29 | 30 | # invalid csv row 31 | if (len(line) < 9): 32 | removed += 1 33 | continue 34 | 35 | lined_iterated += 1 36 | temp_line = ','.join(line) 37 | if not init: 38 | fixed_file.write(f'{temp_line}') 39 | init = True 40 | continue 41 | 42 | time = int(line[0]) 43 | 44 | # Initial base case 45 | if prev_time == -1: 46 | fixed_file.write(f'{temp_line}') 47 | prev_time = time 48 | continue 49 | 50 | # Switched to a different section 51 | if abs(time - prev_time) > DELTA: 52 | fixed_file.write(f'{temp_line}') 53 | prev_time = time 54 | continue 55 | 56 | # Same time 57 | if time == prev_time: 58 | fixed_file.write(f'{temp_line}') 59 | continue 60 | 61 | # Problematic line 62 | line[0] = str(prev_time) 63 | temp_line = ','.join(line) 64 | fixed_file.write(f'{temp_line}') 65 | lines_changed += 1 66 | 67 | print(f'Fixed {lines_changed} lines & removed {removed} lines (out of {lined_iterated} total lines).') 68 | 69 | 70 | if __name__ == '__main__': 71 | if len(sys.argv) != 2: 72 | print("Usage: fix_inconsistent_csvs.py ") 73 | sys.exit(1) 74 | 75 | file_name = sys.argv[-1] 76 | if not exists(file_name): 77 | print(f"File '{file_name}' does not exist") 78 | sys.exit(1) 79 | 80 | new_file_name = sys.argv[-1].split('.')[0] + '_cleaned.csv' 81 | -------------------------------------------------------------------------------- /misc/config_examples/plotconfig2.txt: -------------------------------------------------------------------------------- 1 | { 2 | # A marker is simply a vertical line. 3 | "markers": [ 4 | { 5 | # The date that this event starts, in the format YYYY-MM-DD. 6 | 'd': '2022-02-12', 7 | 8 | # The hour (24hr format) in which this event starts. For example, 9 | # priorities can usually start enrolling at 8am, so you would put 10 | # 8. 11 | 't': 8, 12 | 13 | # The style of the vertical line. 14 | # See https://matplotlib.org/3.5.0/gallery/lines_bars_and_markers/linestyles.html. 15 | 'l': 'dotted', 16 | 17 | # The color of the vertical line. 18 | # See https://matplotlib.org/3.5.0/tutorials/colors/colors.html. 19 | 'c': '#e06d34', 20 | 21 | # The name of this vertical line. 22 | # This will be shown in the legend. 23 | 'n': 'Priorities Start', 24 | 25 | # The ID for this marker. This should be unique! 26 | 'i': 1, 27 | 28 | # Whether to hide this from the plot legends. This is useful if you know 29 | # you will have duplicate names. NOTE: if this prop exists at all, then 30 | # the line will be hidden. If it doesn't exist, then it will not be hidden. 31 | 'h': True 32 | }, 33 | ], 34 | # A region is simply a shaded area between two markers (denoted by their IDs, 35 | # or 'i' properties). 36 | "regions": [ 37 | { 38 | # The ID of the marker that this region starts at. 39 | 's': 1, 40 | # The ID of the marker that this region ends at. 41 | 'e': 2, 42 | # The name of the region. 43 | 'n': 'Region 1', 44 | # The color of the region. 45 | 'c': '#e06d34', 46 | # Whether to hide this from the plot legends. This is useful if you know 47 | # you will have duplicate names. NOTE: if this prop exists at all, then 48 | # the line will be hidden. If it doesn't exist, then it will not be hidden. 49 | 'h': True 50 | } 51 | ], 52 | "settings": { 53 | # The name of this term. For example, "Spring 2022" is an example. 54 | "termName": "Name of Term", 55 | 56 | # Whether to *also* plot the total number of seats (alongside 57 | # enrolled/available and waitlisted count). 58 | "showTotal": True, 59 | 60 | # Whether to plot the number of students enrolled (True) or the number 61 | # of free seats (False). For Spring 2022, use `False`. 62 | "useEnrolledTtl": False, 63 | 64 | # Whether to show any of the "markers" (the vertical lines denoting an 65 | # event). If this is False, then the markers array will not be used. 66 | "useMarkers": True, 67 | }, 68 | # The plotconfig.py version. Use version 2 here. 69 | "version": 2 70 | } -------------------------------------------------------------------------------- /misc/old_scripts/sep_grad_courses.py: -------------------------------------------------------------------------------- 1 | from genericpath import isfile 2 | from os import listdir 3 | from os.path import join 4 | import sys 5 | 6 | def get_base_file_name(f: str) -> str: 7 | """ 8 | Get the base file name. This will strip off the term 9 | and the extension. 10 | 11 | For example, if the file name was 12 | enrollment_2022-08-16T04_23_03_FA22NS.csv 13 | then 14 | enrollment_2022-08-16T04_23_03 15 | will be returned 16 | 17 | :param f: The file name to get the base name from 18 | :return: The base file name 19 | """ 20 | 21 | # Get last index of '_' 22 | last_underscore = f.rfind('_') 23 | return f[:last_underscore] 24 | 25 | if len(sys.argv) != 4: 26 | print("Usage: sep_grad_courses.py ") 27 | sys.exit(1) 28 | 29 | # base_folder is where we'll take the raw CSV files from 30 | base_folder = sys.argv[-3].upper() 31 | # ug_folder is where we'll put the undergrad courses 32 | ug_folder = sys.argv[-2].upper() 33 | # g_folder is where we'll put the grad courses 34 | g_folder = sys.argv[-1].upper() 35 | 36 | # Output folders 37 | base_raw_path = join(base_folder, 'raw') 38 | ug_raw_path = join(ug_folder, 'raw') 39 | g_raw_path = join(g_folder, 'raw') 40 | 41 | # List all files in the base folder 42 | for f in listdir(base_raw_path): 43 | print(f"Processing: {f}") 44 | this_file = join(base_raw_path, f) 45 | if not isfile(this_file): 46 | continue 47 | if f.endswith('_fixed.csv'): 48 | continue 49 | 50 | base_name = get_base_file_name(f) 51 | new_ug_name = f"{base_name}_{ug_folder}.csv" 52 | new_g_name = f"{base_name}_{g_folder}.csv" 53 | 54 | # Get file contents, begin iteration 55 | with open(this_file, 'r') as g: 56 | grad_data = "" 57 | undergrad_data = "" 58 | 59 | # Note that each line in the all_lines list will 60 | # have an implicit \n at the end 61 | all_lines = g.readlines() 62 | 63 | # Read first line since this is the CSV header 64 | line = all_lines[0] 65 | grad_data = line 66 | undergrad_data = line 67 | 68 | # Iterate through the rest of the lines 69 | for line in all_lines[1:]: 70 | course_info = line.split(',')[1] 71 | course_num = course_info.split(' ')[1] 72 | # Remove all non-numeric characters from the course number 73 | course_num = int("".join(c for c in course_num if c.isdigit())) 74 | 75 | # if it's a grad course... 76 | if course_num >= 200: 77 | grad_data += line 78 | else: 79 | undergrad_data += line 80 | 81 | # Write the undergrad and grad data to their respective files 82 | with open(join(ug_raw_path, new_ug_name), 'w') as ug: 83 | ug.write(undergrad_data) 84 | with open(join(g_raw_path, new_g_name), 'w') as g: 85 | g.write(grad_data) -------------------------------------------------------------------------------- /docs/scripts.md: -------------------------------------------------------------------------------- 1 | [← Go Back](https://github.com/ewang2002/UCSDHistEnrollData) 2 | 3 | # Script Information 4 | Whenever I'm processing the raw CSV files, I have the following scripts (and their applicable dependencies) in the root directory of the data repository. You can find all of these scripts in the `scripts` directory of *this* repository. 5 | 6 | | Script | Purpose | Dependencies | 7 | | ------ | ------- | ------------ | 8 | | `clean_raw_csvs.py` | A Python script that takes one term folder and combines all raw data into one file -- `enrollment.csv` -- that can then be broken up. This script is also responsible for validating that each row in the raw CSV files are valid (and removes any invalid rows). | `fix_inconsistent_csv.py` | 9 | | `enroll_data_cleaner.py` | A Python script that takes one term folder and "cleans" the data by breaking the `enrollment.csv` file into class or section CSV files and putting those CSV files in the `overall` or `section` folders. | | 10 | | `plot.py` | A Python script that takes one term folder and, using the cleaned data in said folder, creates graphs for each CSV file in the `overall` and `section` folders. | `pandas`
`matplotlib`
`seaborn` | 11 | | `list_files.py` | A Python script that simply puts all the courses and sections that I have data for in a text file. | | 12 | | `generate_toc.py` | A Python script that generates a Markdown file containing links to all CSV and graph files. This is a workaround for the limitation on GitHub where GitHub only displays 1000 files. | | 13 | 14 | There are also several general scripts designed to streamline this process. 15 | | Script | Purpose | 16 | | ------ | ------- | 17 | | `run.sh` | A Bash script that runs both `clean_raw_csvs.py` and `enroll_data_cleaner.py`. **This is no longer maintained and is now located in the `misc/old_scripts` folder.** | 18 | | `multplot.sh` | A Bash script that runs all applicable Python scripts above for each active terms. **This is no longer maintained and is now located in the `misc/old_scripts` folder.** | 19 | | `run.ps1` | A Powershell script that runs all applicable Python scripts above for each active terms. It also automatically pulls or clones and pushes the changes to GitHub. | 20 | 21 | To get an idea of how the cleaning works, consider the following diagram: 22 | 23 |

24 | Rundown of the process. 25 |

26 | 27 | It should be noted that these scripts are **not** committed to the data repositories. 28 | 29 | --- 30 | 31 | One thing to note: when CSV files are generated by my scraper, all graduate and undergraduate course data is put in the same CSV file. However, the data repositories are structured so that undergraduate and graduate courses are separated. So, these raw CSV files need to be broken up into two raw CSV files. For this, there is a Rust program in the `misc/rust` directory aptly named `separate_grad_courses`. If you want a compiled executable for Windows, you can get it from `misc/executables`. -------------------------------------------------------------------------------- /misc/rust/combine_multiple/src/main.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | collections::{hash_map, HashMap}, 3 | env, 4 | ffi::OsString, 5 | fs::{self, File, OpenOptions}, 6 | io::{self, Write}, 7 | path::{Path, PathBuf}, 8 | }; 9 | 10 | use hash_map::Entry; 11 | 12 | fn main() -> io::Result<()> { 13 | let args = env::args().collect::>(); 14 | if args.len() <= 2 { 15 | println!("You need at least two term folders *and* the target term folder!"); 16 | return Ok(()); 17 | } 18 | 19 | let mut valid_overall: Vec = vec![]; 20 | let mut valid_section: Vec = vec![]; 21 | // Check if the term folders exist 22 | for arg in &args[..(args.len() - 1)] { 23 | let base_term_folder = Path::new(arg); 24 | if !base_term_folder.exists() { 25 | println!("Term folder '{}' doesn't exist! Exiting.", arg); 26 | return Ok(()); 27 | } 28 | 29 | let base_overall = base_term_folder.join("overall"); 30 | let base_section = base_term_folder.join("section"); 31 | 32 | if base_overall.exists() { 33 | valid_overall.push(base_overall); 34 | } 35 | 36 | if base_section.exists() { 37 | valid_section.push(base_section); 38 | } 39 | } 40 | 41 | let target_term = &args[args.len() - 1]; 42 | if !Path::new(target_term).exists() { 43 | fs::create_dir(target_term)?; 44 | } 45 | 46 | let target_overall = Path::new(target_term).join("overall"); 47 | let target_section = Path::new(target_term).join("section"); 48 | if !target_overall.exists() { 49 | fs::create_dir(&target_overall)?; 50 | } 51 | 52 | if !target_section.exists() { 53 | fs::create_dir(&target_section)?; 54 | } 55 | 56 | // Merge all terms 57 | // To do this, we'll have a map where the KEY is the course 58 | // and the VALUE is the new file itself 59 | for (target, valid) in &[ 60 | (target_overall, valid_overall), 61 | (target_section, valid_section), 62 | ] { 63 | let mut map = HashMap::::new(); 64 | for o in valid { 65 | // get all files in this specific term's overall folder 66 | for f in fs::read_dir(o)? { 67 | let cleaned_csv = f?; 68 | let result_file = if let Entry::Vacant(e) = map.entry(cleaned_csv.file_name()) { 69 | let mut this_file = OpenOptions::new() 70 | .read(true) 71 | .write(true) 72 | .create(true) 73 | .truncate(true) 74 | .open(target.join(cleaned_csv.file_name()))?; 75 | writeln!(this_file, "time,enrolled,available,waitlisted,total")?; 76 | e.insert(this_file) 77 | } else { 78 | map.get_mut(&cleaned_csv.file_name()).unwrap() 79 | }; 80 | 81 | // With the result_file, write everything EXCEPT the first line (the CSV header) 82 | fs::read_to_string(cleaned_csv.path())? 83 | .lines() 84 | .skip(1) 85 | .for_each(|line| writeln!(result_file, "{}", line).unwrap()); 86 | } 87 | } 88 | } 89 | 90 | Ok(()) 91 | } 92 | -------------------------------------------------------------------------------- /misc/old_scripts/ind_sec.py: -------------------------------------------------------------------------------- 1 | """ 2 | Attempts to sort the given enrollment.csv file so that each section is in its 3 | own file. This is different from enroll_data_cleaner.py as this only splits 4 | each section into individual files. The enroll_data_cleaner.py does this on a 5 | per-course basis (i.e. all sections merged into one entry) and per section 6 | family (e.g. all A sections merged into one entry). 7 | """ 8 | 9 | from datetime import datetime 10 | from os.path import exists, join 11 | import sys 12 | 13 | CLEANED_FOLDER = 'cleaned' 14 | OUT_OVERALL_FOLDER = 'individual_sections' 15 | 16 | if len(sys.argv) != 2: 17 | print("Usage: enroll_data_cleaner.py ") 18 | sys.exit(1) 19 | 20 | # Get the cleaned folder 21 | base_folder = sys.argv[-1] 22 | if not exists(base_folder): 23 | print(f"Folder '{base_folder}' does not exist") 24 | sys.exit(1) 25 | 26 | cleaned_folder = join(base_folder, CLEANED_FOLDER) 27 | 28 | # Key = subject + course code + section (e.g. CSE 100) 29 | # Value = Dictionary where key = section code (e.g. A01 or 001) 30 | # and value = Dictionary where key = time 31 | # and value = [available, waitlisted, total] 32 | data = {} 33 | 34 | with open(join(cleaned_folder, 'enrollment.csv'), "r") as f: 35 | next(f) 36 | for line in f: 37 | line = line.split(',') 38 | time = line[0] 39 | subj_course = line[1] 40 | section_code = line[2] 41 | available_seats = int(line[5]) 42 | waitlisted = int(line[6]) 43 | total = int(line[7]) 44 | 45 | # SP22 data is kind of scuffed, so we manually calculate 46 | # the total enrolled. This will NOT be accurate, but is 47 | # better than nothing 48 | if base_folder == 'SP22': 49 | enrolled = total - available_seats 50 | else: 51 | enrolled = int(line[8]) 52 | 53 | if subj_course not in data: 54 | data[subj_course] = {} 55 | 56 | if section_code not in data[subj_course]: 57 | data[subj_course][section_code] = {} 58 | 59 | if time not in data[subj_course][section_code]: 60 | data[subj_course][section_code][time] = [0, 0, 0, 0] 61 | 62 | data[subj_course][section_code][time][0] += available_seats 63 | data[subj_course][section_code][time][1] += waitlisted 64 | data[subj_course][section_code][time][2] += total 65 | data[subj_course][section_code][time][3] += enrolled 66 | 67 | for subj_code in data: 68 | for sec_code in data[subj_code]: 69 | with open(join(base_folder, OUT_OVERALL_FOLDER, f'{subj_code}_{sec_code}.csv'), 'w') as f: 70 | f.write( 71 | 'time,enrolled,available,waitlisted,total\n') 72 | for raw_time in data[subj_code][sec_code]: 73 | time = datetime.fromtimestamp(float(raw_time) / 1000.0) \ 74 | .isoformat().split('.')[0] 75 | available = data[subj_code][sec_code][raw_time][0] 76 | waitlisted = data[subj_code][sec_code][raw_time][1] 77 | total = data[subj_code][sec_code][raw_time][2] 78 | enrolled = data[subj_code][sec_code][raw_time][3] 79 | f.write(time + ',' + str(enrolled) + ',' + str(available) + 80 | ',' + str(waitlisted) + ',' + str(total) + '\n') 81 | -------------------------------------------------------------------------------- /scripts/run.ps1: -------------------------------------------------------------------------------- 1 | # Figure out what term to use 2 | $term = "" 3 | $input_term = Read-Host "Enter term to process (e.g. WI23, FA23, SP24, etc.)" 4 | if ($input_term.Length -ne 4 -and $input_term.Length -ne 5) { 5 | Write-Warning "[warn] Invalid term entered." 6 | exit 1 7 | } 8 | 9 | $input_term = $input_term.ToUpper() 10 | 11 | # First, get the full year 12 | $term_year = $input_term.Substring(2, 2) 13 | # Is this a number? 14 | if ($term_year -notmatch "^[0-9]+$") { 15 | Write-Warning "[warn] Invalid year entered." 16 | exit 1 17 | } 18 | 19 | $term += "20" + $term_year 20 | 21 | # Then, get the term itself 22 | $term_type = $input_term.Substring(0, 2) 23 | if ($term_type -eq "FA") { 24 | $term += "Fall" 25 | } elseif ($term_type -eq "WI") { 26 | $term += "Winter" 27 | } elseif ($term_type -eq "SP") { 28 | $term += "Spring" 29 | } elseif ($term_type -eq "S1") { 30 | $term += "Summer1" 31 | } elseif ($term_type -eq "S2") { 32 | $term += "Summer2" 33 | } else { 34 | Write-Warning "[warn] Invalid term entered." 35 | exit 1 36 | } 37 | 38 | # Finally, add any additional arguments 39 | $term_additional = $input_term.Substring(4) 40 | if ($term_additional.Length -gt 0) { 41 | if ($term_additional.Contains("G")) { 42 | $term += "Grad" 43 | } 44 | 45 | if ($term_additional.Contains("D")) { 46 | $term += "Drop" 47 | } 48 | } 49 | 50 | $plot_wide = Read-Host "Wide plot for data? (y/n)" 51 | if ($plot_wide.ToLower() -ne "y") { 52 | $plot_wide = "n" 53 | } 54 | 55 | if ($plot_wide -eq "y") { 56 | Write-Host "Acknowledged: will create wide plots for data." 57 | } 58 | 59 | # check if the term folder exists 60 | # If it does, pull from repo for latest updates. 61 | # Otherwise, clone 62 | if (Test-Path -Path $term) { 63 | Set-Location $term 64 | git pull 65 | } 66 | else { 67 | Write-Output "`tCloning..." 68 | git clone "https://github.com/ewang2002/UCSDHistEnrollData/$term" 69 | Set-Location $term 70 | } 71 | 72 | $sw = [Diagnostics.Stopwatch]::StartNew() 73 | Write-Output "================== Processing $term. ==================" 74 | Write-Output "`tCleaning raw CSVs." 75 | python clean_raw_csvs.py 76 | 77 | Write-Output "`tCategorizing enroll data." 78 | python enroll_data_cleaner.py $term 79 | 80 | Write-Output "`tPlotting overall data." 81 | python plot.py o 82 | Write-Output "`tPlotting section data." 83 | python plot.py s 84 | 85 | python list_files.py 86 | if ($plot_wide -eq "y") { 87 | # First, deal with undergrad data 88 | $overall_wide_folder = "plot_overall_wide" 89 | $section_wide_folder = "plot_section_wide" 90 | 91 | if (!(Test-Path $overall_wide_folder)) { 92 | New-Item -ItemType "directory" -Path $overall_wide_folder 93 | } 94 | 95 | if (!(Test-Path $section_wide_folder)) { 96 | New-Item -ItemType "directory" -Path $section_wide_folder 97 | } 98 | 99 | # plot it 100 | Write-Output "`tPlotting WI23 overall data (wide)." 101 | python plot.py ow 102 | Write-Output "`tPlotting WI23 section data (wide)." 103 | python plot.py sw 104 | } 105 | 106 | python generate_toc.py 107 | $sw.Stop() 108 | $plot_time = $sw.Elapsed.TotalMinutes 109 | 110 | # =============================================================== # 111 | # GIT # 112 | # =============================================================== # 113 | $sw.Restart() 114 | $base_msg = "%B %d, %Y - update (plot, automated)" 115 | $dur_msg = "Took: $([Math]::Round($plot_time, 4)) minutes to plot ($plot_wide)." 116 | 117 | # commit 118 | Write-Output "`tCommitting changes." 119 | git add . 120 | git commit -m (Get-Date -UFormat $base_msg) -m $dur_msg 121 | git push 122 | 123 | $sw.Stop() 124 | $git_time = $sw.Elapsed.TotalMinutes 125 | 126 | # =============================================================== # 127 | # DONE # 128 | # =============================================================== # 129 | 130 | Write-Output "[plot] Took $([Math]::Round($plot_time, 4)) minutes to complete!" 131 | Write-Output "[git ] Took $([Math]::Round($git_time, 4)) minutes to complete!" 132 | 133 | Read-Host "Done! Press ENTER to exit." -------------------------------------------------------------------------------- /docs/background.md: -------------------------------------------------------------------------------- 1 | [← Go Back](https://github.com/ewang2002/UCSDHistEnrollData) 2 | 3 | # Background & Acknowledgements 4 | This page aims to give some more details about the background of the project. 5 | 6 | ## (Very Brief) Background 7 | I started working on this project in late January 2022, and have continuously worked on, and maintained, the project since its inception until my graduation of March 2024. Several things inspired me to work on this project: 8 | - As a mathematics-computer science student, I'm given zero priority when it comes to enrolling in 90% of upper-division computer science courses. I can only enroll >3 weeks after all CSE majors have enrolled, which puts me at a disadvantage. Thus, I wanted to see what classes I had a *chance* at enrolling in so I can improve my four-year plan. 9 | - UCSD's Computer Science and Engineering Department wasn't helpful in giving me information on how fast classes I wanted to take filled up (as seen in the screenshot below), so I decided to collect this information myself. 10 | Thanks CSE Department for being helpful as always. 11 | 12 | I do want to point out that, while the person who said this is technically correct, it's also true that, _generally speaking_, "the outcome of any waitlist or course enrollment" is generally _consistent_ enough that you can make some predictions. A lot of classes that I've been tracking in Fall 2023 have somewhat similar enrollment graphs to their Fall 2022 counterparts. 13 | 14 | - I took [COGS 108: Data Science in Practice](https://github.com/COGS108) with [Professor Jason Fleischer](https://jgfleischer.com/) and learned a lot of things that I wanted to apply, so this project was a good place to start. 15 | - And, of course, I wanted an excuse to learn the Rust programming language. After all, I wanted to learn more about the programming language, including its benefits. 16 | 17 | As hinted earlier, this project is divided into three components: 18 | - [webweg](https://github.com/ewang2002/webweg), the wrapper library for WebReg, UCSD's enrollment system. 19 | - [webreg_scraper](https://github.com/ewang2002/webreg_scraper), the WebReg data scraper and API that any application can use to get data from WebReg without needing authentication. 20 | - UCSDHistEnrollmentData, the repository acting as the umbrella for all data repositories. 21 | 22 | Originally, I created this project for my own personal use only. That said, I've seen many people -- students and faculty members -- reference this project across the UCSD community. Therefore, due to the popular demand of this project, I have since passed the torch to active UCSD students so that this project can continue to thrive. As of March 2024, [Ryan Batubara](https://github.com/rybplayer) is the current maintainer. 23 | 24 | ## Repository Restructuring 25 | This repository was created on either February or March 2022. In any case, before December 20, 2022, this repository was structured so that all data files were in this repository. While this was convenient, several major issues either have occurred or would have otherwise occurred: 26 | - According to GitHub, this repository took up **33.6 GB** of storage. 27 | - Locally, this repository took up **72+ GB** of storage (this includes the `.git` folder). 28 | - If you wanted to work with just one term's data, you would have to clone the _entire_ repository. Most people probably do not want to clone the entire repository just for one folder's worth of data. 29 | - The [GitHub documentation](https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-large-files-on-github#repository-size-limits) states that 30 | > We recommend repositories remain small, ideally less than 1 GB, and less than 5 GB is strongly recommended. 31 | 32 | It should come as no surprise to anyone that $$1 \text{ GB} < 5 \text{ GB} \lll 33.6 \text{ GB}.$$ 33 | 34 | Therefore, I decided that 35 | - all data files in _this_ repository would be moved into their own repositories, and 36 | - all history in this repository would be deleted (so that the repository's storage would be significantly less). 37 | 38 | This being said, **you should consider this repository to be the _parent_ repository.** 39 | 40 | 41 | ## Acknowledgements 42 | Big thanks to UCSD's [Data & GIS Lab](https://library.ucsd.edu/computing-and-technology/data-and-gis-lab/index.html) for providing me with remote access to their virtual computers. -------------------------------------------------------------------------------- /misc/rust/separate_grad_courses/src/main.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | env, 3 | fs::{self, OpenOptions}, 4 | io::Write, 5 | path::Path, 6 | process::ExitCode, 7 | }; 8 | 9 | fn main() -> anyhow::Result { 10 | let args = env::args().collect::>(); 11 | if args.len() != 3 { 12 | println!("Usage: ./separate_grad_courses "); 13 | return Ok(ExitCode::FAILURE); 14 | } 15 | 16 | let ug_term = &args[args.len() - 2]; 17 | let g_term = &args[args.len() - 1]; 18 | 19 | if ug_term == g_term { 20 | println!("the base term and ug/g term must be different."); 21 | return Ok(ExitCode::FAILURE); 22 | } 23 | 24 | // Idea: this executable should be run in the directory containing a folder called 25 | // "holding"; this folder will contain all CSV files that need to be split. Split 26 | // files will be put in a folder called "split" which is also located in the same 27 | // place as the executable. 28 | 29 | let import_path = Path::new("holding"); 30 | let export_path = Path::new("split"); 31 | 32 | // Separate all grad/undergrad courses into two files. 33 | for f in fs::read_dir(import_path)? { 34 | let f = f?; 35 | let f_name = f.file_name(); 36 | let f_type = f.file_type()?; 37 | if f_type.is_dir() { 38 | continue; 39 | } 40 | 41 | let f_name = match f_name.to_str() { 42 | Some(s) => s, 43 | None => continue, 44 | }; 45 | 46 | if !f_name.ends_with(".csv") || f_name.ends_with("_fixed.csv") { 47 | continue; 48 | } 49 | 50 | let base_name = get_base_name(f_name); 51 | let new_ug_name = format!("{}_{}.csv", base_name, ug_term); 52 | let new_g_name = format!("{}_{}.csv", base_name, g_term); 53 | 54 | let new_ug_file = export_path.join(new_ug_name); 55 | let new_g_file = export_path.join(new_g_name); 56 | 57 | println!("Processing: {}", f_name); 58 | 59 | let content = fs::read_to_string(f.path())?; 60 | let csv_header = match content.lines().next() { 61 | Some(s) => s, 62 | None => continue, 63 | }; 64 | 65 | let mut undergrad_data = String::new(); 66 | undergrad_data.push_str(csv_header); 67 | undergrad_data.push('\n'); 68 | 69 | let mut grad_data = String::new(); 70 | grad_data.push_str(csv_header); 71 | grad_data.push('\n'); 72 | 73 | for line in content.lines().skip(1) { 74 | let subj_num = match line.split(',').nth(1) { 75 | Some(x) => x, 76 | None => continue, 77 | }; 78 | 79 | let course_num = get_course_num(subj_num); 80 | 81 | if course_num < 200 { 82 | undergrad_data.push_str(line); 83 | undergrad_data.push('\n'); 84 | } else { 85 | grad_data.push_str(line); 86 | grad_data.push('\n'); 87 | } 88 | } 89 | 90 | let mut ug_f = OpenOptions::new() 91 | .read(true) 92 | .write(true) 93 | .create(true) 94 | .truncate(true) 95 | .open(new_ug_file)?; 96 | ug_f.write_all(undergrad_data.as_bytes())?; 97 | 98 | let mut g_f = OpenOptions::new() 99 | .read(true) 100 | .write(true) 101 | .create(true) 102 | .truncate(true) 103 | .open(new_g_file)?; 104 | g_f.write_all(grad_data.as_bytes())?; 105 | } 106 | 107 | // Clean up all processed CSV files 108 | for f in fs::read_dir(import_path)? { 109 | let path = f?.path(); 110 | if let Some(s) = path.extension() { 111 | if s.to_ascii_lowercase() != "md" { 112 | fs::remove_file(path)?; 113 | } 114 | } 115 | } 116 | 117 | Ok(ExitCode::SUCCESS) 118 | } 119 | 120 | fn get_course_num(subj_num: &str) -> u32 { 121 | subj_num 122 | .split(' ') 123 | .nth(1) 124 | .unwrap() 125 | .chars() 126 | .filter(|x| x.is_ascii_digit()) 127 | .map(|x| x.to_digit(10).unwrap()) 128 | .fold(0, |acc, elem| acc * 10 + elem) 129 | } 130 | 131 | fn get_base_name(f: &str) -> &str { 132 | let last_underscore = f.rfind('_').unwrap(); 133 | &f[..last_underscore] 134 | } 135 | -------------------------------------------------------------------------------- /docs/data_repo_info.md: -------------------------------------------------------------------------------- 1 | [← Go Back](https://github.com/ewang2002/UCSDHistEnrollData) 2 | 3 | # Data Repository Structure 4 | As mentioned earlier, this is the "parent" repository that "branches out" into multiple child repositories, known as data repositories. 5 | 6 | In other words, this repository contains all the information you need to understand how everything works, while the data repositories simply contain the enrollment data. 7 | 8 | ## Repository Structure 9 | Every data repository is expected to contain the same layout; that is, you should not expect to see any significant differences between two data repositories in terms of what they look like. 10 | 11 | ### Required Files & Folders 12 | Every data repository must have the following files and folders: 13 | 14 | | Name | Type | Purpose | 15 | | ------ | ---- | ------- | 16 | | `raw` | Folder | A folder that contains the **raw** CSV files generated by my [scraper](https://github.com/ewang2002/webreg_scraper). | 17 | | `cleaned` | Folder | A folder containing one CSV file that consists of all CSV files merged together from `raw`. Due to size limitations, this file will _not_ be checked into Git; however, you're free to recreate it using the scripts provided. | 18 | | `overall` | Folder | A folder containing one CSV file per *course* (e.g. CSE 8A with 2 sections would both be put in a file called `CSE 8A.csv`). | 19 | | `section` | Folder | A folder containing one CSV file per *section* (e.g. CSE 8A with 2 sections `A` and `B` would be put in two files called `CSE 8A_A.csv` and `CSE 8A_B.csv`). | 20 | | `plot_overall` | Folder | A folder containing all of the graphs, where each graph was created using the data points from the CSV files found in the `overall` folder. | 21 | | `plot_section` | Folder | A folder containing all of the graphs, where each graph was created using the data points from the CSV files found in the `section` folder. | 22 | | `plotconfig.txt` | File | A configuration file that lets you configure a few things regarding how the graphs should look. To see an example configuration file, click [here](https://github.com/ewang2002/UCSDHistEnrollData/blob/master/misc/config_examples/plotconfig2.txt). | 23 | | `all_courses.txt` | File | A file containing a list of all courses whose data is in this repository. | 24 | | `all_sections.txt` | File | A file containing a list of all sections whose data is in this repository. | 25 | | `.gitignore` | File | [Basically, files that we aren't committing to GitHub](https://git-scm.com/docs/gitignore). Some examples include the various scripts needed to process the raw CSV files (these are available in this repository). | 26 | 27 | ### Optional Files & Folders 28 | Below are some of the optional files and folders; in other words, they may or may not exist. 29 | 30 | | Name | Type | Purpose | 31 | | ------ | ---- | ------- | 32 | | `plot_overall_wide` | Folder | A folder containing all of the graphs, where each graph was created using the data points from the CSV files found in the `overall` folder. Unlike `plot_overall`, graphs in this folder are significantly bigger. | 33 | | `plot_section_wide` | Folder | A folder containing all of the graphs, where each graph was created using the data points from the CSV files found in the `section` folder. Unlike `plot_section`, graphs in this folder are significantly bigger. | 34 | 35 | ## `plotconfig.txt` Configuration File 36 | As implied, every term folder *must have* a `plotconfig.txt` file; this gives the `plot.py` script the configuration information needed to run properly. 37 | 38 | In the `misc/config_examples` directory of this project, there are two example files you can pick from. 39 | 40 | | File | Information | 41 | | ---- | ----------- | 42 | | `plotconfig.txt` | The original configuration file. This is usually easier to work with, but doesn't allow for a lot of customization. | 43 | | `plotconfig2.txt` | The second version of the configuration file. This configuration file is much longer and slightly more tedious to edit by default, but it gives you more control over how the plots should look (in particular, how the marker lines and regions look). **Note:** plotting 1st/2nd pass enrollment (`['sfsp', 'ofsp']`) is not possible with this version. | 44 | 45 | `plot.py` supports both versions. Instructions on how you can use them can be found in the example files themselves, as comments. It is strongly recommended that you use the *second version* of the configuration file. **NOTE:** Be sure to rename the configuration file to `plotconfig.txt`. 46 | 47 | Finally, the `plotconfig.txt` file has the same syntax as a regular Python file. If you'd like to validate that the file is syntatically correct, you can change the file's extension to `py` and then try to run it. Be sure to change the extension back to `txt` if you do this. -------------------------------------------------------------------------------- /scripts/enroll_data_cleaner.py: -------------------------------------------------------------------------------- 1 | """ 2 | Attempts to sort the given enrollment.csv file so that each course is in its 3 | own file. Sorting is done in two different ways: 4 | - One where all seat counts are merged across all sections of a course and 5 | put into its own file (timestamped, of course). 6 | - Another where all seat counts are sorted based on sections (e.g. for some 7 | course with two sections AXX and BXX, seat counts are separated). 8 | These are put into the `overall` and `sec` folders, respectively. 9 | """ 10 | 11 | from datetime import datetime 12 | from os.path import exists, join 13 | import sys 14 | 15 | CLEANED_FOLDER = 'cleaned' 16 | OUT_SEC_FOLDER = 'section' 17 | OUT_OVERALL_FOLDER = 'overall' 18 | 19 | cleaned_folder = CLEANED_FOLDER 20 | 21 | # Key = subject + course code (e.g. CSE 100) 22 | # Value = Dictionary where key = section code (e.g. A or 001) 23 | # and value = Dictionary where key = time 24 | # and value = [available, waitlisted, total] 25 | data_by_sec = {} 26 | 27 | # Key = subject + course code (e.g. CSE 100) 28 | # Value = Dictionary where key = time 29 | # and value = [available, waitlisted, total] 30 | data_by_overall = {} 31 | 32 | with open(join(cleaned_folder, 'enrollment.csv'), "r") as f: 33 | next(f) 34 | for line in f: 35 | line = line.split(',') 36 | time = line[0] 37 | subj_course = line[1] 38 | section_code = line[2] 39 | available_seats = int(line[5]) 40 | waitlisted = int(line[6]) 41 | total = int(line[7]) 42 | 43 | enrolled = int(line[8]) 44 | 45 | if subj_course not in data_by_sec: 46 | data_by_sec[subj_course] = {} 47 | 48 | if subj_course not in data_by_overall: 49 | data_by_overall[subj_course] = {} 50 | 51 | sec_code_first = section_code if section_code.isdigit() \ 52 | else section_code[0] 53 | if sec_code_first not in data_by_sec[subj_course]: 54 | data_by_sec[subj_course][sec_code_first] = {} 55 | 56 | if time not in data_by_sec[subj_course][sec_code_first]: 57 | data_by_sec[subj_course][sec_code_first][time] = [0, 0, 0, 0] 58 | 59 | if time not in data_by_overall[subj_course]: 60 | data_by_overall[subj_course][time] = [0, 0, 0, 0] 61 | 62 | data_by_sec[subj_course][sec_code_first][time][0] += available_seats 63 | data_by_sec[subj_course][sec_code_first][time][1] += waitlisted 64 | data_by_sec[subj_course][sec_code_first][time][2] += total 65 | data_by_sec[subj_course][sec_code_first][time][3] += enrolled 66 | 67 | data_by_overall[subj_course][time][0] += available_seats 68 | data_by_overall[subj_course][time][1] += waitlisted 69 | data_by_overall[subj_course][time][2] += total 70 | data_by_overall[subj_course][time][3] += enrolled 71 | 72 | # save overall data into the appropriate folder 73 | for subj_code in data_by_overall: 74 | with open(join(OUT_OVERALL_FOLDER, f'{subj_code}.csv'), 'w') as f: 75 | f.write( 76 | 'time,enrolled,available,waitlisted,total\n') 77 | for raw_time in data_by_overall[subj_code]: 78 | time = datetime.fromtimestamp(float(raw_time) / 1000.0) \ 79 | .isoformat().split('.')[0] 80 | available = data_by_overall[subj_code][raw_time][0] 81 | waitlisted = data_by_overall[subj_code][raw_time][1] 82 | total = data_by_overall[subj_code][raw_time][2] 83 | enrolled = data_by_overall[subj_code][raw_time][3] 84 | f.write(time + ',' + str(enrolled) + ',' + str(available) + 85 | ',' + str(waitlisted) + ',' + str(total) + '\n') 86 | 87 | # save section data into the appropriate folder 88 | for subj_code in data_by_sec: 89 | if len(data_by_sec[subj_code]) == 1: 90 | continue 91 | 92 | for sec_code in data_by_sec[subj_code]: 93 | with open(join(OUT_SEC_FOLDER, f'{subj_code}_{sec_code}.csv'), 'w') as f: 94 | f.write( 95 | 'time,enrolled,available,waitlisted,total\n') 96 | for raw_time in data_by_sec[subj_code][sec_code]: 97 | time = datetime.fromtimestamp(float(raw_time) / 1000.0) \ 98 | .isoformat().split('.')[0] 99 | available = data_by_sec[subj_code][sec_code][raw_time][0] 100 | waitlisted = data_by_sec[subj_code][sec_code][raw_time][1] 101 | total = data_by_sec[subj_code][sec_code][raw_time][2] 102 | enrolled = data_by_sec[subj_code][sec_code][raw_time][3] 103 | f.write(time + ',' + str(enrolled) + ',' + str(available) + 104 | ',' + str(waitlisted) + ',' + str(total) + '\n') 105 | -------------------------------------------------------------------------------- /data/README.md: -------------------------------------------------------------------------------- 1 | # Data Folder 2 | This repository contains TSV data files that are not necessarily related to enrollment history, but were created because I was able to get enrollment history. 3 | 4 | ## TSV Files & Structures 5 | Below, you'll find information on what each file represents, along with their structure. 6 | 7 | 8 | ### Schedule TSV Files 9 | TSV files in the `schedules` folder contain information on section schedules (e.g., the professor, meeting times, etc.). The name of the TSV file represents the term that the file is for (e.g., `WI23.tsv` contains section schedules for Winter 2023). 10 | 11 | Each TSV file is structured like so: 12 | 13 | | Header Name | Header Information | Example | 14 | | ----------- | ------------------ | ------- | 15 | | `subj_course_id` | The course number | CSE 8A | 16 | | `sec_code` | The section code | A01 | 17 | | `sec_id`| The section ID | 090018 | 18 | | `total_seats` | The total number of seats | 125 | 19 | | `meetings` | Information about all associated meetings | 20 | 21 | In particular, the data in `meetings` is structured so that each meeting is separated between a vertical bar (i.e., `|`). Each individual meeting will be formatted like so: 22 | 23 | ``` 24 | ,,, 25 | ``` 26 | 27 | 28 | In particular, 29 | | Meeting Component | Meaning | 30 | | ----------------- | ------- | 31 | | `` | The meeting type (e.g., Final Exam, Lecture, etc.). See the [registrar's website](https://registrar.ucsd.edu/StudentLink/instr_codes.html) for all possible meeting codes. | 32 | | `` | The days that the meeting will occur. This will either be a string of days (one or more of `M`, `Tu`, `W`, `Th`, `F`, `Sa`, `Su`) or a date (e.g., `2022-12-09`). | 33 | | `` | The meeting start and end time. Times are shown in 24-hour format. | 34 | | `` | The location where the meeting will occur. | 35 | 36 |
37 | Click here for an example. 38 |
39 | 40 | For example, consider the meeting 41 | ``` 42 | LE,MW,12:00 - 12:50,MOS 0113 43 | ``` 44 | Here, 45 | - `` is `LE`, which stands for lecture. 46 | - `` is `MW`, which stands for Monday and Wednesday meetings. 47 | - `` is `12:00 - 12:50`, which stands for 12:00 PM to 12:50 PM. 48 | - `` is `MOS 0113`, which stands for Mosaic Room 0113. 49 | 50 | Thus, a full meeting schedule may look like 51 | ``` 52 | LE,MW,18:30 - 19:50,CENTR 105|FI,2022-12-05,19:00 - 21:59,CENTR 105|DI,Th,17:00 - 17:50,CENTR 214 53 | ``` 54 | Here, there are three different types of meeting: a lecture (LE), final exam (FI), and discussion (DI). 55 | 56 |
57 | 58 | To see an example of how you might parse this file, see this [TypeScript example](https://github.com/AWaffleInc/rubot/blob/dd42c7afcdf1b6ff451d29d3727e740f15e90f70/src/Data.ts#L76) and [corresponding types declaration](https://github.com/AWaffleInc/rubot/blob/dd42c7afcdf1b6ff451d29d3727e740f15e90f70/src/definitions/MiscInterfaces.ts#L20). 59 | 60 | ### CAPE TSV File 61 | The `CAPEs.tsv` file has basic information about each CAPE entry. In particular, what you see when you search up a professor or class will be what you see in this file. 62 | 63 | The file is structured as follows: 64 | 65 | | Header Name | Header Information | Example | 66 | | --------------- | ------------------ | ------- | 67 | | `instructor` | The instructor. | Micciancio, Daniele | 68 | | `sub_course` | The course number. | CSE 110 | 69 | | `course` | The name of the course. | Theory of Computation | 70 | | `term` | The term. | FA22 | 71 | | `enroll` | The number of students enrolled. | 77 | 72 | | `evals_made` | The number of evaluations made. | 21 | 73 | | `rcmd_class` | The percent of students who recommended the class. | 97.1 | 74 | | `rcmd_instr` | The percent of students who recommended the instructor. | 96.6 | 75 | | `study_hr_wk` | The average number of hours spent studying per week. | 8.3 | 76 | | `avg_grade_exp` | The average GPA expected. | 3.59 | 77 | | `avg_grade_rec` | The average GPA received. `-1` corresponds to `N/A` on CAPEs. | 3.55 | 78 | 79 | To see an example of how you might parse this file, see this [TypeScript example](https://github.com/AWaffleInc/rubot/blob/dd42c7afcdf1b6ff451d29d3727e740f15e90f70/src/Data.ts#L172) and [corresponding types declaration](https://github.com/AWaffleInc/rubot/blob/dd42c7afcdf1b6ff451d29d3727e740f15e90f70/src/definitions/MiscInterfaces.ts#L6). 80 | 81 | > [!NOTE] 82 | > I do not have data from SET, and I do not have plans to create a scraper to gather SET data. If you need this data, you'll need to find your own way to obtain it. 83 | 84 | ### Courses TSV File 85 | > [!WARNING] 86 | > The scraped information is **not** guaranteed to be complete or accurate, so please use at your own risk. Additionally parsing may need to be done. 87 | 88 | The `courses.tsv` file contains scraped information from each of the department's course catalog page. 89 | 90 | | Header Name | Header Information | Example | 91 | | --------------- | ------------------ | ------- | 92 | | `department` | The department. | COGS | 93 | | `course_number` | The course number. | COGS 108 | 94 | | `course_name` | The name of the course. | Data Science in Practice | 95 | | `units` | The number of possible units. | 4 | 96 | | `description` | The course description. | Data science is multidisciplinary... | 97 | 98 | To see an example of how you might parse this file, see this [TypeScript example](https://github.com/AWaffleInc/rubot/blob/dd42c7afcdf1b6ff451d29d3727e740f15e90f70/src/Data.ts#L230) and [corresponding types declaration](https://github.com/AWaffleInc/rubot/blob/dd42c7afcdf1b6ff451d29d3727e740f15e90f70/src/definitions/MiscInterfaces.ts#L53). -------------------------------------------------------------------------------- /scripts/generate_toc.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from os import mkdir 3 | from os.path import exists 4 | 5 | # get the current directory 6 | if len(val := sys.path[0].split("\\")) > 1: 7 | current_dir = val[-1] 8 | else: 9 | current_dir = val[0] 10 | 11 | csv_url = f"https://github.com/UCSD-Historical-Enrollment-Data/{current_dir}/blob/main/URL_TYPE_FILLER/CSV_FILLER" 12 | png_url = f"https://raw.githubusercontent.com/UCSD-Historical-Enrollment-Data/{current_dir}/main/URL_TYPE_FILLER/REG_PNG_FILLER" 13 | 14 | # data contains all possible courses in this repository 15 | data = {} 16 | keys = [] 17 | subjects = {} 18 | 19 | # Open the file with encoding utf-8 20 | with open("all_courses.txt", "r", encoding="utf-8") as f: 21 | for course in f: 22 | course = course.strip() 23 | if course == "": 24 | continue 25 | 26 | data[course] = { 27 | "has_overall_png": False, 28 | "has_overall_wide_png": False, 29 | "has_overall_csv": True, 30 | "section": {} 31 | } 32 | 33 | keys.append(course) 34 | 35 | # Get the subject 36 | subject = course.split(" ")[0] 37 | if subject not in subjects: 38 | subjects[subject] = [] 39 | 40 | subjects[subject].append(course) 41 | 42 | # Check if overall png exists 43 | for course in data: 44 | if exists("plot_overall") and exists(f"plot_overall/{course}.png"): 45 | data[course]["has_overall_png"] = True 46 | if exists("plot_overall_wide") and exists(f"plot_overall_wide/{course}.png"): 47 | data[course]["has_overall_wide_png"] = True 48 | 49 | # Go through all sections 50 | with open("all_sections.txt", "r", encoding="utf-8") as f: 51 | for line in f: 52 | line = line.strip() 53 | if line == "": 54 | continue 55 | 56 | if "_" not in line: 57 | continue 58 | 59 | course, section = line.split("_") 60 | section = section.strip() 61 | if course not in data: 62 | continue 63 | 64 | has_regular_png = exists("plot_section") and exists(f"plot_section/{course}_{section}.png") 65 | has_wide_png = exists("plot_section_wide") and exists(f"plot_section_wide/{course}_{section}.png") 66 | has_sec_csv = exists("section") and exists(f"section/{course}_{section}.csv") 67 | 68 | data[course]["section"][section] = { 69 | "has_regular_png": has_regular_png, 70 | "has_wide_png": has_wide_png, 71 | "has_sec_csv": has_sec_csv 72 | } 73 | 74 | # Generate the TOC directory, if it doesn't exist 75 | if not exists("TOC"): 76 | mkdir("TOC") 77 | 78 | # Go through all subjects and create a README for each 79 | for subject in subjects: 80 | readme = "" 81 | readme += f"# {subject}\n\n" 82 | readme += "| Course | Overall | Section |\n" 83 | readme += "| ------ | ------- | ------- |\n" 84 | for course in subjects[subject]: 85 | crsc_data = data[course] 86 | 87 | # Overall 88 | encoded_course = course.replace(" ", "%20") 89 | overall_list = [] 90 | if crsc_data["has_overall_csv"]: 91 | url_base = csv_url.replace('URL_TYPE_FILLER', 'overall') \ 92 | .replace('CSV_FILLER', encoded_course) 93 | overall_list.append(f"[csv]({url_base}.csv)") 94 | 95 | if crsc_data["has_overall_png"]: 96 | url_base = png_url.replace('URL_TYPE_FILLER', 'plot_overall') \ 97 | .replace('REG_PNG_FILLER', encoded_course) 98 | overall_list.append(f"[png]({url_base}.png)") 99 | 100 | if crsc_data["has_overall_wide_png"]: 101 | url_base = png_url.replace('URL_TYPE_FILLER', 'plot_overall_wide') \ 102 | .replace('REG_PNG_FILLER', encoded_course) 103 | overall_list.append(f"[wide]({url_base}.png)") 104 | 105 | # Section 106 | section_list = [] 107 | for section in crsc_data["section"]: 108 | this_column = f"Section {section}: " 109 | 110 | if crsc_data["section"][section]["has_sec_csv"]: 111 | url_base = csv_url.replace('URL_TYPE_FILLER', 'section') \ 112 | .replace('CSV_FILLER', f"{encoded_course}_{section}") 113 | this_column += f"[csv]({url_base}.csv)" 114 | 115 | if crsc_data["section"][section]["has_regular_png"]: 116 | url_base = png_url.replace('URL_TYPE_FILLER', 'plot_section') \ 117 | .replace('REG_PNG_FILLER', f"{encoded_course}_{section}") 118 | this_column += f", [png]({url_base}.png)" 119 | 120 | if crsc_data["section"][section]["has_wide_png"]: 121 | url_base = png_url.replace('URL_TYPE_FILLER', 'plot_section_wide') \ 122 | .replace('REG_PNG_FILLER', f"{encoded_course}_{section}") 123 | this_column += f", [wide]({url_base}.png)" 124 | 125 | section_list.append(this_column) 126 | 127 | overall_column = ", ".join(overall_list) 128 | section_column = "
".join(section_list) 129 | # Add row 130 | readme += f"| {course} | {overall_column} | {section_column} |\n" 131 | 132 | with open(f"TOC/{subject}.md", "w", encoding="utf-8") as f: 133 | f.write(readme) 134 | 135 | # Now, go through all subjects and create a TOC.md which links to each subject MD file 136 | readme = "# Course Listings\n\n" 137 | 138 | if len(keys) == 0: 139 | readme += "At this time, there's no data available." 140 | else: 141 | readme += "| Subject | Link to Course Data |\n" 142 | readme += "| ------- | ------------------- |\n" 143 | for subject in subjects: 144 | readme += f"| {subject} | [{subject}](TOC/{subject}.md) |\n" 145 | 146 | with open("TOC.md", "w", encoding="utf-8") as f: 147 | f.write(readme) -------------------------------------------------------------------------------- /data/schedules/S324.tsv: -------------------------------------------------------------------------------- 1 | subj_course_id sec_code sec_id instructor total_seats meetings 2 | AESE 279B A00 494370 Wade, Jon P 33 IN,TuWThF,9:00 - 18:00, 3 | ANAR 135S A00 494369 Braswell, Geoffrey E. 0 LE,N/A,0:00 - 0:00,TBA TBA 4 | CAT 124RS A01 519847 Geibel, William 20 SE,N/A,0:00 - 0:00,TBA TBA|PR,N/A,0:00 - 0:00,TBA TBA 5 | CAT 125RS A01 515971 Geibel, William 20 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 6 | CLRE 250 A00 511389 Morris, Sheldon 9999 LE,W,16:00 - 17:00, |SE,W,17:00 - 18:00, 7 | CLRE 251 A00 507176 Mehta, Ravindra L. 9999 LE,Th,16:00 - 18:00, |FI,2024-09-12,16:00 - 18:00, |SE,N/A,0:00 - 0:00,TBA TBA 8 | CLRE 251 B00 511410 Mehta, Ravindra L. 9999 LE,Th,14:00 - 16:00, |FI,2024-09-12,14:00 - 16:00, |SE,N/A,0:00 - 0:00,TBA TBA 9 | CLRE 252 A00 507189 Cuomo, Raphael Eduardo 9999 LE,Th,14:00 - 16:00, |FI,2024-09-12,14:00 - 16:00, |SE,N/A,0:00 - 0:00,TBA TBA 10 | CLRE 253 A00 507199 Vaida, Florin 9999 LE,W,14:00 - 16:00, |FI,2024-09-11,14:00 - 16:00, 11 | CLRE 253 B00 507202 Vaida, Florin 9999 LE,W,16:00 - 18:00, |FI,2024-09-11,16:00 - 18:00, 12 | CLRE 259 A00 507211 Patel, Hemal 9999 LE,Tu,16:00 - 18:00, |SE,N/A,0:00 - 0:00,TBA TBA 13 | CLRE 260 A00 507221 Cuomo, Raphael Eduardo 9999 SE,N/A,0:00 - 0:00,TBA TBA 14 | CLRE 297 001 507242 Cuomo, Raphael Eduardo 9999 IN,N/A,0:00 - 0:00,TBA TBA 15 | CSE 191 A00 516875 Minnes Kemp, Mor Mia 9999 SE,N/A,0:00 - 0:00,TBA TBA 16 | CSS 201S A01 494383 Staff 35 LE,MTuWThF,13:00 - 14:20,PCYNH 240|FI,2024-09-07,15:00 - 17:59,PCYNH 240|DI,MTuWThF,14:30 - 15:50,PCYNH 240 17 | CSS 202S A01 494387 Staff 35 LE,MTuWThF,9:00 - 10:20,PCYNH 240|FI,2024-09-07,8:00 - 10:59,PCYNH 240|DI,MTuWThF,10:30 - 11:50,PCYNH 240 18 | EAP 100 A00 516065 Staff 9999 SA,N/A,0:00 - 0:00,TBA TBA 19 | ECE 45 A01 507414 Staff 60 LE,MW,15:30 - 16:50,WLH 2205|FI,2024-09-07,15:00 - 17:59,WLH 2205|DI,F,14:00 - 14:50,WLH 2205 20 | ECE 100 A01 507416 Baghdadchi, Saharnaz 20 LE,TuTh,9:30 - 10:50,WLH 2114|FI,2024-09-07,8:00 - 10:59,WLH 2114|LA,N/A,0:00 - 0:00,TBA TBA 21 | ECE 100 A02 507418 Baghdadchi, Saharnaz 20 LE,TuTh,9:30 - 10:50,WLH 2114|FI,2024-09-07,8:00 - 10:59,WLH 2114|LA,N/A,0:00 - 0:00,TBA TBA 22 | ECE 111 A01 507420 Staff 50 LE,MW,17:00 - 18:20,DIB 121|FI,2024-09-06,19:00 - 21:59,DIB 121|DI,W,16:00 - 16:50,DIB 121 23 | ECE 197 001 548057 Sievenpiper, Daniel F. 9999 IT,N/A,0:00 - 0:00,TBA TBA 24 | ECE 199 001 519520 Sievenpiper, Daniel F. 9999 IN,N/A,0:00 - 0:00,TBA TBA 25 | ECE 298 001 519521 Le, Hanh-Phuc 9999 IN,N/A,0:00 - 0:00,TBA TBA 26 | EDS 115 A00 507243 Choi, Bailey Miyeon 28 LE,MW,14:00 - 16:50,RWAC 0622 27 | EDS 117 A01 494379 Staff 25 LE,TuTh,17:00 - 19:50,RCLAS R08|DI,N/A,0:00 - 0:00,TBA TBA 28 | EDS 125 A00 507246 Hopkins, Megan Beth 30 LE,MW,14:00 - 16:50,HSS 1315|FI,2024-07-19,15:00 - 17:59, 29 | EDS 128A A01 507264 Fargason, Sharon Gayle 26 LE,TuTh,14:00 - 15:50,RWAC 0622|DI,TuTh,16:00 - 16:50,RWAC 0622 30 | EDS 128B A01 507293 Pappas, Elizabeth 30 LE,TuTh,14:00 - 15:50,RWAC 0622|DI,TuTh,16:00 - 16:50,RWAC 0622 31 | EDS 139 A00 507294 Fargason, Sharon Gayle 30 PR,N/A,0:00 - 0:00,TBA TBA 32 | EDS 139 B00 507313 Pappas, Elizabeth 30 PR,N/A,0:00 - 0:00,TBA TBA 33 | EDS 201 A00 507315 Staff 30 SE,MWF,9:00 - 11:50,RWAC 0622 34 | EDS 203 A01 507317 Halter, Christopher P. 30 SE,TuTh,9:00 - 13:00,RWAC 0521|MU,2024-07-05,9:00 - 13:00,RWAC 0521|LA,N/A,0:00 - 0:00,TBA TBA 35 | EDS 204R A01 507319 Halter, Christopher P. 30 SE,MW,9:00 - 12:00,RCLAS R20|LA,N/A,0:00 - 0:00,TBA TBA 36 | EDS 204R B01 507331 Heinzman, Erica M. 30 SE,MW,13:00 - 16:00,RCLAS R23|LA,N/A,0:00 - 0:00,TBA TBA 37 | EDS 206R A00 507332 Staff 30 SE,TuTh,9:00 - 11:50,RCLAS R60 38 | EDS 206R B00 507343 Staff 30 SE,TuTh,9:00 - 11:50,RCLAS R61 39 | EDS 250 A00 507344 Hemans, Patricia Ann Benitez 40 SE,MWF,13:00 - 15:50,RWAC 0622 40 | EDS 281 A00 507345 Daly, Alan J. 18 SE,N/A,0:00 - 0:00,TBA TBA 41 | EDS 284 A00 507350 Daly, Alan J. 16 SE,N/A,0:00 - 0:00,TBA TBA 42 | EDS 286 A00 507359 Fine, Sarah 18 SE,Sa,9:00 - 16:00, |SE,F,18:00 - 21:00, 43 | EDS 289C A01 507361 Daly, Alan J. 18 SE,N/A,0:00 - 0:00,TBA TBA|PR,N/A,0:00 - 0:00,TBA TBA 44 | EDS 290 A00 507366 Hofstetter, Carolyn 15 PR,W,18:00 - 21:00,RWAC 0622 45 | EDS 299 001 507371 Meyerott, Theresa Ann 18 IN,N/A,0:00 - 0:00,TBA TBA 46 | EDS 373 A01 507392 Black, Alison Michelle 15 LE,MW,9:00 - 13:20,RWAC 0416|LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 47 | EDS 374 A50 507397 Heinzman, Erica M. 15 LE,MW,9:00 - 13:20,RWAC 0521|LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 48 | EDS 375 A50 507408 Millstone, Rachel Diana 15 LE,MW,9:00 - 13:20, |LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 49 | EDS 376 A00 507409 Millstone, Rachel Diana 40 SE,TuTh,9:00 - 13:20,RWAC 0622|FI,2024-08-03,8:00 - 10:59,RWAC 0622 50 | EDS 385 A00 507412 Choi, Bailey Miyeon 15 LE,MWF,17:00 - 20:00,RWAC 0416 51 | FMPH 496B A00 519816 Nguyen-Grozavu, France T. 0 FW,W,10:00 - 10:50, 52 | LIGM 5A A00 507421 Fischer-Grunski, Eva K 20 LE,MTuWThF,9:00 - 12:20,MCGIL 2315|FI,2024-07-20,8:00 - 10:59,MCGIL 2315|LA,N/A,0:00 - 0:00,TBA TBA 53 | LIGM 5B A00 507423 Fischer-Grunski, Eva K 20 LE,MTuWThF,9:00 - 12:20,MCGIL 2315|FI,2024-08-10,8:00 - 10:59,MCGIL 2315|LA,N/A,0:00 - 0:00,TBA TBA 54 | LIGM 5C A00 507425 Fischer-Grunski, Eva K 20 LE,MTuWThF,9:00 - 12:20,RCLAS R07|FI,2024-08-31,8:00 - 10:59,RCLAS R07|LA,N/A,0:00 - 0:00,TBA TBA 55 | LIIT 5AS A00 507427 Carnelos, Chiara 20 LE,MTuWThF,9:00 - 12:20,RCLAS R27|FI,2024-07-20,8:00 - 10:59,RCLAS R27|LA,N/A,0:00 - 0:00,TBA TBA 56 | LIIT 5BS A00 507430 Carnelos, Chiara 20 LE,MTuWThF,9:00 - 12:20,RCLAS R57|FI,2024-08-10,8:00 - 10:59,RCLAS R57|LA,N/A,0:00 - 0:00,TBA TBA 57 | LIIT 5CS A00 507432 Carnelos, Chiara 20 LE,MTuWThF,9:00 - 12:20,RCLAS R13|FI,2024-08-31,8:00 - 10:59,RCLAS R13|LA,N/A,0:00 - 0:00,TBA TBA 58 | LISP 5A A00 507541 Munoz Sanchez, Alicia 20 LE,MTuWThF,9:00 - 12:20,RCLAS R49|FI,2024-07-20,8:00 - 10:59,RCLAS R49|LA,N/A,0:00 - 0:00,TBA TBA 59 | LISP 5B A00 507671 Munoz Sanchez, Alicia 20 LE,MTuWThF,9:00 - 12:20,RCLAS R59|FI,2024-08-10,8:00 - 10:59,RCLAS R59|LA,N/A,0:00 - 0:00,TBA TBA 60 | LISP 5C A00 507696 Munoz Sanchez, Alicia 20 LE,MTuWThF,9:00 - 12:20,RCLAS R12|FI,2024-08-31,8:00 - 10:59,RCLAS R12|LA,N/A,0:00 - 0:00,TBA TBA 61 | MAE 197 001 528363 Boechler, Nicholas Sebastia 9999 IT,N/A,0:00 - 0:00,TBA TBA 62 | MATH 197 001 523477 Kedlaya, Kiran S. 9999 IT,N/A,0:00 - 0:00,TBA TBA 63 | MATH 197 002 563811 Zhang, Danna 9999 IT,N/A,0:00 - 0:00,TBA TBA 64 | MCWP 40R A00 518780 Staff 20 TU,TuTh,12:00 - 13:50,RCLAS R28 65 | MCWP 40R B00 518781 Staff 20 TU,TuTh,8:00 - 9:50,RCLAS R21 66 | MCWP 40R C00 518783 Staff 20 TU,MW,15:00 - 16:50,RCLAS R03 67 | MCWP 50R A00 518791 Staff 20 SE,TuTh,8:00 - 9:50,RCLAS R22 68 | MCWP 50R B00 518792 Staff 20 SE,MW,8:00 - 9:50,RCLAS R18 69 | MCWP 50R C00 518793 Staff 20 SE,TuTh,11:00 - 12:50,RCLAS R29 70 | MCWP 50R D00 518794 Staff 20 SE,TuTh,11:00 - 12:50,RCLAS R33 71 | MCWP 50R E00 518795 Staff 20 SE,TuTh,14:00 - 15:50,RCLAS R27 72 | MCWP 50R F00 518796 Staff 20 SE,MW,14:00 - 15:50,RCLAS R17 73 | MCWP 50R G00 518797 Staff 20 SE,MW,11:00 - 12:50,RCLAS R29 74 | MGT 402 A00 514366 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 75 | MGT 406 A00 516818 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 76 | MGT 417 A00 507710 Staff 98 LE,,11:30 - 17:30,OTRSN 1E106 77 | MGT 421 A00 507719 Staff 60 LE,Th,18:30 - 21:20,WFH 3N129|FI,2024-09-07,18:30 - 21:29,WFH 3N129 78 | MGT 433 A00 507751 Staff 98 LE,Sa,8:00 - 14:00,OTRSN 1E106 79 | MGT 439 A00 507786 Staff 30 LE,N/A,0:00 - 0:00,TBA TBA 80 | MGT 446 A00 626111 Staff 60 LE,,11:30 - 17:30,OTRSN 3E107|FI,2024-09-08,11:30 - 14:30,OTRSN 3E107 81 | MGT 453 A00 516819 Staff 98 LE,M,18:30 - 21:20,OTRSN 4E106|FI,2024-09-06,18:30 - 21:30,OTRSN 4E106 82 | MGT 489 A00 507777 Staff 50 LE,M,18:30 - 21:20,WFH 3N129 83 | MGT 489 B00 507778 Staff 60 LE,Sa,8:00 - 14:00,OTRSN 3E107 84 | MGT 495 A00 507779 Staff 98 LE,,8:00 - 11:00,OTRSN 1E106|LE,Sa,14:30 - 17:30,OTRSN 1E106 85 | MGT 497 A00 507780 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 86 | MGTA 415 A00 626203 Staff 60 LE,Sa,13:00 - 17:00,OTRSN 4E106 87 | MGTA 444 A00 507782 Staff 60 LE,N/A,0:00 - 0:00,TBA TBA 88 | MGTA 464 A00 507783 Perols, Johan Lars 60 LE,Sa,8:00 - 12:00,OTRSN 4E106 89 | MGTF 490 A00 507784 Staff 98 LE,W,9:00 - 12:00,WFH 4N128 90 | MMW 12R A01 514034 Herbst, Matthew 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 91 | MMW 12R A02 514035 Herbst, Matthew 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 92 | MMW 13R A01 514037 Staff 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 93 | MMW 13R A02 514039 Staff 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 94 | SIO 295LS A00 523233 Staff 30 LA,MTuWThF,13:00 - 16:00, |FI,2024-09-07,15:00 - 17:59, 95 | SIO 295S A00 523232 Staff 30 SE,MTuWThF,9:00 - 12:00, |FI,2024-09-07,8:00 - 10:59, 96 | SOCI 117 A01 494376 Staff 5 LE,TuTh,17:00 - 19:50,RCLAS R08|DI,N/A,0:00 - 0:00,TBA TBA 97 | WES 237B A00 494380 Staff 20 LE,Sa,9:00 - 16:30, 98 | -------------------------------------------------------------------------------- /scripts/in_progress/plot2.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime, timedelta 2 | from os import listdir, mkdir 3 | from os.path import exists, join 4 | import sys 5 | from typing import List, Tuple, TypeVar 6 | import pandas as pd 7 | import seaborn as sns 8 | import matplotlib.pyplot as plt 9 | import matplotlib.ticker as ticker 10 | import matplotlib.dates as mdates 11 | from math import floor 12 | from multiprocessing import Process 13 | import gc 14 | 15 | # Settings for input/output, basic plot stuff 16 | GENERAL_SETTINGS = { 17 | 'id': 'general', 18 | 'overall_plot_folder': 'plot_overall', 19 | 'section_plot_folder': 'plot_section', 20 | 21 | 'figure_size': (17, 7), 22 | 'num_ticks': 50 23 | } 24 | 25 | WIDE_SETTINGS = { 26 | 'id': 'wide', 27 | 'overall_plot_folder': 'plot_overall_wide', 28 | 'section_plot_folder': 'plot_section_wide', 29 | 30 | 'figure_size': (60, 15), 31 | 'num_ticks': 200 32 | } 33 | 34 | OVERALL_FOLDER = 'overall' 35 | SECTION_FOLDER = 'section' 36 | 37 | # For the plotconfig.py file 38 | MARKERS = "markers" 39 | MARKER_DATES = 'd' 40 | MARKER_TIME = 't' 41 | LINE_STYLE = 'l' 42 | LINE_COLOR = 'c' 43 | NAME_OF_MARKER = 'n' 44 | CONFIG_SETTINGS = 'settings' 45 | SHADE = 's' 46 | MARKER_ID = 'i' 47 | 48 | REGIONS = "regions" 49 | START_ID = 's' 50 | END_ID = 'e' 51 | REGION_NAME = 'n' 52 | REGION_COLOR = 'c' 53 | R_HIDE = 'h' 54 | 55 | # Multiprocessing options 56 | CHUNK_SIZE = 20 57 | WIDE_CHUNK_SIZE = 10 58 | PROCESS_COUNT = 10 59 | 60 | T = TypeVar('T') 61 | def subsets_with_limits(arr: List[T], num_subsets: int, max_per_elem: int) -> List[List[T]]: 62 | arr.reverse() 63 | subsets = [] 64 | len_to_use = max(0, len(arr) - max_per_elem * num_subsets) 65 | idx = 0 66 | while len(arr) > len_to_use: 67 | if idx < len(subsets): 68 | subsets[idx].append(arr.pop()) 69 | idx = (idx + 1) % num_subsets 70 | continue 71 | 72 | subsets.append([arr.pop()]) 73 | idx = (idx + 1) % num_subsets 74 | 75 | arr.reverse() 76 | return subsets 77 | 78 | def plot_group(group_num: int, files_to_plot: List[str], \ 79 | from_folder: str, out_folder: str, settings, config): 80 | 81 | completed = 0 82 | for file in files_to_plot: 83 | df = pd.read_csv(join(from_folder, file)) 84 | # Map the time (e.g., 2023-05-25T01:14:46) to a datetime object 85 | # supported by pandas 86 | df['time'] = pd.to_datetime(df['time'], format='%Y-%m-%dT%H:%M:%S') 87 | 88 | # Set the figure size for the final plot 89 | plt.figure(figsize=settings['figure_size']) 90 | 91 | sns.lineplot(data=df, x='time', y='total', color='purple', label='Total Seats', linestyle='--', linewidth=4) 92 | sns.lineplot(data=df, x='time', y='waitlisted', color='blue', label='Waitlisted', linewidth=1) 93 | sns.lineplot(data=df, x='time', y='enrolled', color='red', label='Enrolled', linewidth=2) 94 | max_y = max(df['enrolled'].max(), df['total'].max(), df['waitlisted'].max()) 95 | 96 | plot = plt.gca() 97 | # Modify plot properties to make it more readable 98 | title = file.replace('.csv', '') 99 | if '_' in title: 100 | course, section = title.split('_') 101 | title = f'{course}, Section {section}' 102 | 103 | plot.set_title(title + f' ({config[CONFIG_SETTINGS]["termName"]})') 104 | plot.set_xlabel('Time') 105 | plot.set_ylabel('Seats') 106 | plot.grid(True) 107 | plot.margins(0) 108 | 109 | # Set bottom-left corner to (0, 0) 110 | plt.ylim(ymin=0, ymax=max(1.05*max_y, 1)) 111 | 112 | # Set the x-axis to be more readable (show once per day) 113 | loc = mdates.AutoDateLocator(interval_multiples=True) 114 | loc.intervald[mdates.DAILY] = [(datetime.now() - df['time'].min()).days // 30] 115 | plot.xaxis.set_major_locator(loc) 116 | plot.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) 117 | 118 | # To make the x-axis more readable, purposely hide some dates and then 119 | # adjust the labels appropriately 120 | plt.setp(plot.xaxis.get_majorticklabels(), rotation=45, ha="right") 121 | 122 | # https://matplotlib.org/2.0.2/users/legend_guide.html 123 | plt.legend(bbox_to_anchor=(1.02, 1), loc=2, borderaxespad=0.) 124 | # Adjusts the padding 125 | plt.tight_layout() 126 | # Then, saves the figure and closes it to save memory 127 | fig = plot.get_figure() 128 | fig.savefig(join(out_folder, file.replace('.csv', ''))) 129 | # Clear the plot, close it, and clear the memory 130 | plot.cla() 131 | plt.clf() 132 | plt.cla() 133 | plt.close('all') 134 | del plot 135 | del fig 136 | del df 137 | gc.collect() 138 | completed += 1 139 | print(f"\t\t[{group_num}] Finished {file} (Completed {completed}/{len(files_to_plot)}).") 140 | 141 | if __name__ == '__main__': 142 | if len(sys.argv) != 2: 143 | print("Usage: plot.py <'s', 'o', 'sw', 'ow'>") 144 | print("\twhere the argument is one of:") 145 | print("\t\t's' (section)") 146 | print("\t\t'o' (overall)") 147 | print("\t\t'sw' (section, wide display)") 148 | print("\t\t'ow' (overall, wide display)") 149 | sys.exit(1) 150 | 151 | # Get the type of data to process 152 | data_type = sys.argv[-1] 153 | if data_type not in ['s', 'o', 'sw', 'ow']: 154 | print(f"Invalid data type '{data_type}' - must be one of:") 155 | print("\t's' (section)") 156 | print("\t'o' (overall)") 157 | print("\t'sw' (section, wide display)") 158 | print("\t'ow' (overall, wide display)") 159 | sys.exit(1) 160 | 161 | # Get config file 162 | try: 163 | with open('plotconfig.txt', 'r') as f: 164 | config = eval(f.read()) 165 | except: 166 | print(f'This folder does not contain a plotconfig.txt file. Please set one up and then try again.') 167 | exit(1) 168 | 169 | if data_type in ['s', 'o']: 170 | settings_obj = GENERAL_SETTINGS 171 | chunk_size = CHUNK_SIZE 172 | elif data_type in ['sw', 'ow']: 173 | settings_obj = WIDE_SETTINGS 174 | chunk_size = WIDE_CHUNK_SIZE 175 | 176 | plot_folder = join(settings_obj['overall_plot_folder'] if data_type in ['o', 'ow'] else settings_obj['section_plot_folder']) 177 | if not exists(plot_folder): 178 | mkdir(plot_folder) 179 | 180 | in_folder = join(OVERALL_FOLDER if data_type in ['o', 'ow'] else SECTION_FOLDER) 181 | all_files = listdir(in_folder) 182 | 183 | # If we're working with sections, we only want the files that appear more than once 184 | # Categorize each file by the class that they represent. 185 | if data_type == 's': 186 | # The key is the course (e.g. CSE 100.csv) and the value is a list 187 | # of all sections (e.g. CSE 100_A.csv) 188 | file_secs = {} 189 | for file in all_files: 190 | f_name = file.split('_')[0] 191 | if f_name not in file_secs: 192 | file_secs[f_name] = [file] 193 | else: 194 | file_secs[f_name].append(file) 195 | 196 | all_files = [] 197 | for f_name in file_secs: 198 | if len(file_secs[f_name]) > 1: 199 | all_files += file_secs[f_name] 200 | 201 | print(f'Processing {len(all_files)} files into chunks of {chunk_size} files each.') 202 | print(f'\tWide? {data_type == "sw" or data_type == "ow"}') 203 | print(f'\tInput Folder: {in_folder}') 204 | print(f'\tPlot Folder: {plot_folder}') 205 | print(f'\tProcesses: {PROCESS_COUNT}') 206 | 207 | len_of_files = len(all_files) 208 | completed = 0 209 | while len(all_files) > 0: 210 | files_to_process = subsets_with_limits(all_files, PROCESS_COUNT, chunk_size) 211 | processes = [] 212 | # Limit ourselves to PROCESS_COUNT processes, or else we might 213 | # end up crashing the host device with too many processes. 214 | for (i, chunk) in enumerate(files_to_process): 215 | print(f'Starting process {i} (with count {len(chunk)}).') 216 | # Create a process to process the chunk 217 | p = Process(target=plot_group, args=(i, \ 218 | chunk, \ 219 | in_folder, \ 220 | plot_folder, \ 221 | settings_obj, \ 222 | config)) 223 | p.start() 224 | processes.append(p) 225 | 226 | # Wait for all processes to finish 227 | for p in processes: 228 | p.join() 229 | completed += sum(len(x) for x in files_to_process) 230 | print(f'\t\tCompleted {completed}/{len_of_files} files ({len(all_files)} left).') 231 | -------------------------------------------------------------------------------- /docs/csv_info.md: -------------------------------------------------------------------------------- 1 | [← Go Back](https://github.com/ewang2002/UCSDHistEnrollData) 2 | 3 | # CSV Information 4 | Each data repository will contain numerous CSV files. Generally, each data point will contain a time and information regarding the number of students enrolled, waitlisted, as well as the number of available seats, during that time. 5 | 6 | As of mid August, I've collected approximately 70 **raw** million data points for ~2000 courses and 5 terms. Note that this is across *all* courses and *all* terms; it is **not** 70 million per course. 7 | 8 | ## CSV Structure 9 | In each data repository, there are two types of CSV files: 10 | - Raw CSV files, located in the `raw` directory. 11 | - Cleaned CSV files for 12 | - courses, located in the `overall` directory. 13 | - sections, located in the `section` directory. 14 | 15 | ⚠️ The CSV headers described below may not apply to Spring 2022 data sets. In particular, the Spring 2022 CSV files do not have the number of students enrolled in a class, only the number of seats available. Spring 2022 was when this project started, and the quarter itself was a testing quarter. 16 | 17 | ### Raw CSV Files 18 | These are CSV files that just contain data for all courses, ordered by collection time. These CSV files are generated by my scraper. This is ideal if you want to do your own data processing, as this allows you to decide how you want to represent the data. The CSV columns are: 19 | 20 | | Column Name | Column Purpose | 21 | | ----------- | -------------- | 22 | | `time` | The time when this data point was collected, represented as [Unix time](https://en.wikipedia.org/wiki/Unix_time). | 23 | | `subj_course_id` | The subject course number ID. For example, `CSE 100`. | 24 | | `sec_code` | The section code. For example, `A01`. | 25 | | `sec_id` | The section ID. For example, `085689`. | 26 | | `prof` | The instructor, in the form `Last; First Middle` (where `Middle` is optional) **or** `Staff`. | 27 | | `available` | The number of seats *available* for enrollment. This is the exact number shown on WebReg at the time. | 28 | | `waitlist` | The number of students waitlisted for this section. This is the exact number shown on WebReg at the time. | 29 | | `total` | The total number of seats available. This is the exact number shown on WebReg at the time. | 30 | | `enrolled_ct` | The number of students enrolled in this section. This always shows the real number of students enrolled (as opposed to `available`). This is not shown on WebReg. | 31 | 32 | 33 |
34 | Click here for an example. 35 |
36 | 37 | ``` 38 | time,subj_course_id,sec_code,sec_id,prof,available,waitlist,total,enrolled_ct 39 | 1661599357060,AAS 10,A01,085689,Butler; Elizabeth Annette,0,10,34,34 40 | 1661599357060,AAS 10,A02,085690,Butler; Elizabeth Annette,0,10,34,34 41 | 1661599357513,AAS 170,A00,085691,Butler; Elizabeth Annette,17,0,32,15 42 | 1661599357966,AIP 197,001,085683,Staff,100,0,100,0 43 | 1661599357966,AIP 197,002,085684,Rao; Ramesh R,50,0,50,0 44 | 1661599357966,AIP 197,003,106411,Toda; Alexis Akira,9999,0,9999,0 45 | 1661599357966,AIP 197,004,106536,Wixted; John T,9999,0,9999,0 46 | 1661599357966,AIP 197,005,106554,Kiyonaga; Anastasia,9999,0,9999,0 47 | ... (omitted for brevity) 48 | 1661599470129,CSE 100,A01,090033,Moshiri; Alexander Niema,0,8,189,189 49 | 1661599470577,CSE 100R,A01,093837,Moshiri; Alexander Niema,155,0,350,195 50 | 1661599471025,CSE 101,A01,090035,Saha; Barna & Jones; Miles E,0,25,395,395 51 | 1661599471474,CSE 103,A01,090037,Freund; Yoav,0,10,75,75 52 | 1661599471923,CSE 105,A01,090039,Micciancio; Daniele,86,0,350,264 53 | ... (omitted for brevity) 54 | 1661599927010,AAS 10,A01,085689,Butler; Elizabeth Annette,0,10,34,34 55 | 1661599927010,AAS 10,A02,085690,Butler; Elizabeth Annette,0,10,34,34 56 | 1661599927455,AAS 170,A00,085691,Butler; Elizabeth Annette,17,0,32,15 57 | 1661599927907,AIP 197,001,085683,Staff,100,0,100,0 58 | 1661599927907,AIP 197,002,085684,Rao; Ramesh R,50,0,50,0 59 | 1661599927907,AIP 197,003,106411,Toda; Alexis Akira,9999,0,9999,0 60 | 1661599927907,AIP 197,004,106536,Wixted; John T,9999,0,9999,0 61 | 1661599927907,AIP 197,005,106554,Kiyonaga; Anastasia,9999,0,9999,0 62 | ... (omitted for brevity) 63 | 1661600039372,CSE 100,A01,090033,Moshiri; Alexander Niema,0,8,189,189 64 | 1661600039820,CSE 100R,A01,093837,Moshiri; Alexander Niema,155,0,350,195 65 | 1661600040268,CSE 101,A01,090035,Saha; Barna & Jones; Miles E,0,25,395,395 66 | 1661600040713,CSE 103,A01,090037,Freund; Yoav,0,10,75,75 67 | 1661600041163,CSE 105,A01,090039,Micciancio; Daniele,86,0,350,264 68 | ... (omitted for brevity, but you get the point) 69 | ``` 70 | 71 | These CSV files will always be located in the `raw` folder. 72 | 73 |
74 | 75 | ### Merged CSV Files 76 | As part of the data cleaning process, one thing I (inefficiently) do is merge all raw CSV files into one giant CSV file. Depending on the number of CSV files, this can be a huge file. 77 | 78 | Because these files are often bigger than 100 MB (GitHub's per-file size limit), these will not be checked into Git. 79 | 80 | This will always be one CSV file, usually located in a folder called `cleaned`. 81 | 82 | ### Cleaned CSV Files 83 | These are the CSV files that are divided based on either course or section. For most people, these are the CSV files you probably want to work with. The columns are: 84 | 85 | | Column Name | Column Purpose | 86 | | ----------- | -------------- | 87 | | `time` | The time when this data point was collected, represented as an ISO 8601 timestamp without the timezone part. For example, `2022-08-27T04:24:26`. The timezone part is assumed to be in the timezone of the machine that is processing this data, which is always Pacific Time unless otherwise stated. | 88 | | `enrolled` | The number of students enrolled in this section. This always shows the real number of students enrolled (as opposed to `available`). This is not shown on WebReg. | 89 | | `available` | The number of seats *available* for enrollment. This is the exact number shown on WebReg at the time. | 90 | | `waitlisted` | The number of students waitlisted for this section. This is the exact number shown on WebReg at the time. | 91 | | `total` | The total number of seats available. This is the exact number shown on WebReg at the time. | 92 | 93 |
94 | Click here for an example. 95 |
96 | 97 | In a `CSE 11.csv` file, you can find the enrollment data for **all** sections of CSE 11: 98 | 99 | ``` 100 | time,enrolled,available,waitlisted,total 101 | 2022-08-27T04:24:26,264,0,453,147 102 | 2022-08-27T04:33:55,264,0,453,147 103 | 2022-08-27T04:43:02,265,0,452,147 104 | 2022-08-27T04:52:07,265,0,452,147 105 | 2022-08-27T05:01:13,266,0,451,147 106 | 2022-08-27T05:10:20,269,0,448,147 107 | 2022-08-27T05:19:48,270,0,447,147 108 | 2022-08-27T05:28:56,271,0,446,147 109 | 2022-08-27T05:38:04,271,0,446,147 110 | 2022-08-27T05:47:11,271,0,446,147 111 | 2022-08-27T05:56:18,272,0,444,147 112 | 2022-08-27T06:05:25,274,0,443,147 113 | 2022-08-27T06:14:33,274,0,444,147 114 | 2022-08-27T06:23:39,275,0,443,147 115 | 2022-08-27T06:32:45,275,0,444,147 116 | 2022-08-27T06:41:53,276,0,443,147 117 | 2022-08-27T06:51:03,278,0,441,147 118 | 2022-08-27T07:00:10,279,0,440,147 119 | ... (omitted for brevity, but you get the point) 120 | ``` 121 | 122 | Another example is `CSE 11_A01.csv`, which is the enrollment data for section `A01` of CSE 11: 123 | 124 | ``` 125 | time,enrolled,available,waitlisted,total 126 | 2022-08-27T04:24:26,79,0,149,49 127 | 2022-08-27T04:33:55,79,0,149,49 128 | 2022-08-27T04:43:02,80,0,148,49 129 | 2022-08-27T04:52:07,80,0,148,49 130 | 2022-08-27T05:01:13,80,0,148,49 131 | 2022-08-27T05:10:20,82,0,146,49 132 | 2022-08-27T05:19:48,83,0,145,49 133 | 2022-08-27T05:28:56,83,0,145,49 134 | 2022-08-27T05:38:04,83,0,145,49 135 | 2022-08-27T05:47:11,83,0,145,49 136 | 2022-08-27T05:56:18,83,0,145,49 137 | ... (omitted for brevity, but you get the point) 138 | ``` 139 | 140 |
141 | 142 | ## CSV Quality 143 | Although I try my best to gather data as accurately as possible, there are still some flaws with the way I'm collecting the data, mainly due to the limitations I have to deal with while working with WebReg. Please keep the following in mind (_especially_ the last point). 144 | 145 | ### Timing 146 | All data in the CSV files are **not** guaranteed to be gathered consistently. For example, it might take $x$ minutes to cycle through all courses today, but $x + 0.75$ minutes to cycle through all courses in two weeks. This means it's possible that, for any two consecutive data points for the same course, the time that it took to collect those data points may differ. 147 | 148 | If you don't care too much about consistency, then this is nothing to be worried about. However, if this is something of concern, one thing you can do is simply pick specific data points to use for each day (e.g., one data point for each quarter of the day). 149 | 150 | ### Cut-Off Courses 151 | It's possible that the raw CSV files may leave some sections for a course out (if it occurs, this will always occur at the end of the **raw** CSV files). For example, if a course has 20 sections, it's possible that some raw CSV files may **end** with only (for example) 15 sections from a cycle. This is a bug that should be resolved starting with the Fall 2022 datasets. 152 | 153 | ### Data Loss 154 | **There may be time periods where no data is available; this is usually due to an issue with WebReg and/or my login script.** 155 | 156 | 157 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Project Banner 3 |

4 | 5 |

6 | webweg | 7 | webreg_scraper | 8 | UCSDHistEnrollmentData 9 |

10 | 11 | A repository that 12 | - branches out to multiple children repositories containing enrollment data for multiple terms at UC San Diego. 13 | - contains some other other UCSD-related [data files](https://github.com/ewang2002/UCSDHistEnrollData/tree/master/data) that may be helpful. 14 | 15 | ## Table of Contents 16 | - [Table of Contents](#table-of-contents) 17 | - [Data](#data) 18 | - [Full Data](#full-data) 19 | - [Incomplete & Limited Data](#incomplete--limited-data) 20 | - [Documentation](#documentation) 21 | - [Third-Party Projects](#third-party-projects) 22 | - [Contacting Us](#contacting-us) 23 | - [License](#license) 24 | 25 | 26 | ## Data 27 | > [!TIP] 28 | > If you just want to see some third-party projects that are using the data that we collect, see the [Third-Party Projects](#third-party-projects) section at the bottom. 29 | 30 | You can find historical enrollment data linked below. Documentation can be found further below. To see the other UCSD-related data files, go to the [`data`](https://github.com/ewang2002/UCSDHistEnrollData/tree/master/data) folder. 31 | 32 | > [!NOTE] 33 | > This repository contains a number of random scripts to help me clean up and process the enrollment data, documentation regarding how the CSV files are structured, and links to the sibling repositories. **Each child repository** contains CSV files which contains information regarding the number of seats available at some time for certain classes. There are also some scripts designed to help clean and analyze the data. Additionally, there are pre-generated plots of each course that is being tracked. 34 | 35 | ### Full Data 36 | Starting with FA22, 37 | - enrollment and drop data are integrated into one term folder. 38 | - graduate courses from specific departments will be collected[^1]. 39 | - all undergraduate courses will be collected. 40 | 41 | | Term | Information | Data Collected | Link | 42 | | ---- | ----------- | -------------- | ---- | 43 | | FA22 | Fall 2022 Enrollment & Drop Data (Undergraduate Only) | All undergraduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2022Fall) | 44 | | FA22G | Fall 2022 Enrollment & Drop Data (Graduate Only) | CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2022FallGrad) | 45 | | WI23 | Winter 2023 Enrollment & Drop Data (Undergraduate Only) | All undergraduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2023Winter) | 46 | | WI23G | Winter 2023 Enrollment & Drop Data (Graduate Only) | CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2023WinterGrad) | 47 | | SP23 | Spring 2023 Enrollment & Drop Data | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2023Spring) | 48 | | FA23 | Fall 2023 Enrollment | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2023Fall) | 49 | | WI24 | Winter 2024 Enrollment & Drop Data | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2024Winter) | 50 | | SP24 | Spring 2024 Enrollment & Drop Data | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2024Spring) | 51 | | S124 | Summer I 2024 Enrollment & Drop Data | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2024Summer1) | 52 | | S224 | Summer II 2024 Enrollment & Drop Data | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2024Summer2) | 53 | | S324 | Special Summer 2024 Enrollment & Drop Data | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2024Summer3) | 54 | | FA24 | Fall 2024 Enrollment & Drop Data | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2024Fall) | 55 | | WI25 | Winter 2025 Enrollment & Drop Data | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2025Winter) | 56 | | SP25 | Spring 2025 Enrollment & Drop Data | All undergraduate courses & CSE, COGS, MATH, ECE graduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2025Spring) | 57 | 58 | ### Incomplete & Limited Data 59 | 60 |
61 | Incomplete Data 62 |
63 | 64 | Below, you can find incomplete data. Incomplete data is defined as data with a significant number of missing datapoints (essentially rendering them significantly less valuable than regular datasets). 65 | 66 | | Term | Information | Data Collected | Link | 67 | | ---- | ----------- | -------------- | ---- | 68 | | S123 | Summer I 2023 Raw Data | All undergraduate courses (raw data only, see repository for more info) | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2023Summer1) | 69 | | S223 | Summer II 2023 Raw Data | All undergraduate courses (raw data only, see repository for more info) | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2023Summer2) | 70 | 71 |
72 | 73 |
74 | Limited Data (Prior to FA22) 75 |
76 | 77 | The following repositories only contain _limited_ data, and were intended to be long-term test runs to see if the project was feasible. Note that Spring 2022 enrollment data is formatted differently from the data found in other data repositories. 78 | 79 | | Term | Information | Data Collected | Link | 80 | | ---- | ----------- | -------------- | ---- | 81 | | SP22 | Spring 2022 Enrollment Data | CSE, COGS, MATH, ECE undergraduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2022Spring) | 82 | | SP22D | Spring 2022 Drop Data | CSE, COGS, MATH, ECE undergraduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2022SpringDrop) | 83 | | S122 | Summer I 2022 Enrollment Data | CSE, COGS, MATH, ECE undergraduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2022Summer1) | 84 | | S122D | Summer I 2022 Drop Data | CSE, COGS, MATH, ECE undergraduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2022Summer1Drop) | 85 | | S222 | Summer II 2022 Enrollment Data | CSE, COGS, MATH, ECE undergraduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2022Summer2) | 86 | | S222D | Summer II 2022 Drop Data | CSE, COGS, MATH, ECE undergraduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2022Summer2Drop) | 87 | | S322 | Summer III 2022 Data | CSE, COGS, MATH, ECE undergraduate courses | [Here](https://github.com/UCSD-Historical-Enrollment-Data/2022Summer3) | 88 | 89 |
90 | 91 | ## Documentation 92 | Below, you can find some documentation to get you started. 93 | - [Background and Acknowledgements](https://github.com/ewang2002/UCSDHistEnrollData/blob/master/docs/background.md) 94 | - [CSV Information and Structure](https://github.com/ewang2002/UCSDHistEnrollData/blob/master/docs/csv_info.md) 95 | - [Data Repository Information and Structure](https://github.com/ewang2002/UCSDHistEnrollData/blob/master/docs/data_repo_info.md) 96 | - [Scripts](https://github.com/ewang2002/UCSDHistEnrollData/blob/master/docs/scripts.md) 97 | - [Setup](https://github.com/ewang2002/UCSDHistEnrollData/blob/master/docs/setup.md) 98 | 99 | 100 | ## Third-Party Projects 101 | Below are a list of **third-party websites** using our data in some way. 102 | 103 | | Website | Features | 104 | | ------- | -------- | 105 | | [UC San Diego Course Registration Trend](https://www.ucsdregistration.com/) | A website that can display enrollment trends of multiple courses across different terms in one graph. See this [Reddit post](https://www.reddit.com/r/UCSD/comments/1gjuo36/i_made_a_website_to_help_make_course_registration/) for a synopsis of this website. | 106 | | [TritonSEA](http://triton-sea.com/) | A website designed to simplify your planning and help you make informed decisions, all in one place, including features like importing your degree audit and getting personalized class recommendations, viewing stats and enrollment information for clases in previous quarters, and more. See this [Reddit post](https://www.reddit.com/r/UCSD/comments/1io9qqa/enrollment_made_easier_tritonsea_spring_2025/) for a synopsis of this website. | 107 | 108 | Keep in mind that the maintainers of this project (`UCSDHistEnrollData`, and any other repositories under the `UCSD-Historical-Enrollment-Data` organization) do not necessarily endorse these third-party projects. However, we believe they may be more useful for the _general public_ than the raw data that we store in this organization. 109 | 110 | ## Contacting Us 111 | There are two ways you can contact the project maintainers. 112 | - Any general questions or comments about the project can be directed to [the discussion tab](https://github.com/orgs/UCSD-Historical-Enrollment-Data/discussions). 113 | - To contact the maintainers directly, you may reach out to: 114 | 115 | | Name | Contact Email | 116 | | --------------------- | ---------------------------- | 117 | | Ryan Batubara | rbatubara at UCSD's domain | 118 | | Edward Wang | ewang20027 at gmail's domain | 119 | 120 | It is recommended that you email Ryan directly and CC Edward. 121 | 122 | ## License 123 | **All files here and in the data repositories are licensed under the MIT license.** If you'd like an explicit LICENSE file in the data repositories, please let me[^2] know. 124 | 125 | You're free to use this data for your own projects, but please be sure to cite this [repository](https://github.com/UCSD-Historical-Enrollment-Data/UCSDHistEnrollData/) when using data found here so other people can use the data for their own projects. 126 | 127 | As an aside, you do _not_ need to contact us if you plan on using the data that we collect, although we do love hearing how people are using our data! 128 | 129 | [^1]: Graduate courses are not formally supported. Once I stop collecting undergraduate course enrollment data, I will also stop collecting graduate course enrollment data, which means some data (e.g., drop with W deadline) will not be collected. 130 | 131 | [^2]: Edward is bad. 132 | -------------------------------------------------------------------------------- /data/schedules/S323.tsv: -------------------------------------------------------------------------------- 1 | subj_course_id sec_code sec_id instructor total_seats meetings 2 | AESE 279B A00 195082 Wade, Jon P 17 IN,TuWThF,9:00 - 18:00, 3 | AIP 97 001 287439 Reuther, Keefe 9999 IT,N/A,0:00 - 0:00,TBA TBA 4 | AIP 197 001 258067 McKay, Mary A 9999 IT,N/A,0:00 - 0:00,TBA TBA 5 | AIP 197 002 267187 Jin, Haojian 9999 IT,N/A,0:00 - 0:00,TBA TBA 6 | AIP 197 003 270040 Trott, Sean Thomas 9999 IT,N/A,0:00 - 0:00,TBA TBA 7 | AIP 197 004 277176 Candido, Maria Teresa 9999 IT,N/A,0:00 - 0:00,TBA TBA 8 | AIP 197 005 277177 Dunn, Louis Jean 9999 IT,N/A,0:00 - 0:00,TBA TBA 9 | AIP 197 006 279696 Liu, Ping 9999 IT,N/A,0:00 - 0:00,TBA TBA 10 | AIP 197 007 279698 Lipomi, Darren John 9999 IT,N/A,0:00 - 0:00,TBA TBA 11 | AIP 197 008 279702 Griswold, William G. 9999 IT,N/A,0:00 - 0:00,TBA TBA 12 | AIP 197 009 279703 Gumm, Elizabeth Ashley 9999 IT,N/A,0:00 - 0:00,TBA TBA 13 | AIP 197 010 279704 Miyao, Daisuke 9999 IT,N/A,0:00 - 0:00,TBA TBA 14 | AIP 197 011 279705 Rondina, Giacomo 9999 IT,N/A,0:00 - 0:00,TBA TBA 15 | AIP 197 012 279707 Nomura, Keiko K. 9999 IT,N/A,0:00 - 0:00,TBA TBA 16 | AIP 197 013 279708 Burgasser, Adam Jonathan 9999 IT,N/A,0:00 - 0:00,TBA TBA 17 | AIP 197 014 287438 Karmarkar, Uma R 9999 IT,N/A,0:00 - 0:00,TBA TBA 18 | AIP 197 015 287459 Wixted, John T 9999 IT,N/A,0:00 - 0:00,TBA TBA 19 | AIP 197 016 287460 Houskeeper, Robert 9999 IT,N/A,0:00 - 0:00,TBA TBA 20 | AIP 197 017 287692 Rabin, Adrienn Borsika 9999 IT,N/A,0:00 - 0:00,TBA TBA 21 | AIP 197 018 287797 Wieland, Johannes Friedrich 9999 IT,N/A,0:00 - 0:00,TBA TBA 22 | AIP 197 019 288346 Dahl, Gordon B. 9999 IT,N/A,0:00 - 0:00,TBA TBA 23 | AIP 197 020 288347 Yang, Liang 9999 IT,N/A,0:00 - 0:00,TBA TBA 24 | BENG 196 001 279714 Engler, Adam J. 9999 IN,N/A,0:00 - 0:00,TBA TBA 25 | BENG 295 001 279717 Watson, John Thomas 9999 IN,N/A,0:00 - 0:00,TBA TBA 26 | BISP 197 001 258086 Wilhelm, James E. 9999 IN,N/A,0:00 - 0:00,TBA TBA 27 | BISP 197 002 288341 Mesarwi, Omar Abdul-Wahab 9999 IN,N/A,0:00 - 0:00,TBA TBA 28 | BISP 199 001 262794 Kipps, Thomas J 9999 IN,N/A,0:00 - 0:00,TBA TBA 29 | BISP 199 002 281051 Chalasani, Sreekanth 9999 IN,N/A,0:00 - 0:00,TBA TBA 30 | BISP 199 003 285665 Staff 9999 IN,N/A,0:00 - 0:00,TBA TBA 31 | CAT 124RS A01 204727 Geibel, William 22 SE,N/A,0:00 - 0:00,TBA TBA|PR,N/A,0:00 - 0:00,TBA TBA 32 | CAT 125RS A01 204730 Geibel, William 22 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 33 | CLRE 250R A01 196490 Graves, Jennifer Sharon Ol 9999 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 34 | CLRE 251 A00 196491 Mehta, Ravindra L. 9999 LE,Th,16:00 - 17:00,RCLAS R17|SE,Th,17:00 - 18:00,RCLAS R11|FI,2023-09-14,15:00 - 17:59,RCLAS R17 35 | CLRE 252 A00 196493 Cuomo, Raphael Eduardo 9999 LE,Th,14:00 - 15:00,RCLAS R19|SE,Th,15:00 - 16:00,RCLAS R20|FI,2023-09-14,15:00 - 17:59,RCLAS R19 36 | CLRE 253 A00 196515 Vaida, Florin 9999 LE,W,14:00 - 15:00, |SE,W,15:00 - 16:00, |FI,2023-09-13,15:00 - 17:59, 37 | CLRE 253 B00 196517 Vaida, Florin 9999 LE,W,16:00 - 17:00, |SE,W,17:00 - 18:00, |FI,2023-09-13,15:00 - 17:59, 38 | CLRE 259 A00 196549 Patel, Hemal 9999 LE,Tu,16:00 - 17:00,RCLAS R17|SE,Tu,17:00 - 18:00,RCLAS R11 39 | CLRE 260 A00 196551 Cuomo, Raphael Eduardo 9999 SE,N/A,0:00 - 0:00,TBA TBA 40 | CLRE 260 B00 269900 Cuomo, Raphael Eduardo 9999 SE,N/A,0:00 - 0:00,TBA TBA 41 | CLRE 297 001 196991 Cuomo, Raphael Eduardo 9999 IN,N/A,0:00 - 0:00,TBA TBA 42 | CLRE 298 001 196992 Cuomo, Raphael Eduardo 9999 IN,N/A,0:00 - 0:00,TBA TBA 43 | COGS 197 001 260268 Dow, Steven P 9999 IT,N/A,0:00 - 0:00,TBA TBA 44 | COGS 197 002 273540 Hoffman, Drew Ellen 9999 IT,N/A,0:00 - 0:00,TBA TBA 45 | CSE 191 A00 195096 Staff 9999 SE,N/A,0:00 - 0:00,TBA TBA 46 | CSE 197 001 195097 Minnes Kemp, Mor Mia 9999 IN,N/A,0:00 - 0:00,TBA TBA 47 | CSS 201S A01 259918 Staff 19 LE,MTuWThF,13:00 - 14:20,APM 4301|FI,2023-09-09,15:00 - 17:59,APM 4301|DI,MTuWThF,14:30 - 15:50,APM 4301 48 | CSS 202S A01 259916 Staff 19 LE,MTuWThF,9:00 - 10:20,APM 4301|FI,2023-09-09,8:00 - 10:59,APM 4301|DI,MTuWThF,10:30 - 11:50,APM 4301 49 | DSC 197 001 269920 Eldridge, Justin Matthew 9999 IT,N/A,0:00 - 0:00,TBA TBA 50 | DSC 299 001 288319 Mishne, Gal 9999 IN,N/A,0:00 - 0:00,TBA TBA 51 | DSC 299 002 288322 Salimi, Babak 9999 IN,N/A,0:00 - 0:00,TBA TBA 52 | EAP 100 A00 204991 Staff 9999 SA,N/A,0:00 - 0:00,TBA TBA 53 | ECE 45 A01 195101 Staff 75 LE,MW,15:30 - 16:50,RWAC 0121|FI,2023-09-09,15:00 - 17:59,RWAC 0121|DI,F,14:00 - 15:50,RWAC 0121 54 | ECE 111 A01 195127 Staff 60 LE,MW,17:00 - 18:20,PETER 102|FI,2023-09-08,19:00 - 21:59,PETER 102|DI,M,16:00 - 16:50,PETER 102 55 | ECE 191 A00 209161 Staff 20 LE,M,18:30 - 21:20,EBU1 2315|FI,2023-09-08,19:00 - 21:59,EBU1 2315 56 | ECE 197 001 256140 Sievenpiper, Daniel F. 9999 IT,N/A,0:00 - 0:00,TBA TBA 57 | ECE 298 001 259097 Sievenpiper, Daniel F. 9999 IN,N/A,0:00 - 0:00,TBA TBA 58 | ECE 299 001 260785 Wang, Edward Jay 9999 IN,N/A,0:00 - 0:00,TBA TBA 59 | ECE 299 002 270053 Cauwenberghs, Gert 9999 IN,N/A,0:00 - 0:00,TBA TBA 60 | ECE 299 003 277587 Dayeh, Shadi Ahmad 9999 IN,N/A,0:00 - 0:00,TBA TBA 61 | ECE 299 004 277588 Xie, Pengtao 9999 IN,N/A,0:00 - 0:00,TBA TBA 62 | ECON 199 001 259242 Toda, Alexis Akira 9999 IN,N/A,0:00 - 0:00,TBA TBA 63 | EDS 115 A00 202072 Jones, Gabrielle Anastasia 30 LE,MW,14:00 - 16:50,RCLAS R104 64 | EDS 117 A01 202089 Staff 47 LE,TuTh,17:00 - 19:50,RCLAS R102|DI,N/A,0:00 - 0:00,TBA TBA 65 | EDS 125 A00 202096 Staff 30 LE,MW,14:00 - 16:50,CENTR 203|FI,2023-07-21,15:00 - 17:59,CENTR 203 66 | EDS 128A A01 202107 Fargason, Sharon Gayle 30 LE,TuTh,14:00 - 15:50,RWAC 0622|DI,TuTh,16:00 - 16:50,RWAC 0416 67 | EDS 128B A01 202129 Pappas, Elizabeth 30 LE,TuTh,14:00 - 15:50,RWAC 0622|DI,TuTh,16:00 - 16:50,RWAC 0416 68 | EDS 139 A00 202130 Staff 30 PR,N/A,0:00 - 0:00,TBA TBA 69 | EDS 139 B00 202131 Staff 30 PR,N/A,0:00 - 0:00,TBA TBA 70 | EDS 201 A00 202147 Staff 40 SE,MWF,9:00 - 11:50,RWAC 0622 71 | EDS 203 A01 202156 Halter, Christopher P. 40 SE,TuTh,9:00 - 13:00,RWAC 0521|LA,N/A,0:00 - 0:00,TBA TBA 72 | EDS 204R A01 202163 Staff 30 SE,MW,9:00 - 11:50,RCLAS R105|LA,N/A,0:00 - 0:00,TBA TBA 73 | EDS 204R B01 202165 Staff 30 SE,MW,13:00 - 15:50,RCLAS R101|LA,N/A,0:00 - 0:00,TBA TBA 74 | EDS 206R A00 202166 Scharton, Susan Michelle 30 SE,TuTh,9:00 - 11:50,RCLAS R103 75 | EDS 206R B00 202167 Scharton, Susan Michelle 30 SE,TuTh,9:00 - 11:50,RCLAS R104 76 | EDS 250 A00 202168 Chung, Luz Marina 40 SE,MWF,13:00 - 15:50,RWAC 0622 77 | EDS 281 A00 202169 Daly, Alan J. 18 SE,N/A,0:00 - 0:00,TBA TBA 78 | EDS 284 A00 202170 Daly, Alan J. 18 SE,N/A,0:00 - 0:00,TBA TBA 79 | EDS 286 A00 202171 Staff 18 SE,Sa,9:00 - 16:00, 80 | EDS 289C A01 202173 Daly, Alan J. 18 SE,Sa,9:00 - 16:00, |PR,N/A,0:00 - 0:00,TBA TBA 81 | EDS 290 A00 202136 Staff 30 PR,N/A,0:00 - 0:00,TBA TBA 82 | EDS 290 B00 202140 Staff 18 PR,W,18:00 - 21:00,RWAC 0622 83 | EDS 295 A00 258917 Jones, Gabrielle Anastasia 0 IN,N/A,0:00 - 0:00,TBA TBA 84 | EDS 299 001 202174 Staff 18 IN,N/A,0:00 - 0:00,TBA TBA 85 | EDS 299 002 202175 Staff 18 IN,N/A,0:00 - 0:00,TBA TBA 86 | EDS 372 A50 202178 Chung, Luz Marina 15 LE,TuTh,13:00 - 17:00,RWAC 0519|LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 87 | EDS 373 A50 202181 Black, Alison Michelle 20 LE,MW,9:00 - 13:20,RWAC 0416|LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 88 | EDS 374 A50 202184 Heinzman, Erica M. 20 LE,MW,9:00 - 13:20,RWAC 0521|LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 89 | EDS 375 A50 202188 Millstone, Rachel Diana 20 LE,MW,9:00 - 13:20,RWAC 0622|LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 90 | EDS 376 A00 202189 Millstone, Rachel Diana 60 SE,TuTh,9:00 - 13:20,RWAC 0622|FI,2023-08-12,8:00 - 10:59,RWAC 0622 91 | EDS 385 A00 202197 Choi, Bailey Miyeon 15 LE,MWF,17:00 - 20:00,RWAC 0416 92 | FMPH 496B A00 261360 Nguyen-Grozavu, France T. 0 FW,W,10:00 - 10:50, 93 | FPM 297 001 279027 Vaida, Florin 9999 IN,N/A,0:00 - 0:00,TBA TBA 94 | LHCO 218 A00 195128 Kaplan, Robert H. 9999 SE,N/A,0:00 - 0:00,TBA TBA 95 | LHCO 298 A00 195129 Kaplan, Robert H. 9999 PR,N/A,0:00 - 0:00,TBA TBA 96 | LISP 5A A00 195134 Staff 30 LE,MTuWThF,9:00 - 12:20,RCLAS R22|FI,2023-07-22,8:00 - 10:59,RCLAS R22|LA,N/A,0:00 - 0:00,TBA TBA 97 | LISP 5B A00 195178 Staff 30 LE,MTuWThF,9:00 - 12:20,RCLAS R26|FI,2023-08-12,8:00 - 10:59,RCLAS R26|LA,N/A,0:00 - 0:00,TBA TBA 98 | LISP 5C A00 195183 Staff 30 LE,MTuWThF,9:00 - 12:20,RCLAS R26|FI,2023-09-02,8:00 - 10:59,RCLAS R26|LA,N/A,0:00 - 0:00,TBA TBA 99 | MAE 197 001 278996 Lubarda, Marko 9999 IT,N/A,0:00 - 0:00,TBA TBA 100 | MAE 197 002 279003 Delson, Nathan Joseph 9999 IT,N/A,0:00 - 0:00,TBA TBA 101 | MAE 299 001 279720 Poulikakos, Lisa Voula 9999 IN,N/A,0:00 - 0:00,TBA TBA 102 | MATH 197 001 256139 Zhang, Danna 9999 IT,N/A,0:00 - 0:00,TBA TBA 103 | MATH 197 002 256149 Zhang, Danna 9999 IT,N/A,0:00 - 0:00,TBA TBA 104 | MATH 197 003 256707 McAuley, Julian John 9999 IT,N/A,0:00 - 0:00,TBA TBA 105 | MATH 197 004 259354 Kedlaya, Kiran S. 9999 IT,N/A,0:00 - 0:00,TBA TBA 106 | MATH 197 005 285635 Toda, Alexis Akira 9999 IT,N/A,0:00 - 0:00,TBA TBA 107 | MATH 197 006 287693 Chin, Bryan W. 9999 IT,N/A,0:00 - 0:00,TBA TBA 108 | MCWP 40R A00 195777 Staff 20 TU,MW,9:00 - 11:00,RCLAS R27 109 | MCWP 40R B00 195806 Staff 20 TU,TuTh,11:00 - 13:00,RCLAS R27 110 | MCWP 40R C00 282556 Staff 20 TU,TuTh,9:00 - 11:00,RCLAS R39 111 | MCWP 50R A00 195812 Miller, Elizabeth Deen 20 SE,MW,14:00 - 16:00,RCLAS R18 112 | MCWP 50R B00 195813 Staff 20 SE,MW,11:00 - 13:00,RCLAS R28 113 | MCWP 50R C00 195814 Carter, Andrea L 20 SE,TuTh,8:00 - 10:00,RCLAS R18 114 | MCWP 50R D00 195815 Carter, Jennifer A 20 SE,MW,8:00 - 10:00,RCLAS R20 115 | MCWP 50R E00 195816 Smith, Haydee Marie 20 SE,MW,11:00 - 13:00,RCLAS R29 116 | MCWP 50R F00 195817 Bryan, Kathleen R 20 SE,TuTh,11:00 - 13:00,RCLAS R28 117 | MCWP 50R G00 195818 Pham, Vincent Minhduc 20 SE,MW,14:00 - 16:00,RCLAS R19 118 | MCWP 50R H00 256329 Forrest, Amy Burton 20 SE,TuTh,11:00 - 13:00,RCLAS R65 119 | MGT 199 A00 269792 Wilbur, Kenneth C 9999 IN,N/A,0:00 - 0:00,TBA TBA 120 | MGT 409 A00 197066 Campbell, Elizabeth L 98 LE,Th,18:30 - 21:20,OTRSN 1E106|FI,2023-09-09,19:00 - 21:59,OTRSN 1E106 121 | MGT 410 A00 197083 Staff 98 LE,Tu,18:30 - 21:20,OTRSN 1E106|FI,2023-09-08,19:00 - 21:59,OTRSN 1E106 122 | MGT 417 A00 197094 Parme, Michael Cullen 60 LE,,8:00 - 11:00,OTRSN 3E107|LE,Sa,14:30 - 17:30,OTRSN 3E107 123 | MGT 421 A00 197131 Berthelot, Michael 50 LE,Th,18:30 - 21:20,OTRSN 4E106|FI,2023-09-09,19:00 - 21:59,OTRSN 4E106 124 | MGT 446 A00 197155 Kim, Byung Cho 0 LE,Sa,14:30 - 18:30,RCLAS R35 125 | MGT 489 A00 197650 Yorkston, Eric A 60 LE,Tu,18:30 - 21:20,OTRSN 4E106|FI,2023-09-08,19:00 - 21:59,OTRSN 4E106 126 | MGT 489 B00 197652 Yorkston, Eric A 60 LE,Sa,8:00 - 14:00,OTRSN 1E106 127 | MGT 497 A00 197653 Nijs, Vincent R. 0 LE,N/A,0:00 - 0:00,TBA TBA 128 | MGTA 444 A00 197534 Coggeshall, Stephen Vance 50 LE,Sa,10:00 - 12:30, |LE,W,18:00 - 20:30,OTRSN 4E106 129 | MGTA 495 A00 197654 Perols, Johan Lars 60 LE,Sa,8:00 - 12:00,OTRSN 4E106 130 | MGTF 490 A00 197535 Melvin, Michael T. 98 LE,Th,9:00 - 12:00,WFH 4N128 131 | MMW 12 A01 195470 Adamiak, Patrick John 15 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 132 | MMW 12 A02 195484 Adamiak, Patrick John 15 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 133 | MMW 13 A01 195593 Wood, Lauren Elizabeth 15 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 134 | MMW 13 A02 195689 Wood, Lauren Elizabeth 15 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 135 | SIO 295LS A00 261359 Staff 30 LA,MTuWThF,13:00 - 15:50,MCTF 210|FI,2023-09-09,15:00 - 17:59,MCTF 210 136 | SIO 295S A00 261358 Staff 30 SE,MTuWThF,9:00 - 11:50,MCTF 210|FI,2023-09-09,8:00 - 10:59,MCTF 210 137 | SIO 299 001 261378 Rouse, Gregory W. 9999 IN,N/A,0:00 - 0:00,TBA TBA 138 | SIOC 290S A01 269785 Staff 25 LE,MTuWThF,10:00 - 10:50,HUBBS 4500|FI,2023-09-09,11:30 - 14:29,HUBBS 4500|PR,N/A,0:00 - 0:00,TBA TBA|DI,MTuWThF,11:00 - 11:50,HUBBS 4500 139 | SIOC 291S A01 269789 Staff 25 LE,MTuWThF,13:00 - 13:50,HUBBS 4500|SE,MTuWThF,15:00 - 15:50,HUBBS 4500|FI,2023-09-09,15:00 - 17:59,HUBBS 4500|FW,N/A,0:00 - 0:00,TBA TBA|DI,MTuWThF,14:00 - 14:50,HUBBS 4500 140 | SOCI 117 A01 202078 Staff 0 LE,TuTh,17:00 - 19:50,RCLAS R102|DI,N/A,0:00 - 0:00,TBA TBA 141 | SOMI 220 A00 253892 Schneid, Stephen David 50 LE,MTuWThF,8:00 - 12:00,RCLAS R75|DI,N/A,0:00 - 0:00,TBA TBA 142 | WES 237B A00 196484 Pannuto, Patrick William 20 LE,Sa,9:00 - 16:30, 143 | -------------------------------------------------------------------------------- /data/schedules/S325.tsv: -------------------------------------------------------------------------------- 1 | subj_course_id sec_code sec_id instructor total_seats meetings 2 | AESE 279B A00 891859 Staff 35 IN,N/A,0:00 - 0:00,TBA TBA 3 | AIP 197 001 891854 Vespa, Emanuel Ignacio 9999 IT,N/A,0:00 - 0:00,TBA TBA 4 | AIP 197 002 963102 Jaroszewicz, Ania 9999 IT,N/A,0:00 - 0:00,TBA TBA 5 | AIP 197 003 968075 Dunn, Louis Jean 9999 IT,N/A,0:00 - 0:00,TBA TBA 6 | AIP 197 004 969272 Root, Cory Matthew 9999 IT,N/A,0:00 - 0:00,TBA TBA 7 | AIP 197 005 969804 Brydges, Stacey 9999 IT,N/A,0:00 - 0:00,TBA TBA 8 | AIP 197 006 970672 Reher, Michael Christopher 9999 IT,N/A,0:00 - 0:00,TBA TBA 9 | ANTH 289S A00 891856 Gagneux, Pascal 12 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA|PR,N/A,0:00 - 0:00,TBA TBA 10 | BENG 196 001 957946 Engler, Adam J. 9999 IN,N/A,0:00 - 0:00,TBA TBA 11 | BENG 299 001 958740 Sah, Robert Lie-Yuan 9999 IN,N/A,0:00 - 0:00,TBA TBA 12 | BISP 197 001 959851 Wilhelm, James E. 9999 IN,N/A,0:00 - 0:00,TBA TBA 13 | BISP 199 001 958772 Shurin, Jonathan 9999 IN,N/A,0:00 - 0:00,TBA TBA 14 | BISP 199 002 968078 Meyer, Justin Raymond 9999 IN,N/A,0:00 - 0:00,TBA TBA 15 | CAT 124RS A01 956906 Staff 25 SE,N/A,0:00 - 0:00,TBA TBA|PR,N/A,0:00 - 0:00,TBA TBA 16 | CAT 125RS A01 922013 Staff 25 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 17 | CLRE 250 A00 891860 Morris, Sheldon 9999 LE,Th,16:00 - 16:50, |SE,Th,17:00 - 18:00, 18 | CLRE 251R A00 907817 Mehta, Ravindra L. 9999 LE,W,16:00 - 16:50, |SE,W,17:00 - 18:00, |FI,2025-09-10,16:00 - 18:00, 19 | CLRE 252 A00 891864 Cuomo, Raphael Eduardo 9999 LE,Tu,14:00 - 16:00, |FI,2025-09-09,14:00 - 16:00, 20 | CLRE 253 A00 891867 Vaida, Florin 9999 LE,Th,14:00 - 16:00, |FI,2025-09-11,14:00 - 16:00, 21 | CLRE 253 B00 907819 Staff 9999 LE,Th,16:00 - 18:00, |FI,2025-09-11,16:00 - 18:00, 22 | CLRE 259 A00 891868 Patel, Hemal 9999 LE,Tu,16:00 - 17:00, |SE,Tu,17:00 - 18:00, 23 | CLRE 260 A00 891872 Cuomo, Raphael Eduardo 9999 SE,N/A,0:00 - 0:00,TBA TBA 24 | CLRE 297 001 891888 Cuomo, Raphael Eduardo 9999 IN,N/A,0:00 - 0:00,TBA TBA 25 | COGS 197 001 969805 Kirsh, David Joel 9999 IT,N/A,0:00 - 0:00,TBA TBA 26 | COGS 199 001 961213 Barrera, Steven James 9999 IN,N/A,0:00 - 0:00,TBA TBA 27 | COGS 199 002 964373 Ellis, Shannon Elizabeth 9999 IN,N/A,0:00 - 0:00,TBA TBA 28 | CSE 191 A00 958773 Minnes Kemp, Mor Mia 9999 SE,N/A,0:00 - 0:00,TBA TBA 29 | CSE 197 001 959846 Minnes Kemp, Mor Mia 9999 IN,N/A,0:00 - 0:00,TBA TBA 30 | CSE 298 001 968046 Staff 9999 IN,N/A,0:00 - 0:00,TBA TBA 31 | CSS 201S A01 892054 Mignozzetti, Umberto 30 LE,MTuWThF,9:00 - 10:20,RWAC 0721|FI,2025-09-06,8:00 - 10:59,RWAC 0721|DI,MTuWThF,10:40 - 12:00,RWAC 0721 32 | CSS 202S A01 892056 Mignozzetti, Umberto 30 LE,MTuWThF,13:00 - 14:20,RWAC 0721|FI,2025-09-06,15:00 - 17:59,RWAC 0721|DI,MTuWThF,14:40 - 16:00,RWAC 0721 33 | DSC 197 001 956898 Eldridge, Justin Matthew 9999 IT,N/A,0:00 - 0:00,TBA TBA 34 | DSC 197 002 968076 Ustun, Tevfik Berk 9999 IT,N/A,0:00 - 0:00,TBA TBA 35 | DSC 297 001 958000 Mazumdar, Arya 9999 IT,N/A,0:00 - 0:00,TBA TBA 36 | DSC 297 002 959862 Wang, Yusu 9999 IT,N/A,0:00 - 0:00,TBA TBA 37 | DSC 297 003 961215 Mishne, Gal 9999 IT,N/A,0:00 - 0:00,TBA TBA 38 | EAP 100 A00 905686 Staff 9999 SA,N/A,0:00 - 0:00,TBA TBA 39 | ECE 45 A01 892618 Staff 104 LE,TuTh,15:30 - 16:50,FAH 1101|FI,2025-09-06,15:00 - 17:59,FAH 1101|PB,2025-07-11,16:00 - 16:50,CENTR 222|PB,2025-07-18,16:00 - 16:50,CENTR 222|PB,2025-07-25,16:00 - 16:50,CENTR 222|PB,2025-08-01,16:00 - 16:50,CENTR 222|PB,2025-08-08,16:00 - 16:50,CENTR 222|PB,2025-08-15,16:00 - 16:50,CENTR 222|PB,2025-08-22,16:00 - 16:50,CENTR 222|PB,2025-08-29,16:00 - 16:50,CENTR 222|PB,2025-09-05,16:00 - 16:50,CENTR 222|DI,F,15:00 - 15:50,FAH 1101 40 | ECE 111 A01 892719 Staff 65 LE,MW,17:00 - 18:20,CENTR 222|FI,2025-09-05,19:00 - 21:59,CENTR 222|DI,M,16:00 - 16:50,CENTR 222 41 | ECE 197 001 957920 Mercier, Patrick Philip 9999 IT,N/A,0:00 - 0:00,TBA TBA 42 | ECE 199 001 957973 Gudem, Prasad S.S. 9999 IN,N/A,0:00 - 0:00,TBA TBA 43 | ECE 199 002 960116 Le, Hanh-Phuc 9999 IN,N/A,0:00 - 0:00,TBA TBA 44 | ECE 199 003 963100 Yip, Michael 9999 IN,N/A,0:00 - 0:00,TBA TBA 45 | ECE 199 004 968080 Baghdadchi, Saharnaz 9999 IN,N/A,0:00 - 0:00,TBA TBA 46 | ECE 298 001 957922 Mercier, Patrick Philip 9999 IN,N/A,0:00 - 0:00,TBA TBA 47 | ECE 299 001 958909 Franceschetti, Massimo 9999 IN,N/A,0:00 - 0:00,TBA TBA 48 | ECE 299 002 959847 Xie, Pengtao 9999 IN,N/A,0:00 - 0:00,TBA TBA 49 | ECE 299 003 959848 Nguyen, Truong Quang 9999 IN,N/A,0:00 - 0:00,TBA TBA 50 | ECE 299 004 959849 Wang, Xiaolong 9999 IN,N/A,0:00 - 0:00,TBA TBA 51 | ECE 299 005 959850 Shi, Yuanyuan 9999 IN,N/A,0:00 - 0:00,TBA TBA 52 | ECE 299 006 959875 Koushanfar, Farinaz 9999 IN,N/A,0:00 - 0:00,TBA TBA 53 | ECE 299 007 968079 Dey, Sujit 9999 IN,N/A,0:00 - 0:00,TBA TBA 54 | ECON 178 A01 907814 Zhu, Ying 35 LE,MTuWThF,13:00 - 15:50,RCLAS R50|DI,MTuWThF,17:00 - 17:50,RCLAS R50 55 | EDS 115 A00 895312 Staff 45 LE,MW,14:00 - 16:50,SOLIS 110 56 | EDS 117 A01 895337 Staff 30 LE,TuTh,17:00 - 19:50,RCLAS R101|DI,N/A,0:00 - 0:00,TBA TBA 57 | EDS 125 A00 895341 Jones, Gabrielle Anastasia 45 LE,MW,14:00 - 16:50,RWAC 0103|FI,2025-07-18,15:00 - 17:59,RWAC 0103 58 | EDS 128A A01 895459 Fargason, Sharon Gayle 45 LE,TuTh,14:00 - 15:50,RWAC 0622|DI,TuTh,16:00 - 16:50,RWAC 0622 59 | EDS 128B A01 895543 Pappas, Elizabeth 45 LE,TuTh,14:00 - 15:50,RWAC 0103|DI,TuTh,16:00 - 16:50,RWAC 0103 60 | EDS 139 A00 897203 Pappas, Elizabeth 45 PR,N/A,0:00 - 0:00,TBA TBA 61 | EDS 139 B00 897209 Fargason, Sharon Gayle 45 PR,N/A,0:00 - 0:00,TBA TBA 62 | EDS 201 A00 895545 Staff 45 SE,MWF,9:00 - 11:50,RWAC 0622 63 | EDS 203 A01 895581 Halter, Christopher P. 45 SE,TuTh,9:00 - 13:00,RWAC 0521|LA,N/A,0:00 - 0:00,TBA TBA 64 | EDS 204R A01 895625 Heinzman, Erica M. 45 SE,N/A,0:00 - 0:00,TBA TBA|LA,N/A,0:00 - 0:00,TBA TBA 65 | EDS 204R B01 895693 Halter, Christopher P. 45 SE,N/A,0:00 - 0:00,TBA TBA|LA,N/A,0:00 - 0:00,TBA TBA 66 | EDS 206R A00 895694 Fargason, Sharon Gayle 30 SE,TuTh,9:00 - 11:50,RCLAS R53 67 | EDS 206R B00 895695 Choi, Bailey Miyeon 30 SE,TuTh,13:00 - 15:50,RCLAS R24 68 | EDS 250 A00 895697 Hemans, Patricia Ann Benitez 45 SE,MWF,13:00 - 15:50,RWAC 0622 69 | EDS 281 A00 895701 Meyerott, Theresa Ann 15 SE,F,18:00 - 21:00, 70 | EDS 284 A00 895736 Meyerott, Theresa Ann 15 SE,F,18:00 - 21:00, 71 | EDS 286 A00 897210 Fine, Sarah 15 SE,F,18:00 - 21:00, 72 | EDS 289C A01 895770 Daly, Alan J. 15 SE,Sa,9:00 - 16:00, |PR,N/A,0:00 - 0:00,TBA TBA 73 | EDS 290 A00 897211 Hofstetter, Carolyn 15 PR,W,18:00 - 21:00, 74 | EDS 299 001 959896 Hofstetter, Carolyn 10 IN,N/A,0:00 - 0:00,TBA TBA 75 | EDS 299 002 959897 Fine, Sarah 10 IN,N/A,0:00 - 0:00,TBA TBA 76 | EDS 373 A01 895779 Black, Alison Michelle 20 LE,MW,9:00 - 13:20,RWAC 0416|LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 77 | EDS 374 A50 895818 Heinzman, Erica M. 25 LE,MW,9:00 - 13:20,RWAC 0521|LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 78 | EDS 375 A50 896035 Millstone, Rachel Diana 25 LE,MW,9:00 - 13:20,RWAC 0622|LA,N/A,0:00 - 0:00,TBA TBA|SE,N/A,0:00 - 0:00,TBA TBA 79 | EDS 376 A00 896038 Millstone, Rachel Diana 45 SE,TuTh,9:00 - 13:20,RWAC 0622|FI,2025-08-09,8:00 - 10:59,RWAC 0622 80 | EDS 385 A00 896059 Choi, Bailey Miyeon 25 LE,MWF,14:00 - 16:50,RCLAS R24 81 | FMPH 496B A00 961309 McMenamin, Sara B 0 FW,N/A,0:00 - 0:00,TBA TBA 82 | FMPH 498 001 961354 El Kaffas, Ahmed 0 IN,N/A,0:00 - 0:00,TBA TBA 83 | LIGM 5A A00 896162 Fischer-Grunski, Eva K 20 LE,MTuWThF,9:00 - 12:20,RCLAS R70|FI,2025-07-19,8:00 - 10:59,RCLAS R70|LA,N/A,0:00 - 0:00,TBA TBA 84 | LIGM 5B A00 896260 Fischer-Grunski, Eva K 20 LE,MTuWThF,9:00 - 12:20,RCLAS R79|FI,2025-08-09,8:00 - 10:59,RCLAS R79|LA,N/A,0:00 - 0:00,TBA TBA 85 | LIGM 5C A00 896308 Fischer-Grunski, Eva K 20 LE,MTuWThF,9:00 - 12:20,RCLAS R52|FI,2025-08-30,8:00 - 10:59,RCLAS R52|LA,N/A,0:00 - 0:00,TBA TBA 86 | LIIT 5AS A00 896313 Carnelos, Chiara 20 LE,MTuWThF,9:00 - 12:20,RCLAS R67|FI,2025-07-19,8:00 - 10:59,RCLAS R67|LA,N/A,0:00 - 0:00,TBA TBA 87 | LIIT 5BS A00 896416 Carnelos, Chiara 20 LE,MTuWThF,9:00 - 12:20,RCLAS R78|FI,2025-08-09,8:00 - 10:59,RCLAS R78|LA,N/A,0:00 - 0:00,TBA TBA 88 | LIIT 5CS A00 896564 Carnelos, Chiara 20 LE,MTuWThF,9:00 - 12:20,RCLAS R79|FI,2025-08-30,8:00 - 10:59,RCLAS R79|LA,N/A,0:00 - 0:00,TBA TBA 89 | LISP 5A A00 896588 Munoz Sanchez, Alicia 20 LE,MTuWThF,9:00 - 12:20,RCLAS R80|FI,2025-07-19,8:00 - 10:59,RCLAS R80|LA,N/A,0:00 - 0:00,TBA TBA 90 | LISP 5B A00 896653 Munoz Sanchez, Alicia 20 LE,MTuWThF,9:00 - 12:20,RCLAS R81|FI,2025-08-09,8:00 - 10:59,RCLAS R81|LA,N/A,0:00 - 0:00,TBA TBA 91 | LISP 5C A00 896655 Munoz Sanchez, Alicia 20 LE,MTuWThF,9:00 - 12:20,RCLAS R82|FI,2025-08-30,8:00 - 10:59,RCLAS R82|LA,N/A,0:00 - 0:00,TBA TBA 92 | MAE 197 001 957918 Kleissl, Jan 9999 IT,N/A,0:00 - 0:00,TBA TBA 93 | MAE 197 002 959806 Boechler, Nicholas Sebastia 9999 IT,N/A,0:00 - 0:00,TBA TBA 94 | MAE 197 003 959852 Mullin, Jennifer S 9999 IT,N/A,0:00 - 0:00,TBA TBA 95 | MAE 197 004 969271 Friend, James Robert 9999 IT,N/A,0:00 - 0:00,TBA TBA 96 | MAE 197 005 969324 Bandaru, Prabhakar 9999 IT,N/A,0:00 - 0:00,TBA TBA 97 | MAE 299 001 957919 Morimoto, Tania 9999 IN,N/A,0:00 - 0:00,TBA TBA 98 | MATH 2 A01 957937 Staff 35 LE,TuTh,15:00 - 16:20,APM 2402|IN,N/A,0:00 - 0:00,TBA TBA 99 | MATH 197 001 957876 Kedlaya, Kiran S. 9999 IT,N/A,0:00 - 0:00,TBA TBA 100 | MATH 199 001 959890 Morzfeld, Matthias 9999 IN,N/A,0:00 - 0:00,TBA TBA 101 | MATH 199 002 959895 Arias-Castro, Ery 9999 IN,N/A,0:00 - 0:00,TBA TBA 102 | MATS 296 001 963095 Graeve, Olivia A 9999 IN,N/A,0:00 - 0:00,TBA TBA 103 | MCWP 40 A00 892729 Duru, Nur 20 TU,MW,11:00 - 12:50,HSS 2305A 104 | MCWP 40 B00 893304 Montejo, Carolina 20 TU,TuTh,9:00 - 10:50,RCLAS R32 105 | MCWP 40R A00 893757 Redela, Pamela Morgan 20 TU,TuTh,11:00 - 12:50,RCLAS R100 106 | MCWP 50 A00 893758 Morshed, Michael James 20 SE,TuTh,11:00 - 12:50,HSS 2305A 107 | MCWP 50 B00 893761 Bartulis, Jason Michael 0 SE,TuTh,12:00 - 13:50,HSS 2305B 108 | MCWP 50R A00 893766 Compas, Sean Matthew 20 SE,TuTh,11:00 - 12:50,RCLAS R57 109 | MCWP 50R B00 893769 Carter, Jennifer A 20 SE,TuTh,9:00 - 10:50,RCLAS R100 110 | MCWP 50R C00 893771 Krone, Jarret 20 SE,MW,9:00 - 10:50,RCLAS R100 111 | MCWP 50R D00 893772 Miller, Elizabeth Deen 20 SE,MW,11:00 - 12:50,RCLAS R100 112 | MCWP 50R E00 893775 Carter, Andrea L 20 SE,TuTh,14:00 - 15:50,RCLAS R50 113 | MGT 402 A00 907774 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 114 | MGT 402 B00 907775 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 115 | MGT 406 A00 907776 Oveis, Christopher S 0 LE,N/A,0:00 - 0:00,TBA TBA 116 | MGT 406 C00 960549 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 117 | MGT 417 A00 907745 Staff 60 LE,M,18:30 - 21:20,OTRSN 4E106|FI,2025-09-05,19:00 - 21:59, 118 | MGT 419 A00 907765 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 119 | MGT 421 A00 957857 Berthelot, Michael 98 LE,,8:00 - 17:00,OTRSN 1E107 120 | MGT 430 A00 921239 Staff 60 LE,Sa,8:00 - 17:00, 121 | MGT 439 A00 959805 Staff 30 LE,N/A,0:00 - 0:00,TBA TBA 122 | MGT 489 A00 907748 Staff 98 LE,Sa,8:00 - 12:00,OTRSN 1E106 123 | MGT 489 B00 907749 Staff 60 LE,Tu,18:30 - 21:20,OTRSN 4E106|FI,2025-09-05,18:30 - 21:30,OTRSN 4E106 124 | MGT 495 A00 921251 Warachka, Mitchell C 98 LE,,8:00 - 12:00,OTRSN 1E106 125 | MGT 497 A00 907750 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 126 | MGT 499 001 959878 Shin, Hyo Duk 9999 IN,N/A,0:00 - 0:00,TBA TBA 127 | MGTA 403 A00 907772 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 128 | MGTA 403 B00 907773 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 129 | MGTA 415 A00 907751 Staff 98 LE,Sa,13:00 - 17:00,OTRSN 1E107 130 | MGTA 444 A00 907762 Staff 60 LE,Sa,9:00 - 15:00,OTRSN 4E106|LE,W,18:00 - 21:00,OTRSN 4E106 131 | MGTA 451 A00 907770 Shin, Hyo Duk 0 SE,N/A,0:00 - 0:00,TBA TBA 132 | MGTA 451 B00 907771 Shin, Hyo Duk 0 SE,N/A,0:00 - 0:00,TBA TBA 133 | MGTA 464 A00 907752 Perols, Johan Lars 0 LE,MTh,9:00 - 12:00,OTRSN 1E107 134 | MGTA 464 B00 907753 Perols, Johan Lars 0 LE,MTh,13:00 - 16:00,OTRSN 1E107 135 | MGTA 464 C00 907754 Perols, Johan Lars 98 LE,Sa,8:00 - 12:00,OTRSN 1E107 136 | MGTF 490 A00 907756 Girand, Christopher C 98 LE,W,9:00 - 12:00,WFH 4N128 137 | MGTF 490 B00 907757 Staff 98 LE,W,13:00 - 16:00,WFH 4N128 138 | MMW 11R A01 892721 Herbst, Matthew 30 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 139 | MMW 12R A01 892724 Herbst, Matthew 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 140 | MMW 12R A02 892725 Herbst, Matthew 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 141 | MMW 12R A03 961132 Herbst, Matthew 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 142 | MMW 13R A01 892727 Staff 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 143 | MMW 13R A02 892728 Staff 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 144 | MMW 13R A03 958032 Staff 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 145 | MMW 13R A04 958033 Staff 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 146 | MMW 13R A05 958034 Staff 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 147 | MMW 13R A06 961207 Staff 16 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 148 | NEUG 299 001 915327 De Sa, Virginia 9999 IN,N/A,0:00 - 0:00,TBA TBA 149 | NEUG 299 002 957971 Benna, Marcus K 9999 IN,N/A,0:00 - 0:00,TBA TBA 150 | NEUG 299 003 958009 Serences, John Thomas 9999 IN,N/A,0:00 - 0:00,TBA TBA 151 | PHB 298 001 958905 Vaida, Florin 1 IN,N/A,0:00 - 0:00,TBA TBA 152 | PHYS 299 001 958025 Sharpee, Tatyana 9999 IN,N/A,0:00 - 0:00,TBA TBA 153 | PSYC 196B A01 969274 Staff 1 LE,N/A,0:00 - 0:00,TBA TBA|LA,N/A,0:00 - 0:00,TBA TBA 154 | SIO 295LS A00 894015 Staff 25 LA,MTuWThF,13:00 - 16:00,MCTF 210|FI,2025-09-06,15:00 - 17:59,MCTF 210 155 | SIO 295S A00 894020 Staff 25 SE,MTuWThF,9:00 - 12:00,MCTF 210|FI,2025-09-06,8:00 - 10:59,MCTF 210 156 | SIO 299 001 957938 Baumann-Pickering , Simone 9999 IN,N/A,0:00 - 0:00,TBA TBA 157 | SIO 299 002 957984 Mazloff, Matthew R. 9999 IN,N/A,0:00 - 0:00,TBA TBA 158 | SIO 299 003 968003 Terrill, Eric James 9999 IN,N/A,0:00 - 0:00,TBA TBA 159 | SIO 299 004 968058 Merrifield, Sophia T 9999 IN,N/A,0:00 - 0:00,TBA TBA 160 | SIOC 290S B01 958918 Merrifield, Mark A 30 LE,MTuWThF,10:00 - 13:00,HUBBS 4500|FI,2025-09-06,11:30 - 14:29,HUBBS 4500|PR,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 161 | SIOC 291S B01 958922 Gabriel, Corey John 30 LE,MTuWThF,14:00 - 17:00,HUBBS 4500|FI,2025-09-06,19:00 - 21:59,HUBBS 4500|SE,N/A,0:00 - 0:00,TBA TBA|FW,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 162 | SOCI 117 A01 895339 Staff 5 LE,TuTh,17:00 - 19:50,RCLAS R101|DI,N/A,0:00 - 0:00,TBA TBA 163 | WES 237B A00 894149 Matai, Janarbek 20 LE,N/A,0:00 - 0:00,TBA TBA 164 | -------------------------------------------------------------------------------- /scripts/plot.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime, timedelta 2 | from os import listdir, mkdir 3 | from os.path import exists, join 4 | import sys 5 | from typing import List, Tuple, TypeVar 6 | import pandas as pd 7 | import seaborn as sns 8 | import matplotlib.pyplot as plt 9 | import matplotlib.ticker as ticker 10 | from math import floor 11 | from multiprocessing import Process 12 | import gc 13 | 14 | # Settings for input/output, basic plot stuff 15 | GENERAL_SETTINGS = { 16 | 'id': 'general', 17 | 'overall_plot_folder': 'plot_overall', 18 | 'section_plot_folder': 'plot_section', 19 | 20 | 'figure_size': (17, 7), 21 | 'num_ticks': 50 22 | } 23 | 24 | WIDE_SETTINGS = { 25 | 'id': 'wide', 26 | 'overall_plot_folder': 'plot_overall_wide', 27 | 'section_plot_folder': 'plot_section_wide', 28 | 29 | 'figure_size': (60, 15), 30 | 'num_ticks': 200 31 | } 32 | 33 | FSP_SETTINGS = { 34 | 'id': 'fsp', 35 | 'overall_plot_folder': 'plot_overall_fsp', 36 | 'section_plot_folder': 'plot_section_fsp', 37 | 38 | 'figure_size': (17, 7), 39 | 'num_ticks': 50 40 | } 41 | 42 | OVERALL_FOLDER = 'overall' 43 | SECTION_FOLDER = 'section' 44 | 45 | 46 | # For the plotconfig.py file 47 | MARKERS = "markers" 48 | MARKER_DATES = 'd' 49 | MARKER_TIME = 't' 50 | LINE_STYLE = 'l' 51 | LINE_COLOR = 'c' 52 | NAME_OF_MARKER = 'n' 53 | CONFIG_SETTINGS = 'settings' 54 | SHADE = 's' 55 | MARKER_ID = 'i' 56 | 57 | REGIONS = "regions" 58 | START_ID = 's' 59 | END_ID = 'e' 60 | REGION_NAME = 'n' 61 | REGION_COLOR = 'c' 62 | R_HIDE = 'h' 63 | 64 | # Multiprocessing options 65 | CHUNK_SIZE = 20 66 | WIDE_CHUNK_SIZE = 10 67 | PROCESS_COUNT = 10 68 | 69 | def get_version_of_config(config) -> int: 70 | return config['version'] if 'version' in config else 1 71 | 72 | T = TypeVar('T') 73 | def subsets_with_limits(arr: List[T], num_subsets: int, max_per_elem: int) -> List[List[T]]: 74 | arr.reverse() 75 | subsets = [] 76 | len_to_use = max(0, len(arr) - max_per_elem * num_subsets) 77 | idx = 0 78 | while len(arr) > len_to_use: 79 | if idx < len(subsets): 80 | subsets[idx].append(arr.pop()) 81 | idx = (idx + 1) % num_subsets 82 | continue 83 | 84 | subsets.append([arr.pop()]) 85 | idx = (idx + 1) % num_subsets 86 | 87 | arr.reverse() 88 | return subsets 89 | 90 | def process_overall(num: int, files: List[str], from_folder: str, out_folder: str, settings, config): 91 | """ 92 | Processes the folder containing overall data. 93 | :param num: The process label number (just for identification). 94 | :param files: List of files to process 95 | :param from_folder: Folder to read from 96 | :param out_folder: Folder to write to 97 | :param settings: Settings to use 98 | :param config: The configuration object, from the plotconfig.py file. 99 | """ 100 | 101 | # Uncomment if you want to skip the images that were already generated 102 | # temp_files = [f for f in listdir(out_folder) if exists(join(out_folder, f))] 103 | completed = 0 104 | for file in files: 105 | print(f"\t[{num}] Processing {file}.") 106 | 107 | #if file.replace('csv', 'png') in temp_files: 108 | # completed += 1 109 | # print(f"\t\t[{num}] Skipped {file} (Completed {completed}/{len(files)}).") 110 | # continue 111 | 112 | # Read in our CSV file 113 | df = pd.read_csv(join(from_folder, file)) 114 | if settings['id'] == 'fsp' and get_version_of_config(config) == 1: 115 | if len(config[MARKERS]) == 0 or "end" not in config[MARKERS][-1][NAME_OF_MARKER].lower(): 116 | completed += 1 117 | print(f'\t\t[{num}] Skipped {file} due to no end marker despite fsp (Completed {completed}/{len(files)}).') 118 | continue 119 | 120 | 121 | end_date_str = config[MARKERS][-1][MARKER_DATES][-1] 122 | # Parse this date 123 | end_date = datetime.strptime(end_date_str, '%Y-%m-%d') + timedelta(days=1) 124 | # Filter all rows in df so that the date is earlier than the end date, noting that 125 | # the date in df['time'] needs to be converted first 126 | df = df[df['time'].apply(lambda x: datetime.strptime(x, "%Y-%m-%dT%H:%M:%S") < end_date)] 127 | 128 | if len(df.index) == 0: 129 | completed += 1 130 | print(f"\t\t[{num}] Skipped {file} (Completed {completed}/{len(files)}).") 131 | continue 132 | 133 | # Adjust the figure so it's big enough for display 134 | plt.figure(figsize=settings['figure_size']) 135 | 136 | max_y = 0 137 | # Plot the number of available & waitlisted seats 138 | if config[CONFIG_SETTINGS]['showTotal']: 139 | sns.lineplot(data=df, x='time', y='total', color='purple', label='Total Seats', linestyle='--', linewidth=4) 140 | max_y = df['total'].max() 141 | 142 | sns.lineplot(data=df, x='time', y='waitlisted', color='blue', label='Waitlisted', linewidth=1) 143 | max_y = max(max_y, df['waitlisted'].max()) 144 | 145 | if config[CONFIG_SETTINGS]['useEnrolledTtl']: 146 | sns.lineplot(data=df, x='time', y='enrolled', color='red', label='Enrolled', linewidth=2) 147 | max_y = max(df['enrolled'].max(), max_y) 148 | else: 149 | sns.lineplot(data=df, x='time', y='available', color='red', label='Available', linewidth=2) 150 | max_y = max(df['available'].max(), max_y) 151 | 152 | 153 | plot = plt.gca() 154 | # Modify plot properties to make it more readable 155 | title = file.replace('.csv', '') 156 | if '_' in title: 157 | course, section = title.split('_') 158 | title = f'{course}, Section {section}' 159 | 160 | plot.set_title(title + f' ({config[CONFIG_SETTINGS]["termName"]})') 161 | plot.set_xlabel('Time') 162 | plot.set_ylabel('Seats') 163 | plot.grid(True) 164 | plot.margins(0) 165 | 166 | # Set bottom-left corner to (0, 0) 167 | plt.xlim(xmin=0) 168 | plt.ylim(ymin=0, ymax=max(1.05*max_y, 1)) 169 | 170 | # To make the x-axis more readable, purposely hide some dates and then 171 | # adjust the labels appropriately 172 | plt.setp(plot.xaxis.get_majorticklabels(), rotation=45, ha="right") 173 | # We want NUM_TICKS ticks on the x-axis 174 | plot.xaxis.set_major_locator(ticker.MultipleLocator(max(floor(len(df) / settings['num_ticks']), 1))) 175 | plot.yaxis.set_major_locator(ticker.MaxNLocator(integer=True)) 176 | 177 | if config[CONFIG_SETTINGS]['useMarkers']: 178 | all_dates = df['time'].tolist() 179 | # map all dates in all_dates to a tuple of string date and datetime object 180 | all_dates: Tuple[str, datetime] = list(map(lambda x: (x, datetime.strptime(x, "%Y-%m-%dT%H:%M:%S")), all_dates)) 181 | if get_version_of_config(config) == 1: 182 | p_max = 2 if config[CONFIG_SETTINGS]['isNormal'] else 1 183 | 184 | spans = [] 185 | spans2 = [] 186 | seen_grades = set() 187 | 188 | for marker in config[MARKERS]: 189 | # index [0, 1] -> 0 = first pass, 1 = second pass 190 | for p in range(0, p_max): 191 | hr = marker[MARKER_TIME] 192 | date = marker[MARKER_DATES][p] 193 | # find the first date in all_dates whose date is equal to date 194 | # and has the closest hour to hr 195 | axis_date = list(filter(lambda x: x[1].strftime("%Y-%m-%d") == date and (x[1].hour == hr or\ 196 | x[1].hour == hr + 1 or x[1].hour == hr + 2 or x[1].hour == hr + 3), all_dates)) 197 | if len(axis_date) == 0: 198 | continue 199 | 200 | if marker[SHADE]: 201 | (spans if p == 0 else spans2).append({ 202 | 'start': axis_date[0][0], 203 | 'color': marker[LINE_COLOR], 204 | 'legend': marker[NAME_OF_MARKER], 205 | }) 206 | 207 | plt.axvline(x=axis_date[0][0], \ 208 | color=marker[LINE_COLOR], \ 209 | linestyle=marker[LINE_STYLE], \ 210 | label=None if marker[NAME_OF_MARKER] in seen_grades else marker[NAME_OF_MARKER]) 211 | seen_grades.add(marker[NAME_OF_MARKER]) 212 | 213 | # Note that the reason why I didn't just combine the lists is because I don't want to add the "End" from first pass 214 | # to the graph. 215 | 216 | seen_shades = set() 217 | # For first-pass stuff 218 | for i in range(0, len(spans) - 1): 219 | # fill plot between combined_spans[i] and combined_spans[i+1] 220 | plt.axvspan(spans[i]['start'], \ 221 | spans[i+1]['start'], \ 222 | color=spans[i]['color'], \ 223 | alpha=0.2, \ 224 | label=None if spans[i]['legend'] in seen_shades else spans[i]['legend']) 225 | seen_shades.add(spans[i]['legend']) 226 | 227 | # For second-pass stuff 228 | for i in range(0, len(spans2) - 1): 229 | # fill plot between combined_spans[i] and combined_spans[i+1] 230 | plt.axvspan(spans2[i]['start'], \ 231 | spans2[i+1]['start'], \ 232 | color=spans2[i]['color'], \ 233 | alpha=0.2, \ 234 | label=None if spans2[i]['legend'] in seen_shades else spans2[i]['legend']) 235 | seen_shades.add(spans2[i]['legend']) 236 | else: 237 | added_lines = {} 238 | # First, plot all markers 239 | for marker in config[MARKERS]: 240 | hr = marker[MARKER_TIME] 241 | date = marker[MARKER_DATES] 242 | # find the first date in all_dates whose date is equal to date 243 | # and has the closest hour to hr 244 | axis_date = list(filter(lambda x: x[1].strftime("%Y-%m-%d") == date and (x[1].hour == hr or\ 245 | x[1].hour == hr + 1 or x[1].hour == hr + 2 or x[1].hour == hr + 3), all_dates)) 246 | if len(axis_date) == 0: 247 | continue 248 | 249 | plt.axvline(x=axis_date[0][0], \ 250 | color=marker[LINE_COLOR], \ 251 | linestyle=marker[LINE_STYLE], \ 252 | label=None if R_HIDE in marker else marker[NAME_OF_MARKER]) 253 | 254 | added_lines[marker[MARKER_ID]] = axis_date[0][0] 255 | 256 | for region in config[REGIONS]: 257 | if region[START_ID] not in added_lines or region[END_ID] not in added_lines: 258 | continue 259 | 260 | start_x = added_lines[region[START_ID]] 261 | end_x = added_lines[region[END_ID]] 262 | plt.axvspan(start_x, \ 263 | end_x, \ 264 | color=region[REGION_COLOR], \ 265 | alpha=0.2, \ 266 | label=None if R_HIDE in region else region[NAME_OF_MARKER]) 267 | 268 | # https://matplotlib.org/2.0.2/users/legend_guide.html 269 | plt.legend(bbox_to_anchor=(1.02, 1), loc=2, borderaxespad=0.) 270 | # Adjusts the padding 271 | plt.tight_layout() 272 | 273 | # Then, saves the figure and closes it to save memory 274 | fig = plot.get_figure() 275 | fig.savefig(join(out_folder, file.replace('.csv', ''))) 276 | 277 | # Clear the plot, close it, and clear the memory 278 | plot.cla() 279 | plt.clf() 280 | plt.cla() 281 | plt.close('all') 282 | del plot 283 | del fig 284 | del df 285 | gc.collect() 286 | completed += 1 287 | print(f"\t\t[{num}] Finished {file} (Completed {completed}/{len(files)}).") 288 | 289 | 290 | if __name__ == '__main__': 291 | if len(sys.argv) != 2: 292 | print("Usage: plot.py <'s', 'o', 'sw', 'ow', 'sfsp', 'ofsp'>") 293 | sys.exit(1) 294 | 295 | # Get the type of data to process 296 | dt = sys.argv[-1] 297 | if dt not in ['s', 'o', 'sw', 'ow', 'sfsp', 'ofsp']: 298 | print(f"Invalid data type '{dt}' - must be one of:") 299 | print("\t's' (section)") 300 | print("\t'o' (overall)") 301 | print("\t'sw' (section, wide display)") 302 | print("\t'ow' (overall, wide display)") 303 | print("\t'sfsp' (section, first/second-pass only)") 304 | print("\t'ofsp' (overall, first/second-pass only)") 305 | sys.exit(1) 306 | 307 | # Get config file 308 | try: 309 | with open('plotconfig.txt', 'r') as f: 310 | config = eval(f.read()) 311 | except: 312 | print(f'This folder does not contain a plotconfig.txt file. Please set one up and then try again.') 313 | exit(1) 314 | 315 | chunk_size = CHUNK_SIZE 316 | if dt in ['s', 'o']: 317 | settings_obj = GENERAL_SETTINGS 318 | elif dt in ['sw', 'ow']: 319 | settings_obj = WIDE_SETTINGS 320 | chunk_size = WIDE_CHUNK_SIZE 321 | elif dt in ['sfsp', 'ofsp']: 322 | settings_obj = FSP_SETTINGS 323 | 324 | if get_version_of_config(config) != 1 and dt in ['sfsp', 'ofsp']: 325 | print(f"First/second-pass plots are only supported for v1 of the config file.") 326 | exit(1) 327 | 328 | plot_folder = join(settings_obj['overall_plot_folder'] if dt in ['o', 'ow', 'ofsp'] else settings_obj['section_plot_folder']) 329 | if not exists(plot_folder): 330 | mkdir(plot_folder) 331 | 332 | in_folder = join(OVERALL_FOLDER if dt in ['o', 'ow', 'ofsp'] else SECTION_FOLDER) 333 | all_files = listdir(in_folder) 334 | 335 | # If we're working with sections, we only want the files that appear more than once 336 | # Categorize each file by the class that they represent. 337 | if dt == 's': 338 | # The key is the course (e.g. CSE 100.csv) and the value is a list 339 | # of all sections (e.g. CSE 100_A.csv) 340 | file_secs = {} 341 | for file in all_files: 342 | f_name = file.split('_')[0] 343 | if f_name not in file_secs: 344 | file_secs[f_name] = [file] 345 | else: 346 | file_secs[f_name].append(file) 347 | 348 | all_files = [] 349 | for f_name in file_secs: 350 | if len(file_secs[f_name]) > 1: 351 | all_files += file_secs[f_name] 352 | 353 | # Begin running 354 | print(f'Processing {len(all_files)} files into chunks of {chunk_size} files each.') 355 | print(f'\tWide? {dt == "sw" or dt == "ow"}') 356 | print(f'\tInput Folder: {in_folder}') 357 | print(f'\tPlot Folder: {plot_folder}') 358 | print(f'\tProcesses: {PROCESS_COUNT}') 359 | print(f'\tConfig Version: {get_version_of_config(config)}') 360 | 361 | len_of_files = len(all_files) 362 | completed = 0 363 | while len(all_files) > 0: 364 | files_to_process = subsets_with_limits(all_files, PROCESS_COUNT, chunk_size) 365 | processes = [] 366 | # Limit ourselves to PROCESS_COUNT processes, or else we might 367 | # end up crashing the host device with too many processes. 368 | for (i, chunk) in enumerate(files_to_process): 369 | print(f'Starting process {i} (with count {len(chunk)}).') 370 | # Create a process to process the chunk 371 | p = Process(target=process_overall, args=(i, \ 372 | chunk, \ 373 | in_folder, \ 374 | plot_folder, \ 375 | settings_obj, \ 376 | config)) 377 | p.start() 378 | processes.append(p) 379 | 380 | # Wait for all processes to finish 381 | for p in processes: 382 | p.join() 383 | completed += sum(len(x) for x in files_to_process) 384 | print(f'\t\tCompleted {completed}/{len_of_files} files ({len(all_files)} left).') 385 | -------------------------------------------------------------------------------- /data/schedules/S124.tsv: -------------------------------------------------------------------------------- 1 | subj_course_id sec_code sec_id instructor total_seats meetings 2 | ANAR 153 A00 487222 Braswell, Geoffrey E. 60 LE,TuTh,11:00 - 13:50,RCLAS R01|FI,2024-08-03,11:30 - 14:29,RCLAS R01 3 | ANBI 134 A00 487223 Staff 20 LE,TuTh,14:00 - 16:50,RCLAS R01|FI,2024-08-03,15:00 - 17:59,RCLAS R01 4 | ANBI 143GS A00 487224 Noel, Geoffroy Pierre Jean 24 SE,N/A,0:00 - 0:00,TBA TBA 5 | ANBI 144GS A00 519548 Noel, Geoffroy Pierre Jean 24 SE,N/A,0:00 - 0:00,TBA TBA 6 | ANSC 101 A00 487225 Staff 20 LE,MW,11:00 - 13:50,WLH 2114|FI,2024-08-02,11:30 - 14:29,WLH 2114 7 | ANSC 125 A00 487227 Brenner, Suzanne A 40 LE,MTuWTh,12:30 - 13:50,RCLAS R02|FI,2024-08-02,11:30 - 14:29,RCLAS R02 8 | ANSC 146 A00 487229 Staff 40 LE,TuTh,17:00 - 19:50,RCLAS R01 9 | ANSC 148 A00 487230 Olivas Hernandez, Olga Lid 40 LE,TuTh,11:00 - 13:50,RCLAS R03|FI,2024-08-03,11:30 - 14:29,RCLAS R03 10 | ANSC 150 A00 504165 Sloane, Julia Kathryn 20 LE,MW,17:00 - 19:50,PODEM 0132|FI,2024-08-02,19:00 - 21:59,PODEM 0132 11 | ANSC 180 A00 487232 Staff 15 LE,TuTh,11:00 - 13:50,RCLAS R04|FI,2024-08-03,11:30 - 14:29,RCLAS R04 12 | ANTH 5 A00 519529 Semendeferi, Ekaterini 15 LE,TuTh,14:00 - 16:50,SSB 102|FI,2024-08-03,15:00 - 17:59,SSB 102 13 | ANTH 10 A00 487219 Staff 60 LE,MW,14:00 - 16:50,PCYNH 121|FI,2024-08-02,15:00 - 17:59,PCYNH 121 14 | ANTH 23 A01 487221 Staff 20 LE,MTuWTh,9:30 - 10:50,RCLAS R01|FI,2024-08-02,8:00 - 10:59,RCLAS R03|DI,N/A,0:00 - 0:00,TBA TBA 15 | ANTH 102 A00 487233 Wilder, Linnea Lorene 60 LE,TuTh,14:00 - 16:50,RCLAS R55|FI,2024-08-03,15:00 - 17:59,RCLAS R55 16 | ANTH 103 A00 487234 Varma, Saiba 60 LE,MW,18:00 - 20:50,RCLAS R02|FI,2024-08-02,19:00 - 21:59,RCLAS R02 17 | ANTH 105 A00 487235 Stewart, Alexander B 60 LE,TuTh,8:00 - 10:50,RCLAS R02|FI,2024-08-03,8:00 - 10:59,RCLAS R02 18 | BENG 100 A01 516685 Taylor Amos, Alyssa C 30 LE,MW,11:00 - 13:50,WLH 2209|LE,Tu,11:00 - 12:50,WLH 2209|FI,2024-08-02,11:30 - 14:29,WLH 2209|DI,W,14:00 - 15:50,WLH 2209 19 | BIBC 102 A01 491316 Flagg, Matthew Paul 88 LE,MW,11:00 - 13:50,PCYNH 106|FI,2024-08-02,11:30 - 14:29,PCYNH 106|DI,MW,14:00 - 14:50,PCYNH 106 20 | BIBC 102 A02 491366 Flagg, Matthew Paul 88 LE,MW,11:00 - 13:50,PCYNH 106|FI,2024-08-02,11:30 - 14:29,PCYNH 106|DI,MW,15:00 - 15:50,PCYNH 106 21 | BIBC 103 A01 491486 Boumechache, Miyyada 24 LE,TuWThF,9:30 - 10:50,YORK 4080A|LA,TuWThF,11:00 - 15:00,YORK 3306 22 | BIBC 103 A02 491487 Boumechache, Miyyada 24 LE,TuWThF,9:30 - 10:50,YORK 4080A|LA,TuWThF,11:00 - 15:00,YORK 3406 23 | BICD 100 A01 516882 Staff 75 LE,MW,14:00 - 16:50,MANDE B-202|FI,2024-08-02,15:00 - 17:59,MANDE B-202|DI,TuTh,9:00 - 9:50,RCLAS R13 24 | BICD 100 A02 516890 Staff 75 LE,MW,14:00 - 16:50,MANDE B-202|FI,2024-08-02,15:00 - 17:59,MANDE B-202|DI,TuTh,13:00 - 13:50,RCLAS R06 25 | BICD 102GS A00 491488 Lo, Stanley M. 28 LE,N/A,0:00 - 0:00,TBA TBA 26 | BIEB 136GS A00 516940 Holway, David A. & Shurin, Jonathan 24 LA,N/A,0:00 - 0:00,TBA TBA 27 | BIEB 137GS A01 517034 Holway, David A. & Shurin, Jonathan 24 LE,N/A,0:00 - 0:00,TBA TBA|LA,N/A,0:00 - 0:00,TBA TBA 28 | BIEB 138GS A01 491492 Pirino, Giorgia 28 LE,N/A,0:00 - 0:00,TBA TBA|FW,N/A,0:00 - 0:00,TBA TBA 29 | BILD 1 A01 491296 Staff 63 LE,MTuWTh,14:00 - 15:20,HSS 1330|FI,2024-08-02,15:00 - 17:59,HSS 1330|DI,MW,16:00 - 16:50,PETER 103 30 | BILD 1 A02 491297 Staff 63 LE,MTuWTh,14:00 - 15:20,HSS 1330|FI,2024-08-02,15:00 - 17:59,HSS 1330|DI,TuTh,16:00 - 16:50,PETER 103 31 | BILD 4 A01 517099 Gonzalez Gamboa, Ivonne 24 LE,TuTh,9:30 - 10:50,DIB 121|FI,2024-08-03,8:00 - 10:59,DIB 121|LA,TuTh,13:00 - 15:50,TATA 2301 32 | BILD 4 A02 517100 Gonzalez Gamboa, Ivonne 24 LE,TuTh,9:30 - 10:50,DIB 121|FI,2024-08-03,8:00 - 10:59,DIB 121|LA,TuTh,13:00 - 15:50,TATA 2302 33 | BILD 60GS A00 491309 Lo, Stanley M. 28 LE,N/A,0:00 - 0:00,TBA TBA 34 | BIMM 100 A01 517136 Staff 100 LE,MW,14:00 - 16:50,FAH 1101|FI,2024-08-02,15:00 - 17:59,FAH 1101|MI,2024-07-13,10:00 - 11:50,FAH 1101|MI,2024-07-19,10:00 - 11:50,FAH 1101|DI,TuTh,13:00 - 13:50,RCLAS R15 35 | BIMM 110 A01 517182 Staff 100 LE,MTuWTh,17:00 - 18:20,RCLAS R15|FI,2024-08-03,8:00 - 10:59,RCLAS R12|DI,F,17:00 - 18:50,RCLAS R20 36 | BIMM 120 A01 517228 Pickett, Brooke Elizabeth 63 LE,TuTh,8:00 - 10:50,RCLAS R14|FI,2024-08-03,8:00 - 10:59,RCLAS R09|DI,WF,9:00 - 9:50,RCLAS R17 37 | BIMM 120 A02 517240 Pickett, Brooke Elizabeth 63 LE,TuTh,8:00 - 10:50,RCLAS R14|FI,2024-08-03,8:00 - 10:59,RCLAS R09|DI,WF,10:00 - 10:50,RCLAS R17 38 | BIMM 132GS A01 491498 Pirino, Giorgia 28 LE,N/A,0:00 - 0:00,TBA TBA|FW,N/A,0:00 - 0:00,TBA TBA|LA,N/A,0:00 - 0:00,TBA TBA 39 | BIMM 143 A01 491589 Bozinovic, Goran 40 LE,TuWThF,15:00 - 15:50,TATA 2501|FI,2024-08-03,19:00 - 21:59,TATA 2501|LA,TuWThF,16:00 - 18:50,TATA 2501 40 | BIPN 100 A01 491594 Armour, Jon Christopher 100 LE,TuTh,11:00 - 13:50,CENTR 105|FI,2024-08-03,11:30 - 14:29,CENTR 105|MU,2024-07-05,11:00 - 13:50,CENTR 105|DI,MW,17:00 - 17:50,RCLAS R25 41 | BIPN 140 A01 491602 Marino, Marc J 50 LE,MTuWTh,11:00 - 12:20,CENTR 222|FI,2024-08-02,11:30 - 14:29,CENTR 222|DI,TuTh,12:30 - 13:20,CENTR 222 42 | BISP 194 A00 517241 Staff 32 SE,MW,9:30 - 10:50,YORK 3010|FI,2024-08-02,8:00 - 10:59,YORK 3010 43 | BISP 199 001 527302 Lu, Pengzhe 9999 IN,N/A,0:00 - 0:00,TBA TBA 44 | BISP 199 002 527304 Murre, Cornelis 9999 IN,N/A,0:00 - 0:00,TBA TBA 45 | BISP 199 003 547765 Akbari, Omar Sultan 9999 IN,N/A,0:00 - 0:00,TBA TBA 46 | CAT 125 A00 515973 Staff 20 SE,MW,11:00 - 13:50,CENTR 201|FI,2024-08-02,11:30 - 14:29,CENTR 201 47 | CAT 125GS A00 515974 Rahimi, Babak 20 LE,N/A,0:00 - 0:00,TBA TBA 48 | CAT 125R A00 515980 Staff 20 SE,MW,11:00 - 13:50,RCLAS R22|FI,2024-08-02,11:30 - 14:29,RCLAS R11 49 | CAT 125R B00 515981 Tosun, Adriana 20 SE,MW,8:00 - 10:50,RCLAS R16|FI,2024-08-02,8:00 - 10:59,RCLAS R08 50 | CAT 125R C00 515987 Hyland, Tina Mae 20 SE,MW,14:00 - 16:50,RCLAS R14|FI,2024-08-02,15:00 - 17:59,RCLAS R11 51 | CAT 125R D00 515988 Bronstein, Phoebe Malan 20 SE,MW,8:00 - 10:50,RCLAS R40|FI,2024-08-02,8:00 - 10:59,RCLAS R40 52 | CENG 15 A01 488699 Drews, Aaron 25 LE,TuTh,11:00 - 13:50,CENTR 203|FI,2024-08-03,11:30 - 14:29,CENTR 203|LA,W,11:00 - 12:50,CENTR 203 53 | CENG 100 A00 505196 Opatkiewicz, Justin Paul 25 LE,MTuWTh,11:00 - 12:20,CENTR 218|LE,F,11:00 - 12:50,CENTR 218|FI,2024-08-03,11:30 - 14:29,CENTR 218 54 | CGS 2A A01 489598 Staff 35 LE,MW,11:00 - 13:50,RCLAS R06|FI,2024-08-02,11:30 - 14:29,RCLAS R06|DI,MW,14:00 - 14:50,RCLAS R03 55 | CGS 112 A00 489599 Staff 15 LE,TuTh,14:00 - 16:50,CENTR 207|FI,2024-08-03,15:00 - 17:59,CENTR 207 56 | CGS 119 A00 489603 Staff 10 LE,TuTh,17:00 - 19:50,HSS 1315 57 | CGS 120 A00 489604 Staff 15 LE,TuTh,11:00 - 13:50,RCLAS R04|FI,2024-08-03,11:30 - 14:29,RCLAS R04 58 | CGS 150 A00 489607 Staff 15 LE,MW,14:00 - 16:50,RCLAS R04|FI,2024-08-02,15:00 - 17:59,RCLAS R04 59 | CHEM 6A A01 488715 Staff 100 LE,MTuWTh,9:30 - 10:50,YORK 2622|FI,2024-08-02,11:30 - 14:29,YORK 2622|MI,2024-07-19,9:30 - 11:20,YORK 2622|DI,MW,11:30 - 12:20,CSB 002 60 | CHEM 6B A01 488719 Piercy, Marc Anthony 100 LE,MTuWTh,11:00 - 12:20,YORK 2722|FI,2024-08-02,11:30 - 14:29,YORK 2722|DI,MW,12:30 - 13:20,PODEM 1A20 61 | CHEM 6C A01 488723 Albizati, Kim F. 100 LE,MTuWTh,17:00 - 18:20,YORK 2622|FI,2024-08-03,19:00 - 21:59,YORK 2622|MI,2024-07-20,9:00 - 10:50,YORK 2622|DI,F,16:30 - 18:20,YORK 2622 62 | CHEM 7L A01 488728 Schurmeier, Kimberly 24 LE,MW,11:00 - 12:50,YORK 2622|LA,MTuWTh,8:00 - 10:50,YORK 2108 63 | CHEM 7L A02 488730 Schurmeier, Kimberly 24 LE,MW,11:00 - 12:50,YORK 2622|LA,MTuWTh,8:00 - 10:50,YORK 2124 64 | CHEM 7L A03 488734 Schurmeier, Kimberly 24 LE,MW,11:00 - 12:50,YORK 2622|LA,MTuWTh,8:00 - 10:50,YORK 2208 65 | CHEM 7L A04 488763 Schurmeier, Kimberly 24 LE,MW,11:00 - 12:50,YORK 2622|LA,MTuWTh,8:00 - 10:50,YORK 2224 66 | CHEM 7L B01 488798 Schurmeier, Kimberly 24 LE,MW,14:00 - 15:50,YORK 2622|LA,MTuWTh,11:00 - 13:50,YORK 2108 67 | CHEM 7L B02 488801 Schurmeier, Kimberly 24 LE,MW,14:00 - 15:50,YORK 2622|LA,MTuWTh,11:00 - 13:50,YORK 2124 68 | CHEM 7L B03 488808 Schurmeier, Kimberly 24 LE,MW,14:00 - 15:50,YORK 2622|LA,MTuWTh,11:00 - 13:50,YORK 2208 69 | CHEM 7L B04 488811 Schurmeier, Kimberly 24 LE,MW,14:00 - 15:50,YORK 2622|LA,MTuWTh,11:00 - 13:50,YORK 2224 70 | CHEM 11 A01 488897 Stallings, Dontarie M 100 LE,TuTh,8:00 - 10:50,RCLAS R03|FI,2024-08-03,8:00 - 10:59,RCLAS R03|DI,TuTh,11:00 - 11:50,RCLAS R02 71 | CHEM 40A A01 488913 Albizati, Kim F. 100 LE,MTuWTh,18:30 - 19:50,YORK 2622|FI,2024-08-03,19:00 - 21:59,YORK 2722|MI,2024-07-20,9:00 - 10:50,YORK 2722|DI,F,18:00 - 19:50,PODEM 1A20 72 | CHEM 40B A01 488920 Weizman, Haim 50 LE,MTuWTh,14:00 - 15:20,YORK 2722|FI,2024-08-02,15:00 - 17:59,YORK 2722|DI,MW,15:30 - 16:20,YORK 4080A 73 | CHEM 40B A02 488938 Weizman, Haim 50 LE,MTuWTh,14:00 - 15:20,YORK 2722|FI,2024-08-02,15:00 - 17:59,YORK 2722|DI,TuTh,13:00 - 13:50,YORK 4080A 74 | CHEM 41A A01 489029 Klosterman, Jeremy K 60 LE,MW,11:00 - 13:50,MANDE B-150|FI,2024-08-02,8:00 - 10:59,MANDE B-202|MI,2024-07-10,17:00 - 18:50,MANDE B-202|MI,2024-07-22,17:00 - 18:50,MANDE B-202|DI,MW,14:00 - 14:50,MANDE B-150 75 | CHEM 41C A01 500436 Tor, Yitzhak 60 LE,TuTh,14:00 - 16:50,CENTR 222|FI,2024-08-03,15:00 - 17:59,CENTR 222|DI,W,14:00 - 15:50,CENTR 222 76 | CHEM 43A A01 500426 Weizman, Haim 24 LE,MW,12:30 - 13:20,YORK 4080A|FI,2024-08-03,11:30 - 14:29,MANDE B-150|MI,2024-07-18,10:00 - 11:50,MANDE B-150|MI,2024-08-01,10:00 - 11:50,MANDE B-150|LA,MTuWTh,9:00 - 11:50,YORK 3208 77 | CHEM 43A A02 500430 Weizman, Haim 24 LE,MW,12:30 - 13:20,YORK 4080A|FI,2024-08-03,11:30 - 14:29,MANDE B-150|MI,2024-07-18,10:00 - 11:50,MANDE B-150|MI,2024-08-01,10:00 - 11:50,MANDE B-150|LA,MTuWTh,9:00 - 11:50,YORK 3224 78 | CHEM 43A B01 514041 Klosterman, Jeremy K 24 LE,TuTh,16:00 - 16:50,NSB 2303|FI,2024-08-03,15:00 - 17:59,NSB 2303|LA,MTuWTh,13:00 - 15:50,YORK 3208 79 | CHEM 43A B02 514047 Klosterman, Jeremy K 24 LE,TuTh,16:00 - 16:50,NSB 2303|FI,2024-08-03,15:00 - 17:59,NSB 2303|LA,MTuWTh,13:00 - 15:50,YORK 3224 80 | CHEM 108 A01 489140 Jennings, Patricia A. 24 LE,MW,11:00 - 11:50,PACIF 4500|LA,MTuWTh,12:00 - 15:50,NSB 1103 81 | CHEM 108 A02 489142 Jennings, Patricia A. 24 LE,MW,11:00 - 11:50,PACIF 4500|LA,MTuWTh,12:00 - 15:50,NSB 1111 82 | CHEM 114A A01 489147 Stallings, Dontarie M 100 LE,MW,8:00 - 10:50,RCLAS R02|FI,2024-08-02,8:00 - 10:59,RCLAS R06|DI,MW,11:00 - 11:50,RCLAS R01 83 | CHIN 169A A00 489171 Wang, Xiao 20 LE,MW,18:00 - 20:50,RCLAS R03|FI,2024-08-02,19:00 - 21:59,RCLAS R03 84 | COGS 3 A01 518827 Boyle, Mary E. T. 40 LE,MW,11:00 - 13:50,RCLAS R65|FI,2024-08-02,11:30 - 14:29,RCLAS R65|LA,MW,14:00 - 14:50,RCLAS R65 85 | COGS 11 A01 489175 Staff 30 LE,TuTh,8:00 - 10:50,RCLAS R04|FI,2024-08-03,8:00 - 10:59,RCLAS R04|DI,TuTh,11:00 - 11:50,RCLAS R05 86 | COGS 14A A01 518829 Staff 60 LE,MW,8:00 - 10:50,RCLAS R35|FI,2024-08-02,8:00 - 10:59,RCLAS R35|LA,MW,11:00 - 11:50,RCLAS R70 87 | COGS 14B A01 489177 Hoffman, Drew Ellen 75 LE,MTuWTh,8:00 - 9:20,RCLAS R01|FI,2024-08-03,8:00 - 10:59,RCLAS R01|LA,MW,9:30 - 10:20,RCLAS R03 88 | COGS 100 A01 489181 Allen, Michael Gordon 75 LE,TuTh,11:00 - 13:50,RCLAS R70|FI,2024-08-03,11:30 - 14:29,RCLAS R70|DI,TuTh,14:00 - 14:50,RCLAS R20 89 | COGS 101A A01 489183 Staff 60 LE,MTuWTh,9:30 - 10:50,RCLAS R05|FI,2024-08-03,8:00 - 10:59,RCLAS R05|DI,TuTh,11:00 - 11:50,RCLAS R06 90 | COGS 101B A01 489185 Allen, Michael Gordon 30 LE,MW,14:00 - 16:50,RCLAS R01|FI,2024-08-02,15:00 - 17:59,RCLAS R02|DI,MW,13:00 - 13:50,RCLAS R01 91 | COGS 101C A01 526786 Staff 30 LE,MW,11:00 - 13:50,RCLAS R85|FI,2024-08-02,11:30 - 14:29,RCLAS R85|DI,MW,14:00 - 14:50,RCLAS R85 92 | COGS 107A A01 489189 Boyle, Mary E. T. 35 LE,TuTh,11:00 - 13:50,PODEM 0133|FI,2024-08-03,11:30 - 14:29,PODEM 0133|LA,TuTh,10:00 - 10:50,CSB 115 93 | COGS 118A A01 489191 Staff 40 LE,MW,8:00 - 10:50,RCLAS R04|FI,2024-08-02,8:00 - 10:59,RCLAS R07|LA,MW,11:00 - 11:50,RCLAS R02 94 | COGS 171GS A01 489194 Pineda, Jaime A 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 95 | COGS 172 A01 489196 Staff 30 LE,MTuWTh,11:00 - 12:20,RCLAS R75|FI,2024-08-02,11:30 - 14:29,RCLAS R75|DI,TuTh,10:00 - 10:50,RCLAS R75 96 | COGS 174GS A01 489264 Pineda, Jaime A 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 97 | COGS 186 A01 489274 Staff 30 LE,TuTh,8:00 - 10:50,RCLAS R06|FI,2024-08-03,8:00 - 10:59,RCLAS R06|DI,TuTh,11:00 - 11:50,RCLAS R07 98 | COMM 10 A01 489276 Staff 25 LE,TuTh,11:00 - 13:50,RWAC 0103|FI,2024-08-03,11:30 - 14:29,RWAC 0103|DI,M,9:00 - 10:50,CENTR 201 99 | COMM 10 A02 489303 Staff 25 LE,TuTh,11:00 - 13:50,RWAC 0103|FI,2024-08-03,11:30 - 14:29,RWAC 0103|DI,W,9:00 - 10:50,CENTR 201 100 | COMM 100A A01 489312 Staff 25 LE,MW,11:00 - 13:50,RCLAS R04|FI,2024-08-02,11:30 - 14:29,RCLAS R04|DI,Tu,9:00 - 10:50,RCLAS R07 101 | COMM 100A A02 489313 Staff 25 LE,MW,11:00 - 13:50,RCLAS R04|FI,2024-08-02,11:30 - 14:29,RCLAS R04|DI,Th,9:00 - 10:50,RCLAS R07 102 | COMM 106T A00 512540 Staff 35 LE,MW,11:00 - 13:50,RCLAS R21|FI,2024-08-02,11:30 - 14:29,RCLAS R21 103 | COMM 107 A00 489347 Staff 35 LE,MW,14:00 - 16:50,RCLAS R02|FI,2024-08-02,15:00 - 17:59,RCLAS R03 104 | COMM 109P A00 489358 Staff 35 LE,TuTh,14:00 - 16:50,RCLAS R03|FI,2024-08-03,15:00 - 17:59,RCLAS R04 105 | COMM 132 A00 489361 McKenna, Denise 30 SE,TuTh,11:00 - 13:50,RCLAS R08|FI,2024-08-03,11:30 - 14:29,RCLAS R08 106 | COMM 146 A00 489362 Halm, Gavin Patrick 30 SE,TuTh,17:00 - 19:50,RCLAS R02|FI,2024-08-03,19:00 - 21:59,RCLAS R03 107 | COMM 190 A00 489363 Abuelhiga, Soraya Jill 23 SE,MW,8:00 - 10:50,RCLAS R06 108 | CSE 8A A50 489366 Staff 25 LE,MTuWTh,11:00 - 12:20,FAH 1101|DI,TuTh,12:30 - 13:20,FAH 1101|FI,2024-08-02,11:30 - 14:29,FAH 1101|LA,W,15:00 - 16:50,EBU3B B250 109 | CSE 8A A51 489367 Staff 25 LE,MTuWTh,11:00 - 12:20,FAH 1101|DI,TuTh,12:30 - 13:20,FAH 1101|FI,2024-08-02,11:30 - 14:29,FAH 1101|LA,W,17:00 - 18:50,EBU3B B250 110 | CSE 11 A01 489398 Cao, Yingjun 100 LE,TuTh,8:00 - 10:50,RCLAS R08|FI,2024-08-03,8:00 - 10:59,RCLAS R08|DI,W,8:00 - 9:50,RCLAS R07 111 | CSE 12 A01 489487 Staff 50 LE,MW,8:00 - 10:50,FAH 1450|FI,2024-08-02,8:00 - 10:59,FAH 1450|MI,2024-07-12,9:00 - 10:50,FAH 1450|MI,2024-07-19,9:00 - 10:50,FAH 1450|MI,2024-07-26,9:00 - 10:50,FAH 1450|DI,TuTh,9:00 - 9:50,FAH 1450 112 | CSE 20 A01 489497 Staff 50 LE,TuTh,18:00 - 20:50,PCYNH 121|FI,2024-08-03,19:00 - 21:59,PCYNH 121|DI,Th,15:00 - 16:50,WLH 2207 113 | CSE 21 A01 489517 Braun, Oliver 50 LE,MTuWTh,18:30 - 19:50,PCYNH 120|FI,2024-08-03,19:00 - 21:59,PCYNH 120|DI,F,10:00 - 11:50,PCYNH 120 114 | CSE 101 A01 489524 Braun, Oliver 50 LE,MTuWTh,20:00 - 21:20,PCYNH 120|FI,2024-08-03,19:00 - 21:59,PCYNH 122|DI,F,10:00 - 11:50,PCYNH 121 115 | CSE 105 A01 512594 Jones, Miles E 100 LE,TuTh,8:00 - 10:50,RCLAS R15|FI,2024-08-03,8:00 - 10:59,RCLAS R15|DI,F,9:00 - 10:50,RCLAS R10 116 | CSE 105 B01 512598 Jones, Miles E 100 LE,TuTh,11:00 - 13:50,RCLAS R40|FI,2024-08-03,11:30 - 14:29,RCLAS R40|DI,F,11:00 - 12:50,RCLAS R05 117 | CSE 140 A01 489538 Staff 50 LE,MTuWTh,11:00 - 12:20,FAH 1450|FI,2024-08-03,11:30 - 14:29,FAH 1450|DI,MW,13:00 - 13:50,FAH 1101 118 | CSE 141 A01 489550 Eldon, John 100 LE,MW,8:00 - 10:50,RCLAS R08|FI,2024-08-03,8:00 - 10:59,RCLAS R07|DI,F,8:00 - 9:50,RCLAS R01 119 | CSE 141L A01 489571 Eldon, John 100 LE,MW,11:00 - 11:50,RCLAS R05|FI,2024-08-02,11:30 - 14:29,RCLAS R08|LA,MW,12:00 - 12:50,RCLAS R01 120 | CSE 151A A01 489583 Solares, Edwin A 200 LE,MTuWTh,9:30 - 10:50,WLH 2005|FI,2024-08-02,8:00 - 10:59,WLH 2005|DI,W,11:00 - 12:50,WLH 2005 121 | CSE 175 A01 510886 Kumar, Rakesh 30 LE,TuTh,14:00 - 16:50,EBU3B 2154|FI,2024-08-03,15:00 - 17:59,EBU3B 2154|DI,N/A,0:00 - 0:00,TBA TBA 122 | CSE 190 A00 516828 Dubnov, Shlomo 49 LE,MW,11:00 - 13:50,RCLAS R60|FI,2024-08-02,11:30 - 14:29,RCLAS R60 123 | DOC 100D A00 489667 Pass, Natalye Joann 25 LE,MW,14:00 - 16:50,RCLAS R05|FI,2024-08-02,15:00 - 17:59,RCLAS R05 124 | DSC 10 A01 624268 Staff 75 LE,TuTh,11:00 - 13:50,WLH 2204|LA,W,13:30 - 15:20, |FI,2024-08-03,11:30 - 14:29,WLH 2204|DI,W,11:00 - 12:50,WLH 2204 125 | DSC 20 A01 624476 Staff 50 LE,TuTh,17:00 - 19:50,RCLAS R12|FI,2024-08-03,19:00 - 21:59,RCLAS R05|DI,M,17:00 - 18:50,RCLAS R05 126 | DSC 40A A01 624608 Staff 40 LE,TuTh,14:00 - 16:50,WLH 2114|FI,2024-08-03,15:00 - 17:59,WLH 2114|DI,W,17:00 - 18:50,WLH 2114 127 | DSGN 1 A01 489179 Rill, Bryan 50 LE,MW,11:00 - 13:50,DIB 121|FI,2024-08-02,11:30 - 14:29,DIB 121|ST,MW,14:00 - 14:50,DIB 121 128 | ECE 17 A01 490489 Sahay, Rajeev 30 LE,MW,14:00 - 16:50,RCLAS R60|FI,2024-08-02,15:00 - 17:59,RCLAS R60|DI,MW,17:00 - 17:50,RCLAS R60 129 | ECE 65 A50 490492 Staff 20 LE,TuTh,18:00 - 20:50,WLH 2112|DI,W,16:00 - 17:50,WLH 2115|FI,2024-08-03,19:00 - 21:59,WLH 2112|LA,MW,18:00 - 20:50,WLH 2213A 130 | ECE 65 A51 490493 Staff 20 LE,TuTh,18:00 - 20:50,WLH 2112|DI,W,16:00 - 17:50,WLH 2115|FI,2024-08-03,19:00 - 21:59,WLH 2112|LA,MW,18:00 - 20:50,WLH 2110 131 | ECON 1 A01 489715 Famulari, Melissa 70 LE,MTuWTh,11:00 - 12:20,PETER 103|FI,2024-08-03,8:00 - 10:59,PETER 103|DI,F,11:00 - 12:50,WLH 2111 132 | ECON 2 A01 489717 Levkoff, Steven B. 70 LE,TuTh,11:00 - 13:50,PETER 102|FI,2024-08-03,11:30 - 14:29,PETER 102|DI,W,11:00 - 12:50,WLH 2205 133 | ECON 3 A01 489948 Staff 70 LE,MTuWTh,9:30 - 10:50,RWAC 0121|FI,2024-08-03,8:00 - 10:59,RWAC 0121|DI,F,8:00 - 9:50,WLH 2111 134 | ECON 5 A01 490103 Staff 30 LE,MW,14:00 - 16:50,RWAC 0103|FI,2024-08-03,15:00 - 17:59,RWAC 0103|LA,F,15:00 - 16:50,WLH 2207 135 | ECON 100A A01 490127 Famulari, Melissa 70 LE,MTuWTh,12:30 - 13:50,PETER 103|FI,2024-08-03,11:30 - 14:29,PETER 103|DI,F,13:00 - 14:50,PETER 102 136 | ECON 100B A01 490129 Staff 70 LE,TuTh,14:00 - 16:50,WLH 2204|FI,2024-08-02,15:00 - 17:59,WLH 2204|DI,W,17:00 - 18:50,WLH 2204 137 | ECON 109 A01 490187 Shishkin, Denis 35 LE,TuTh,11:00 - 13:50,RWAC 0115|FI,2024-08-03,11:30 - 14:29,RWAC 0115|DI,F,9:00 - 10:50,WLH 2207 138 | ECON 110A A01 490190 Levkoff, Steven B. 70 LE,TuTh,14:00 - 16:50,PETER 102|FI,2024-08-03,15:00 - 17:59,RWAC 0121|DI,Th,17:00 - 18:50,WLH 2111 139 | ECON 120A A01 490245 Dai, Yinlin 70 LE,MW,8:00 - 10:50,WLH 2111|FI,2024-08-03,8:00 - 10:59,WLH 2111|DI,F,8:00 - 9:50,WLH 2205 140 | ECON 120B A01 490247 Nieto-Barthaburu, Augusto 70 LE,MW,14:00 - 16:50,RCLAS R06|FI,2024-08-02,15:00 - 17:59,RCLAS R07|DI,M,17:00 - 18:50,RCLAS R04 141 | ECON 120C A01 490253 Sun, Yixiao 35 LE,MTuWTh,11:00 - 12:20,WLH 2111|FI,2024-08-03,11:30 - 14:29,SOLIS 104|MI,2024-07-17,18:00 - 19:50,SOLIS 104|DI,F,11:00 - 12:50,WLH 2205 142 | ECON 120C B01 490255 Sun, Yixiao 35 LE,MTuWTh,14:00 - 15:20,WLH 2111|FI,2024-08-03,11:30 - 14:29, |MI,2024-07-17,18:00 - 19:50, |DI,F,13:00 - 14:50,WLH 2111 143 | ECON 129 A00 490256 Eckert, Fabian Paul 35 LE,MTuWTh,8:00 - 9:20,RCLAS R05|FI,2024-08-02,8:00 - 10:59,RWAC 0115 144 | ECON 131 A00 490257 Nieto-Barthaburu, Augusto 35 LE,TuTh,14:00 - 16:50,RCLAS R04|FI,2024-08-03,15:00 - 17:59,RCLAS R05 145 | ECON 138 A00 490258 Bharadwaj, Prashant 35 LE,MW,8:00 - 10:50,RCLAS R09|FI,2024-08-02,8:00 - 10:59,RCLAS R09 146 | ECON 138 B00 490259 Bharadwaj, Prashant 35 LE,MW,11:00 - 13:50,RCLAS R08|FI,2024-08-02,11:30 - 14:29,RCLAS R09 147 | ECON 159 A00 490260 Hendrickson, Gerald M. 0 LE,TuTh,14:00 - 16:50,RCLAS R08|FI,2024-08-03,15:00 - 17:59,RCLAS R08 148 | ECON 178 A01 553995 Zhu, Ying 35 LE,TuTh,14:00 - 16:50,RCLAS R80|FI,2024-08-03,15:00 - 17:59,RCLAS R80|DI,W,17:00 - 18:50,RCLAS R80 149 | EDS 40 A01 512576 Black, Alison Michelle 20 LE,TuTh,11:00 - 12:50,RWAC 0416|FI,2024-08-03,11:30 - 14:29,RWAC 0416|DI,TuTh,13:00 - 13:50,RWAC 0416 150 | EDS 107 A01 515848 Staff 30 LE,MW,18:00 - 20:50,RCLAS R01|DI,N/A,0:00 - 0:00,TBA TBA 151 | EDS 110R A01 490262 Staff 30 FI,2024-08-02,11:30 - 14:29,RCLAS R16|LE,N/A,0:00 - 0:00,TBA TBA|DI,W,13:00 - 14:50,RCLAS R15 152 | EDS 112 A01 490264 Chapman, Thandeka K 50 LE,MTuWTh,8:00 - 9:20,RCLAS R10|FI,2024-08-03,8:00 - 10:59,RCLAS R10|DI,N/A,0:00 - 0:00,TBA TBA 153 | EDS 113 A00 490266 Staff 30 LE,TuTh,11:00 - 13:50,RCLAS R10|FI,2024-08-03,11:30 - 14:29,RCLAS R10 154 | EDS 118 A00 490267 Warstadt, Melissa Fawn 30 LE,MW,11:00 - 13:50,RCLAS R09 155 | EDS 124BR A00 490268 Eguchi, Emi 25 LE,N/A,0:00 - 0:00,TBA TBA 156 | EDS 124BR B00 490269 Eguchi, Emi 25 LE,N/A,0:00 - 0:00,TBA TBA 157 | EDS 126 A01 490271 Jones, Makeba 50 LE,TuTh,11:00 - 13:50,RCLAS R11|FI,2024-08-03,11:30 - 14:29,RCLAS R11|DI,N/A,0:00 - 0:00,TBA TBA 158 | EDS 135 A01 490316 Staff 20 LE,TuTh,16:00 - 18:50,RWAC 0416|FI,2024-08-03,15:00 - 17:59,RWAC 0416|PR,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 159 | ENVR 142GS A00 519514 Chang, Edmond Yi-Teh 28 LE,N/A,0:00 - 0:00,TBA TBA 160 | ETHN 103 A00 490504 Staff 36 LE,TuTh,11:00 - 13:50,RCLAS R14|FI,2024-08-03,11:30 - 14:29,RCLAS R14 161 | ETHN 103A A00 490505 Man, Simeon S 9 LE,MTuWTh,12:30 - 13:50,RCLAS R12|FI,2024-08-02,11:30 - 14:29,RCLAS R12 162 | ETHN 109 A00 490506 Staff 30 LE,TuTh,14:00 - 16:50,RCLAS R09|FI,2024-08-03,15:00 - 17:59,RCLAS R09 163 | ETHN 118 A00 490507 Staff 36 LE,MW,11:00 - 13:50,RCLAS R10|FI,2024-08-02,11:30 - 14:29,RCLAS R10 164 | ETHN 119 A00 490508 Staff 36 LE,TuTh,14:00 - 16:50,RCLAS R05|FI,2024-08-03,15:00 - 17:59,RCLAS R06 165 | ETHN 121R A00 490518 Choi, Esther Min 36 LE,MW,14:00 - 16:50,RCLAS R07|FI,2024-08-02,15:00 - 17:59,RCLAS R08 166 | ETHN 127 A00 490528 Staff 15 LE,TuTh,14:00 - 16:50,CENTR 207|FI,2024-08-03,15:00 - 17:59,CENTR 207 167 | ETHN 139 A00 490573 Staff 10 LE,MW,11:00 - 13:50,RCLAS R16|FI,2024-08-02,11:30 - 14:29,RCLAS R17 168 | ETHN 150 A00 490575 Staff 15 LE,MW,14:00 - 16:50,RCLAS R04|FI,2024-08-02,15:00 - 17:59,RCLAS R04 169 | GLBH 20 A00 491705 Elwardani, Nile Regina 40 LE,TuTh,11:00 - 13:50,RCLAS R16|FI,2024-08-03,11:30 - 14:29,RCLAS R16 170 | GLBH 101 A00 491706 Staff 20 LE,MW,11:00 - 13:50,WLH 2114|FI,2024-08-02,11:30 - 14:29,WLH 2114 171 | GLBH 111 A01 491708 Burgos, Jose L. 15 SE,N/A,0:00 - 0:00,TBA TBA|FW,N/A,0:00 - 0:00,TBA TBA 172 | GLBH 146 A00 491709 Staff 20 LE,TuTh,17:00 - 19:50,RCLAS R01 173 | GLBH 148 A00 491710 Olivas Hernandez, Olga Lid 20 LE,TuTh,11:00 - 13:50,RCLAS R03|FI,2024-08-03,11:30 - 14:29,RCLAS R03 174 | GLBH 150 A00 491711 Sloane, Julia Kathryn 20 LE,MW,17:00 - 19:50,PODEM 0132|FI,2024-08-02,19:00 - 21:59,PODEM 0132 175 | HIEA 131 A00 491760 Staff 32 LE,MTuWTh,14:00 - 15:20,HSS 1305|FI,2024-08-03,15:00 - 17:59,HSS 1305 176 | HIEA 153 A00 491762 Staff 30 LE,TuTh,18:00 - 20:50,CENTR 201|FI,2024-08-03,19:00 - 21:59,CENTR 201 177 | HIEU 124 A00 491811 Staff 32 LE,MTuWTh,9:30 - 10:50,HSS 2321 178 | HIEU 124GS A00 491812 Markman, Kristina 28 LE,N/A,0:00 - 0:00,TBA TBA 179 | HIEU 147 A00 491813 Staff 32 LE,MTuWTh,11:00 - 12:20,HSS 1305|FI,2024-08-02,11:30 - 14:29,HSS 1315 180 | HIEU 149GS A00 491816 Caldwell, Michael Alan 28 LE,N/A,0:00 - 0:00,TBA TBA 181 | HILD 2C A01 491713 Hendrickson, Gerald M. 30 LE,TuTh,11:00 - 13:50,RCLAS R17|FI,2024-08-03,11:30 - 14:29,RCLAS R17|DI,Tu,14:00 - 15:50,RCLAS R06 182 | HILD 7B A01 491715 Kwak, Nancy 30 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 183 | HILD 10 A01 491717 Staff 20 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 184 | HILD 30GS A00 491719 Edington, Claire Ellen 28 LE,N/A,0:00 - 0:00,TBA TBA 185 | HINE 109 A00 491818 Shafir, Nir 32 LE,N/A,0:00 - 0:00,TBA TBA 186 | HINE 128 A00 491821 Shafir, Nir 32 LE,N/A,0:00 - 0:00,TBA TBA 187 | HISC 117 A00 491830 Staff 32 LE,MW,11:00 - 13:50,HSS 2321|FI,2024-08-02,11:30 - 14:29,HSS 2321 188 | HIUS 103 A00 491834 Man, Simeon S 23 LE,MTuWTh,12:30 - 13:50,RCLAS R12|FI,2024-08-02,11:30 - 14:29,RCLAS R12 189 | HIUS 108B A00 491835 Staff 30 LE,MW,14:00 - 16:50,CENTR 205|FI,2024-08-02,15:00 - 17:59,CENTR 205 190 | HIUS 141 A00 491836 Hendrickson, Gerald M. 32 LE,TuTh,14:00 - 16:50,RCLAS R08|FI,2024-08-03,15:00 - 17:59,RCLAS R08 191 | HIUS 149 A00 491839 Staff 32 LE,MW,18:00 - 20:50,RCLAS R07|FI,2024-08-02,19:00 - 21:59,RCLAS R07 192 | HUM 3 A01 512617 Crum, Matthew Stephen 50 LE,TuTh,11:00 - 13:50,MANDE B-202|FI,2024-08-03,11:30 - 14:29,MANDE B-202|DI,TuTh,14:00 - 14:50,RWAC 0103 193 | HUM 3 A02 512618 Crum, Matthew Stephen 50 LE,TuTh,11:00 - 13:50,MANDE B-202|FI,2024-08-03,11:30 - 14:29,MANDE B-202|DI,TuTh,14:00 - 14:50,RWAC 0115 194 | HUM 3GS A00 512663 Markman, Kristina 0 LE,N/A,0:00 - 0:00,TBA TBA 195 | HUM 3GS B00 512664 Staff 0 LE,N/A,0:00 - 0:00,TBA TBA 196 | HUM 4 A01 512620 West, Geoffrey Scott 50 LE,MTuWTh,9:30 - 10:50,RCLAS R62|FI,2024-08-02,8:00 - 10:59,RCLAS R62|DI,MW,11:00 - 11:50,RCLAS R62 197 | HUM 4GS A00 512666 Lyon, Antony J. 0 LE,N/A,0:00 - 0:00,TBA TBA 198 | HUM 4R A01 512625 Watkins, Eric 50 LE,MTuWTh,11:00 - 12:20,RCLAS R63|FI,2024-08-02,11:30 - 14:29,RCLAS R63|DI,MW,13:00 - 13:50,RCLAS R63 199 | HUM 5 A01 512649 Zavodny, Tatiana Sophia 50 LE,TuTh,8:00 - 10:50,RCLAS R64|FI,2024-08-03,8:00 - 10:59,RCLAS R64|DI,TuTh,11:00 - 11:50,RCLAS R64 200 | HUM 5 B01 512661 Zroka, Ryan Edward 50 LE,TuTh,14:00 - 16:50,MANDE B-150|FI,2024-08-03,15:00 - 17:59,MANDE B-150|DI,TuTh,13:00 - 13:50,MANDE B-150 201 | INTL 190 A00 490577 Segui, Alan S 0 SE,TuTh,12:00 - 14:50,RBC 3203 202 | JAPN 20AR A01 491267 Ross, Kayoko F 20 LE,MTuWTh,15:30 - 16:50,RCLAS R10|FI,2024-08-02,15:00 - 17:59,RCLAS R10|TU,MTuWTh,17:00 - 18:20,RCLAS R10 203 | JAPN 180 A00 491285 Berman, Michael David 40 LE,TuTh,14:00 - 16:50,RCLAS R11|FI,2024-08-03,15:00 - 17:59,RCLAS R11 204 | LATI 50 A01 502536 Kokinis, Troy Andreas 22 LE,MW,8:00 - 10:50,RCLAS R56|FI,2024-08-02,8:00 - 10:59,RCLAS R56|DI,MW,11:00 - 11:50,RCLAS R56 205 | LATI 50 A02 502551 Kokinis, Troy Andreas 22 LE,MW,8:00 - 10:50,RCLAS R56|FI,2024-08-02,8:00 - 10:59,RCLAS R56|DI,MW,12:00 - 12:50,RCLAS R56 206 | LATI 50 A03 502650 Kokinis, Troy Andreas 22 LE,MW,8:00 - 10:50,RCLAS R56|FI,2024-08-02,8:00 - 10:59,RCLAS R56|DI,MW,13:00 - 13:50,RCLAS R56 207 | LATI 50 A04 502909 Kokinis, Troy Andreas 22 LE,MW,8:00 - 10:50,RCLAS R56|FI,2024-08-02,8:00 - 10:59,RCLAS R56|DI,MW,14:00 - 14:50,RCLAS R56 208 | LATI 160 A01 502920 Kokinis, Troy Andreas 30 LE,TuTh,8:00 - 10:50,RCLAS R56|FI,2024-08-03,8:00 - 10:59,RCLAS R56|DI,N/A,0:00 - 0:00,TBA TBA 209 | LIFR 1A A00 490494 Van Moer, Vinciane G 20 TU,MTuWTh,8:00 - 9:20,RCLAS R12 210 | LIFR 1AX A00 490495 Van Moer, Vinciane G 20 DI,MTuWTh,9:30 - 10:50,RCLAS R12|FI,2024-08-02,8:00 - 10:59,RCLAS R12 211 | LIFR 1B A00 490496 Van Moer, Vinciane G 20 TU,MTuWTh,9:30 - 10:50,RCLAS R11 212 | LIFR 1BX A00 490497 Van Moer, Vinciane G 20 DI,MTuWTh,11:00 - 12:20,RCLAS R12|FI,2024-08-02,11:30 - 14:29,RCLAS R99 213 | LIGN 8 A00 505198 McIntosh, Justin Daniel 150 LE,TuTh,11:00 - 13:50,RCLAS R24|FI,2024-08-03,11:30 - 14:29,RCLAS R24 214 | LIGN 9GS A00 491239 Lott, Margaret S. 20 LE,N/A,0:00 - 0:00,TBA TBA|OT,N/A,0:00 - 0:00,TBA TBA 215 | LIGN 101 A01 505200 McIntosh, Justin Daniel 30 LE,MW,11:00 - 13:50,RCLAS R24|FI,2024-08-02,11:30 - 14:29,RCLAS R24|DI,N/A,0:00 - 0:00,TBA TBA 216 | LIGN 120 A01 491244 Staff 30 LE,MW,14:00 - 16:50,CENTR 203|FI,2024-08-02,15:00 - 17:59,CENTR 203|DI,N/A,0:00 - 0:00,TBA TBA 217 | LIGN 149GS A00 491245 Lott, Margaret S. 20 LE,N/A,0:00 - 0:00,TBA TBA|OT,N/A,0:00 - 0:00,TBA TBA 218 | LIGN 170 A00 491247 Staff 30 LE,TuTh,14:00 - 16:50,CENTR 205|FI,2024-08-03,15:00 - 17:59,CENTR 205 219 | LISP 1D A00 490498 Munoz Sanchez, Alicia 14 TU,MW,8:00 - 10:50,RCLAS R13 220 | LISP 1D B00 490499 Munoz Sanchez, Alicia 14 TU,MW,11:00 - 13:50,RCLAS R13 221 | LISP 1D C00 490500 Munoz Sanchez, Alicia 14 TU,MW,14:00 - 16:50,RCLAS R13 222 | LISP 1D D00 490501 Munoz Sanchez, Alicia 14 TU,MW,17:00 - 19:50,RCLAS R13 223 | LISP 1DX A00 490502 Munoz Sanchez, Alicia 28 DI,TuTh,11:00 - 13:50,RCLAS R13|FI,2024-08-03,11:30 - 14:29,RCLAS R13 224 | LISP 1DX B00 490503 Munoz Sanchez, Alicia 28 DI,TuTh,14:00 - 16:50,RCLAS R13|FI,2024-08-03,15:00 - 17:59,RCLAS R13 225 | LTAM 110 A00 491847 Staff 25 LE,MW,14:00 - 16:50,WLH 2110|FI,2024-08-02,15:00 - 17:59,WLH 2110 226 | LTCS 119 A00 491848 Staff 15 LE,TuTh,17:00 - 19:50,HSS 1315 227 | LTCS 130 A00 491849 Staff 25 LE,TuTh,11:00 - 13:50,HSS 2321|FI,2024-08-03,11:30 - 14:29,HSS 2321 228 | LTEA 120C A00 491852 Staff 40 LE,MW,17:00 - 19:50,SOLIS 109|FI,2024-08-02,19:00 - 21:59,SOLIS 109 229 | LTEN 130GS A00 491853 Lyon, Antony J. 28 LE,N/A,0:00 - 0:00,TBA TBA|OT,N/A,0:00 - 0:00,TBA TBA 230 | LTEN 148 A00 491855 Staff 25 LE,TuTh,8:00 - 10:50,HSS 1305|FI,2024-08-03,8:00 - 10:59,HSS 1305 231 | LTEN 159 A00 491856 Staff 25 LE,TuTh,14:00 - 16:50,RCLAS R15|FI,2024-08-03,15:00 - 17:59,RCLAS R15 232 | LTEN 180 A00 491857 Staff 15 LE,MW,11:00 - 13:50,RCLAS R16|FI,2024-08-02,11:30 - 14:29,RCLAS R17 233 | LTSP 123GS A00 505928 Bessett, Ryan Matthew 28 LE,N/A,0:00 - 0:00,TBA TBA|OT,N/A,0:00 - 0:00,TBA TBA 234 | LTSP 174GS A00 506037 Bessett, Ryan Matthew 28 LA,N/A,0:00 - 0:00,TBA TBA|OT,N/A,0:00 - 0:00,TBA TBA 235 | LTWR 102 A00 491861 Staff 15 SE,MW,11:00 - 13:50,MANDE B-152|FI,2024-08-02,11:30 - 14:29,MANDE B-152 236 | LTWR 106 A00 491862 Staff 15 SE,TuTh,14:00 - 16:50,HSS 2305A|FI,2024-08-03,15:00 - 17:59,HSS 2305A 237 | MAE 11 A00 490930 Bahadori, Mohammad Yousef 100 LE,W,13:00 - 14:50,FAH 1450|LE,TuTh,14:00 - 16:50,FAH 1450|FI,2024-08-03,15:00 - 17:59,FAH 1450 238 | MAE 30A A00 490931 Qi, Huihui 40 LE,F,13:00 - 14:50,RCLAS R30|LE,TuTh,14:00 - 16:50,RCLAS R30|FI,2024-08-03,15:00 - 17:59,RCLAS R30 239 | MAE 101A A00 491036 Sadeghizadeh, Zahra 100 LE,TuTh,8:00 - 10:50,RCLAS R65|LE,TuTh,11:00 - 11:50,RCLAS R65|FI,2024-08-03,8:00 - 10:59,RCLAS R65 240 | MAE 101C A00 491037 Seshadri, Kalyanasundaram 100 LE,F,15:00 - 16:50,RCLAS R06|LE,MW,17:00 - 19:50,RCLAS R06|FI,2024-08-03,19:00 - 21:59,RCLAS R04 241 | MAE 113 A00 491040 Seshadri, Kalyanasundaram 80 LE,TuTh,17:00 - 19:50,RCLAS R06|LE,F,17:00 - 18:50,RCLAS R06|FI,2024-08-03,19:00 - 21:59,RCLAS R06 242 | MAE 131A A00 491041 Ghazinejad, Maziar 40 LE,W,10:00 - 11:50,WLH 2115|LE,TuTh,11:00 - 13:50,WLH 2114|FI,2024-08-03,11:30 - 14:29,WLH 2114 243 | MAE 142 A00 491053 Staff 40 LE,MTuWTh,11:00 - 12:20,WLH 2112|LE,F,11:00 - 12:50,WLH 2112|FI,2024-08-03,11:30 - 14:29,WLH 2112 244 | MAE 143A A00 491054 Staff 50 LE,N/A,0:00 - 0:00,TBA TBA 245 | MAE 150 A00 491092 Truong, Phuong Thi Ngoc 35 LE,MTuWTh,8:00 - 9:20,CENTR 217A|LE,F,8:00 - 9:50,CENTR 217A|FI,2024-08-03,8:00 - 10:59,CENTR 217A|PB,2024-07-01,9:30 - 10:20,CENTR 217A|PB,2024-07-02,9:30 - 10:20,CENTR 217A|PB,2024-07-03,9:30 - 10:20,CENTR 217A|PB,2024-07-05,10:00 - 10:20,CENTR 217A|PB,2024-07-08,9:30 - 10:20,CENTR 217A|PB,2024-07-09,9:30 - 10:20,CENTR 217A|PB,2024-07-10,9:30 - 10:20,CENTR 217A|PB,2024-07-11,9:30 - 10:20,CENTR 217A|PB,2024-07-12,10:00 - 10:20,CENTR 217A|PB,2024-07-15,9:30 - 10:20,CENTR 217A|PB,2024-07-16,9:30 - 10:20,CENTR 217A|PB,2024-07-17,9:30 - 10:20,CENTR 217A|PB,2024-07-18,9:30 - 10:20,CENTR 217A|PB,2024-07-19,10:00 - 10:20,CENTR 217A|PB,2024-07-22,9:30 - 10:20,CENTR 217A|PB,2024-07-23,9:30 - 10:20,CENTR 217A|PB,2024-07-24,9:30 - 10:20,CENTR 217A|PB,2024-07-25,9:30 - 10:20,CENTR 217A|PB,2024-07-26,10:00 - 10:20,CENTR 217A|PB,2024-07-29,9:30 - 10:20,CENTR 217A|PB,2024-07-30,9:30 - 10:20,CENTR 217A|PB,2024-07-31,9:30 - 10:20,CENTR 217A|PB,2024-08-01,9:30 - 10:20,CENTR 217A|PB,2024-08-02,10:00 - 10:20,CENTR 217A 246 | MATH 3C A01 494031 Pardo Guerra, Sebastian 30 LE,MTuWTh,11:00 - 12:20,PETER 104|FI,2024-08-03,11:30 - 14:29,PETER 104|DI,WF,9:00 - 9:50,PODEM 1A22 247 | MATH 3C A02 494032 Pardo Guerra, Sebastian 30 LE,MTuWTh,11:00 - 12:20,PETER 104|FI,2024-08-03,11:30 - 14:29,PETER 104|DI,WF,10:00 - 10:50,PODEM 1A22 248 | MATH 10A A01 494034 Staff 30 LE,MW,11:00 - 13:50,RCLAS R14|FI,2024-08-02,11:30 - 14:29,PETER 103|MI,2024-07-17,15:00 - 15:50,PETER 104|DI,TuTh,12:00 - 12:50,CENTR 217A 249 | MATH 10A A02 494035 Staff 30 LE,MW,11:00 - 13:50,RCLAS R14|FI,2024-08-02,11:30 - 14:29,PETER 103|MI,2024-07-17,15:00 - 15:50,PETER 104|DI,TuTh,13:00 - 13:50,PODEM 1A22 250 | MATH 10A B01 494037 Staff 30 LE,MTuWTh,14:00 - 15:20,PETER 103|FI,2024-08-03,15:00 - 17:59,PETER 103|DI,F,13:00 - 14:50,PODEM 1A22 251 | MATH 10A B02 494038 Staff 30 LE,MTuWTh,14:00 - 15:20,PETER 103|FI,2024-08-03,15:00 - 17:59,PETER 103|DI,F,15:00 - 16:50,PODEM 0132 252 | MATH 10B A01 494040 Habib, Yousaf 30 LE,MTuWTh,9:30 - 10:50,RCLAS R25|FI,2024-08-02,11:30 - 14:29,PETER 110|MI,2024-07-22,16:00 - 17:20,PETER 110|DI,TuTh,12:00 - 12:50,APM B412 253 | MATH 10B A02 494041 Habib, Yousaf 30 LE,MTuWTh,9:30 - 10:50,RCLAS R25|FI,2024-08-02,11:30 - 14:29,PETER 110|MI,2024-07-22,16:00 - 17:20,PETER 110|DI,TuTh,13:00 - 13:50,APM B412 254 | MATH 10B A03 494042 Habib, Yousaf 30 LE,MTuWTh,9:30 - 10:50,RCLAS R25|FI,2024-08-02,11:30 - 14:29,PETER 110|MI,2024-07-22,16:00 - 17:20,PETER 110|DI,TuTh,14:00 - 14:50,APM B412 255 | MATH 10B A04 494043 Habib, Yousaf 30 LE,MTuWTh,9:30 - 10:50,RCLAS R25|FI,2024-08-02,11:30 - 14:29,PETER 110|MI,2024-07-22,16:00 - 17:20,PETER 110|DI,TuTh,15:00 - 15:50,APM B412 256 | MATH 10B B01 494045 Habib, Yousaf 30 LE,MTuWTh,11:00 - 12:20,RCLAS R26|FI,2024-08-02,11:30 - 14:29, |MI,2024-07-22,16:00 - 17:20, |DI,TuTh,14:00 - 14:50,APM 5402 257 | MATH 10B B02 494046 Habib, Yousaf 30 LE,MTuWTh,11:00 - 12:20,RCLAS R26|FI,2024-08-02,11:30 - 14:29, |MI,2024-07-22,16:00 - 17:20, |DI,TuTh,15:00 - 15:50,APM 5402 258 | MATH 10B B03 494047 Habib, Yousaf 30 LE,MTuWTh,11:00 - 12:20,RCLAS R26|FI,2024-08-02,11:30 - 14:29, |MI,2024-07-22,16:00 - 17:20, |DI,TuTh,14:00 - 14:50,HSS 4025 259 | MATH 10B B04 494048 Habib, Yousaf 30 LE,MTuWTh,11:00 - 12:20,RCLAS R26|FI,2024-08-02,11:30 - 14:29, |MI,2024-07-22,16:00 - 17:20, |DI,TuTh,15:00 - 15:50,HSS 4025 260 | MATH 18 A01 494050 Kemp, Todd Aahron 30 LE,MTuWTh,11:00 - 12:20,RWAC 0121|FI,2024-08-02,11:30 - 14:29,RWAC 0121|LA,N/A,0:00 - 0:00,TBA TBA|DI,MW,13:00 - 13:50,APM B412 261 | MATH 18 A02 494051 Kemp, Todd Aahron 30 LE,MTuWTh,11:00 - 12:20,RWAC 0121|FI,2024-08-02,11:30 - 14:29,RWAC 0121|LA,N/A,0:00 - 0:00,TBA TBA|DI,MW,14:00 - 14:50,APM B412 262 | MATH 18 B01 494054 Kemp, Todd Aahron 30 LE,MTuWTh,14:00 - 15:20,RWAC 0121|FI,2024-08-02,15:00 - 17:59,RWAC 0121|LA,N/A,0:00 - 0:00,TBA TBA|DI,MW,16:00 - 16:50,APM B412 263 | MATH 18 B02 494055 Kemp, Todd Aahron 30 LE,MTuWTh,14:00 - 15:20,RWAC 0121|FI,2024-08-02,15:00 - 17:59,RWAC 0121|LA,N/A,0:00 - 0:00,TBA TBA|DI,MW,17:00 - 17:50,APM B412 264 | MATH 20A A01 494059 Suk, Andrew Hoon 30 LE,MW,14:00 - 16:50,HSS 2321|FI,2024-08-02,15:00 - 17:59,HSS 2321|DI,Tu,14:00 - 15:50,PODEM 0132 265 | MATH 20B A01 494061 Briones, Jor-el Thomas Caparas 35 LE,MW,18:00 - 20:50,HSS 1315|FI,2024-08-02,19:00 - 21:59,HSS 1315|DI,Tu,18:00 - 19:50,PODEM 1A22 266 | MATH 20B B01 494063 Bach, Quang Tran 35 LE,MTuWTh,11:00 - 12:20,SOLIS 109|FI,2024-08-02,11:30 - 14:29,SOLIS 109|DI,TuTh,9:00 - 9:50,PODEM 0132 267 | MATH 20C A01 494065 Staff 30 LE,MTuWTh,9:30 - 10:50,HSS 1330|FI,2024-08-02,8:00 - 10:59,HSS 1330|DI,TuTh,11:00 - 11:50,CENTR 220 268 | MATH 20C A02 494066 Staff 30 LE,MTuWTh,9:30 - 10:50,HSS 1330|FI,2024-08-02,8:00 - 10:59,HSS 1330|DI,TuTh,12:00 - 12:50,PODEM 1A22 269 | MATH 20C A03 494067 Staff 30 LE,MTuWTh,9:30 - 10:50,HSS 1330|FI,2024-08-02,8:00 - 10:59,HSS 1330|DI,TuTh,11:00 - 11:50,PODEM 0132 270 | MATH 20C A04 494068 Staff 30 LE,MTuWTh,9:30 - 10:50,HSS 1330|FI,2024-08-02,8:00 - 10:59,HSS 1330|DI,TuTh,12:00 - 12:50,PODEM 1A23 271 | MATH 20C B01 494070 Zhang, Ming 30 LE,MWF,16:00 - 17:50,RCLAS R27|FI,2024-08-03,19:00 - 21:59,LEDDN AUD|MI,2024-07-18,18:30 - 19:50,LEDDN AUD|DI,TuTh,16:00 - 16:50,APM B412 272 | MATH 20C B02 494071 Zhang, Ming 30 LE,MWF,16:00 - 17:50,RCLAS R27|FI,2024-08-03,19:00 - 21:59,LEDDN AUD|MI,2024-07-18,18:30 - 19:50,LEDDN AUD|DI,TuTh,17:00 - 17:50,APM B412 273 | MATH 20C B03 494072 Zhang, Ming 30 LE,MWF,16:00 - 17:50,RCLAS R27|FI,2024-08-03,19:00 - 21:59,LEDDN AUD|MI,2024-07-18,18:30 - 19:50,LEDDN AUD|DI,TuTh,16:00 - 16:50,HSS 4025 274 | MATH 20C B04 494073 Zhang, Ming 30 LE,MWF,16:00 - 17:50,RCLAS R27|FI,2024-08-03,19:00 - 21:59,LEDDN AUD|MI,2024-07-18,18:30 - 19:50,LEDDN AUD|DI,TuTh,17:00 - 17:50,HSS 4025 275 | MATH 20D A01 494075 Staff 30 LE,MW,14:00 - 16:50,MOS 0204|FI,2024-08-02,15:00 - 17:59,MOS 0204|LA,N/A,0:00 - 0:00,TBA TBA|DI,TuTh,14:00 - 14:50,PODEM 1A22 276 | MATH 20D A02 494076 Staff 30 LE,MW,14:00 - 16:50,MOS 0204|FI,2024-08-02,15:00 - 17:59,MOS 0204|LA,N/A,0:00 - 0:00,TBA TBA|DI,TuTh,15:00 - 15:50,PODEM 1A22 277 | MATH 20E A01 494079 Staff 30 LE,MW,11:00 - 13:50,RCLAS R31|FI,2024-08-02,11:30 - 14:29,PODEM 1A19|DI,Tu,9:00 - 10:50,PODEM 1A22 278 | MATH 20E A02 494080 Staff 30 LE,MW,11:00 - 13:50,RCLAS R31|FI,2024-08-02,11:30 - 14:29,PODEM 1A19|DI,Tu,12:00 - 13:50,PODEM 0132 279 | MATH 20E B01 494082 Staff 30 LE,MW,14:00 - 16:50,RCLAS R31|FI,2024-08-02,15:00 - 17:59,PODEM 1A19|DI,Th,12:00 - 13:50,PODEM 0132 280 | MATH 20E B02 494083 Staff 30 LE,MW,14:00 - 16:50,RCLAS R31|FI,2024-08-02,15:00 - 17:59,PODEM 1A19|DI,Th,14:00 - 15:50,PODEM 0132 281 | MATH 103A A01 494085 Aliabadi Sr., Mohsen 30 LE,MW,12:00 - 14:50,PETER 102|FI,2024-08-02,11:30 - 14:29,MANDE B-150|DI,TuTh,13:00 - 13:50,APM 2402 282 | MATH 103A A02 494086 Aliabadi Sr., Mohsen 30 LE,MW,12:00 - 14:50,PETER 102|FI,2024-08-02,11:30 - 14:29,MANDE B-150|DI,TuTh,14:00 - 14:50,APM 2402 283 | MATH 103A B01 494088 Aliabadi Sr., Mohsen 30 LE,MW,15:00 - 17:50,PETER 102|FI,2024-08-02,15:00 - 17:59,MANDE B-150|DI,TuTh,15:00 - 15:50,APM 2402 284 | MATH 103A B02 494089 Aliabadi Sr., Mohsen 30 LE,MW,15:00 - 17:50,PETER 102|FI,2024-08-02,15:00 - 17:59,MANDE B-150|DI,TuTh,16:00 - 16:50,APM 2402 285 | MATH 109 A01 494091 Staff 30 LE,MWF,12:00 - 13:50,MOS 0204|FI,2024-08-03,15:00 - 17:59,MOS 0204|DI,TuTh,12:00 - 12:50,CENTR 220 286 | MATH 109 A02 494092 Staff 30 LE,MWF,12:00 - 13:50,MOS 0204|FI,2024-08-03,15:00 - 17:59,MOS 0204|DI,TuTh,13:00 - 13:50,PODEM 1A23 287 | MATH 109 B01 494094 Staff 30 LE,MTuWTh,12:30 - 13:50,PETER 104|FI,2024-08-02,11:30 - 14:29,PETER 104|DI,WF,15:00 - 15:50,PODEM 1A22 288 | MATH 109 B02 494095 Staff 30 LE,MTuWTh,12:30 - 13:50,PETER 104|FI,2024-08-02,11:30 - 14:29,PETER 104|DI,WF,16:00 - 16:50,PODEM 1A22 289 | MATH 142A A01 494097 Chow, Bennett 30 LE,MTuWTh,13:00 - 14:20,RCLAS R32|FI,2024-08-02,11:30 - 14:29,SOLIS 104|MI,2024-07-19,14:00 - 15:50,SOLIS 104|DI,TuTh,10:00 - 10:50,CENTR 205 290 | MATH 142A A02 494098 Chow, Bennett 30 LE,MTuWTh,13:00 - 14:20,RCLAS R32|FI,2024-08-02,11:30 - 14:29,SOLIS 104|MI,2024-07-19,14:00 - 15:50,SOLIS 104|DI,TuTh,11:00 - 11:50,PODEM 1A22 291 | MATH 142A B01 494100 Chow, Bennett 30 LE,MTuWTh,15:00 - 16:20,RCLAS R32|FI,2024-08-02,11:30 - 14:29, |MI,2024-07-19,14:00 - 15:50, |DI,TuTh,17:00 - 17:50,PODEM 1A22 292 | MATH 142A B02 494101 Chow, Bennett 30 LE,MTuWTh,15:00 - 16:20,RCLAS R32|FI,2024-08-02,11:30 - 14:29, |MI,2024-07-19,14:00 - 15:50, |DI,TuTh,18:00 - 18:50,PODEM 0132 293 | MATH 168A A01 516677 Dumitriu, Ioana 35 LE,MTuWTh,11:00 - 12:20,APM B402A|FI,2024-08-03,11:30 - 14:29,APM B402A|DI,F,11:00 - 12:50,HSS 4025 294 | MATH 170A A01 516679 Dumitriu, Ioana 30 LE,MTuWTh,13:00 - 14:20,APM B402A|FI,2024-08-03,15:00 - 17:59,APM B402A|DI,WF,15:00 - 15:50,HSS 4025 295 | MATH 170A A02 516680 Dumitriu, Ioana 30 LE,MTuWTh,13:00 - 14:20,APM B402A|FI,2024-08-03,15:00 - 17:59,APM B402A|DI,WF,16:00 - 16:50,HSS 4025 296 | MATH 193A A01 494107 Staff 30 LE,MWF,10:00 - 11:50,RCLAS R30|FI,2024-08-03,11:30 - 14:29,HSS 1330|DI,TuTh,10:00 - 10:50,APM B412 297 | MATH 193A A02 494108 Staff 30 LE,MWF,10:00 - 11:50,RCLAS R30|FI,2024-08-03,11:30 - 14:29,HSS 1330|DI,TuTh,11:00 - 11:50,APM B412 298 | MATH 193A A03 494109 Staff 30 LE,MWF,10:00 - 11:50,RCLAS R30|FI,2024-08-03,11:30 - 14:29,HSS 1330|DI,TuTh,10:00 - 10:50,HSS 4025 299 | MATH 193A A04 494110 Staff 30 LE,MWF,10:00 - 11:50,RCLAS R30|FI,2024-08-03,11:30 - 14:29,HSS 1330|DI,TuTh,11:00 - 11:50,HSS 4025 300 | MGT 16 A00 491930 McKay, Michael J 98 LE,TuTh,11:00 - 13:50,OTRSN 1S113|FI,2024-08-03,11:30 - 14:29,OTRSN 1S113 301 | MGT 18 A00 491992 McKay, Michael J 98 LE,TuTh,14:00 - 16:50,OTRSN 1S113|FI,2024-08-03,15:00 - 17:59,OTRSN 1S113 302 | MGT 71 A00 492003 Staff 98 LE,N/A,0:00 - 0:00,TBA TBA 303 | MGT 103 A00 505209 Eberhard, Craig A 98 LE,MW,8:00 - 10:50,RCLAS R26|FI,2024-08-02,8:00 - 10:59,RCLAS R26 304 | MGT 131A A00 505210 Anderson, John Charles 98 LE,TuTh,11:00 - 13:50,RCLAS R55|FI,2024-08-03,11:30 - 14:29,RCLAS R55 305 | MGT 153 A00 492077 Perols, Johan Lars 90 LE,MW,11:00 - 13:50,RCLAS R80|FI,2024-08-02,11:30 - 14:29,RCLAS R80 306 | MGT 164 A00 492222 McKay, Mary A 98 LE,TuTh,11:00 - 13:50,OTRSN 1S114|FI,2024-08-03,11:30 - 14:29,OTRSN 1S114 307 | MGT 172 A00 492245 Staff 60 LE,TuTh,11:00 - 13:50,WFH 1N108|FI,2024-08-03,11:30 - 14:29,WFH 1N108 308 | MGT 172 B00 505526 Hedges, Kathleen 98 LE,MW,17:00 - 19:50,RCLAS R20|FI,2024-08-02,19:00 - 21:59,RCLAS R20 309 | MGT 181 A00 505669 Dunn, Louis Jean 98 LE,TuTh,17:00 - 19:50, |FI,2024-08-03,19:00 - 21:59, 310 | MGT 419 A00 492313 Perez Cavazos, Gerardo & Perez Silva, Andreya Marie 0 LE,N/A,0:00 - 0:00,TBA TBA 311 | MGT 429 A00 492316 Staff 35 LE,W,18:30 - 21:20,WFH 3N129|FI,2024-08-02,19:00 - 21:59,WFH 3N129 312 | MGT 432 A00 492334 Staff 50 LE,Sa,8:00 - 14:00,WFH 3N129 313 | MGT 443 A00 492384 Perez Cavazos, Gerardo & Perez Silva, Andreya Marie 0 LE,N/A,0:00 - 0:00,TBA TBA 314 | MGT 459 A00 626110 Staff 60 LE,Tu,18:30 - 21:20,OTRSN 3E107 315 | MMW 14 A01 494399 Staff 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 316 | MMW 14 A02 494400 Staff 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 317 | MMW 14 A03 494401 Staff 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 318 | MMW 14 A04 494402 Staff 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 319 | MMW 14 B01 494404 Carreras, Maria Victoria 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 320 | MMW 14 B02 494405 Carreras, Maria Victoria 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 321 | MMW 14 B03 494406 Carreras, Maria Victoria 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 322 | MMW 14 B04 494407 Carreras, Maria Victoria 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 323 | MMW 14GS A00 506250 Chang, Edmond Yi-Teh 0 LE,N/A,0:00 - 0:00,TBA TBA 324 | MMW 121R A01 494415 Adamiak, Patrick John 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 325 | MMW 121R A02 494416 Adamiak, Patrick John 28 LE,N/A,0:00 - 0:00,TBA TBA|DI,N/A,0:00 - 0:00,TBA TBA 326 | MUS 1A A01 494113 Staff 25 LE,MW,11:00 - 13:50,RCLAS R36|FI,2024-08-02,11:30 - 14:29,RCLAS R36|LA,MW,14:00 - 14:50,RCLAS R35 327 | MUS 1A A02 494114 Staff 25 LE,MW,11:00 - 13:50,RCLAS R36|FI,2024-08-02,11:30 - 14:29,RCLAS R36|LA,MW,14:00 - 14:50,RCLAS R36 328 | MUS 4 A01 494116 Staff 25 LE,MTuWTh,11:00 - 12:20,RCLAS R37|FI,2024-08-02,11:30 - 14:29,RCLAS R37|LA,MW,12:30 - 13:20,RCLAS R35 329 | MUS 4 A02 494117 Staff 25 LE,MTuWTh,11:00 - 12:20,RCLAS R37|FI,2024-08-02,11:30 - 14:29,RCLAS R37|LA,MW,12:30 - 13:20,RCLAS R37 330 | MUS 5R A01 494236 Dubnov, Shlomo 25 LE,MW,8:00 - 10:50,RCLAS R36|FI,2024-08-02,8:00 - 10:59,RCLAS R36|LA,MW,11:00 - 11:50,RCLAS R32 331 | MUS 5R A02 494237 Dubnov, Shlomo 25 LE,MW,8:00 - 10:50,RCLAS R36|FI,2024-08-02,8:00 - 10:59,RCLAS R36|LA,MW,11:00 - 11:50,RCLAS R34 332 | MUS 6 A01 494122 Staff 25 LE,TuTh,14:00 - 16:50,RCLAS R36|FI,2024-08-03,15:00 - 17:59,RCLAS R36|DI,TuTh,17:00 - 17:50,RCLAS R35 333 | MUS 6 A02 494123 Staff 25 LE,TuTh,14:00 - 16:50,RCLAS R36|FI,2024-08-03,15:00 - 17:59,RCLAS R36|DI,TuTh,17:00 - 17:50,RCLAS R36 334 | MUS 7 A01 494125 Staff 25 LE,MW,14:00 - 16:50,RCLAS R34|FI,2024-08-02,15:00 - 17:59,RCLAS R34|DI,MW,17:00 - 17:50,RCLAS R36 335 | MUS 7 A02 494126 Staff 25 LE,MW,14:00 - 16:50,RCLAS R34|FI,2024-08-02,15:00 - 17:59,RCLAS R34|DI,TuTh,17:00 - 17:50,RCLAS R37 336 | MUS 11 A01 494128 Staff 25 LE,MW,8:00 - 10:50,RCLAS R37|FI,2024-08-02,8:00 - 10:59,RCLAS R37|DI,MW,11:00 - 11:50,RCLAS R35 337 | MUS 11 A02 494129 Staff 25 LE,MW,8:00 - 10:50,RCLAS R37|FI,2024-08-02,8:00 - 10:59,RCLAS R37|DI,MW,11:00 - 11:50,RCLAS R38 338 | MUS 13 A01 494131 Staff 25 LE,MTuWTh,9:30 - 10:50,RCLAS R38|FI,2024-08-02,8:00 - 10:59,RCLAS R38|DI,MW,11:00 - 11:50,RCLAS R39 339 | MUS 13 A02 494132 Staff 25 LE,MTuWTh,9:30 - 10:50,RCLAS R38|FI,2024-08-02,8:00 - 10:59,RCLAS R38|DI,MW,11:00 - 11:50,RCLAS R40 340 | MUS 15 A01 494134 Staff 25 LE,MW,11:00 - 13:50,RCLAS R41|FI,2024-08-02,11:30 - 14:29,RCLAS R41|DI,MW,14:00 - 14:50,RCLAS R37 341 | MUS 15 A02 494135 Staff 25 LE,MW,11:00 - 13:50,RCLAS R41|FI,2024-08-02,11:30 - 14:29,RCLAS R41|DI,MW,14:00 - 14:50,RCLAS R38 342 | MUS 15 B01 494137 Staff 25 LE,TuTh,14:00 - 16:50,CPMC 265|FI,2024-08-03,15:00 - 17:59,CPMC 265|DI,TuTh,17:00 - 17:50,CPMC 265 343 | MUS 80 A00 494232 Staff 25 SE,TuTh,8:00 - 10:50,RCLAS R33|FI,2024-08-03,8:00 - 10:59,RCLAS R33 344 | MUS 80 B00 494233 Staff 25 SE,MW,14:00 - 16:50,RCLAS R33|FI,2024-08-02,15:00 - 17:59,RCLAS R33 345 | MUS 80 C00 494234 Staff 25 SE,TuTh,14:00 - 16:50,RCLAS R33|FI,2024-08-03,15:00 - 17:59,RCLAS R33 346 | MUS 95C A00 494141 Staff 75 ST,TuTh,11:00 - 13:50,RCLAS R31 347 | MUS 114 A00 494142 Staff 50 LE,MW,11:00 - 13:50,RCLAS R33|FI,2024-08-02,11:30 - 14:29,RCLAS R33 348 | NANO 15 A01 490636 Drews, Aaron 7 LE,TuTh,11:00 - 13:50,CENTR 203|FI,2024-08-03,11:30 - 14:29,CENTR 203|LA,W,11:00 - 12:50,CENTR 203 349 | PHIL 1 A00 490578 Grush, Rick Scott 50 LE,TuTh,11:00 - 13:50,CSB 004|FI,2024-08-03,11:30 - 14:29,CSB 004 350 | PHIL 10 A01 490580 Grush, Rick Scott 35 LE,TuTh,14:00 - 15:50,WLH 2205|FI,2024-08-03,15:00 - 17:59,WLH 2205|DI,TuTh,16:00 - 16:50,HSS 1315 351 | PHIL 10 A02 490586 Grush, Rick Scott 35 LE,TuTh,14:00 - 15:50,WLH 2205|FI,2024-08-03,15:00 - 17:59,WLH 2205|DI,TuTh,13:00 - 13:50,CENTR 217A 352 | PHIL 27 A01 490591 Staff 25 LE,MW,11:00 - 12:50,CSB 001|FI,2024-08-02,11:30 - 14:29,CSB 001|DI,MW,13:00 - 13:50,CENTR 203 353 | PHIL 27 A02 490592 Staff 25 LE,MW,11:00 - 12:50,CSB 001|FI,2024-08-02,11:30 - 14:29,CSB 001|DI,MW,14:00 - 14:50,CENTR 218 354 | PHIL 27 A03 490593 Staff 25 LE,MW,11:00 - 12:50,CSB 001|FI,2024-08-02,11:30 - 14:29,CSB 001|DI,MW,10:00 - 10:50,CENTR 205 355 | PHIL 27 A04 490598 Staff 25 LE,MW,11:00 - 12:50,CSB 001|FI,2024-08-02,11:30 - 14:29,CSB 001|DI,MW,9:00 - 9:50,CENTR 205 356 | PHIL 32 A01 490611 Staff 20 LE,TuTh,14:00 - 16:50,WLH 2112|FI,2024-08-03,15:00 - 17:59,WLH 2112|DI,TuTh,17:00 - 17:50,CENTR 201 357 | PHIL 32 A02 490618 Staff 20 LE,TuTh,14:00 - 16:50,WLH 2112|FI,2024-08-03,15:00 - 17:59,WLH 2112|DI,TuTh,12:00 - 12:50,HSS 2305B 358 | PHIL 90 A00 490624 Staff 40 LE,TuTh,14:00 - 16:50,WLH 2115|DI,TuTh,17:00 - 17:50,WLH 2110|DI,TuTh,13:00 - 13:50,HSS 2305B|FI,2024-08-03,15:00 - 17:59,WLH 2115 359 | PHIL 136 A00 490627 Cohen, Jonathan David 40 LE,MW,14:00 - 16:50,WLH 2112|FI,2024-08-02,15:00 - 17:59,WLH 2112 360 | PHIL 155 A00 490634 Staff 70 LE,TuTh,11:00 - 13:50,RCLAS R09|FI,2024-08-03,11:30 - 14:29,RCLAS R09 361 | PHYS 1A A00 491610 Staff 250 LE,MTuWTh,9:30 - 10:50,MOS 0114|FI,2024-08-02,8:00 - 10:59,MOS 0114 362 | PHYS 1AL 001 491616 Tsai, Philbert S 30 LA,TuTh,12:30 - 14:20,MAYER 2306 363 | PHYS 1AL 002 491618 Tsai, Philbert S 30 LA,TuTh,14:30 - 16:20,MAYER 2306 364 | PHYS 1B A00 491623 Staff 250 LE,MTuWTh,9:30 - 10:50,MOS 0113|FI,2024-08-02,8:00 - 10:59,MOS 0113 365 | PHYS 1BL 001 491626 Tsai, Philbert S 30 LA,TuTh,12:30 - 14:20,MAYER 2326 366 | PHYS 1BL 002 491628 Tsai, Philbert S 30 LA,TuTh,14:30 - 16:20,MAYER 2326 367 | PHYS 1C A00 491632 Staff 245 LE,MTuWTh,9:30 - 10:50,FAH 1301|FI,2024-08-02,8:00 - 10:59,FAH 1301 368 | PHYS 1CL 001 491635 Tsai, Philbert S 30 LA,TuTh,12:30 - 14:20,MAYER 2130 369 | PHYS 1CL 002 491643 Tsai, Philbert S 30 LA,TuTh,14:30 - 16:20,MAYER 2130 370 | PHYS 2AR A01 491651 Meyertholen, Andrew D. 50 LE,MTuWTh,12:30 - 13:50,RCLAS R07|LE,Th,17:00 - 18:50,RCLAS R07|FI,2024-08-02,11:30 - 14:29,RCLAS R07|DI,Tu,17:00 - 18:50,RCLAS R03 371 | PHYS 2B A01 491659 Staff 115 LE,MTuWTh,8:00 - 9:20,PCYNH 122|LE,Th,17:00 - 18:50,PCYNH 122|FI,2024-08-02,8:00 - 10:59,PCYNH 122|DI,Tu,17:00 - 18:50,CSB 001 372 | PHYS 2BL A01 491685 Staff 24 LE,MW,10:00 - 10:50,CSB 004|FI,2024-08-02,8:00 - 10:59,CSB 004|LA,TuTh,10:00 - 12:50,MYR-A 2574 373 | PHYS 2BL A02 491700 Staff 24 LE,MW,10:00 - 10:50,CSB 004|FI,2024-08-02,8:00 - 10:59,CSB 004|LA,TuTh,13:00 - 15:50,MYR-A 2574 374 | PHYS 2C A01 505161 Staff 115 LE,MTuWTh,12:30 - 13:50,PCYNH 122|LE,Th,17:00 - 18:50,CSB 002|FI,2024-08-02,11:30 - 14:29,PCYNH 122|DI,Tu,17:00 - 18:50,CSB 002 375 | PHYS 4A A01 491704 Grinstein, Benjamin 100 LE,MTuWTh,11:00 - 12:20,PODEM 1A20|LE,M,17:00 - 18:50,PODEM 1A20|FI,2024-08-02,11:30 - 14:29,PODEM 1A20|DI,Tu,17:00 - 18:50,PODEM 1A20 376 | POLI 5D A01 494144 Staff 5 LE,MW,14:00 - 16:50,RWAC 0103|FI,2024-08-03,15:00 - 17:59,RWAC 0103|LA,F,15:00 - 16:50,WLH 2207 377 | POLI 12 A00 494145 Staff 45 LE,TuTh,14:00 - 16:50,SOLIS 110|FI,2024-08-03,15:00 - 17:59,SOLIS 110 378 | POLI 13R A00 494146 Forman, Fonna 50 LE,MW,8:00 - 10:50,RCLAS R42|FI,2024-08-02,8:00 - 10:59,RCLAS R42 379 | POLI 27 A01 494148 Staff 60 LE,MW,14:00 - 15:50,RCLAS R42|FI,2024-08-02,15:00 - 17:59,RCLAS R42|DI,MW,16:00 - 16:50,RCLAS R42 380 | POLI 30 A00 494149 Staff 50 LE,MTuWTh,14:00 - 15:20,PCYNH 120|FI,2024-08-02,15:00 - 17:59,PCYNH 120 381 | POLI 100DA A00 494150 Staff 25 LE,TuTh,11:00 - 13:50,RCLAS R35|FI,2024-08-03,11:30 - 14:29,RCLAS R35 382 | POLI 100I A00 494152 Staff 30 LE,TuTh,11:00 - 13:50,RCLAS R42|FI,2024-08-03,11:30 - 14:29,RCLAS R42 383 | POLI 104B A00 494153 Smith, Glenn Chatmas 55 LE,MW,14:00 - 16:50,CSB 004|FI,2024-08-02,15:00 - 17:59,CSB 004 384 | POLI 104F A00 494154 Staff 30 LE,MW,11:00 - 13:50,RCLAS R43 385 | POLI 104I A00 494155 Smith, Glenn Chatmas 30 LE,TuTh,11:00 - 13:50,CENTR 205|FI,2024-08-03,11:30 - 14:29,CENTR 205 386 | POLI 110C A00 494156 Ingham, Sean 25 LE,MTuWTh,8:00 - 9:20,RCLAS R41|FI,2024-08-02,8:00 - 10:59,RCLAS R41 387 | POLI 117R A00 494157 Forman, Fonna 20 LE,F,9:00 - 10:50,RCLAS R02|FI,2024-08-03,8:00 - 10:59,RCLAS R45 388 | POLI 118 A00 494158 Ingham, Sean 25 LE,MW,11:00 - 13:50,RCLAS R45|FI,2024-08-02,11:30 - 14:29,RCLAS R45 389 | POLI 120H A00 494159 Fisk, David Lee 45 LE,MW,14:00 - 16:50,RCLAS R43|FI,2024-08-02,15:00 - 17:59,RCLAS R43 390 | POLI 131CR A00 494160 Hoston, Germaine 45 LE,MW,17:00 - 19:50,RCLAS R42|FI,2024-08-02,19:00 - 21:59,RCLAS R42 391 | POLI 133J A00 494161 Staff 35 LE,MTuWTh,17:00 - 18:20,RCLAS R43|FI,2024-08-02,19:00 - 21:59,RCLAS R43 392 | POLI 135 A00 494162 Fisk, David Lee 35 LE,TuTh,14:00 - 16:50,RCLAS R43|FI,2024-08-03,15:00 - 17:59,RCLAS R43 393 | POLI 140A A00 494164 Staff 30 LE,MW,11:00 - 13:50,RCLAS R44|FI,2024-08-02,11:30 - 14:29,RCLAS R44 394 | POLI 142I A00 494165 Staff 30 LE,MTuWTh,12:30 - 13:50,HSS 1305|FI,2024-08-02,11:30 - 14:29,HSS 1305 395 | POLI 144D A00 494166 Staff 25 LE,TuTh,8:00 - 10:50,RCLAS R42|FI,2024-08-03,8:00 - 10:59,RCLAS R42 396 | POLI 151 A00 494167 Staff 30 LE,MW,11:00 - 13:50,SOLIS 111|FI,2024-08-02,11:30 - 14:29,SOLIS 111 397 | POLI 153 A00 494168 Staff 35 LE,TuTh,11:00 - 13:50,SOLIS 111|FI,2024-08-03,11:30 - 14:29,SOLIS 111 398 | POLI 160AA A00 494169 Staff 40 LE,MW,8:00 - 10:50,RCLAS R44|FI,2024-08-02,8:00 - 10:59,RCLAS R04 399 | POLI 162 A00 494170 Mignozzetti, Umberto 25 LE,MTuWTh,17:00 - 18:20,RCLAS R44|FI,2024-08-02,19:00 - 21:59,RCLAS R44 400 | POLI 171 A00 494171 Mignozzetti, Umberto 25 LE,MTuWTh,18:30 - 19:50,RCLAS R45|FI,2024-08-02,19:00 - 21:59,RCLAS R45 401 | PSYC 1 A00 494172 Staff 100 LE,TuTh,8:00 - 10:50,FAH 1101|FI,2024-08-03,8:00 - 10:59,FAH 1101 402 | PSYC 2 A00 494173 Moranton, Nirelia Melbina- 50 LE,MW,8:00 - 10:50,RCLAS R46|FI,2024-08-02,8:00 - 10:59,RCLAS R46 403 | PSYC 3 A00 494174 Staff 30 LE,MW,11:00 - 13:50,CENTR 205|FI,2024-08-02,11:30 - 14:29,CENTR 205 404 | PSYC 6 A00 494175 Staff 20 LE,TuTh,17:00 - 19:50,HSS 2305A|FI,2024-08-03,19:00 - 21:59,HSS 2305A 405 | PSYC 60 A01 494177 Staff 45 LE,MW,17:00 - 19:50,RCLAS R46|FI,2024-08-02,19:00 - 21:59,RCLAS R46|DI,TuTh,16:00 - 16:50,RCLAS R46 406 | PSYC 70 A01 505724 Geller, Emma Harlan 45 LE,MTuWTh,9:30 - 10:50,MCGIL 1350|FI,2024-08-02,8:00 - 10:59,MCGIL 1350|DI,TuTh,11:00 - 11:50,MCGIL 1350 407 | PSYC 101 A00 494180 Heyman, Gail D. 100 LE,TuTh,11:00 - 13:50,CSB 001|FI,2024-08-03,11:30 - 14:29,CSB 001 408 | PSYC 105 A00 494181 Geller, Emma Harlan 90 LE,MTuWTh,11:00 - 12:20,RCLAS R46|FI,2024-08-02,11:30 - 14:29,RCLAS R46 409 | PSYC 106 A00 494182 Dobkins, Karen R. 45 LE,TuTh,8:00 - 10:50,PODEM 1A23|FI,2024-08-03,8:00 - 10:59,PODEM 1A23 410 | PSYC 108 A00 494183 Adrian, Julia Anna 100 LE,TuTh,14:00 - 16:50,FAH 1101|FI,2024-08-03,15:00 - 17:59,FAH 1101 411 | PSYC 114 A01 494185 Winkielman, Piotr 30 LE,TuTh,8:00 - 9:50,RCLAS R46|FI,2024-08-03,8:00 - 10:59,RCLAS R46|LA,TuTh,10:00 - 10:50,RCLAS R46 412 | PSYC 122 A00 494186 Moranton, Nirelia Melbina- 50 LE,TuTh,8:00 - 10:50,RCLAS R47|FI,2024-08-03,8:00 - 10:59,RCLAS R47 413 | PSYC 124 A00 494187 Chapman, Eddie Nathaniel 80 LE,MTu,17:00 - 19:50,HSS 1330|FI,2024-08-02,19:00 - 21:59,HSS 1330 414 | PSYC 131 A00 494188 Anagnostaras, Stephan 80 LE,TuTh,18:00 - 20:50,RCLAS R46 415 | PSYC 144 A00 494189 Staff 50 LE,TuTh,18:00 - 20:50,RCLAS R47|FI,2024-08-03,19:00 - 21:59,RCLAS R47 416 | PSYC 154 A00 494190 Lacefield, Katharine I 180 LE,TuTh,14:00 - 16:50,RCLAS R50|FI,2024-08-03,15:00 - 17:59,RCLAS R50 417 | PSYC 162 A00 494191 Wixted, John T 100 LE,TuTh,11:00 - 13:50,RCLAS R47|FI,2024-08-03,11:30 - 14:29,RCLAS R47 418 | PSYC 172 A00 494192 Gorman, Michael R. 45 LE,MW,17:00 - 19:50,SOLIS 110|FI,2024-08-02,19:00 - 21:59,SOLIS 110 419 | PSYC 178 A00 494193 Glaser, Dale 45 LE,MW,11:00 - 13:50,SOLIS 110|FI,2024-08-02,11:30 - 14:29,SOLIS 110 420 | PSYC 193 A00 505725 Chapman, Eddie Nathaniel 20 LE,MTu,8:00 - 10:50,MNDLR 1539|FI,2024-08-02,8:00 - 10:59,MNDLR 1539 421 | RELI 145GS A00 519817 Rahimi, Babak 20 LE,N/A,0:00 - 0:00,TBA TBA|OT,N/A,0:00 - 0:00,TBA TBA 422 | SE 101A A01 490862 Chadha, Mayank 25 LE,MTuWTh,11:00 - 12:20,RCLAS R90|FI,2024-08-02,11:30 - 14:29,RCLAS R90|DI,TuTh,14:00 - 14:50,RCLAS R90 423 | SE 101C A01 490924 Krysl, Petr 20 LE,TuTh,11:00 - 13:50,HSS 2305A|FI,2024-08-03,11:30 - 14:29,HSS 2305A|DI,TuTh,14:00 - 14:50,WLH 2110 424 | SE 110A A01 490928 Staff 20 LE,MW,11:00 - 13:50,HSS 2305B|FI,2024-08-02,11:30 - 14:29,HSS 2305B|DI,MW,14:00 - 14:50,CENTR 217A 425 | SE 130A A00 490929 Morrison, Machel Leigh 70 LE,MTuWTh,15:30 - 16:50,RCLAS R70|LE,MW,17:00 - 17:50,RCLAS R70|FI,2024-08-02,15:00 - 17:59,RCLAS R70 426 | SIO 1 A01 519325 Staff 40 LE,MTuWTh,9:30 - 10:50,ECKRT 227|FI,2024-08-02,8:00 - 10:59,ECKRT 227|DI,F,9:30 - 11:20,VAUGN 100 427 | SIO 30 A01 519327 Staff 40 LE,MTuWTh,11:00 - 12:20,ECKRT 227|FI,2024-08-02,11:30 - 14:29,ECKRT 227|DI,TuW,12:30 - 13:20,ECKRT 227 428 | SIO 40 A00 519328 Staff 40 LE,MTuWTh,14:00 - 15:20,ECKRT 127|FI,2024-08-02,15:00 - 17:59,ECKRT 127 429 | SIO 46GS A00 519819 Cook, Geoffrey W 25 LE,N/A,0:00 - 0:00,TBA TBA 430 | SIO 109R A00 494197 Forman, Fonna 20 LE,F,9:00 - 10:50,RCLAS R02|FI,2024-08-03,8:00 - 10:59,RCLAS R45 431 | SIO 121GS A00 519827 Cook, Geoffrey W 25 LE,N/A,0:00 - 0:00,TBA TBA 432 | SIO 132 A01 519330 Staff 40 LE,TuTh,11:00 - 13:50,ECKRT 127|FI,2024-08-03,11:30 - 14:29,ECKRT 127|DI,W,11:00 - 12:50,ECKRT 127 433 | SIO 133 A01 519397 Staff 40 LE,TuTh,14:00 - 16:50,VAUGN 100|FI,2024-08-03,15:00 - 17:59,VAUGN 100|DI,W,14:00 - 15:50,VAUGN 100 434 | SIO 139 A00 519396 Kacev, David 40 SE,TuTh,9:00 - 10:50,RCLAS R30|FI,2024-08-03,8:00 - 10:59,RCLAS R30 435 | SOCI 1 A01 494199 Thorpe, Charles Robert 30 LE,TuTh,8:00 - 10:50,RCLAS R50|FI,2024-08-03,8:00 - 10:59,RCLAS R50|DI,TuTh,11:00 - 11:50,RCLAS R50 436 | SOCI 1 A02 494200 Thorpe, Charles Robert 30 LE,TuTh,8:00 - 10:50,RCLAS R50|FI,2024-08-03,8:00 - 10:59,RCLAS R50|DI,TuTh,12:00 - 12:50,RCLAS R50 437 | SOCI 1 A03 494201 Thorpe, Charles Robert 30 LE,TuTh,8:00 - 10:50,RCLAS R50|FI,2024-08-03,8:00 - 10:59,RCLAS R50|DI,MW,14:00 - 14:50,RCLAS R50 438 | SOCI 1 A04 494202 Thorpe, Charles Robert 30 LE,TuTh,8:00 - 10:50,RCLAS R50|FI,2024-08-03,8:00 - 10:59,RCLAS R50|DI,MW,15:00 - 15:50,RCLAS R50 439 | SOCI 1 A05 494203 Thorpe, Charles Robert 30 LE,TuTh,8:00 - 10:50,RCLAS R50|FI,2024-08-03,8:00 - 10:59,RCLAS R50|DI,TuTh,17:00 - 17:50,RCLAS R50 440 | SOCI 1 A06 494204 Thorpe, Charles Robert 30 LE,TuTh,8:00 - 10:50,RCLAS R50|FI,2024-08-03,8:00 - 10:59,RCLAS R50|DI,TuTh,18:00 - 18:50,RCLAS R50 441 | SOCI 1 A07 494205 Thorpe, Charles Robert 30 LE,TuTh,8:00 - 10:50,RCLAS R50|FI,2024-08-03,8:00 - 10:59,RCLAS R50|DI,TuTh,19:00 - 19:50,RCLAS R50 442 | SOCI 60 A01 494207 Staff 40 LE,TuTh,14:00 - 16:50,RCLAS R51|FI,2024-08-03,15:00 - 17:59,RCLAS R51|DI,MW,14:00 - 14:50,RCLAS R51 443 | SOCI 60 A02 494208 Staff 40 LE,TuTh,14:00 - 16:50,RCLAS R51|FI,2024-08-03,15:00 - 17:59,RCLAS R51|DI,MW,15:00 - 15:50,RCLAS R51 444 | SOCI 100 A01 494210 Payne, Christine Anna 30 LE,MW,14:00 - 16:50,RCLAS R52|FI,2024-08-02,15:00 - 17:59,RCLAS R52|DI,MW,12:00 - 12:50,RCLAS R52 445 | SOCI 100 A02 494211 Payne, Christine Anna 30 LE,MW,14:00 - 16:50,RCLAS R52|FI,2024-08-02,15:00 - 17:59,RCLAS R52|DI,MW,13:00 - 13:50,RCLAS R52 446 | SOCI 109M A00 494212 Staff 20 LE,MW,11:00 - 13:50,RCLAS R53|FI,2024-08-02,11:30 - 14:29,RCLAS R53 447 | SOCI 110 A00 494213 Staff 40 LE,MW,8:00 - 10:50,RCLAS R53 448 | SOCI 118E A00 494215 Ng, Kwai 40 LE,MW,8:00 - 10:50,RCLAS R54|FI,2024-08-02,8:00 - 10:59,RCLAS R54 449 | SOCI 125 A00 494216 Calderon-Zaks, Michael Aar 45 LE,MW,11:00 - 13:50,RCLAS R54|FI,2024-08-02,11:30 - 14:29,RCLAS R54 450 | SOCI 126 A01 494218 Jones, Makeba 5 LE,TuTh,11:00 - 13:50,RCLAS R11|FI,2024-08-03,11:30 - 14:29,RCLAS R11|DI,N/A,0:00 - 0:00,TBA TBA 451 | SOCI 131 A00 494219 Thorpe, Charles Robert 30 LE,TuTh,14:00 - 16:50,RCLAS R53|FI,2024-08-03,15:00 - 17:59,RCLAS R53 452 | SOCI 135 A00 494221 Payne, Christine Anna 50 LE,TuTh,11:00 - 13:50,RCLAS R54|FI,2024-08-03,11:30 - 14:29,RCLAS R54 453 | SOCI 138GS A00 494222 Navon, Daniel 28 LE,N/A,0:00 - 0:00,TBA TBA 454 | SOCI 145 A00 494224 Staff 45 LE,TuTh,11:00 - 13:50,SOLIS 110|FI,2024-08-02,8:00 - 10:59,SOLIS 110 455 | SOCI 153 A00 494225 Staff 30 LE,TuTh,17:00 - 19:50,RCLAS R05|FI,2024-08-03,19:00 - 21:59,RCLAS R02 456 | SOCI 160E A00 494226 Ng, Kwai 40 LE,MW,11:00 - 13:50,RCLAS R55|FI,2024-08-02,11:30 - 14:29,RCLAS R55 457 | SOCI 180 A00 494227 Staff 30 LE,TuTh,8:00 - 10:50,RCLAS R51|FI,2024-08-03,8:00 - 10:59,RCLAS R51 458 | SOCI 189GS A00 494228 Ribas Norris, Janet Vanesa 5 LE,N/A,0:00 - 0:00,TBA TBA 459 | SOCI 190GS A00 553232 Ribas Norris, Janet Vanesa 11 LE,N/A,0:00 - 0:00,TBA TBA 460 | SYN 2 001 490768 Staff 15 SE,MW,9:30 - 12:20,HSS 7076 461 | SYN 2 002 490769 Staff 15 SE,TuTh,12:30 - 15:20,HSS 7076 462 | SYN 2 004 490775 Staff 0 SE,TuTh,9:30 - 12:20,HSS 7076 463 | SYN 2 003 490774 Staff 0 SE,N/A,0:00 - 0:00,TBA TBA 464 | SYN 2 005 490776 Staff 0 SE,N/A,0:00 - 0:00,TBA TBA 465 | SYN 2R 001 490779 Staff 15 SE,MW,12:30 - 15:20,RCLAS R20 466 | SYN 2R 002 514635 Staff 15 SE,TuTh,11:00 - 13:50,RCLAS R45 467 | SYN 100 A01 490783 Staff 20 LE,MW,9:30 - 12:20,HSS 7077|DI,MW,12:30 - 13:20,HSS 7077 468 | SYN 100 B01 490787 Staff 20 LE,MW,13:30 - 16:20,HSS 7077|DI,MW,16:30 - 17:20,HSS 7077 469 | SYN 100 C01 490789 Staff 20 LE,MW,12:30 - 15:20,HSS 7076|DI,MW,15:30 - 16:20,HSS 7076 470 | SYN 150 A00 490817 Staff 15 SE,MW,9:30 - 12:20,RCLAS R50 471 | SYN 150 B00 514610 Staff 15 SE,TuTh,11:00 - 13:50,HSS 7077 472 | TDAC 1 A00 492753 Walsh, Kim C. 20 LA,TuTh,10:00 - 12:50,GH 15|FI,2024-08-03,8:00 - 10:59,GH 15 473 | TDAC 1 B00 492754 Harting, Carla Kelso 20 LA,MW,9:00 - 11:50,GH 155|FI,2024-08-02,8:00 - 10:59,GH 155 474 | TDAC 1 C00 513995 Salovey, Todd 20 LA,TuTh,14:00 - 16:50,GH 320|FI,2024-08-03,15:00 - 17:59,GH 320 475 | TDAC 101 A00 492766 Harting, Carla Kelso 20 ST,TuTh,13:00 - 15:50,GH 15 476 | TDAC 102 A00 492768 Basso, Beatrice 20 ST,TuTh,9:00 - 12:50,RCLAS R19|FI,2024-08-03,8:00 - 10:59,RCLAS R19 477 | TDDE 111 A00 492769 Staff 25 ST,TuTh,8:00 - 10:50,RCLAS R09 478 | TDDE 131 A00 492770 Staff 15 ST,TuTh,14:00 - 16:50,GH 102|FI,2024-08-03,15:00 - 17:59,GH 102 479 | TDDE 131 B00 492771 Staff 15 ST,TuTh,9:00 - 11:50,RCLAS R20|FI,2024-08-03,8:00 - 10:59,RCLAS R20 480 | TDDE 131GS A00 523716 Guirguis, Mark C 28 ST,N/A,0:00 - 0:00,TBA TBA 481 | TDGE 1 A01 492756 Salovey, Todd 60 LE,TuTh,9:00 - 10:50,RCLAS R18|FI,2024-08-03,8:00 - 10:59,RCLAS R18|DI,TuTh,11:00 - 11:50,RCLAS R18 482 | TDGE 5 A01 492758 Staff 25 LE,MW,11:00 - 12:50,GH 247|FI,2024-08-03,11:30 - 14:29,GH 247|ST,F,12:00 - 15:50,GH 247 483 | TDGE 10 A00 492759 Fulton, Julia 220 LE,MW,11:00 - 13:50,RCLAS R17 484 | TDGE 11 A00 492760 Castro, Robert Jess 200 LE,MW,10:00 - 12:50,RCLAS R18|FI,2024-08-02,8:00 - 10:59,RCLAS R18 485 | TDGE 50 A00 492761 Blair, Kyle Adam 90 ST,TuTh,9:00 - 11:50,GH 157|FI,2024-08-03,8:00 - 10:59,GH 157 486 | TDGE 124 A00 492772 Fulton, Julia 220 LE,MW,14:00 - 16:50,RCLAS R08 487 | TDGE 125 A00 492773 Meyer, Ursula 50 LE,TuTh,11:00 - 13:50,RCLAS R21|FI,2024-08-03,11:30 - 14:29,RCLAS R21 488 | TDGE 125 B00 492774 Staff 50 LE,MW,14:00 - 16:50,RCLAS R09|FI,2024-08-02,15:00 - 17:59,RCLAS R09 489 | TDGE 125 C00 523565 Staff 50 LE,MW,9:00 - 11:50,RCLAS R47|FI,2024-08-02,8:00 - 10:59,RCLAS R47 490 | TDGE 125GS A00 523580 Guirguis, Mark C 28 LE,N/A,0:00 - 0:00,TBA TBA 491 | TDGE 127 A00 492775 Havis, Allan 50 LE,TuTh,11:00 - 13:50,RCLAS R22|FI,2024-08-03,11:30 - 14:29,RCLAS R22 492 | TDHT 101 A00 492776 Staff 35 LE,TuTh,13:00 - 15:50,HSS 1315|FI,2024-08-03,11:30 - 14:29,HSS 1315 493 | TDMV 1 A00 492762 Caligagan, Maria T. 30 ST,MW,11:00 - 13:50,DANCE 1|FI,2024-08-02,11:30 - 14:29,DANCE 1 494 | TDMV 1 B00 492763 Arcidiacono, Kristin 30 ST,TuTh,17:00 - 19:50,DANCE 1|FI,2024-08-03,19:00 - 21:59,DANCE 1 495 | TDMV 2 A00 492764 Weinberg, Sadie 30 ST,TuTh,11:00 - 13:50,DANCE 2|FI,2024-08-03,11:30 - 14:29,DANCE 2 496 | TDMV 3 A00 492765 Mack, Kara Shanai' 40 ST,MW,11:00 - 13:50,DANCE 2|FI,2024-08-02,11:30 - 14:29,DANCE 2 497 | TDMV 138 A00 492777 Mack, Kara Shanai' 40 ST,MW,14:00 - 16:50,DANCE 3|FI,2024-08-02,15:00 - 17:59,DANCE 3 498 | TDMV 140 A00 492778 Lima, Paulo Henrique 40 ST,TuTh,11:00 - 13:50,DANCE 3|FI,2024-08-03,11:30 - 14:29,DANCE 3 499 | TDMV 142 A00 492779 Caligagan, Maria T. 40 ST,TuTh,14:00 - 16:50,DANCE 3|FI,2024-08-03,15:00 - 17:59,DANCE 3 500 | TDMV 142 B00 492780 Caligagan, Tony 40 ST,MW,11:00 - 13:50,DANCE 3|FI,2024-08-02,11:30 - 14:29,DANCE 3 501 | TDMV 143 A00 492781 Fyall, Daunte Edward 40 ST,MW,14:00 - 16:50,DANCE 2|FI,2024-08-02,15:00 - 17:59,DANCE 2 502 | USP 1 A01 492401 Kwak, Nancy 35 LE,TuTh,14:00 - 16:50,RCLAS R07|FI,2024-08-03,15:00 - 17:59,RCLAS R02|DI,W,14:00 - 15:50,RCLAS R11 503 | USP 2 A01 492453 Hinds, Juli Beth 35 LE,MW,11:00 - 13:50,RWAC 0104|FI,2024-08-02,11:30 - 14:29,RWAC 0104|DI,Tu,11:00 - 12:50,RWAC 0104 504 | USP 3 A01 492516 Staff 35 LE,TuTh,11:00 - 13:50,RCLAS R23|FI,2024-08-03,11:30 - 14:29,RCLAS R02|DI,W,11:00 - 12:50,RCLAS R19 505 | USP 4 A00 492522 McTague, Sarah 25 LA,TuTh,17:00 - 19:50,RCLAS R04|FI,2024-08-03,19:00 - 21:59,RCLAS R01 506 | USP 100 A00 492523 Staff 35 LE,TuTh,17:00 - 19:50,RWAC 0104|FI,2024-08-03,19:00 - 21:59,RWAC 0104 507 | USP 101 A00 492524 Staff 15 LE,MW,8:00 - 10:50,RCLAS R15|FI,2024-08-02,8:00 - 10:59,RCLAS R04 508 | USP 105 A00 492525 Staff 25 LE,TuTh,17:00 - 19:50,RCLAS R05|FI,2024-08-03,19:00 - 21:59,RCLAS R02 509 | USP 151 A00 492526 Shenkman, Michael Thomas 35 LE,TuTh,8:00 - 10:50,RWAC 0104|FI,2024-08-03,8:00 - 10:59,RWAC 0104 510 | USP 170 A00 492545 Hinds, Juli Beth 35 LE,MW,14:00 - 16:50,RCLAS R12|FI,2024-08-02,15:00 - 17:59,RCLAS R01 511 | USP 171GS A00 492608 Bussell, Mirle Rabinowitz 28 LE,N/A,0:00 - 0:00,TBA TBA 512 | USP 183GS A00 492613 Peerson, Susan 28 PR,N/A,0:00 - 0:00,TBA TBA 513 | VIS 30 A01 490693 Yoldas, Pinar 22 LE,TuTh,14:00 - 16:50,SOLIS 109|FI,2024-08-03,15:00 - 17:59,SOLIS 109|LA,WF,10:00 - 11:50,MANDE B-114 514 | VIS 30 A02 490694 Yoldas, Pinar 22 LE,TuTh,14:00 - 16:50,SOLIS 109|FI,2024-08-03,15:00 - 17:59,SOLIS 109|LA,WF,12:00 - 13:50,MANDE B-114 515 | VIS 83 A00 490695 Kester, Grant 75 LE,MTuWF,11:00 - 12:20,RCLAS R15|FI,2024-08-03,11:30 - 14:29,RCLAS R05 516 | VIS 105D A00 490696 Staff 25 ST,MTuW,13:00 - 16:50,MANDE 219|FI,2024-08-02,11:30 - 14:29,MANDE 219 517 | VIS 124CN A00 490699 Rose, Jordan M 75 LE,MW,11:00 - 13:50,RCLAS R11|FI,2024-08-02,11:30 - 14:29,RCLAS R01 518 | VIS 125GS A00 511221 Williams, Alena J 22 LE,N/A,0:00 - 0:00,TBA TBA 519 | VIS 128D A00 490700 Staff 75 LE,MTuWTh,14:00 - 15:20,SME 149|FI,2024-08-02,15:00 - 17:59,SME 149 520 | VIS 151 A01 490717 Staff 34 LE,TuW,11:00 - 13:50,SME 149|FI,2024-08-02,11:30 - 14:29,SME 149|DI,Th,10:00 - 11:50,MANDE B111E 521 | VIS 151 A02 490766 Staff 34 LE,TuW,11:00 - 13:50,SME 149|FI,2024-08-02,11:30 - 14:29,SME 149|DI,Th,12:00 - 13:50,MANDE B111E 522 | VIS 154GS A00 511972 Williams, Alena J 22 LE,N/A,0:00 - 0:00,TBA TBA 523 | VIS 160A A00 490767 Stone, Patricia 10 SE,MW,14:00 - 16:50,MANDE B-114|FI,2024-08-02,15:00 - 17:59,MANDE B-114 524 | WCWP 10A A00 490638 Staff 15 SE,MW,11:00 - 13:50,EBU3B 1124 525 | WCWP 10A B00 490640 Staff 15 SE,TuTh,8:00 - 10:50,EBU3B 1124 526 | WCWP 10B A00 490641 Staff 0 SE,MW,11:00 - 13:50,WSAC 132 527 | WCWP 10B B00 490642 Staff 15 SE,MW,14:00 - 16:50,EBU3B 1124 528 | WCWP 10B C00 490644 Staff 15 SE,TuTh,11:00 - 13:50,EBU3B 1124 529 | WCWP 10B D00 490647 Staff 0 SE,TuTh,14:00 - 16:50,EBU3B 1124 530 | WCWP 100 A00 490655 Staff 0 LE,MW,14:00 - 16:50,WSAC 132 531 | WCWP 100 B00 490687 Staff 15 LE,TuTh,11:00 - 13:50,WSAC 132 532 | --------------------------------------------------------------------------------