diff --git a/data/-- SQLite.sql b/data/-- SQLite.sql index 8ce0c24f..51e71cf7 100644 --- a/data/-- SQLite.sql +++ b/data/-- SQLite.sql @@ -1,4 +1,4 @@ --- CREATE TABLE CE_CLASSES AS -SELECT a.* -FROM allgrades AS a -WHERE subject_id='CE' AND (course_number BETWEEN 1000 AND 5000) AND (year=2023 or year=2024) AND (section_number LIKE '0_1' or (course_number='4310' or course_number='4320'))); +-- Remove the SC from each Column +SELECT * FROM ClassesForCE +-- Add Univ En and ENGR to CE data base +-- \ No newline at end of file diff --git a/data/CE Degree Plan CSV.csv b/data/CE Degree Plan CSV.csv deleted file mode 100644 index d39d32f4..00000000 --- a/data/CE Degree Plan CSV.csv +++ /dev/null @@ -1,82 +0,0 @@ -Formal Name,Course Name,Prerequisites,Corequisites -CE 1105,Introduction to Civil Engineering,[None],[None] -CHEM 1465,Chemistry for Engineers,[None],['MATH 1421'] -ENGL 1301,Rhetoric and Composition I,[None],[None] -CE 1252,Computer Tools,[None],['MATH 1402'] -UNIV-EN 1131,Student Success, [None],[None] -ENGR 1101, Entrance to Engineering for Transfer Students,[None],[None] -MATH 1426,Calculus I,[None],[None] -IE 2308,Engineering Economy,[None],['MATH 1426'] -MATH 2425,Calculus II,['MATH 1426'],[None] -PHYS 1443,General Technical Physics I,['MATH 1426'],[None] -POLS 2311,Government of the US,[None],[None] -HIST 13XX,U.S. History Elective,[None],[None] -CE 2311,Statics,['PHYS 1443'],[None] -CE 2153,Computer Tools-Civil 3D,['CE 1252'],[None] -COMS 2302,Professional & Technical Communication for Scientists & Engineers,"['30 Semester Credit hours', 'ENGL 1301']",[None] -MATH 2326,Calculus III,['MATH 2425'],[None] -PHYS 1444,General Technical Physics II,['PHYS 1443'],['MATH 2425'] -HIST 13XX,U.S. History Elective,[None],[None] -CE 2221,Dynamics,"['CE 2311', 'MATH 2425']",[None] -CE 2313,Mechanics of Materials,"['CE 2311', 'MATH 2425']",[None] -CE 2331,Engineering Measurement & Computer Modeling,['CE 2153'],[None] -MATH 3319,Differential Equations & Linear Algebra,[None],['MATH 2326'] -CE 3301,Stochastic Models,['MATH 2425'],[None] -GEOL 3340,Geology for Engineers,"['CHEM 1465', 'PHYS 1443']",[None] -CE 3210,CE Communications,['COMS 2302'],[None] -CE 3253,Applications of Computer-Based Design Programs in CE,"['CE 2153', 'CE 2331']",[None] -CE 3305,Basic Fluid Mechanics,['CE 2311'],"['MATH 3319', 'CE 3142']" -CE 3142,Applied Fluid Mechanics Lab,[None],['CE 3305'] -CE 3341,Structural Analysis,['CE 2313'],[None] -CE 3343,Soil Mechanics,['CE 2313'],['CE 3143'] -CE 3143,Properties & Behavior of Soils,[None],['CE 3343'] -POLS 2312,State and Local Government,[None],[None] -CE 3302,Transportation Engineering,"['CE 2331', 'CE 3301']",[None] -CE 3361,Properties & Behavior of CE Materials,['CE 3143'],[None] -CE 3311,Construction Engineering,['IE 2308'],[None] -CE 3342,Introduction to Water Resources,"['CE 3301', 'CE 3305']",[None] -CE 3334,Principles of Environmental Engineering,"['CHEM 1465', 'CE 3305']",['CE 3131'] -CE 3131,Environmental Analysis,[None],['CE 3334'] -CE 4347,Reinforced Concrete Design,['CE 3341'],[None] -CE 4328,Water System Design,['CE 3342'],[None] -CE 4352,Professional Practice,['CE 3311'],[None] -CE 4383,Senior Project,"['CE 4352', 'CE4328 or CE4347', 'All CE 3000 level courses']",[None] -CE 43XX ,Senior Technical Elective (1),[None],[None] -CE 43XX ,Senior Technical Elective (2),[None],[None] -CE 43XX ,Senior Technical Elective (3),[None],[None] -CE 43XX ,Senior Technical Elective (4),[None],[None] -LPC XXXX,"Language, Philosophy, and Culture Elective",[None],[None] -CA XXXX,Creative Arts,[None],[None] -CE 4305,Trenchless Technology Methods,['CE 3311'],[None] -CE 4306,Infrastructure Asset Management,['CE 3311'],[None] -CE 4332,"Construction Equipment, Methods, & Management",['CE 3311'],[None] -CE 4350,Introduction to Air Pollution,['CE 3334'],[None] -CE 4351,Physical Unit Processes,"['CE 3131', 'CE 3334']",[None] -CE 4353,Water Chemistry,"['CE 3334', 'CE 3131']",[None] -CE 4354,Introduction to Solid Waste Engineering,['CE 3334'],[None] -CE 4355,Design of Water and Wastewater Treatment Facilities,"['CE 3334', 'CE 3142']",[None] -CE 4320,Earth Structures Design,['CE 3343'],[None] -CE 4321,Foundation Engineering,"['CE 3341', 'CE 3343']",[None] -CE 4322,Applications with Geosynthetics,['CE 3343'],[None] -CE 4323,Landfill Design,['CE 3343'],[None] -CE 4336,Hot Mix Asphalt Design & Construction,['CE 3361'],[None] -CE 4337,Portland Cement Concrete Pavements,['CE 3361'],[None] -CE 4324,Mechanics of Materials II,['CE 2313'],[None] -CE 4325,Fundamentals of Finite Element Method,['CE 3341'],[None] -CE 4348,Structural Design in Steel,['CE 3341'],[None] -CE 4356,Advanced Steel Design,['CE 4348'],[None] -CE 4360,Design of Structural Masonry,['CE 3341'],[None] -CE 4361,Advanced Reinforced Concrete Design,['CE 4347'],[None] -CE 4363,Fundamentals of Prestressed Concrete,['CE 4347'],[None] -CE 4365,Structural Wood Design,['CE 3341'],[None] -CE 4366,Fundamentals of Fiber Reinforced Composites,['CE 3341'],[None] -CE 4368,Advanced Structural Analysis,['CE 3341'],[None] -CE 4369,Loads on Structures,['CE 3341'],[None] -CE 4310,System Evaluation in Civil Engineering,"['IE 2308', 'CE 3301']",[None] -CE 4311,Urban Transportation Infrastructure Planning,['CE 3302'],[None] -CE 4312,Street and Highway Design,['CE 3302'],[None] -CE 4313,Traffic Engineering,['CE 3302'],[None] -CE 4314,Introduction to Railroad Engineering,['CE 3302'],[None] -CE 4326,GIS/Hydrologic and Hydraulic Modeling,['CE 3342'],[None] -CE 4330,Hydraulic Design,['CE 3342'],[None] -CE 4358,Open Conduit System,['CE 3342'],[None] \ No newline at end of file diff --git a/data/civil_engineering_courses.csv b/data/civil_engineering_courses.csv new file mode 100644 index 00000000..b7619381 --- /dev/null +++ b/data/civil_engineering_courses.csv @@ -0,0 +1,47 @@ +Course Name,Formal Name +CE 1105,Introduction to Civil Engineering +CHEM 1465,Chemistry for Engineers +ENGL 1301,Rhetoric and Composition I +CE 1252,Computer Tools-AutoCAD +UNIV-EN 1131,Entrance to Engineering + +MATH 1426,Calculus I +IE 2308,Engineering Economy +MATH 2425,Calculus II +PHYS 1443,General Technical Physics I +POLS 2311,Government of the United States + +CE 2311,Statics +CE 2153,Computer Tools - CIVL 3D +COMS 2302,Professional & Technical Communications for Scientists & Engineers +MATH 2326,Calculus III +PHYS 1444,General Technical Physics II + +CE 2221,Dynamics +CE 2313,Mechanics of Materials +CE 2331,Engineering Measurement & Computer Modeling +GEOL 3340,Geology for Engineers +CE 3301,Stochastic Models for CE +MATH 3319,Differential Equations & Linear Algebra + +CE 3210,CE Communications +CE 3253,Applications of Computer-Based Design Programs in CE +CE 3305,Basic Fluid Mechanics +CE 3142,Applied Fluid Mechanics Lab +CE 3341,Structural Analysis +CE 3343,Soil Mechanics +CE 3143,Properties & Behavior of Soils +POLS 2312,State and Local Government + +CE 3302,Transportation Engineering +CE 3361,Property & Behavior of CE Materials +CE 3311,Construction Engineering +CE 3342,Introduction to Water Resources +CE 3334,Principles of Environmental Engineering +CE 3131,Environmental Analysis + +CE 4347,Reinforced Concrete Design +CE 4328,Water Systems Design +CE 4352,Professional Practice + +CE 4383,Senior Project diff --git a/data/classes.db b/data/classes.db index a20eb28d..b5218bbf 100644 Binary files a/data/classes.db and b/data/classes.db differ diff --git a/data/computer_science_courses.csv b/data/computer_science_courses.csv new file mode 100644 index 00000000..ddd039b4 --- /dev/null +++ b/data/computer_science_courses.csv @@ -0,0 +1,39 @@ +Course Name,Formal Name +CSE 1310,Intro to Programming +ENGR 1101,Intro to Engineering +UNIV-EN 1131,Student Success +MATH 1426,Calculus 1 +ENGL 1301,Rhetoric & Composition +CSE 1106,Intro to CSE +CSE 1320,Intermediate Programming +MATH 2425,Calculus 2 +PHYS 1443,General Technical Physics 1 +CSE 2315,Discrete Structures +CSE 1325,Object-Oriented Programming +CSE 2312,Computer Organization +CSE 3318,Algorithms and Data Structures +PHYS 1444,General Technical Physics 2 +CSE 3380,Linear Algebra for CSE +CSE 3310,Intro to Software +CSE 3320,Operating Systems +MATH 2326,Calculus III +COMS 2302,Prof. & Technical Comm +CSE 3302,Programming Languages +CSE 3330,Databases +CSE 3315,Theoretical CS +IE 3301,Probability and Statistics +POLS 2311,Govt of the United States +CSE 4308,Artificial Intelligence +CSE 4344,Computer Networks +POLS 2312,State & Local Government +CSE 3314,Professional Practices +CSE 4316,Senior Design I +CSE 4303,Computer Graphics +CSE 4305,Compliers +CSE 4360,Robotics +ECON 2305,Principles of Macroeconomics +IE 2308,Economics for Engineers +CSE 4317,Senior Design 2 +CSE 4380,Info Security +CSE 4381,Info Security 2 +CSE 4382,Secure Programming diff --git a/server/app/scripts/algo.ipynb b/server/app/scripts/algo.ipynb new file mode 100644 index 00000000..fccb9600 --- /dev/null +++ b/server/app/scripts/algo.ipynb @@ -0,0 +1,2989 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "3b1a67a1", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import sqlite3\n", + "import parse_transcript as ps\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9bf11ed1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading 5 pages from '/Users/johna/Downloads/SSR_TSRPT_UN (20) (1).pdf'...\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Course NumFinishedCourse NamePre_RequisitesCo_RequisitesDescription
53CE 43080TEMPORARY STRUCTURES. 3 Hours.CE 3343, CE 3341Analysis and design of temporary structures. T...
54CE 43090ADVANCED MATERIALS MECHANICAL TESTING AND CHAR...CE 3361Providing comprehensive understanding of the m...
55CE 43100SYSTEM EVALUATION IN CIVIL ENGINEERING. 3 Hours.IE 2308, CE 3301Techniques necessary to perform economic and m...
56CE 43110URBAN TRANSPORTATION INFRASTRUCTURE PLANNING. ...CE 3302Urban transportation system design, planning, ...
57CE 43120STREET AND HIGHWAY DESIGN. 3 Hours.CE 3302The geometric design concepts for urban and ru...
58CE 43130TRAFFIC ENGINEERING. 3 Hours.CE 3302Design and control of fixed-time, actuated, an...
59CE 43140INTRODUCTION TO RAILROAD ENGINEERING. 3 Hours.CE 3302Overview of the railroad industry in the Unite...
60CE 43180MACHINE LEARNING IN CIVIL ENGINEERING. 3 Hours.CE 3301Machine learning is transforming the way we ap...
61CE 43190CIVIL ENGINEERING INFORMATICS. 3 Hours.CE 3301The course introduces students to computer too...
62CE 43200EARTH STRUCTURES DESIGN. 3 Hours.CE 3343Study of the states of stress and analysis/des...
63CE 43210FOUNDATION ENGINEERING. 3 Hours.CE 3343, CE 3341Aspects of design and construction considerati...
64CE 43220APPLICATIONS WITH GEOSYNTHETICS. 3 Hours.CE 3343Definitions and properties of geotextiles, geo...
65CE 43230LANDFILL DESIGN. 3 Hours.CE 3343Introduction and types of landfills, landfill ...
66CE 43240MECHANICS OF MATERIALS II. 3 Hours.CE 2313Theories of stress and deformation, stress-str...
67CE 43250FUNDAMENTALS OF FINITE ELEMENT METHOD. 3 Hours.CE 3341Stiffness method using basic equations and vir...
68CE 43260GIS/HYDROLOGIC AND HYDRAULIC MODELING. 3 Hours.CE 3342Use of Geographic Information Systems (GIS) an...
69CE 43270SITE REMEDIATION ENGINEERING. 3 Hours.CE 3334This course provides practical understanding o...
70CE 43280WATER SYSTEM DESIGN. 3 Hours.CE 3342Hydraulic/hydrologic analysis and design of mu...
71CE 43300HYDRAULIC DESIGN. 3 Hours.CE 3342Design methods for appurtenances of water conv...
72CE 43320CONSTRUCTION EQUIPMENT, METHODS, & MANAGEMENT....CE 3311Introduction to the construction industry and ...
73CE 43340DRONES & ADVANCED CONSTRUCTION TECHNOLOGY. 3 ...CE 3311, CE 2331A practical course for technologies and their ...
74CE 43350GEOTECHNICAL ASPECTS OF CONSTRUCTION. 3 Hours.CE 3343Review of engineering geology and soil mechani...
75CE 43360HOT MIX ASPHALT DESIGN & CONSTRUCTION. 3 Hours.CE 3361An in-depth study of the properties of constit...
76CE 43370PORTLAND CEMENT CONCRETE PAVEMENTS. 3 Hours.CE 3361Portland cement concrete mix design and produc...
77CE 43470REINFORCED CONCRETE DESIGN. 3 Hours.CE 3341An analysis, design and synthesis course for c...
78CE 43480STRUCTURAL DESIGN IN STEEL. 3 Hours.CE 3341A design synthesis course for structural steel...
79CE 43500INTRODUCTION TO AIR POLLUTION. 3 Hours.CE 3334An introduction to the air pollution field, in...
80CE 43510PHYSICAL UNIT PROCESSES. 3 Hours.CE 3334, CE 3131Principles of unit process modeling using reac...
81CE 43520PROFESSIONAL PRACTICE. 3 Hours.CE 3311, CE 3210Professional practice issues in the private an...
82CE 43530WATER CHEMISTRY. 3 Hours.CE 3131, CE 3334Principles of water chemistry applied to the t...
83CE 43540INTRODUCTION TO SOLID WASTE ENGINEERING. 3 Ho...CE 3334This course provides an overview of the variou...
84CE 43550DESIGN OF WATER AND WASTEWATER TREATMENT FACIL...CE 3334, CE 3142Design of facilities commonly used in water an...
85CE 43560ADVANCED STEEL DESIGN. 3 Hours.CE 4348Covers torsional design of beams, beams with w...
86CE 43570INTRODUCTION TO BIOLOGICAL WASTEWATER TREATMEN...CE 3131, CE 3334Basic understanding of biological processes us...
87CE 43580OPEN CONDUIT SYSTEM. 3 Hours.CE 3342Non-pressure conduit and channel flow, surface...
88CE 43600DESIGN OF STRUCTURAL MASONRY. 3 Hours.CE 3341Covers masonry unit types and mortar types, re...
89CE 43610ADVANCED REINFORCED CONCRETE DESIGN. 3 Hours.CE 4347Advanced topics on structural design of concre...
90CE 43630FUNDAMENTALS OF PRESTRESSED CONCRETE. 3 Hours.CE 4347Introduction to pre-tensioned concrete structu...
91CE 43650STRUCTURAL WOOD DESIGN. 3 Hours.CE 3341Covers material grade and properties of wood, ...
92CE 43660FUNDAMENTALS OF FIBER REINFORCED COMPOSITES. ...CE 3341Introduction to basic analysis, design and man...
93CE 43680ADVANCED STRUCTURAL ANALYSIS. 3 Hours.CE 3341Advanced analysis of indeterminate beams, fram...
94CE 43690LOADS ON STRUCTURES. 3 Hours.CE 3341Structural analysis of structures under gravit...
95CE 43830SENIOR PROJECT. 3 Hours.CE 4352, CE 4328|CE 4347Planning, analysis of alternatives, and design...
96CE 43910PROBLEMS IN CIVIL ENGINEERING. 3 Hours.Selected problems in civil engineering on an i...
97CE 43930INDUSTRIAL INTERNSHIP. 3 Hours.CE 3342, CE 3341Student to experience industrial internship un...
98CE 43940RESEARCH INTERNSHIP. 3 Hours.CE 3342, CE 3341Student to experience research internship unde...
99IE 23080ECONOMICS FOR ENGINEERS. 3 Hours.MATH 1426Methods used for determining the comparative f...
100MATH 14260CALCULUS I. 4 Hours.Concepts of limit, continuity, differentiation...
101ECON 23050PRINCIPLES OF MACROECONOMICS. 3 Hours.(ECON 2301). Elementary models of the macroeco...
102CE 43950SUSTAINABLE ENGINEERING DESIGN PROJECT. 3 Hours.IE 2308, ECON 2305, CE 3300Following the engineering design process, stud...
\n", + "
" + ], + "text/plain": [ + " Course Num Finished Course Name \\\n", + "53 CE 4308 0 TEMPORARY STRUCTURES. 3 Hours. \n", + "54 CE 4309 0 ADVANCED MATERIALS MECHANICAL TESTING AND CHAR... \n", + "55 CE 4310 0 SYSTEM EVALUATION IN CIVIL ENGINEERING. 3 Hours. \n", + "56 CE 4311 0 URBAN TRANSPORTATION INFRASTRUCTURE PLANNING. ... \n", + "57 CE 4312 0 STREET AND HIGHWAY DESIGN. 3 Hours. \n", + "58 CE 4313 0 TRAFFIC ENGINEERING. 3 Hours. \n", + "59 CE 4314 0 INTRODUCTION TO RAILROAD ENGINEERING. 3 Hours. \n", + "60 CE 4318 0 MACHINE LEARNING IN CIVIL ENGINEERING. 3 Hours. \n", + "61 CE 4319 0 CIVIL ENGINEERING INFORMATICS. 3 Hours. \n", + "62 CE 4320 0 EARTH STRUCTURES DESIGN. 3 Hours. \n", + "63 CE 4321 0 FOUNDATION ENGINEERING. 3 Hours. \n", + "64 CE 4322 0 APPLICATIONS WITH GEOSYNTHETICS. 3 Hours. \n", + "65 CE 4323 0 LANDFILL DESIGN. 3 Hours. \n", + "66 CE 4324 0 MECHANICS OF MATERIALS II. 3 Hours. \n", + "67 CE 4325 0 FUNDAMENTALS OF FINITE ELEMENT METHOD. 3 Hours. \n", + "68 CE 4326 0 GIS/HYDROLOGIC AND HYDRAULIC MODELING. 3 Hours. \n", + "69 CE 4327 0 SITE REMEDIATION ENGINEERING. 3 Hours. \n", + "70 CE 4328 0 WATER SYSTEM DESIGN. 3 Hours. \n", + "71 CE 4330 0 HYDRAULIC DESIGN. 3 Hours. \n", + "72 CE 4332 0 CONSTRUCTION EQUIPMENT, METHODS, & MANAGEMENT.... \n", + "73 CE 4334 0 DRONES & ADVANCED CONSTRUCTION TECHNOLOGY. 3 ... \n", + "74 CE 4335 0 GEOTECHNICAL ASPECTS OF CONSTRUCTION. 3 Hours. \n", + "75 CE 4336 0 HOT MIX ASPHALT DESIGN & CONSTRUCTION. 3 Hours. \n", + "76 CE 4337 0 PORTLAND CEMENT CONCRETE PAVEMENTS. 3 Hours. \n", + "77 CE 4347 0 REINFORCED CONCRETE DESIGN. 3 Hours. \n", + "78 CE 4348 0 STRUCTURAL DESIGN IN STEEL. 3 Hours. \n", + "79 CE 4350 0 INTRODUCTION TO AIR POLLUTION. 3 Hours. \n", + "80 CE 4351 0 PHYSICAL UNIT PROCESSES. 3 Hours. \n", + "81 CE 4352 0 PROFESSIONAL PRACTICE. 3 Hours. \n", + "82 CE 4353 0 WATER CHEMISTRY. 3 Hours. \n", + "83 CE 4354 0 INTRODUCTION TO SOLID WASTE ENGINEERING. 3 Ho... \n", + "84 CE 4355 0 DESIGN OF WATER AND WASTEWATER TREATMENT FACIL... \n", + "85 CE 4356 0 ADVANCED STEEL DESIGN. 3 Hours. \n", + "86 CE 4357 0 INTRODUCTION TO BIOLOGICAL WASTEWATER TREATMEN... \n", + "87 CE 4358 0 OPEN CONDUIT SYSTEM. 3 Hours. \n", + "88 CE 4360 0 DESIGN OF STRUCTURAL MASONRY. 3 Hours. \n", + "89 CE 4361 0 ADVANCED REINFORCED CONCRETE DESIGN. 3 Hours. \n", + "90 CE 4363 0 FUNDAMENTALS OF PRESTRESSED CONCRETE. 3 Hours. \n", + "91 CE 4365 0 STRUCTURAL WOOD DESIGN. 3 Hours. \n", + "92 CE 4366 0 FUNDAMENTALS OF FIBER REINFORCED COMPOSITES. ... \n", + "93 CE 4368 0 ADVANCED STRUCTURAL ANALYSIS. 3 Hours. \n", + "94 CE 4369 0 LOADS ON STRUCTURES. 3 Hours. \n", + "95 CE 4383 0 SENIOR PROJECT. 3 Hours. \n", + "96 CE 4391 0 PROBLEMS IN CIVIL ENGINEERING. 3 Hours. \n", + "97 CE 4393 0 INDUSTRIAL INTERNSHIP. 3 Hours. \n", + "98 CE 4394 0 RESEARCH INTERNSHIP. 3 Hours. \n", + "99 IE 2308 0 ECONOMICS FOR ENGINEERS. 3 Hours. \n", + "100 MATH 1426 0 CALCULUS I. 4 Hours. \n", + "101 ECON 2305 0 PRINCIPLES OF MACROECONOMICS. 3 Hours. \n", + "102 CE 4395 0 SUSTAINABLE ENGINEERING DESIGN PROJECT. 3 Hours. \n", + "\n", + " Pre_Requisites Co_Requisites \\\n", + "53 CE 3343, CE 3341 \n", + "54 CE 3361 \n", + "55 IE 2308, CE 3301 \n", + "56 CE 3302 \n", + "57 CE 3302 \n", + "58 CE 3302 \n", + "59 CE 3302 \n", + "60 CE 3301 \n", + "61 CE 3301 \n", + "62 CE 3343 \n", + "63 CE 3343, CE 3341 \n", + "64 CE 3343 \n", + "65 CE 3343 \n", + "66 CE 2313 \n", + "67 CE 3341 \n", + "68 CE 3342 \n", + "69 CE 3334 \n", + "70 CE 3342 \n", + "71 CE 3342 \n", + "72 CE 3311 \n", + "73 CE 3311, CE 2331 \n", + "74 CE 3343 \n", + "75 CE 3361 \n", + "76 CE 3361 \n", + "77 CE 3341 \n", + "78 CE 3341 \n", + "79 CE 3334 \n", + "80 CE 3334, CE 3131 \n", + "81 CE 3311, CE 3210 \n", + "82 CE 3131, CE 3334 \n", + "83 CE 3334 \n", + "84 CE 3334, CE 3142 \n", + "85 CE 4348 \n", + "86 CE 3131, CE 3334 \n", + "87 CE 3342 \n", + "88 CE 3341 \n", + "89 CE 4347 \n", + "90 CE 4347 \n", + "91 CE 3341 \n", + "92 CE 3341 \n", + "93 CE 3341 \n", + "94 CE 3341 \n", + "95 CE 4352, CE 4328|CE 4347 \n", + "96 \n", + "97 CE 3342, CE 3341 \n", + "98 CE 3342, CE 3341 \n", + "99 MATH 1426 \n", + "100 \n", + "101 \n", + "102 IE 2308, ECON 2305, CE 3300 \n", + "\n", + " Description \n", + "53 Analysis and design of temporary structures. T... \n", + "54 Providing comprehensive understanding of the m... \n", + "55 Techniques necessary to perform economic and m... \n", + "56 Urban transportation system design, planning, ... \n", + "57 The geometric design concepts for urban and ru... \n", + "58 Design and control of fixed-time, actuated, an... \n", + "59 Overview of the railroad industry in the Unite... \n", + "60 Machine learning is transforming the way we ap... \n", + "61 The course introduces students to computer too... \n", + "62 Study of the states of stress and analysis/des... \n", + "63 Aspects of design and construction considerati... \n", + "64 Definitions and properties of geotextiles, geo... \n", + "65 Introduction and types of landfills, landfill ... \n", + "66 Theories of stress and deformation, stress-str... \n", + "67 Stiffness method using basic equations and vir... \n", + "68 Use of Geographic Information Systems (GIS) an... \n", + "69 This course provides practical understanding o... \n", + "70 Hydraulic/hydrologic analysis and design of mu... \n", + "71 Design methods for appurtenances of water conv... \n", + "72 Introduction to the construction industry and ... \n", + "73 A practical course for technologies and their ... \n", + "74 Review of engineering geology and soil mechani... \n", + "75 An in-depth study of the properties of constit... \n", + "76 Portland cement concrete mix design and produc... \n", + "77 An analysis, design and synthesis course for c... \n", + "78 A design synthesis course for structural steel... \n", + "79 An introduction to the air pollution field, in... \n", + "80 Principles of unit process modeling using reac... \n", + "81 Professional practice issues in the private an... \n", + "82 Principles of water chemistry applied to the t... \n", + "83 This course provides an overview of the variou... \n", + "84 Design of facilities commonly used in water an... \n", + "85 Covers torsional design of beams, beams with w... \n", + "86 Basic understanding of biological processes us... \n", + "87 Non-pressure conduit and channel flow, surface... \n", + "88 Covers masonry unit types and mortar types, re... \n", + "89 Advanced topics on structural design of concre... \n", + "90 Introduction to pre-tensioned concrete structu... \n", + "91 Covers material grade and properties of wood, ... \n", + "92 Introduction to basic analysis, design and man... \n", + "93 Advanced analysis of indeterminate beams, fram... \n", + "94 Structural analysis of structures under gravit... \n", + "95 Planning, analysis of alternatives, and design... \n", + "96 Selected problems in civil engineering on an i... \n", + "97 Student to experience industrial internship un... \n", + "98 Student to experience research internship unde... \n", + "99 Methods used for determining the comparative f... \n", + "100 Concepts of limit, continuity, differentiation... \n", + "101 (ECON 2301). Elementary models of the macroeco... \n", + "102 Following the engineering design process, stud... " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "department = \"CE\"\n", + "db_path = \"/Users/johna/SmartAdvisor/SmartAdvisors/data/classes.db\"\n", + " \n", + "db = sqlite3.connect(db_path)\n", + "cur = db.cursor()\n", + "cur.execute(f\"SELECT * FROM ClassesFor{department}\")\n", + "data = cur.fetchall()\n", + "\n", + "transcript_pdf_path = \"/Users/johna/Downloads/SSR_TSRPT_UN (20) (1).pdf\"\n", + "extracted_courses = ps.extract_all_courses(transcript_pdf_path)\n", + "\n", + "extracted_courses = np.array(extracted_courses)\n", + "df_extracted_courses = pd.DataFrame(extracted_courses, columns=[\"Finished Courses\"])\n", + "\n", + "df_catalog = pd.DataFrame(data, columns=(\"Course Num\", \"Course Name\", \"Pre_Requisites\", \"Co_Requisites\", \"Description\"))\n", + "df_catalog.insert(loc=1,column=\"Finished\", value=0)\n", + "df_catalog[\"Course Num\"] = df_catalog[\"Course Num\"].str.replace('\\xa0', ' ')\n", + "df_catalog.tail(50)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fc339b9a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['ACCT 2301'] is extra courses\n", + "['ADVT 2337'] is extra courses\n", + "['ASTR 1346'] is extra courses\n", + "['BIOL 1333'] is extra courses\n", + "['COMS 1301'] is extra courses\n", + "['ENGL 1302'] is extra courses\n", + "['ENGL 2319'] is extra courses\n", + "['ENGL 2329'] is extra courses\n", + "['EXSA 1247'] is extra courses\n", + "['GEOL 3340'] is extra courses\n", + "['HIST 1301'] is extra courses\n", + "['HIST 1302'] is extra courses\n", + "['INSY 2303'] is extra courses\n", + "['MATH 1303'] is extra courses\n", + "['MATH 1308'] is extra courses\n", + "['MATH 2326'] is extra courses\n", + "['MUSI 1300'] is extra courses\n", + "['PHIL 1301'] is extra courses\n", + "['PHYS 1444'] is extra courses\n", + "['PLAN 1301'] is extra courses\n", + "['POLS 2311'] is extra courses\n", + "['POLS 2312'] is extra courses\n", + "['PSYC 1315'] is extra courses\n", + "['SPAN 1441'] is extra courses\n", + "['SPAN 1442'] is extra courses\n", + "['UNIV-EN 1131'] is extra courses\n" + ] + } + ], + "source": [ + "for i in df_extracted_courses.values:\n", + " # print(i[0])\n", + " # print(i[0], df_catalog[\"Course Num\"].values)\n", + " # Add .values to check against the data, not the index\n", + " if i[0] in df_catalog[\"Course Num\"].values:\n", + " df_catalog.loc[df_catalog[\"Course Num\"].isin(df_extracted_courses), \"Finished\"] = 1\n", + " else:\n", + " print(f\"{i} is extra courses\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a2b86668", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Course NameFormal Name
0CSE 1310Intro to Programming
1ENGR 1101Intro to Engineering
2UNIV-EN 1131Student Success
3MATH 1426Calculus 1
4ENGL 1301Rhetoric & Composition
5CSE 1106Intro to CSE
6CSE 1320Intermediate Programming
7MATH 2425Calculus 2
8PHYS 1443General Technical Physics 1
9CSE 2315Discrete Structures
10CSE 1325Object-Oriented Programming
11CSE 2312Computer Organization
12CSE 3318Algorithms and Data Structures
13PHYS 1444General Technical Physics 2
14CSE 3380Linear Algebra for CSE
15CSE 3310Intro to Software
16CSE 3320Operating Systems
17MATH 2326Calculus III
18COMS 2302Prof. & Technical Comm
19CSE 3302Programming Languages
20CSE 3330Databases
21CSE 3315Theoretical CS
22IE 3301Probability and Statistics
23POLS 2311Govt of the United States
24CSE 4308Artificial Intelligence
25CSE 4344Computer Networks
26POLS 2312State & Local Government
27CSE 3314Professional Practices
28CSE 4316Senior Design I
29CSE 4303Computer Graphics
30CSE 4305Compliers
31CSE 4360Robotics
32ECON 2305Principles of Macroeconomics
33IE 2308Economics for Engineers
34CSE 4317Senior Design 2
35CSE 4380Info Security
36CSE 4381Info Security 2
37CSE 4382Secure Programming
\n", + "
" + ], + "text/plain": [ + " Course Name Formal Name\n", + "0 CSE 1310 Intro to Programming\n", + "1 ENGR 1101 Intro to Engineering\n", + "2 UNIV-EN 1131 Student Success\n", + "3 MATH 1426 Calculus 1\n", + "4 ENGL 1301 Rhetoric & Composition\n", + "5 CSE 1106 Intro to CSE\n", + "6 CSE 1320 Intermediate Programming\n", + "7 MATH 2425 Calculus 2\n", + "8 PHYS 1443 General Technical Physics 1\n", + "9 CSE 2315 Discrete Structures\n", + "10 CSE 1325 Object-Oriented Programming\n", + "11 CSE 2312 Computer Organization\n", + "12 CSE 3318 Algorithms and Data Structures\n", + "13 PHYS 1444 General Technical Physics 2\n", + "14 CSE 3380 Linear Algebra for CSE\n", + "15 CSE 3310 Intro to Software\n", + "16 CSE 3320 Operating Systems\n", + "17 MATH 2326 Calculus III\n", + "18 COMS 2302 Prof. & Technical Comm\n", + "19 CSE 3302 Programming Languages\n", + "20 CSE 3330 Databases\n", + "21 CSE 3315 Theoretical CS\n", + "22 IE 3301 Probability and Statistics\n", + "23 POLS 2311 Govt of the United States\n", + "24 CSE 4308 Artificial Intelligence\n", + "25 CSE 4344 Computer Networks\n", + "26 POLS 2312 State & Local Government\n", + "27 CSE 3314 Professional Practices\n", + "28 CSE 4316 Senior Design I\n", + "29 CSE 4303 Computer Graphics\n", + "30 CSE 4305 Compliers\n", + "31 CSE 4360 Robotics\n", + "32 ECON 2305 Principles of Macroeconomics\n", + "33 IE 2308 Economics for Engineers\n", + "34 CSE 4317 Senior Design 2\n", + "35 CSE 4380 Info Security\n", + "36 CSE 4381 Info Security 2\n", + "37 CSE 4382 Secure Programming" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "csv = pd.read_csv(\"/Users/johna/SmartAdvisor/SmartAdvisors/data/computer_science_courses.csv\")\n", + "csv" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "111a832e", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "def check_prerequisites_met(course, finished_courses_set, catalog_df):\n", + " \"\"\"\n", + " Check if all prerequisites for a course are met\n", + " \n", + " Returns: (bool: prerequisites_met, list: missing_prerequisites)\n", + " \"\"\"\n", + " course_row = catalog_df[catalog_df['Course Num'] == course]\n", + " \n", + " if course_row.empty:\n", + " return False, [\"Course not found in catalog\"]\n", + " \n", + " prereqs = course_row['Pre_Requisites'].values\n", + " \n", + " # If no prerequisites, course is available\n", + " if pd.isna(prereqs) or prereqs == '' or str(prereqs).strip() == '':\n", + " return True, []\n", + " \n", + " missing = []\n", + " \n", + " # Parse prerequisites (handle \"or\" and \"and\" cases)\n", + " prereq_list = str(prereqs).replace(' or ', ',').replace(' and ', ',').split(',')\n", + " prereq_list = [p.strip() for p in prereq_list if str(p).strip()]\n", + " \n", + " for prereq in prereq_list:\n", + " if prereq not in finished_courses_set:\n", + " missing.append(prereq)\n", + " \n", + " return len(missing) == 0, missing\n", + "def get_available_courses(finished_courses_list, catalog_df):\n", + " \"\"\"\n", + " Get all courses that can be taken based on completed prerequisites\n", + " \"\"\"\n", + " finished_set = set(finished_courses_list)\n", + " available_courses = []\n", + " \n", + " for idx, row in catalog_df.iterrows():\n", + " course_num = row['Course Num']\n", + " \n", + " # Skip if already completed\n", + " if course_num in finished_set:\n", + " continue\n", + " \n", + " # Check if prerequisites are met\n", + " prereqs_met, missing = check_prerequisites_met(course_num, finished_set, catalog_df)\n", + " \n", + " if prereqs_met:\n", + " available_courses.append({\n", + " 'Course Num': course_num,\n", + " 'Course Name': row['Course Name'],\n", + " 'Pre_Requisites': row['Pre_Requisites'] if pd.notna(row['Pre_Requisites']) else 'None',\n", + " 'Description': row['Description']\n", + " })\n", + " \n", + " return pd.DataFrame(available_courses)\n", + "\n", + "\n", + "def get_blocked_courses_with_missing_prereqs(finished_courses_list, catalog_df):\n", + " \"\"\"\n", + " Get courses that cannot be taken yet and show what's missing\n", + " \"\"\"\n", + " finished_set = set(finished_courses_list)\n", + " blocked_courses = []\n", + " \n", + " for idx, row in catalog_df.iterrows():\n", + " course_num = row['Course Num']\n", + " \n", + " # Skip if already completed\n", + " if course_num in finished_set:\n", + " continue\n", + " \n", + " # Check prerequisites\n", + " prereqs_met, missing = check_prerequisites_met(course_num, finished_set, catalog_df)\n", + " \n", + " if not prereqs_met and missing:\n", + " blocked_courses.append({\n", + " 'Course Num': course_num,\n", + " 'Course Name': row['Course Name'],\n", + " 'Missing Prerequisites': ', '.join(missing),\n", + " 'All Prerequisites': row['Pre_Requisites']\n", + " })\n", + " \n", + " return pd.DataFrame(blocked_courses)\n", + "\n", + "\n", + "def create_user_friendly_report(finished_courses_list, catalog_df):\n", + " \"\"\"\n", + " Create a user-friendly report showing course availability status\n", + " \"\"\"\n", + " print(\"=\" * 80)\n", + " print(\"COURSE AVAILABILITY REPORT\")\n", + " print(\"=\" * 80)\n", + " \n", + " # Get completed courses count\n", + " print(f\"\\n✓ Completed Courses: {len(finished_courses_list)}\")\n", + " \n", + " # Get available courses\n", + " available = get_available_courses(finished_courses_list, catalog_df)\n", + " print(f\"\\n✓ Courses Available to Take NOW: {len(available)}\")\n", + " \n", + " if len(available) > 0:\n", + " print(\"\\nYou can register for these courses:\")\n", + " print(\"-\" * 80)\n", + " for idx, row in available.head(80).iterrows():\n", + " prereq_text = row['Pre_Requisites'] if row['Pre_Requisites'] != 'None' else 'No prerequisites'\n", + " print(f\" • {row['Course Num']}: {row['Course Name']}\")\n", + " print(f\" Prerequisites: {prereq_text}\")\n", + " print()\n", + " \n", + " # Get blocked courses\n", + " blocked = get_blocked_courses_with_missing_prereqs(finished_courses_list, catalog_df)\n", + " print(f\"\\n✗ Courses Still BLOCKED: {len(blocked)}\")\n", + " \n", + " if len(blocked) > 0:\n", + " print(\"\\nYou cannot take these courses yet (showing first 10):\")\n", + " print(\"-\" * 80)\n", + " for idx, row in blocked.head(80).iterrows():\n", + " print(f\" • {row['Course Num']}: {row['Course Name']}\")\n", + " print(f\" MISSING: {row['Missing Prerequisites']}\")\n", + " print()\n", + " \n", + " return available, blocked" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "cc83dd60", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✓ OR-aware functions loaded!\n" + ] + } + ], + "source": [ + "def format_prerequisites_with_or_logic(prereqs_set, description_text):\n", + " \"\"\"Extract and preserve OR relationships from course description.\"\"\"\n", + " import re\n", + " \n", + " if not prereqs_set:\n", + " return \"\"\n", + " \n", + " # Find \"X #### or Y ####\" patterns in description\n", + " or_pattern = r'([A-Z]{2,4}\\s+\\d{4})\\s+or\\s+([A-Z]{2,4}\\s+\\d{4})'\n", + " or_matches = re.findall(or_pattern, description_text, re.IGNORECASE)\n", + " \n", + " or_groups = []\n", + " remaining = set(prereqs_set)\n", + " \n", + " for match in or_matches:\n", + " course1 = ' '.join(match[0].strip().split())\n", + " course2 = ' '.join(match[1].strip().split())\n", + " \n", + " if course1 in remaining and course2 in remaining:\n", + " or_groups.append(f\"{course1}|{course2}\")\n", + " remaining.discard(course1)\n", + " remaining.discard(course2)\n", + " \n", + " all_parts = list(remaining) + or_groups\n", + " return ', '.join(all_parts)\n", + "\n", + "def check_prerequisites_met_with_or(course, finished_courses_set, catalog_df):\n", + " \"\"\"Check if prerequisites are met, handling OR logic with | separator.\"\"\"\n", + " course_row = catalog_df[catalog_df['Course Num'] == course]\n", + " \n", + " if course_row.empty:\n", + " return False, [\"Course not found in catalog\"]\n", + " \n", + " prereqs = course_row['Pre_Requisites'].values[0]\n", + " \n", + " if pd.isna(prereqs) or prereqs == '' or prereqs.strip() == '':\n", + " return True, []\n", + " \n", + " and_groups = [g.strip() for g in prereqs.split(',') if g.strip()]\n", + " missing_groups = []\n", + " \n", + " for group in and_groups:\n", + " if '|' in group:\n", + " # OR group - need at least ONE\n", + " or_courses = [c.strip() for c in group.split('|')]\n", + " has_any = any(course in finished_courses_set for course in or_courses)\n", + " if not has_any:\n", + " missing_groups.append(f\"({' or '.join(or_courses)})\")\n", + " else:\n", + " # Single required course\n", + " if group not in finished_courses_set:\n", + " missing_groups.append(group)\n", + " \n", + " return len(missing_groups) == 0, missing_groups\n", + "\n", + "\n", + "def get_available_courses_with_or(finished_courses_list, catalog_df):\n", + " \"\"\"Get all courses that can be taken, handling OR prerequisites.\"\"\"\n", + " finished_set = set(finished_courses_list)\n", + " available_courses = []\n", + " \n", + " for idx, row in catalog_df.iterrows():\n", + " course_num = row['Course Num']\n", + " if course_num in finished_set:\n", + " continue\n", + " \n", + " prereqs_met, missing = check_prerequisites_met_with_or(course_num, finished_set, catalog_df)\n", + " \n", + " if prereqs_met:\n", + " available_courses.append({\n", + " 'Course Num': course_num,\n", + " 'Course Name': row['Course Name'],\n", + " 'Pre_Requisites': row['Pre_Requisites'] if pd.notna(row['Pre_Requisites']) else 'None'\n", + " })\n", + " \n", + " return pd.DataFrame(available_courses)\n", + "\n", + "print(\"✓ OR-aware functions loaded!\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "14ecc5f9", + "metadata": {}, + "outputs": [], + "source": [ + "finished_list = df_extracted_courses[\"Finished Courses\"].tolist()\n", + "finished_set = set(finished_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "ae285690", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "You can take 41 courses!\n", + " Course Num Course Name\n", + "0 CE 1000 FRESHMAN UNDERGRADUATE RESEARCH. 0 Hours.\n", + "1 CE 1252 COMPUTER TOOLS - AUTOCAD. 2 Hours.\n", + "2 CE 2000 SOPHOMORE UNDERGRADUATE RESEARCH. 0 Hours.\n", + "3 CE 2152 COMPUTER TOOLS - MATHCAD. 1 Hour.\n", + "4 CE 2191 PROBLEMS IN CIVIL ENGINEERING. 1 Hour.\n", + "5 CE 2291 PROBLEMS IN CIVIL ENGINEERING. 2 Hours.\n", + "6 CE 2312 STATICS AND DYNAMICS FOR NON-CE MAJORS. 3 Hours.\n", + "7 CE 2391 PROBLEMS IN CIVIL ENGINEERING. 3 Hours.\n", + "8 CE 3000 JUNIOR UNDERGRADUATE RESEARCH. 0 Hours.\n", + "9 CE 3131 ENVIRONMENTAL ANALYSIS. 1 Hour.\n", + "10 CE 3143 PROPERTIES AND BEHAVIOR OF SOILS. 1 Hour.\n", + "11 CE 3300 INTRODUCTION TO SUSTAINABLE ENGINEERING. 3 Ho...\n", + "12 IE 3301 ENGINEERING PROBABILITY. 3 Hours.\n", + "13 MATH 1324 ALGEBRA AND TRIGONOMETRY. 3 Hours.\n", + "14 CE 3334 PRINCIPLES OF ENVIRONMENTAL ENGINEERING. 3 Ho...\n", + "15 CE 3341 STRUCTURAL ANALYSIS. 3 Hours.\n", + "16 CE 3342 WATER RESOURCES ENGINEERING. 3 Hours.\n", + "17 CE 3343 SOIL MECHANICS. 3 Hours.\n", + "18 CE 4000 SENIOR UNDERGRADUATE RESEARCH. 0 Hours.\n", + "19 CE 4191 PROBLEMS IN CIVIL ENGINEERING. 1 Hour.\n", + "20 CE 4291 PROBLEMS IN CIVIL ENGINEERING. 2 Hours.\n", + "21 CE 4300 ADVANCED TOPICS IN CIVIL ENGINEERING. 3 Hours.\n", + "22 CE 4301 ADVANCED TOPICS IN CIVIL ENGINEERING WITH LAB....\n", + "23 CE 4303 CONSTRUCTION PROJECT ADMINISTRATION. 3 Hours.\n", + "24 CE 4304 CONSTRUCTION CONTRACTS, SPECIFICATIONS, & ADMI...\n", + "25 CE 4305 TRENCHLESS TECHNOLOGY METHODS. 3 Hours.\n", + "26 CE 4306 INFRASTRUCTURE ASSET MANAGEMENT. 3 Hours.\n", + "27 CE 4307 CONSTRUCTION SUSTAINABILITY. 3 Hours.\n", + "28 CE 4310 SYSTEM EVALUATION IN CIVIL ENGINEERING. 3 Hours.\n", + "29 CE 4311 URBAN TRANSPORTATION INFRASTRUCTURE PLANNING. ...\n", + "30 CE 4312 STREET AND HIGHWAY DESIGN. 3 Hours.\n", + "31 CE 4313 TRAFFIC ENGINEERING. 3 Hours.\n", + "32 CE 4314 INTRODUCTION TO RAILROAD ENGINEERING. 3 Hours.\n", + "33 CE 4318 MACHINE LEARNING IN CIVIL ENGINEERING. 3 Hours.\n", + "34 CE 4319 CIVIL ENGINEERING INFORMATICS. 3 Hours.\n", + "35 CE 4324 MECHANICS OF MATERIALS II. 3 Hours.\n", + "36 CE 4332 CONSTRUCTION EQUIPMENT, METHODS, & MANAGEMENT....\n", + "37 CE 4334 DRONES & ADVANCED CONSTRUCTION TECHNOLOGY. 3 ...\n", + "38 CE 4352 PROFESSIONAL PRACTICE. 3 Hours.\n", + "39 CE 4391 PROBLEMS IN CIVIL ENGINEERING. 3 Hours.\n", + "40 CE 4395 SUSTAINABLE ENGINEERING DESIGN PROJECT. 3 Hours.\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Course NumCourse NamePre_Requisites
0CE 1000FRESHMAN UNDERGRADUATE RESEARCH. 0 Hours.
1CE 1252COMPUTER TOOLS - AUTOCAD. 2 Hours.MATH 1302
2CE 2000SOPHOMORE UNDERGRADUATE RESEARCH. 0 Hours.
3CE 2152COMPUTER TOOLS - MATHCAD. 1 Hour.PHYS 1443
4CE 2191PROBLEMS IN CIVIL ENGINEERING. 1 Hour.
5CE 2291PROBLEMS IN CIVIL ENGINEERING. 2 Hours.
6CE 2312STATICS AND DYNAMICS FOR NON-CE MAJORS. 3 Hours.
7CE 2391PROBLEMS IN CIVIL ENGINEERING. 3 Hours.
8CE 3000JUNIOR UNDERGRADUATE RESEARCH. 0 Hours.
9CE 3131ENVIRONMENTAL ANALYSIS. 1 Hour.
10CE 3143PROPERTIES AND BEHAVIOR OF SOILS. 1 Hour.
11CE 3300INTRODUCTION TO SUSTAINABLE ENGINEERING. 3 Ho...
12IE 3301ENGINEERING PROBABILITY. 3 Hours.MATH 2425
13MATH 1324ALGEBRA AND TRIGONOMETRY. 3 Hours.
14CE 3334PRINCIPLES OF ENVIRONMENTAL ENGINEERING. 3 Ho...
15CE 3341STRUCTURAL ANALYSIS. 3 Hours.CE 2313
16CE 3342WATER RESOURCES ENGINEERING. 3 Hours.
17CE 3343SOIL MECHANICS. 3 Hours.
18CE 4000SENIOR UNDERGRADUATE RESEARCH. 0 Hours.
19CE 4191PROBLEMS IN CIVIL ENGINEERING. 1 Hour.
20CE 4291PROBLEMS IN CIVIL ENGINEERING. 2 Hours.
21CE 4300ADVANCED TOPICS IN CIVIL ENGINEERING. 3 Hours.
22CE 4301ADVANCED TOPICS IN CIVIL ENGINEERING WITH LAB....
23CE 4303CONSTRUCTION PROJECT ADMINISTRATION. 3 Hours.CE 3311
24CE 4304CONSTRUCTION CONTRACTS, SPECIFICATIONS, & ADMI...CE 3311
25CE 4305TRENCHLESS TECHNOLOGY METHODS. 3 Hours.CE 3311
26CE 4306INFRASTRUCTURE ASSET MANAGEMENT. 3 Hours.CE 3311
27CE 4307CONSTRUCTION SUSTAINABILITY. 3 Hours.CE 3311
28CE 4310SYSTEM EVALUATION IN CIVIL ENGINEERING. 3 Hours.IE 2308, CE 3301
29CE 4311URBAN TRANSPORTATION INFRASTRUCTURE PLANNING. ...CE 3302
30CE 4312STREET AND HIGHWAY DESIGN. 3 Hours.CE 3302
31CE 4313TRAFFIC ENGINEERING. 3 Hours.CE 3302
32CE 4314INTRODUCTION TO RAILROAD ENGINEERING. 3 Hours.CE 3302
33CE 4318MACHINE LEARNING IN CIVIL ENGINEERING. 3 Hours.CE 3301
34CE 4319CIVIL ENGINEERING INFORMATICS. 3 Hours.CE 3301
35CE 4324MECHANICS OF MATERIALS II. 3 Hours.CE 2313
36CE 4332CONSTRUCTION EQUIPMENT, METHODS, & MANAGEMENT....CE 3311
37CE 4334DRONES & ADVANCED CONSTRUCTION TECHNOLOGY. 3 ...CE 3311, CE 2331
38CE 4352PROFESSIONAL PRACTICE. 3 Hours.CE 3311, CE 3210
39CE 4391PROBLEMS IN CIVIL ENGINEERING. 3 Hours.
40CE 4395SUSTAINABLE ENGINEERING DESIGN PROJECT. 3 Hours.
\n", + "
" + ], + "text/plain": [ + " Course Num Course Name \\\n", + "0 CE 1000 FRESHMAN UNDERGRADUATE RESEARCH. 0 Hours. \n", + "1 CE 1252 COMPUTER TOOLS - AUTOCAD. 2 Hours. \n", + "2 CE 2000 SOPHOMORE UNDERGRADUATE RESEARCH. 0 Hours. \n", + "3 CE 2152 COMPUTER TOOLS - MATHCAD. 1 Hour. \n", + "4 CE 2191 PROBLEMS IN CIVIL ENGINEERING. 1 Hour. \n", + "5 CE 2291 PROBLEMS IN CIVIL ENGINEERING. 2 Hours. \n", + "6 CE 2312 STATICS AND DYNAMICS FOR NON-CE MAJORS. 3 Hours. \n", + "7 CE 2391 PROBLEMS IN CIVIL ENGINEERING. 3 Hours. \n", + "8 CE 3000 JUNIOR UNDERGRADUATE RESEARCH. 0 Hours. \n", + "9 CE 3131 ENVIRONMENTAL ANALYSIS. 1 Hour. \n", + "10 CE 3143 PROPERTIES AND BEHAVIOR OF SOILS. 1 Hour. \n", + "11 CE 3300 INTRODUCTION TO SUSTAINABLE ENGINEERING. 3 Ho... \n", + "12 IE 3301 ENGINEERING PROBABILITY. 3 Hours. \n", + "13 MATH 1324 ALGEBRA AND TRIGONOMETRY. 3 Hours. \n", + "14 CE 3334 PRINCIPLES OF ENVIRONMENTAL ENGINEERING. 3 Ho... \n", + "15 CE 3341 STRUCTURAL ANALYSIS. 3 Hours. \n", + "16 CE 3342 WATER RESOURCES ENGINEERING. 3 Hours. \n", + "17 CE 3343 SOIL MECHANICS. 3 Hours. \n", + "18 CE 4000 SENIOR UNDERGRADUATE RESEARCH. 0 Hours. \n", + "19 CE 4191 PROBLEMS IN CIVIL ENGINEERING. 1 Hour. \n", + "20 CE 4291 PROBLEMS IN CIVIL ENGINEERING. 2 Hours. \n", + "21 CE 4300 ADVANCED TOPICS IN CIVIL ENGINEERING. 3 Hours. \n", + "22 CE 4301 ADVANCED TOPICS IN CIVIL ENGINEERING WITH LAB.... \n", + "23 CE 4303 CONSTRUCTION PROJECT ADMINISTRATION. 3 Hours. \n", + "24 CE 4304 CONSTRUCTION CONTRACTS, SPECIFICATIONS, & ADMI... \n", + "25 CE 4305 TRENCHLESS TECHNOLOGY METHODS. 3 Hours. \n", + "26 CE 4306 INFRASTRUCTURE ASSET MANAGEMENT. 3 Hours. \n", + "27 CE 4307 CONSTRUCTION SUSTAINABILITY. 3 Hours. \n", + "28 CE 4310 SYSTEM EVALUATION IN CIVIL ENGINEERING. 3 Hours. \n", + "29 CE 4311 URBAN TRANSPORTATION INFRASTRUCTURE PLANNING. ... \n", + "30 CE 4312 STREET AND HIGHWAY DESIGN. 3 Hours. \n", + "31 CE 4313 TRAFFIC ENGINEERING. 3 Hours. \n", + "32 CE 4314 INTRODUCTION TO RAILROAD ENGINEERING. 3 Hours. \n", + "33 CE 4318 MACHINE LEARNING IN CIVIL ENGINEERING. 3 Hours. \n", + "34 CE 4319 CIVIL ENGINEERING INFORMATICS. 3 Hours. \n", + "35 CE 4324 MECHANICS OF MATERIALS II. 3 Hours. \n", + "36 CE 4332 CONSTRUCTION EQUIPMENT, METHODS, & MANAGEMENT.... \n", + "37 CE 4334 DRONES & ADVANCED CONSTRUCTION TECHNOLOGY. 3 ... \n", + "38 CE 4352 PROFESSIONAL PRACTICE. 3 Hours. \n", + "39 CE 4391 PROBLEMS IN CIVIL ENGINEERING. 3 Hours. \n", + "40 CE 4395 SUSTAINABLE ENGINEERING DESIGN PROJECT. 3 Hours. \n", + "\n", + " Pre_Requisites \n", + "0 \n", + "1 MATH 1302 \n", + "2 \n", + "3 PHYS 1443 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "9 \n", + "10 \n", + "11 \n", + "12 MATH 2425 \n", + "13 \n", + "14 \n", + "15 CE 2313 \n", + "16 \n", + "17 \n", + "18 \n", + "19 \n", + "20 \n", + "21 \n", + "22 \n", + "23 CE 3311 \n", + "24 CE 3311 \n", + "25 CE 3311 \n", + "26 CE 3311 \n", + "27 CE 3311 \n", + "28 IE 2308, CE 3301 \n", + "29 CE 3302 \n", + "30 CE 3302 \n", + "31 CE 3302 \n", + "32 CE 3302 \n", + "33 CE 3301 \n", + "34 CE 3301 \n", + "35 CE 2313 \n", + "36 CE 3311 \n", + "37 CE 3311, CE 2331 \n", + "38 CE 3311, CE 3210 \n", + "39 \n", + "40 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "available = get_available_courses_with_or(finished_list, df_catalog)\n", + "print(f\"You can take {len(available)} courses!\")\n", + "print(available[['Course Num', 'Course Name']])\n", + "available" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c158304e", + "metadata": {}, + "outputs": [], + "source": [ + "db_path = \"/Users/johna/SmartAdvisor/SmartAdvisors/data/grades.sqlite\"\n", + " \n", + "db = sqlite3.connect(db_path)\n", + "cur = db.cursor()\n", + "cur.execute(f\"SELECT subject_id, course_number, course_title, section_number, instructor1 FROM allgrades\")\n", + "data = cur.fetchall()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "263f87d7", + "metadata": {}, + "outputs": [], + "source": [ + "instructors_for_classes = pd.DataFrame(data, columns=[\"Subject ID\", \"Course Number\", \"Course Title\", \"Section Number\", \"Instructor\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "b57a7887", + "metadata": {}, + "outputs": [], + "source": [ + "db_path = \"/Users/johna/SmartAdvisor/SmartAdvisors/data/professors.db\"\n", + " \n", + "db = sqlite3.connect(db_path)\n", + "cur = db.cursor()\n", + "cur.execute(f\"SELECT id, name, url, quality_rating, difficulty_rating, total_ratings, tags FROM professors\")\n", + "data = cur.fetchall()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "9dcbd797", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IDNameURLQuality RatingDifficulty RatingTotal RatingsTags
0936194Aaron Smallwoodhttps://www.ratemyprofessors.com/professor/9361943.83.649Skip class? You won't pass., Amazing lectures,...
1655109Abdul Rasheedhttps://www.ratemyprofessors.com/professor/6551093.52.911Get ready to read, Group projects, Lots of hom...
22510252Aditi Prabhakarhttps://www.ratemyprofessors.com/professor/251...531EXTRA CREDIT, Accessible outside class, Respected
32260609Aera LeBoulluechttps://www.ratemyprofessors.com/professor/226...2.12.935Get ready to read, Lots of homework, Lecture h...
4319052Albert Tonghttps://www.ratemyprofessors.com/professor/3190522.54.239Get ready to read, Test heavy, Lots of homewor...
........................
15251846802Matthew Ableshttps://www.ratemyprofessors.com/professor/184...4.73.213Amazing lectures, Accessible outside class, Cl...
15261184465Kamal Awadhttps://www.ratemyprofessors.com/professor/118...3.41.69
15271509111Tailar Brownhttps://www.ratemyprofessors.com/professor/150...3.43.147Tough grader, Clear grading criteria, EXTRA CR...
15283049012Douglas Starkhttps://www.ratemyprofessors.com/professor/304...541Gives good feedback, Get ready to read, Respected
15292428344Deok Gun Parkhttps://www.ratemyprofessors.com/professor/242...2.44.116Lots of homework, Tough grader, Lecture heavy,...
\n", + "

1530 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " ID Name \\\n", + "0 936194 Aaron Smallwood \n", + "1 655109 Abdul Rasheed \n", + "2 2510252 Aditi Prabhakar \n", + "3 2260609 Aera LeBoulluec \n", + "4 319052 Albert Tong \n", + "... ... ... \n", + "1525 1846802 Matthew Ables \n", + "1526 1184465 Kamal Awad \n", + "1527 1509111 Tailar Brown \n", + "1528 3049012 Douglas Stark \n", + "1529 2428344 Deok Gun Park \n", + "\n", + " URL Quality Rating \\\n", + "0 https://www.ratemyprofessors.com/professor/936194 3.8 \n", + "1 https://www.ratemyprofessors.com/professor/655109 3.5 \n", + "2 https://www.ratemyprofessors.com/professor/251... 5 \n", + "3 https://www.ratemyprofessors.com/professor/226... 2.1 \n", + "4 https://www.ratemyprofessors.com/professor/319052 2.5 \n", + "... ... ... \n", + "1525 https://www.ratemyprofessors.com/professor/184... 4.7 \n", + "1526 https://www.ratemyprofessors.com/professor/118... 3.4 \n", + "1527 https://www.ratemyprofessors.com/professor/150... 3.4 \n", + "1528 https://www.ratemyprofessors.com/professor/304... 5 \n", + "1529 https://www.ratemyprofessors.com/professor/242... 2.4 \n", + "\n", + " Difficulty Rating Total Ratings \\\n", + "0 3.6 49 \n", + "1 2.9 11 \n", + "2 3 1 \n", + "3 2.9 35 \n", + "4 4.2 39 \n", + "... ... ... \n", + "1525 3.2 13 \n", + "1526 1.6 9 \n", + "1527 3.1 47 \n", + "1528 4 1 \n", + "1529 4.1 16 \n", + "\n", + " Tags \n", + "0 Skip class? You won't pass., Amazing lectures,... \n", + "1 Get ready to read, Group projects, Lots of hom... \n", + "2 EXTRA CREDIT, Accessible outside class, Respected \n", + "3 Get ready to read, Lots of homework, Lecture h... \n", + "4 Get ready to read, Test heavy, Lots of homewor... \n", + "... ... \n", + "1525 Amazing lectures, Accessible outside class, Cl... \n", + "1526 \n", + "1527 Tough grader, Clear grading criteria, EXTRA CR... \n", + "1528 Gives good feedback, Get ready to read, Respected \n", + "1529 Lots of homework, Tough grader, Lecture heavy,... \n", + "\n", + "[1530 rows x 7 columns]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ratings_for_prof = pd.DataFrame(data, columns=[\"ID\",\"Name\",\"URL\",\"Quality Rating\",\"Difficulty Rating\", \"Total Ratings\", \"Tags\"])\n", + "ratings_for_prof" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c8d2b76c", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "d9aaa15a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Subject IDCourse NumberCourse TitleSection NumberInstructor
0SPAN5303APPLIED SPANISH LINGUISTICS001A Elliott
1ECON5337BUSINESS & ECONOMIC FORECASTING001Aaron Smallwood
2ME5316THERMAL CONDUCTION004Abdolhossein Haji-Sheikh
3EMBA5413INTERNATIONAL BUSINESS EXPERIENCE002Abdul Rasheed
4MANA6328SEMINAR IN BUSINESS POLICY001Abdul Rasheed
5KINE5223001Adam Annaccone
6KINE5348PATHOPHYSIOLOGY AND PHARMACOLOGY I001Adam Annaccone
7KINE5235ADVANCED FUNCTIONAL ASSESSMENT AND CORRECTIVE ...001Adam Annaccone
8SOCW5306GENERALIST MACRO PRACTICE001Aditi Prabhakar
9IE5318APPLIED REGRESSION ANALYSIS005Aera LeBoulluec
10NURS5211001Aimee Dunnam
11NURS5324PSYCHIATRIC MENTAL CLINICAL PRACTICE I001Aimee Dunnam
12NURS5650PSYCHIATRIC MENTAL HEALTH NP ADVANCED PRACTICUM001Aimee Dunnam
13NURS5210002Aimee Dunnam
14FREN5331TOPICS IN GENRES OF THE 20TH CENTURY001Aimee Israel-Pelletier
15AE5313FLUID DYNAMICS001Albert Tong
16ME5313FLUID DYNAMICS001Albert Tong
17ME5313FLUID DYNAMICS002Albert Tong
18ME5331ANALYTIC METHODS IN ENGINEERING004Albert Tong
19PAPP5350INTRODUCTION TO PUBLIC ADMINISTRATION001Alejandro Rodriguez
20PAPP5350INTRODUCTION TO PUBLIC ADMINISTRATION500Alejandro Rodriguez
21CE5308STRUCTURAL MASONRY DESIGN001Ali Reza Sayah
22CSE5311DESIGN AND ANALYSIS OF ALGORITHMS003Allison Sullivan
23SOCW5362DIRECT PRACTICE WITH CHILDREN AND FAMILIES004Allison Tomlinson
24SOCW5362DIRECT PRACTICE WITH CHILDREN AND FAMILIES017Allison Tomlinson
25SOCW5362DIRECT PRACTICE WITH CHILDREN AND FAMILIES020Allison Tomlinson
26SOCW5363SOCIAL POLICY FOR CHILDREN & YOUTH012Allison Tomlinson
27NURS5315ADVANCED PATHOPHYSIOLOGY402Allison Tuppeny
28NURSC5315ADVANCED PATHOPHYSIOLOGY402Allison Tuppeny
29OPMA5361OPERATIONS MANAGEMENT001Alper Nakkas
30ARCH5670ADVANCED DESIGN STUDIO002Amanda Aman
31SOCW5313RESEARCH AND EVALUATION METHODS IN SOCIAL WORK II019Amanda Aykanian
32NURS5660FAMILY NP ADVANCED PRACTICUM459Amanda Mendez
33EDUC5394UNDERSTANDING AND DESIGNING CLASSROOM RESEARCH005Amanda Olsen
34EDUC5394UNDERSTANDING AND DESIGNING CLASSROOM RESEARCH105Amanda Olsen
35EDUC5397IMPLEMENTING AND DISSEMINATING CLASSROOM RESEARCH001Amanda Olsen
36NURS6320LEADERSHIP IN HEALTH CARE SYSTEMS400Amber Arnold
37NURS6320LEADERSHIP IN HEALTH CARE SYSTEMS404Amber Arnold
38PSYC5330ADVANCE EMPLOYEE TRAINING AND DEVELOPMENT001Amber Schroeder
39EDAD5330LEADERSHIP IN THE INSTRUCTIONAL SETTING PRACTICUM005Amy Anderson
40EDAD5383THE PRINCIPALSHIP105Amy Anderson
41EDAD5384RESOURCE MANAGEMENT IN EDUCATION105Amy Anderson
42LARC5397THESIS PREP001Amy Archambeau
43LIST5346TEACHING THE WRITING PROCESS005Amy Hinz Horn
44NURS5120ADULT-GERONTOLOGY ASSESSMENT LAB465Amy Lunsford
45NURS5130PEDIATRIC ASSESSMENT LAB474Amy Winslow
46NURS5130PEDIATRIC ASSESSMENT LAB416Amy Winslow
47NURS5120ADULT-GERONTOLOGY ASSESSMENT LAB428Ana Herrera
48MATH5311APPLIED PROBABILITY AND STOCHASTIC PROCESSES001Andrzej Korzeniowski
49NURSG5130PEDIATRIC ASSESSMENT LAB423Angela Miller
\n", + "
" + ], + "text/plain": [ + " Subject ID Course Number \\\n", + "0 SPAN 5303 \n", + "1 ECON 5337 \n", + "2 ME 5316 \n", + "3 EMBA 5413 \n", + "4 MANA 6328 \n", + "5 KINE 5223 \n", + "6 KINE 5348 \n", + "7 KINE 5235 \n", + "8 SOCW 5306 \n", + "9 IE 5318 \n", + "10 NURS 5211 \n", + "11 NURS 5324 \n", + "12 NURS 5650 \n", + "13 NURS 5210 \n", + "14 FREN 5331 \n", + "15 AE 5313 \n", + "16 ME 5313 \n", + "17 ME 5313 \n", + "18 ME 5331 \n", + "19 PAPP 5350 \n", + "20 PAPP 5350 \n", + "21 CE 5308 \n", + "22 CSE 5311 \n", + "23 SOCW 5362 \n", + "24 SOCW 5362 \n", + "25 SOCW 5362 \n", + "26 SOCW 5363 \n", + "27 NURS 5315 \n", + "28 NURSC 5315 \n", + "29 OPMA 5361 \n", + "30 ARCH 5670 \n", + "31 SOCW 5313 \n", + "32 NURS 5660 \n", + "33 EDUC 5394 \n", + "34 EDUC 5394 \n", + "35 EDUC 5397 \n", + "36 NURS 6320 \n", + "37 NURS 6320 \n", + "38 PSYC 5330 \n", + "39 EDAD 5330 \n", + "40 EDAD 5383 \n", + "41 EDAD 5384 \n", + "42 LARC 5397 \n", + "43 LIST 5346 \n", + "44 NURS 5120 \n", + "45 NURS 5130 \n", + "46 NURS 5130 \n", + "47 NURS 5120 \n", + "48 MATH 5311 \n", + "49 NURSG 5130 \n", + "\n", + " Course Title Section Number \\\n", + "0 APPLIED SPANISH LINGUISTICS 001 \n", + "1 BUSINESS & ECONOMIC FORECASTING 001 \n", + "2 THERMAL CONDUCTION 004 \n", + "3 INTERNATIONAL BUSINESS EXPERIENCE 002 \n", + "4 SEMINAR IN BUSINESS POLICY 001 \n", + "5 001 \n", + "6 PATHOPHYSIOLOGY AND PHARMACOLOGY I 001 \n", + "7 ADVANCED FUNCTIONAL ASSESSMENT AND CORRECTIVE ... 001 \n", + "8 GENERALIST MACRO PRACTICE 001 \n", + "9 APPLIED REGRESSION ANALYSIS 005 \n", + "10 001 \n", + "11 PSYCHIATRIC MENTAL CLINICAL PRACTICE I 001 \n", + "12 PSYCHIATRIC MENTAL HEALTH NP ADVANCED PRACTICUM 001 \n", + "13 002 \n", + "14 TOPICS IN GENRES OF THE 20TH CENTURY 001 \n", + "15 FLUID DYNAMICS 001 \n", + "16 FLUID DYNAMICS 001 \n", + "17 FLUID DYNAMICS 002 \n", + "18 ANALYTIC METHODS IN ENGINEERING 004 \n", + "19 INTRODUCTION TO PUBLIC ADMINISTRATION 001 \n", + "20 INTRODUCTION TO PUBLIC ADMINISTRATION 500 \n", + "21 STRUCTURAL MASONRY DESIGN 001 \n", + "22 DESIGN AND ANALYSIS OF ALGORITHMS 003 \n", + "23 DIRECT PRACTICE WITH CHILDREN AND FAMILIES 004 \n", + "24 DIRECT PRACTICE WITH CHILDREN AND FAMILIES 017 \n", + "25 DIRECT PRACTICE WITH CHILDREN AND FAMILIES 020 \n", + "26 SOCIAL POLICY FOR CHILDREN & YOUTH 012 \n", + "27 ADVANCED PATHOPHYSIOLOGY 402 \n", + "28 ADVANCED PATHOPHYSIOLOGY 402 \n", + "29 OPERATIONS MANAGEMENT 001 \n", + "30 ADVANCED DESIGN STUDIO 002 \n", + "31 RESEARCH AND EVALUATION METHODS IN SOCIAL WORK II 019 \n", + "32 FAMILY NP ADVANCED PRACTICUM 459 \n", + "33 UNDERSTANDING AND DESIGNING CLASSROOM RESEARCH 005 \n", + "34 UNDERSTANDING AND DESIGNING CLASSROOM RESEARCH 105 \n", + "35 IMPLEMENTING AND DISSEMINATING CLASSROOM RESEARCH 001 \n", + "36 LEADERSHIP IN HEALTH CARE SYSTEMS 400 \n", + "37 LEADERSHIP IN HEALTH CARE SYSTEMS 404 \n", + "38 ADVANCE EMPLOYEE TRAINING AND DEVELOPMENT 001 \n", + "39 LEADERSHIP IN THE INSTRUCTIONAL SETTING PRACTICUM 005 \n", + "40 THE PRINCIPALSHIP 105 \n", + "41 RESOURCE MANAGEMENT IN EDUCATION 105 \n", + "42 THESIS PREP 001 \n", + "43 TEACHING THE WRITING PROCESS 005 \n", + "44 ADULT-GERONTOLOGY ASSESSMENT LAB 465 \n", + "45 PEDIATRIC ASSESSMENT LAB 474 \n", + "46 PEDIATRIC ASSESSMENT LAB 416 \n", + "47 ADULT-GERONTOLOGY ASSESSMENT LAB 428 \n", + "48 APPLIED PROBABILITY AND STOCHASTIC PROCESSES 001 \n", + "49 PEDIATRIC ASSESSMENT LAB 423 \n", + "\n", + " Instructor \n", + "0 A Elliott \n", + "1 Aaron Smallwood \n", + "2 Abdolhossein Haji-Sheikh \n", + "3 Abdul Rasheed \n", + "4 Abdul Rasheed \n", + "5 Adam Annaccone \n", + "6 Adam Annaccone \n", + "7 Adam Annaccone \n", + "8 Aditi Prabhakar \n", + "9 Aera LeBoulluec \n", + "10 Aimee Dunnam \n", + "11 Aimee Dunnam \n", + "12 Aimee Dunnam \n", + "13 Aimee Dunnam \n", + "14 Aimee Israel-Pelletier \n", + "15 Albert Tong \n", + "16 Albert Tong \n", + "17 Albert Tong \n", + "18 Albert Tong \n", + "19 Alejandro Rodriguez \n", + "20 Alejandro Rodriguez \n", + "21 Ali Reza Sayah \n", + "22 Allison Sullivan \n", + "23 Allison Tomlinson \n", + "24 Allison Tomlinson \n", + "25 Allison Tomlinson \n", + "26 Allison Tomlinson \n", + "27 Allison Tuppeny \n", + "28 Allison Tuppeny \n", + "29 Alper Nakkas \n", + "30 Amanda Aman \n", + "31 Amanda Aykanian \n", + "32 Amanda Mendez \n", + "33 Amanda Olsen \n", + "34 Amanda Olsen \n", + "35 Amanda Olsen \n", + "36 Amber Arnold \n", + "37 Amber Arnold \n", + "38 Amber Schroeder \n", + "39 Amy Anderson \n", + "40 Amy Anderson \n", + "41 Amy Anderson \n", + "42 Amy Archambeau \n", + "43 Amy Hinz Horn \n", + "44 Amy Lunsford \n", + "45 Amy Winslow \n", + "46 Amy Winslow \n", + "47 Ana Herrera \n", + "48 Andrzej Korzeniowski \n", + "49 Angela Miller " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "instructors_for_classes.head(50)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "3df9f2cb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'CE 1000': [],\n", + " 'CE 1252': [['Amit Pokharel', array([], shape=(0, 7), dtype=object)],\n", + " ['Babak Alizadeh',\n", + " array([['2587962', 'Babak Alizadeh',\n", + " 'https://www.ratemyprofessors.com/professor/2587962', '4.5', '3',\n", + " '26',\n", + " 'Group projects, Accessible outside class, Gives good feedback, Respected, Clear grading criteria']],\n", + " dtype=object)],\n", + " ['Mohd Mezanur Rahman', array([], shape=(0, 7), dtype=object)],\n", + " ['Kawalpreet Kaur',\n", + " array([['2801232', 'Kawalpreet Kaur',\n", + " 'https://www.ratemyprofessors.com/professor/2801232', '5', '2',\n", + " '1', 'Caring, Gives good feedback, Participation matters']],\n", + " dtype=object)],\n", + " ['Sunakshi Hada', array([], shape=(0, 7), dtype=object)]],\n", + " 'CE 2000': [],\n", + " 'CE 2152': [],\n", + " 'CE 2191': [],\n", + " 'CE 2291': [],\n", + " 'CE 2312': [['George Agoki',\n", + " array([['2488791', 'George Agoki',\n", + " 'https://www.ratemyprofessors.com/professor/2488791', '1.6',\n", + " '2.7', '8',\n", + " 'Graded by few things, Lots of homework, Tough grader, Hilarious, Clear grading criteria']],\n", + " dtype=object)],\n", + " ['Seyed Missagh Shamshiri Guilvayi', array([], shape=(0, 7), dtype=object)],\n", + " ['Raad Azzawi',\n", + " array([['2070852', 'Raad Azzawi',\n", + " 'https://www.ratemyprofessors.com/professor/2070852', '3.9',\n", + " '3.1', '21',\n", + " 'Group projects, Inspirational, Caring, Amazing lectures, Tough grader']],\n", + " dtype=object)]],\n", + " 'CE 2391': [],\n", + " 'CE 3000': [],\n", + " 'CE 3131': [['Hyeok Choi',\n", + " array([['2885393', 'Hyeok Choi',\n", + " 'https://www.ratemyprofessors.com/professor/2885393', '2.7',\n", + " '3.3', '3',\n", + " 'So many papers, Tough grader, Participation matters']],\n", + " dtype=object)]],\n", + " 'CE 3143': [['Faria Fahim Badhon', array([], shape=(0, 7), dtype=object)],\n", + " ['Md Azijul Islam',\n", + " array([['2958205', 'Md Azijul Islam',\n", + " 'https://www.ratemyprofessors.com/professor/2958205', '4', '2',\n", + " '1', 'Lecture heavy, Caring, Respected']], dtype=object)],\n", + " ['Md Shams Razi Shopnil', array([], shape=(0, 7), dtype=object)],\n", + " ['Niloy Gupta', array([], shape=(0, 7), dtype=object)],\n", + " ['Tahsina Islam', array([], shape=(0, 7), dtype=object)],\n", + " ['Tanvir Imtiaz', array([], shape=(0, 7), dtype=object)],\n", + " ['Gang Lei', array([], shape=(0, 7), dtype=object)],\n", + " ['Md Hossain',\n", + " array([['1259737', 'Md Hossain',\n", + " 'https://www.ratemyprofessors.com/professor/1259737', '2.7',\n", + " '3.9', '15',\n", + " 'Tough Grader, Test Heavy, Amazing Lectures, Hilarious, Lecture Heavy']],\n", + " dtype=object)]],\n", + " 'CE 3300': [],\n", + " 'IE 3301': [['Aera LeBoulluec',\n", + " array([['2260609', 'Aera LeBoulluec',\n", + " 'https://www.ratemyprofessors.com/professor/2260609', '2.1',\n", + " '2.9', '35',\n", + " 'Get ready to read, Lots of homework, Lecture heavy, EXTRA CREDIT, Participation matters']],\n", + " dtype=object)],\n", + " ['Sheik Imrhan',\n", + " array([['890850', 'Sheik Imrhan',\n", + " 'https://www.ratemyprofessors.com/professor/890850', '1.5',\n", + " '4.6', '38',\n", + " \"Tough grader, Lecture heavy, Test heavy, Skip class? You won't pass., Get ready to read\"]],\n", + " dtype=object)],\n", + " ['Victoria Chen',\n", + " array([['1011470', 'Victoria Chen',\n", + " 'https://www.ratemyprofessors.com/professor/1011470', '3.3',\n", + " '3.8', '22',\n", + " 'Tough grader, Lots of homework, Clear grading criteria, Gives good feedback, Amazing lectures']],\n", + " dtype=object)],\n", + " ['Yasaman Ghasemi',\n", + " array([['2639003', 'Yasaman Ghasemi',\n", + " 'https://www.ratemyprofessors.com/professor/2639003', '5', '3',\n", + " '1', 'Accessible outside class, Caring, Clear grading criteria']],\n", + " dtype=object)],\n", + " ['Yiran Yang',\n", + " array([['2510416', 'Yiran Yang',\n", + " 'https://www.ratemyprofessors.com/professor/2510416', '5', '2.2',\n", + " '14',\n", + " 'Amazing lectures, Lots of homework, Clear grading criteria, EXTRA CREDIT, Caring']],\n", + " dtype=object)],\n", + " ['Erick Jones',\n", + " array([['1886306', 'Erick Jones',\n", + " 'https://www.ratemyprofessors.com/professor/1886306', '1.1',\n", + " '3.5', '4',\n", + " \"Group projects, So many papers, Skip class? You won't pass., Lots of homework\"]],\n", + " dtype=object)],\n", + " ['Rosie Kallie',\n", + " array([['2054234', 'Rosie Kallie',\n", + " 'https://www.ratemyprofessors.com/professor/2054234', '2.6',\n", + " '3.8', '72',\n", + " \"Tough grader, Skip class? You won't pass., Participation matters, Lots of homework, Group projects\"]],\n", + " dtype=object)],\n", + " ['Shouyi Wang',\n", + " array([['1854496', 'Shouyi Wang',\n", + " 'https://www.ratemyprofessors.com/professor/1854496', '4.8',\n", + " '2.4', '9',\n", + " 'Caring, Accessible outside class, Clear grading criteria, Respected']],\n", + " dtype=object)],\n", + " ['Khan MD Haque',\n", + " array([['2561452', 'Khan MD Haque',\n", + " 'https://www.ratemyprofessors.com/professor/2561452', '2.1',\n", + " '3.7', '9',\n", + " 'Lots of homework, Accessible outside class, Tough grader, Lecture heavy, EXTRA CREDIT']],\n", + " dtype=object)],\n", + " ['Sowmya Rao',\n", + " array([['2941409', 'Sowmya Rao',\n", + " 'https://www.ratemyprofessors.com/professor/2941409', '1', '5',\n", + " '3',\n", + " 'Graded by few things, Tough grader, Get ready to read, Lots of homework, Test heavy']],\n", + " dtype=object)],\n", + " ['Xin Liu',\n", + " array([['2700351', 'Xin Liu',\n", + " 'https://www.ratemyprofessors.com/professor/2700351', '3.8', '3',\n", + " '5',\n", + " 'Lots of homework, Accessible outside class, Lecture heavy, Clear grading criteria, Gives good feedback']],\n", + " dtype=object)],\n", + " ['Obiageli Lawrentia Ngwu',\n", + " array([['2971765', 'Obiageli Lawrentia Ngwu',\n", + " 'https://www.ratemyprofessors.com/professor/2971765', '2.3',\n", + " '2.3', '3',\n", + " 'Clear grading criteria, Lots of homework, Accessible outside class, Caring']],\n", + " dtype=object)],\n", + " ['Ukesh Chawal',\n", + " array([['2711981', 'Ukesh Chawal',\n", + " 'https://www.ratemyprofessors.com/professor/2711981', '4.8',\n", + " '2.6', '26',\n", + " 'Caring, EXTRA CREDIT, Amazing lectures, Respected, Clear grading criteria']],\n", + " dtype=object)]],\n", + " 'MATH 1324': [],\n", + " 'CE 3334': [['Naomi Gevaerd De Souza', array([], shape=(0, 7), dtype=object)],\n", + " ['Srinivas Prabakar',\n", + " array([['1912904', 'Srinivas Prabakar',\n", + " 'https://www.ratemyprofessors.com/professor/1912904', '4.4',\n", + " '3.6', '13',\n", + " 'Accessible outside class, Lecture heavy, Caring, EXTRA CREDIT, Participation matters']],\n", + " dtype=object)],\n", + " ['Hyeok Choi',\n", + " array([['2885393', 'Hyeok Choi',\n", + " 'https://www.ratemyprofessors.com/professor/2885393', '2.7',\n", + " '3.3', '3',\n", + " 'So many papers, Tough grader, Participation matters']],\n", + " dtype=object)]],\n", + " 'CE 3341': [['Suyun Ham',\n", + " array([['2388948', 'Suyun Ham',\n", + " 'https://www.ratemyprofessors.com/professor/2388948', '3.5',\n", + " '3.5', '13',\n", + " 'Tough grader, Beware of pop quizzes, Caring, Lecture heavy, Amazing lectures']],\n", + " dtype=object)],\n", + " ['Raad Azzawi',\n", + " array([['2070852', 'Raad Azzawi',\n", + " 'https://www.ratemyprofessors.com/professor/2070852', '3.9',\n", + " '3.1', '21',\n", + " 'Group projects, Inspirational, Caring, Amazing lectures, Tough grader']],\n", + " dtype=object)],\n", + " ['Panagiotis Danoglidis',\n", + " array([['2747965', 'Panagiotis Danoglidis',\n", + " 'https://www.ratemyprofessors.com/professor/2747965', '4', '2',\n", + " '3',\n", + " 'Accessible outside class, Amazing lectures, Gives good feedback, Clear grading criteria, Lots of homework']],\n", + " dtype=object)]],\n", + " 'CE 3342': [['Habib Ahmari',\n", + " array([['2091942', 'Habib Ahmari',\n", + " 'https://www.ratemyprofessors.com/professor/2091942', '3.3',\n", + " '4.4', '14',\n", + " \"Test heavy, Lots of homework, Skip class? You won't pass., Caring, Tough grader\"]],\n", + " dtype=object)],\n", + " ['Michelle Hummel', array([], shape=(0, 7), dtype=object)],\n", + " ['Babak Alizadeh',\n", + " array([['2587962', 'Babak Alizadeh',\n", + " 'https://www.ratemyprofessors.com/professor/2587962', '4.5', '3',\n", + " '26',\n", + " 'Group projects, Accessible outside class, Gives good feedback, Respected, Clear grading criteria']],\n", + " dtype=object)],\n", + " ['Kathleen Smits', array([], shape=(0, 7), dtype=object)],\n", + " ['Jessica Eisma',\n", + " array([['2700719', 'Jessica Eisma',\n", + " 'https://www.ratemyprofessors.com/professor/2700719', '2.1',\n", + " '4.3', '23',\n", + " 'Test heavy, Accessible outside class, Tough grader, Clear grading criteria, Lots of homework']],\n", + " dtype=object)]],\n", + " 'CE 3343': [['Xinbao Yu',\n", + " array([['2940833', 'Xinbao Yu',\n", + " 'https://www.ratemyprofessors.com/professor/2940833', '2', '4.7',\n", + " '3',\n", + " 'Lecture heavy, Caring, Tough grader, Accessible outside class, Respected']],\n", + " dtype=object)],\n", + " ['Laureano Hoyos',\n", + " array([['2504535', 'Laureano Hoyos',\n", + " 'https://www.ratemyprofessors.com/professor/2504535', '3.4',\n", + " '3.1', '9',\n", + " 'Test heavy, Lots of homework, Graded by few things, Tough grader, Lecture heavy']],\n", + " dtype=object)],\n", + " ['Md Hossain',\n", + " array([['1259737', 'Md Hossain',\n", + " 'https://www.ratemyprofessors.com/professor/1259737', '2.7',\n", + " '3.9', '15',\n", + " 'Tough Grader, Test Heavy, Amazing Lectures, Hilarious, Lecture Heavy']],\n", + " dtype=object)]],\n", + " 'CE 4000': [],\n", + " 'CE 4191': [],\n", + " 'CE 4291': [],\n", + " 'CE 4300': [['Kathleen Smits', array([], shape=(0, 7), dtype=object)],\n", + " ['Melanie Sattler', array([], shape=(0, 7), dtype=object)]],\n", + " 'CE 4301': [],\n", + " 'CE 4303': [['Nilo Tsung',\n", + " array([['2546336', 'Nilo Tsung',\n", + " 'https://www.ratemyprofessors.com/professor/2546336', '1.2', '4',\n", + " '5',\n", + " \"Get ready to read, Skip class? You won't pass., Beware of pop quizzes, Tough grader, Lecture heavy\"]],\n", + " dtype=object)]],\n", + " 'CE 4304': [['Michael Fairchild', array([], shape=(0, 7), dtype=object)],\n", + " ['Vinayak Kaushal',\n", + " array([['2712950', 'Vinayak Kaushal',\n", + " 'https://www.ratemyprofessors.com/professor/2712950', '4', '2.4',\n", + " '8',\n", + " 'Caring, Get ready to read, Accessible outside class, Gives good feedback, Respected']],\n", + " dtype=object)],\n", + " ['Zhe Yin',\n", + " array([['2861242', 'Zhe Yin',\n", + " 'https://www.ratemyprofessors.com/professor/2861242', '4', '2.4',\n", + " '7',\n", + " 'Tough grader, Beware of pop quizzes, Lecture heavy, Amazing lectures, Hilarious']],\n", + " dtype=object)],\n", + " ['Tamer Eljufout',\n", + " array([['2935601', 'Tamer Eljufout',\n", + " 'https://www.ratemyprofessors.com/professor/2935601', '2.3',\n", + " '3.2', '6',\n", + " 'Gives good feedback, EXTRA CREDIT, Tough grader, Lecture heavy, Accessible outside class']],\n", + " dtype=object)],\n", + " ['Ahmad Kamal Bani Hani', array([], shape=(0, 7), dtype=object)]],\n", + " 'CE 4305': [['Mohammad Najafi',\n", + " array([['2081531', 'Mohammad Najafi',\n", + " 'https://www.ratemyprofessors.com/professor/2081531', '1.7',\n", + " '4.2', '6',\n", + " 'Would take again, Group projects, Lots of homework, Tough grader, Gives good feedback']],\n", + " dtype=object)]],\n", + " 'CE 4306': [],\n", + " 'CE 4307': [['Arpita Bhatt',\n", + " array([['2406176', 'Arpita Bhatt',\n", + " 'https://www.ratemyprofessors.com/professor/2406176', '3.1',\n", + " '2.9', '14',\n", + " 'Group projects, Lots of homework, Beware of pop quizzes, Lecture heavy, Clear grading criteria']],\n", + " dtype=object)]],\n", + " 'CE 4310': [['Stephen Mattingly',\n", + " array([['2504529', 'Stephen Mattingly',\n", + " 'https://www.ratemyprofessors.com/professor/2504529', '3.3',\n", + " '3.3', '3',\n", + " 'Group projects, Lots of homework, Amazing lectures, Tough grader, Gives good feedback']],\n", + " dtype=object)]],\n", + " 'CE 4311': [['Kyung Hyun',\n", + " array([['2377191', 'Kyung Hyun',\n", + " 'https://www.ratemyprofessors.com/professor/2377191', '3.7',\n", + " '3.7', '6',\n", + " 'Get ready to read, Group projects, Accessible outside class, Caring, Tough grader']],\n", + " dtype=object)],\n", + " ['Saeed Reza Ramezanpour Nargesi',\n", + " array([['2556915', 'Saeed Reza Ramezanpour Nargesi',\n", + " 'https://www.ratemyprofessors.com/professor/2556915', '2.8',\n", + " '3.3', '32',\n", + " 'Tough grader, Test heavy, Caring, Clear grading criteria, Lecture heavy']],\n", + " dtype=object)]],\n", + " 'CE 4312': [['Sina Famili', array([], shape=(0, 7), dtype=object)],\n", + " ['Nelson Gomez-Torres',\n", + " array([['2750091', 'Nelson Gomez-Torres',\n", + " 'https://www.ratemyprofessors.com/professor/2750091', '1.9',\n", + " '4.1', '21',\n", + " 'Test heavy, Graded by few things, Tough grader, Lecture heavy, Participation matters']],\n", + " dtype=object)]],\n", + " 'CE 4313': [['Pengfei Li', array([], shape=(0, 7), dtype=object)]],\n", + " 'CE 4314': [],\n", + " 'CE 4318': [],\n", + " 'CE 4319': [],\n", + " 'CE 4324': [['Himan Hojat Jalali',\n", + " array([['2146877', 'Himan Hojat Jalali',\n", + " 'https://www.ratemyprofessors.com/professor/2146877', '4.6',\n", + " '3.1', '16',\n", + " 'Lots of homework, Accessible outside class, Amazing lectures, Respected, Gives good feedback']],\n", + " dtype=object)]],\n", + " 'CE 4332': [['Mohammad Najafi',\n", + " array([['2081531', 'Mohammad Najafi',\n", + " 'https://www.ratemyprofessors.com/professor/2081531', '1.7',\n", + " '4.2', '6',\n", + " 'Would take again, Group projects, Lots of homework, Tough grader, Gives good feedback']],\n", + " dtype=object)],\n", + " ['Vinayak Kaushal',\n", + " array([['2712950', 'Vinayak Kaushal',\n", + " 'https://www.ratemyprofessors.com/professor/2712950', '4', '2.4',\n", + " '8',\n", + " 'Caring, Get ready to read, Accessible outside class, Gives good feedback, Respected']],\n", + " dtype=object)]],\n", + " 'CE 4334': [],\n", + " 'CE 4352': [['Ernest Crosby',\n", + " array([['1897335', 'Ernest Crosby',\n", + " 'https://www.ratemyprofessors.com/professor/1897335', '1.6',\n", + " '3.1', '7',\n", + " 'Group projects, Lots of homework, Respected, Tests? Not many, Inspirational']],\n", + " dtype=object)],\n", + " ['Nelson Gomez-Torres',\n", + " array([['2750091', 'Nelson Gomez-Torres',\n", + " 'https://www.ratemyprofessors.com/professor/2750091', '1.9',\n", + " '4.1', '21',\n", + " 'Test heavy, Graded by few things, Tough grader, Lecture heavy, Participation matters']],\n", + " dtype=object)]],\n", + " 'CE 4391': [],\n", + " 'CE 4395': []}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "id = instructors_for_classes[\"Subject ID\"] + \" \" + instructors_for_classes[\"Course Number\"]\n", + "professors_for_class = {}\n", + "\n", + "for i in range(len(available)):\n", + " course_num = available[\"Course Num\"][i]\n", + " professors_for_class[course_num] = [] # Initialize with empty list, not [[]]\n", + " \n", + " for j in range(len(instructors_for_classes)):\n", + " if course_num == id[j]:\n", + " instructor = instructors_for_classes.iloc[j][\"Instructor\"]\n", + " \n", + " # Check if instructor already added\n", + " if instructor not in [prof[0] for prof in professors_for_class[course_num]]:\n", + " # Get rating as scalar value\n", + " rating_df = ratings_for_prof[ratings_for_prof[\"Name\"] == instructor]\n", + " # print(rating_df)\n", + " # Append as list pair\n", + " professors_for_class[course_num].append([instructor, rating_df.values])\n", + "\n", + "professors_for_class\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "018ef148", + "metadata": {}, + "outputs": [], + "source": [ + "def numpy_converter(obj):\n", + " if isinstance(obj, np.ndarray):\n", + " return obj.tolist()\n", + " raise TypeError(f\"Object of type {type(obj)} is not JSON serializable\")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "1941ae4d", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "8c46c076", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\"CE 1000\": [], \"CE 1252\": [[\"Amit Pokharel\", []], [\"Babak Alizadeh\", [[\"2587962\", \"Babak Alizadeh\", \"https://www.ratemyprofessors.com/professor/2587962\", \"4.5\", \"3\", \"26\", \"Group projects, Accessible outside class, Gives good feedback, Respected, Clear grading criteria\"]]], [\"Mohd Mezanur Rahman\", []], [\"Kawalpreet Kaur\", [[\"2801232\", \"Kawalpreet Kaur\", \"https://www.ratemyprofessors.com/professor/2801232\", \"5\", \"2\", \"1\", \"Caring, Gives good feedback, Participation matters\"]]], [\"Sunakshi Hada\", []]], \"CE 2000\": [], \"CE 2152\": [], \"CE 2191\": [], \"CE 2291\": [], \"CE 2312\": [[\"George Agoki\", [[\"2488791\", \"George Agoki\", \"https://www.ratemyprofessors.com/professor/2488791\", \"1.6\", \"2.7\", \"8\", \"Graded by few things, Lots of homework, Tough grader, Hilarious, Clear grading criteria\"]]], [\"Seyed Missagh Shamshiri Guilvayi\", []], [\"Raad Azzawi\", [[\"2070852\", \"Raad Azzawi\", \"https://www.ratemyprofessors.com/professor/2070852\", \"3.9\", \"3.1\", \"21\", \"Group projects, Inspirational, Caring, Amazing lectures, Tough grader\"]]]], \"CE 2391\": [], \"CE 3000\": [], \"CE 3131\": [[\"Hyeok Choi\", [[\"2885393\", \"Hyeok Choi\", \"https://www.ratemyprofessors.com/professor/2885393\", \"2.7\", \"3.3\", \"3\", \"So many papers, Tough grader, Participation matters\"]]]], \"CE 3143\": [[\"Faria Fahim Badhon\", []], [\"Md Azijul Islam\", [[\"2958205\", \"Md Azijul Islam\", \"https://www.ratemyprofessors.com/professor/2958205\", \"4\", \"2\", \"1\", \"Lecture heavy, Caring, Respected\"]]], [\"Md Shams Razi Shopnil\", []], [\"Niloy Gupta\", []], [\"Tahsina Islam\", []], [\"Tanvir Imtiaz\", []], [\"Gang Lei\", []], [\"Md Hossain\", [[\"1259737\", \"Md Hossain\", \"https://www.ratemyprofessors.com/professor/1259737\", \"2.7\", \"3.9\", \"15\", \"Tough Grader, Test Heavy, Amazing Lectures, Hilarious, Lecture Heavy\"]]]], \"CE 3300\": [], \"IE 3301\": [[\"Aera LeBoulluec\", [[\"2260609\", \"Aera LeBoulluec\", \"https://www.ratemyprofessors.com/professor/2260609\", \"2.1\", \"2.9\", \"35\", \"Get ready to read, Lots of homework, Lecture heavy, EXTRA CREDIT, Participation matters\"]]], [\"Sheik Imrhan\", [[\"890850\", \"Sheik Imrhan\", \"https://www.ratemyprofessors.com/professor/890850\", \"1.5\", \"4.6\", \"38\", \"Tough grader, Lecture heavy, Test heavy, Skip class? You won't pass., Get ready to read\"]]], [\"Victoria Chen\", [[\"1011470\", \"Victoria Chen\", \"https://www.ratemyprofessors.com/professor/1011470\", \"3.3\", \"3.8\", \"22\", \"Tough grader, Lots of homework, Clear grading criteria, Gives good feedback, Amazing lectures\"]]], [\"Yasaman Ghasemi\", [[\"2639003\", \"Yasaman Ghasemi\", \"https://www.ratemyprofessors.com/professor/2639003\", \"5\", \"3\", \"1\", \"Accessible outside class, Caring, Clear grading criteria\"]]], [\"Yiran Yang\", [[\"2510416\", \"Yiran Yang\", \"https://www.ratemyprofessors.com/professor/2510416\", \"5\", \"2.2\", \"14\", \"Amazing lectures, Lots of homework, Clear grading criteria, EXTRA CREDIT, Caring\"]]], [\"Erick Jones\", [[\"1886306\", \"Erick Jones\", \"https://www.ratemyprofessors.com/professor/1886306\", \"1.1\", \"3.5\", \"4\", \"Group projects, So many papers, Skip class? You won't pass., Lots of homework\"]]], [\"Rosie Kallie\", [[\"2054234\", \"Rosie Kallie\", \"https://www.ratemyprofessors.com/professor/2054234\", \"2.6\", \"3.8\", \"72\", \"Tough grader, Skip class? You won't pass., Participation matters, Lots of homework, Group projects\"]]], [\"Shouyi Wang\", [[\"1854496\", \"Shouyi Wang\", \"https://www.ratemyprofessors.com/professor/1854496\", \"4.8\", \"2.4\", \"9\", \"Caring, Accessible outside class, Clear grading criteria, Respected\"]]], [\"Khan MD Haque\", [[\"2561452\", \"Khan MD Haque\", \"https://www.ratemyprofessors.com/professor/2561452\", \"2.1\", \"3.7\", \"9\", \"Lots of homework, Accessible outside class, Tough grader, Lecture heavy, EXTRA CREDIT\"]]], [\"Sowmya Rao\", [[\"2941409\", \"Sowmya Rao\", \"https://www.ratemyprofessors.com/professor/2941409\", \"1\", \"5\", \"3\", \"Graded by few things, Tough grader, Get ready to read, Lots of homework, Test heavy\"]]], [\"Xin Liu\", [[\"2700351\", \"Xin Liu\", \"https://www.ratemyprofessors.com/professor/2700351\", \"3.8\", \"3\", \"5\", \"Lots of homework, Accessible outside class, Lecture heavy, Clear grading criteria, Gives good feedback\"]]], [\"Obiageli Lawrentia Ngwu\", [[\"2971765\", \"Obiageli Lawrentia Ngwu\", \"https://www.ratemyprofessors.com/professor/2971765\", \"2.3\", \"2.3\", \"3\", \"Clear grading criteria, Lots of homework, Accessible outside class, Caring\"]]], [\"Ukesh Chawal\", [[\"2711981\", \"Ukesh Chawal\", \"https://www.ratemyprofessors.com/professor/2711981\", \"4.8\", \"2.6\", \"26\", \"Caring, EXTRA CREDIT, Amazing lectures, Respected, Clear grading criteria\"]]]], \"MATH 1324\": [], \"CE 3334\": [[\"Naomi Gevaerd De Souza\", []], [\"Srinivas Prabakar\", [[\"1912904\", \"Srinivas Prabakar\", \"https://www.ratemyprofessors.com/professor/1912904\", \"4.4\", \"3.6\", \"13\", \"Accessible outside class, Lecture heavy, Caring, EXTRA CREDIT, Participation matters\"]]], [\"Hyeok Choi\", [[\"2885393\", \"Hyeok Choi\", \"https://www.ratemyprofessors.com/professor/2885393\", \"2.7\", \"3.3\", \"3\", \"So many papers, Tough grader, Participation matters\"]]]], \"CE 3341\": [[\"Suyun Ham\", [[\"2388948\", \"Suyun Ham\", \"https://www.ratemyprofessors.com/professor/2388948\", \"3.5\", \"3.5\", \"13\", \"Tough grader, Beware of pop quizzes, Caring, Lecture heavy, Amazing lectures\"]]], [\"Raad Azzawi\", [[\"2070852\", \"Raad Azzawi\", \"https://www.ratemyprofessors.com/professor/2070852\", \"3.9\", \"3.1\", \"21\", \"Group projects, Inspirational, Caring, Amazing lectures, Tough grader\"]]], [\"Panagiotis Danoglidis\", [[\"2747965\", \"Panagiotis Danoglidis\", \"https://www.ratemyprofessors.com/professor/2747965\", \"4\", \"2\", \"3\", \"Accessible outside class, Amazing lectures, Gives good feedback, Clear grading criteria, Lots of homework\"]]]], \"CE 3342\": [[\"Habib Ahmari\", [[\"2091942\", \"Habib Ahmari\", \"https://www.ratemyprofessors.com/professor/2091942\", \"3.3\", \"4.4\", \"14\", \"Test heavy, Lots of homework, Skip class? You won't pass., Caring, Tough grader\"]]], [\"Michelle Hummel\", []], [\"Babak Alizadeh\", [[\"2587962\", \"Babak Alizadeh\", \"https://www.ratemyprofessors.com/professor/2587962\", \"4.5\", \"3\", \"26\", \"Group projects, Accessible outside class, Gives good feedback, Respected, Clear grading criteria\"]]], [\"Kathleen Smits\", []], [\"Jessica Eisma\", [[\"2700719\", \"Jessica Eisma\", \"https://www.ratemyprofessors.com/professor/2700719\", \"2.1\", \"4.3\", \"23\", \"Test heavy, Accessible outside class, Tough grader, Clear grading criteria, Lots of homework\"]]]], \"CE 3343\": [[\"Xinbao Yu\", [[\"2940833\", \"Xinbao Yu\", \"https://www.ratemyprofessors.com/professor/2940833\", \"2\", \"4.7\", \"3\", \"Lecture heavy, Caring, Tough grader, Accessible outside class, Respected\"]]], [\"Laureano Hoyos\", [[\"2504535\", \"Laureano Hoyos\", \"https://www.ratemyprofessors.com/professor/2504535\", \"3.4\", \"3.1\", \"9\", \"Test heavy, Lots of homework, Graded by few things, Tough grader, Lecture heavy\"]]], [\"Md Hossain\", [[\"1259737\", \"Md Hossain\", \"https://www.ratemyprofessors.com/professor/1259737\", \"2.7\", \"3.9\", \"15\", \"Tough Grader, Test Heavy, Amazing Lectures, Hilarious, Lecture Heavy\"]]]], \"CE 4000\": [], \"CE 4191\": [], \"CE 4291\": [], \"CE 4300\": [[\"Kathleen Smits\", []], [\"Melanie Sattler\", []]], \"CE 4301\": [], \"CE 4303\": [[\"Nilo Tsung\", [[\"2546336\", \"Nilo Tsung\", \"https://www.ratemyprofessors.com/professor/2546336\", \"1.2\", \"4\", \"5\", \"Get ready to read, Skip class? You won't pass., Beware of pop quizzes, Tough grader, Lecture heavy\"]]]], \"CE 4304\": [[\"Michael Fairchild\", []], [\"Vinayak Kaushal\", [[\"2712950\", \"Vinayak Kaushal\", \"https://www.ratemyprofessors.com/professor/2712950\", \"4\", \"2.4\", \"8\", \"Caring, Get ready to read, Accessible outside class, Gives good feedback, Respected\"]]], [\"Zhe Yin\", [[\"2861242\", \"Zhe Yin\", \"https://www.ratemyprofessors.com/professor/2861242\", \"4\", \"2.4\", \"7\", \"Tough grader, Beware of pop quizzes, Lecture heavy, Amazing lectures, Hilarious\"]]], [\"Tamer Eljufout\", [[\"2935601\", \"Tamer Eljufout\", \"https://www.ratemyprofessors.com/professor/2935601\", \"2.3\", \"3.2\", \"6\", \"Gives good feedback, EXTRA CREDIT, Tough grader, Lecture heavy, Accessible outside class\"]]], [\"Ahmad Kamal Bani Hani\", []]], \"CE 4305\": [[\"Mohammad Najafi\", [[\"2081531\", \"Mohammad Najafi\", \"https://www.ratemyprofessors.com/professor/2081531\", \"1.7\", \"4.2\", \"6\", \"Would take again, Group projects, Lots of homework, Tough grader, Gives good feedback\"]]]], \"CE 4306\": [], \"CE 4307\": [[\"Arpita Bhatt\", [[\"2406176\", \"Arpita Bhatt\", \"https://www.ratemyprofessors.com/professor/2406176\", \"3.1\", \"2.9\", \"14\", \"Group projects, Lots of homework, Beware of pop quizzes, Lecture heavy, Clear grading criteria\"]]]], \"CE 4310\": [[\"Stephen Mattingly\", [[\"2504529\", \"Stephen Mattingly\", \"https://www.ratemyprofessors.com/professor/2504529\", \"3.3\", \"3.3\", \"3\", \"Group projects, Lots of homework, Amazing lectures, Tough grader, Gives good feedback\"]]]], \"CE 4311\": [[\"Kyung Hyun\", [[\"2377191\", \"Kyung Hyun\", \"https://www.ratemyprofessors.com/professor/2377191\", \"3.7\", \"3.7\", \"6\", \"Get ready to read, Group projects, Accessible outside class, Caring, Tough grader\"]]], [\"Saeed Reza Ramezanpour Nargesi\", [[\"2556915\", \"Saeed Reza Ramezanpour Nargesi\", \"https://www.ratemyprofessors.com/professor/2556915\", \"2.8\", \"3.3\", \"32\", \"Tough grader, Test heavy, Caring, Clear grading criteria, Lecture heavy\"]]]], \"CE 4312\": [[\"Sina Famili\", []], [\"Nelson Gomez-Torres\", [[\"2750091\", \"Nelson Gomez-Torres\", \"https://www.ratemyprofessors.com/professor/2750091\", \"1.9\", \"4.1\", \"21\", \"Test heavy, Graded by few things, Tough grader, Lecture heavy, Participation matters\"]]]], \"CE 4313\": [[\"Pengfei Li\", []]], \"CE 4314\": [], \"CE 4318\": [], \"CE 4319\": [], \"CE 4324\": [[\"Himan Hojat Jalali\", [[\"2146877\", \"Himan Hojat Jalali\", \"https://www.ratemyprofessors.com/professor/2146877\", \"4.6\", \"3.1\", \"16\", \"Lots of homework, Accessible outside class, Amazing lectures, Respected, Gives good feedback\"]]]], \"CE 4332\": [[\"Mohammad Najafi\", [[\"2081531\", \"Mohammad Najafi\", \"https://www.ratemyprofessors.com/professor/2081531\", \"1.7\", \"4.2\", \"6\", \"Would take again, Group projects, Lots of homework, Tough grader, Gives good feedback\"]]], [\"Vinayak Kaushal\", [[\"2712950\", \"Vinayak Kaushal\", \"https://www.ratemyprofessors.com/professor/2712950\", \"4\", \"2.4\", \"8\", \"Caring, Get ready to read, Accessible outside class, Gives good feedback, Respected\"]]]], \"CE 4334\": [], \"CE 4352\": [[\"Ernest Crosby\", [[\"1897335\", \"Ernest Crosby\", \"https://www.ratemyprofessors.com/professor/1897335\", \"1.6\", \"3.1\", \"7\", \"Group projects, Lots of homework, Respected, Tests? Not many, Inspirational\"]]], [\"Nelson Gomez-Torres\", [[\"2750091\", \"Nelson Gomez-Torres\", \"https://www.ratemyprofessors.com/professor/2750091\", \"1.9\", \"4.1\", \"21\", \"Test heavy, Graded by few things, Tough grader, Lecture heavy, Participation matters\"]]]], \"CE 4391\": [], \"CE 4395\": []}\n" + ] + } + ], + "source": [ + "json_string = json.dumps(professors_for_class, default=numpy_converter)\n", + "\n", + "print(json_string)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cf22185f", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/server/app/scripts/algorithm.py b/server/app/scripts/algorithm.py deleted file mode 100644 index 8d6e3406..00000000 --- a/server/app/scripts/algorithm.py +++ /dev/null @@ -1,11 +0,0 @@ -import pandas as pd -import sqlite3 -department = "CE" -db_path = "SmartAdvisors/data/classes.db" - -db = sqlite3.connect(db_path) -cur = db.cursor() - -cur.execute(f"SELECT * FROM ClassesFor{department}") -data = cur.fetchall() -print(data) diff --git a/server/app/scripts/parse_transcript.py b/server/app/scripts/parse_transcript.py index 285f0ca7..cb31ff8c 100644 --- a/server/app/scripts/parse_transcript.py +++ b/server/app/scripts/parse_transcript.py @@ -110,4 +110,26 @@ def extract_all_courses(pdf_path: str) -> List[str]: print(f"Error parsing PDF: {e}") return [] - return sorted(list(found_courses_set)) \ No newline at end of file + unique_courses = sorted(list(found_courses_set)) + return unique_courses + +# --- Main execution block --- +if __name__ == "__main__": + if len(sys.argv) > 1: + transcript_pdf_path = sys.argv[1] + else: + transcript_pdf_path = "/Users/johna/Downloads/SSR_TSRPT_UN (20) (1).pdf" + + extracted_courses = extract_all_courses(transcript_pdf_path) + + if extracted_courses: + print("\n--- Found Courses ---") + for course in extracted_courses: + print(course) + print(f"\nTotal unique courses found: {len(extracted_courses)}") + else: + print("\nNo course codes could be extracted.") + +# if someone has a D, F, P, F, Q,W, R, I Z +# also if you are a freshman, there might not be any grades attached to the courses +# also if the user has no classes, there should be an option called i'm new to UTA and we just send them to select the professor and courses attributes diff --git a/server/app/scripts/scraping.py b/server/app/scripts/scraping.py index 87016118..42559b1a 100644 --- a/server/app/scripts/scraping.py +++ b/server/app/scripts/scraping.py @@ -1,12 +1,13 @@ +# Complete Web Scraper with OR Prerequisite Logic + from bs4 import BeautifulSoup import requests import re import sqlite3 import spacy -# --- New Code: Load spaCy Model Globally --- -# This loads the model once when the script starts, which is much more efficient. -# It will download the model if you don't have it installed. + +# --- Load spaCy Model Globally --- try: nlp = spacy.load("en_core_web_lg") except OSError: @@ -15,16 +16,53 @@ spacy.cli.download("en_core_web_lg") nlp = spacy.load("en_core_web_lg") + # Regex to find course codes (e.g., CEE 1234, MATH 2425) -# This is often more reliable than just spaCy's POS tagging for this specific format COURSE_RE = re.compile(r'([A-Z]{2,4})\s(\d{4})') -# --- New Code: Requisite Extraction Function --- -# --- New Code: Requisite Extraction Function (Modified) --- -# --- New Code: Requisite Extraction Function (State Machine) --- + +# --- NEW FUNCTION: Format Prerequisites with OR Logic --- +def format_prerequisites_with_or_logic(prereqs_set, description_text): + """ + Format prerequisites string, preserving OR relationships from description. + + Returns: String like "CSE 2320, MATH 3133|IE 3301" + Where "|" indicates OR and "," indicates AND + """ + if not prereqs_set: + return "" + + # Look for "X #### or Y ####" patterns in the description + or_pattern = r'([A-Z]{2,4}\s+\d{4})\s+or\s+([A-Z]{2,4}\s+\d{4})' + or_matches = re.findall(or_pattern, description_text, re.IGNORECASE) + + # Group OR courses together + or_groups = [] + remaining = set(prereqs_set) + + for match in or_matches: + course1 = match[0].strip() + course2 = match[1].strip() + + # Normalize spaces + course1 = ' '.join(course1.split()) + course2 = ' '.join(course2.split()) + + # If both courses are in the prerequisites, group them as OR + if course1 in remaining and course2 in remaining: + or_groups.append(f"{course1}|{course2}") + remaining.discard(course1) + remaining.discard(course2) + + # Combine: remaining individual courses + OR groups + all_parts = list(remaining) + or_groups + return ', '.join(all_parts) + + +# --- Requisite Extraction Function (State Machine) --- def extract_requisites(description_text): """ - Uses spaCy to parse the *entire requisite block* (not just the last line) + Uses spaCy to parse the entire requisite block and uses a state machine to categorize courses. """ prereqs = set() @@ -71,11 +109,10 @@ def extract_requisites(description_text): sent_text = sent.text.lower() # Check for keywords to *change* the state - # (This handles "Prerequisite... Corequisite...") if "corequisite" in sent_text or "concurrent" in sent_text: - current_mode = 1 # Now we are in coreq mode + current_mode = 1 # Now we are in coreq mode elif "prerequisite" in sent_text: - current_mode = 0 # Now we are in prereq mode + current_mode = 0 # Now we are in prereq mode # Find all course codes in this sentence found_codes = COURSE_RE.findall(sent.text) @@ -92,18 +129,16 @@ def extract_requisites(description_text): return {"prereqs": prereqs, "coreqs": coreqs} + def find_data(html_content): """ Find the (Course_Num, Course_Name) and (Prerequisites, Corequisites) Returned as list_of_titles and list_of_reqs respectively """ - # print(html_content) soup = BeautifulSoup(html_content, 'html.parser') titles_of_courses = soup.find_all(class_="courseblocktitle") - """ - Find the Course Numbers and Names of all Classes in the chosen department - """ + # Find the Course Numbers and Names of all Classes in the chosen department list_of_titles = [] for i in titles_of_courses: @@ -120,19 +155,15 @@ def find_data(html_content): course_id = delimited_list[0].strip() # Clean the course name - # " Introduction to Programming (3-2) 3" - # Strip whitespace and remove the credit hours at the end course_name = re.sub(r'\s+\(.*\)\s*\d*$', '', delimited_list[1]).strip() list_of_titles.append([course_id, course_name]) except (IndexError, ValueError): - # Skip invalid formats (e.g., a title block without a period or number) + # Skip invalid formats continue - """ - Find the Pre-Requisites and Co-requisites of a Class - """ + # Find the Pre-Requisites and Co-requisites of a Class list_of_reqs = [] list_of_desc = [] @@ -143,27 +174,17 @@ def find_data(html_content): desc_text = desc_html.text list_of_desc.append(desc_text) - # --- Updated Code: Call the new spaCy function --- + # Call the spaCy function to extract requisites reqs = extract_requisites(desc_text) list_of_reqs.append(reqs) - - # TODO - # IF THE Department from Prerequisite is not the same as the current department then grab the data for that department and add on the prerequisite - # (This logic is complex and would require a recursive scraper) return list_of_titles, list_of_reqs, list_of_desc + def find_prereqs(prerequisites, main_course_department, safe_table_name, cur): """ Recursively finds and inserts prerequisite courses from other departments. - - :param prerequisites: A set of prerequisite course IDs, e.g., {'MATH 1426', 'PHYS 1443'} - :param main_course_department: The department of the course we're checking, e.g., "CE" - :param safe_table_name: The name of the SQL table to insert into. - :param cur: The active database cursor. """ - - # Use the same INSERT OR REPLACE strategy as insert_courses sql_insert = f""" INSERT OR REPLACE INTO {safe_table_name} (Course_Num, Course_Name, Pre_Requisites, Co_Requisites, Description) @@ -175,34 +196,29 @@ def find_prereqs(prerequisites, main_course_department, safe_table_name, cur): # Loop through each prerequisite course ID in the set for prereq_course_id in prerequisites: - # prereq_course_id is a string, e.g., "MATH 1426" - # Check if this prerequisite is in a different department if main_course_department not in str(prereq_course_id): try: - prereq_dept = prereq_course_id.split(" ")[0] # e.g., "MATH" + prereq_dept = prereq_course_id.split(" ")[0] # e.g., "MATH" - # --- VITAL CHECK: PREVENT INFINITE RECURSION --- - # Check if we have *already* inserted this course. + # Check if we have already inserted this course cur.execute(f"SELECT 1 FROM {safe_table_name} WHERE Course_Num = ?", (prereq_course_id,)) if cur.fetchone(): - # If it exists, we're done. Skip to the next prerequisite. continue - # --- We don't have it. Scrape the new department. --- + # We don't have it. Scrape the new department. print(f"--- Finding prereq: {prereq_course_id} from {prereq_dept} department...") html = get_html_content(prereq_dept) if not html: print(f"Warning: Could not fetch {prereq_dept}. Skipping {prereq_course_id}.") - continue # Skip this prerequisite + continue - # Parse the *entire* department page + # Parse the entire department page new_titles, new_preqs, new_descs = find_data(html) # Find the specific course we're looking for found_course = False for k in range(len(new_titles)): - clean_title_from_scrape = new_titles[k][0].replace('\u00A0', ' ').strip() # If we find the matching course (e.g., "MATH 1426") @@ -213,30 +229,32 @@ def find_prereqs(prerequisites, main_course_department, safe_table_name, cur): prereqs_for_this_prereq_set = new_preqs[k]["prereqs"] coreqs_for_this_prereq_set = new_preqs[k]["coreqs"] - prereqs_str = ', '.join(prereqs_for_this_prereq_set) + # --- UPDATED: Use OR logic formatter --- + prereqs_str = format_prerequisites_with_or_logic( + prereqs_for_this_prereq_set, + new_descs[k] + ) coreqs_str = ', '.join(coreqs_for_this_prereq_set) data_tuple_for_prereq = ( new_titles[k][0], # Course_Num new_titles[k][1], # Course_Name - prereqs_str, # Pre_Requisites + prereqs_str, # Pre_Requisites with OR logic coreqs_str, # Co_Requisites - str(new_descs[k]).strip() # Description + str(new_descs[k]).strip() # Description ) - # --- 1. Insert this prerequisite course (e.g., "MATH 1426") --- + # Insert this prerequisite course try: cur.execute(sql_insert, data_tuple_for_prereq) except Exception as e: print(f"Error inserting prereq {data_tuple_for_prereq[0]}: {e}") - # --- 2. NOW, recursively find *its* prerequisites --- + # Recursively find its prerequisites all_prereqs_for_prereq = prereqs_for_this_prereq_set.union(coreqs_for_this_prereq_set) if all_prereqs_for_prereq: - # The 'department' for this recursive call is "MATH" (prereq_dept) find_prereqs(all_prereqs_for_prereq, prereq_dept, safe_table_name, cur) - # We found our course, so break from the inner 'for k' loop break if not found_course: @@ -244,15 +262,15 @@ def find_prereqs(prerequisites, main_course_department, safe_table_name, cur): except Exception as e: print(f"Recursive scrape error on {prereq_course_id}: {e}") - continue # Continue to the next prereq in the 'for' loop + continue - # This function does not need to return anything. - # Its only job is to find and insert. return - + def insert_courses(html_content, department): - + """ + Insert courses into the database with OR logic preserved. + """ db_path = "SmartAdvisors/data/classes.db" db = sqlite3.connect(db_path) @@ -264,10 +282,10 @@ def insert_courses(html_content, department): print(f"Found {len(list_of_preqs)} requisite lists.") print(f"Found {len(description)} descriptions.") - # Sanitize department name for table name (basic) + # Sanitize department name for table name safe_table_name = re.sub(r'[^a-zA-Z0-9_]', '', f"ClassesFor{department}") - # Creates the Classes Table if not already present + # Create the Classes Table if not already present try: cur.execute(f"""CREATE TABLE IF NOT EXISTS {safe_table_name}( Course_Num VARCHAR(10) NOT NULL PRIMARY KEY, @@ -283,30 +301,28 @@ def insert_courses(html_content, department): sql_insert = f""" INSERT OR REPLACE INTO {safe_table_name} - (Course_Num, Course_Name, Pre_Requisites,Co_Requisites, Description) + (Course_Num, Course_Name, Pre_Requisites, Co_Requisites, Description) VALUES (?, ?, ?, ?, ?) """ + i = 0 while i < len(list_of_titles): - prereqs_set = list_of_preqs[i]["prereqs"] # Get the set - coreqs_set = list_of_preqs[i]["coreqs"] # Get the set + prereqs_set = list_of_preqs[i]["prereqs"] + coreqs_set = list_of_preqs[i]["coreqs"] - prereqs_str = ', '.join([str(item) for item in prereqs_set]) + # --- UPDATED: Use OR logic formatter --- + prereqs_str = format_prerequisites_with_or_logic(prereqs_set, description[i]) coreqs_str = ', '.join([str(item) for item in coreqs_set]) - # --- This is the Depth-First Search part --- - # 1. First, find and insert all prerequisites for this course - # We combine prereqs and coreqs to process them all + # First, find and insert all prerequisites for this course all_reqs_set = prereqs_set.union(coreqs_set) - - # Call the recursive function. It doesn't return anything. find_prereqs(all_reqs_set, department, safe_table_name, cur) - # 2. Now that all prerequisites are in the DB, insert the main course + # Now insert the main course data = ( list_of_titles[i][0], # Course_Num list_of_titles[i][1], # Course_Name - str(prereqs_str), # Pre_Requisites + str(prereqs_str), # Pre_Requisites with OR logic str(coreqs_str), # Co_Requisites str(description[i]).strip() # Description ) @@ -315,12 +331,17 @@ def insert_courses(html_content, department): i += 1 except Exception as e: print(f"Error inserting {data[0]}: {e}") - i += 1 # Increment to avoid an infinite loop on a failing row + i += 1 db.commit() db.close() print(f"Successfully processed and saved data for {department} to {db_path}") + + def get_html_content(department): + """ + Fetch HTML content from UTA course catalog. + """ department = department.lower() website = f"https://catalog.uta.edu/coursedescriptions/{department}" headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'} @@ -328,19 +349,27 @@ def get_html_content(department): print(f"Requesting data from {website}...") try: response = requests.get(website, headers=headers) - response.raise_for_status() # Will raise an error for bad responses (404, 500, etc.) + response.raise_for_status() print("Success.") return response.text except requests.exceptions.RequestException as e: print(f"Error fetching URL: {e}") return None + # --- Main execution --- -department = "CSE" # Example department - -""" -Insert the into the database for any department -""" -html = get_html_content(department) -if html: - insert_courses(html, department) \ No newline at end of file +if __name__ == "__main__": + department = "CE" # Change this to scrape other departments + + print(f"Starting scraper for {department} department...") + print("OR logic will be preserved (format: COURSE1|COURSE2 for OR relationships)") + print() + + html = get_html_content(department) + if html: + insert_courses(html, department) + print("\n✓ Scraping complete!") + print("Prerequisites with OR logic are stored using the '|' separator") + print("Example: 'MATH 3133|IE 3301' means MATH 3133 OR IE 3301") + else: + print("✗ Failed to retrieve HTML content") \ No newline at end of file diff --git a/server/app/scripts/scraping_prof.ipynb b/server/app/scripts/scraping_prof.ipynb new file mode 100644 index 00000000..53c4982b --- /dev/null +++ b/server/app/scripts/scraping_prof.ipynb @@ -0,0 +1,457 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "3fe6b170", + "metadata": {}, + "outputs": [], + "source": [ + "from bs4 import BeautifulSoup\n", + "import time\n", + "from selenium import webdriver\n", + "from selenium.webdriver.chrome.service import Service\n", + "from selenium.webdriver.chrome.options import Options\n", + "from webdriver_manager.chrome import ChromeDriverManager\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3027f96d", + "metadata": {}, + "outputs": [], + "source": [ + "# 1. Setup Selenium (Headless mode so it doesn't pop up a window)\n", + "chrome_options = Options()\n", + "# chrome_options.add_argument(\"--headless\") \n", + "driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)\n", + "\n", + "# Base URL for UTA Engineering\n", + "base_url = \"https://www.uta.edu/academics/schools-colleges/engineering/academics/departments/civil/faculty-directory\"\n", + "\n", + "# 2. Get the main list of professors (Requests is fine for this part if the links are static)\n", + "# However, since we have Selenium running, let's use it for everything to be safe.\n", + "driver.get(base_url)\n", + "time.sleep(2) # Wait for page to load\n", + "\n", + "soup_main = BeautifulSoup(driver.page_source, \"html.parser\")\n", + "list_of_profs_urls = []\n", + "list_of_prof_classes = []" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3a181a8b", + "metadata": {}, + "outputs": [], + "source": [ + "for a in soup_main.find_all('a', href=True):\n", + " if \"username\" in a[\"href\"]:\n", + " list_of_profs_urls.append(a['href'])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "05a6ae80", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scraping: https://www.uta.edu/academics/faculty/profile?username=hchoi\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=chenx\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=danoglidisp\n", + "Does not offer Spring 2026 Classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=eismaj\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=nickfang\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=hams\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=hossain\n", + "Does not offer Spring 2026 Classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=hoyos\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=hummelm\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=hyunkk\n", + "Does not offer Spring 2026 Classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=jalalihh\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=karbhari\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=kangi\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=konstagdoutom\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=lip\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=linz2\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=spmatt\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=najafi\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=parkjy\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=parks7\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=rajiba\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=sroman\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=ryuk\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=sakibm\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=shahsp\n", + "Does not offer Spring 2026 Classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=mohsen\n", + "Does not offer Spring 2026 Classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=yazdani\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=yuj2\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=xinbao\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=zhangy4#Yu%20Zhang\n", + "Does not offer Spring 2026 Classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=almughrabia\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=arjunm\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=azzawi\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=balderramaja\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=banihania\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=arpitab\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=gomeztorresn\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=kaushalv\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=loganathank\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=parsaeifardn\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=prabakar\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=shapoorianb\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=tsungn\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=yinz\n", + "Added classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=kruzic\n", + "Does not offer Spring 2026 Classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=djseo\n", + "Does not offer Spring 2026 Classes\n", + "Scraping: https://www.uta.edu/academics/faculty/profile?username=cejcwill\n", + "Does not offer Spring 2026 Classes\n", + "[['CE 3131, section 001, ENVIRONMENTAL ANALYSIS', 'CE 3131, section 002, ENVIRONMENTAL ANALYSIS', 'CE 3131, section 003, ENVIRONMENTAL ANALYSIS', 'CE 5319, section 001, PHYSICAL-CHEMICAL PROCESSES II', 'CE 4353, section 101, WATER CHEMISTRY', ''], ['CE 5325, section 001, BIOLOGICAL PROCESSES', 'CE 5325, section 101, BIOLOGICAL PROCESSES', 'CE 4357, section 001, INTRO BIO WASTEWATER TREATMENT', 'CE 4357, section 101, INTRO BIO WASTEWATER TREATMENT', ''], ['CE 3342, section 001, WATER RESOURCES ENGINEERING', 'CE 3342, section 101, WATER RESOURCES ENGINEERING', ''], ['CE 4328, section 001, WATER SYSTEM DESIGN', ''], ['AREN 3341, section 001, STRUCTURAL ANALYSIS', 'AREN 3341, section 101, STRUCTURAL ANALYSIS', 'CE 3341, section 001, STRUCTURAL ANALYSIS', 'CE 3341, section 101, STRUCTURAL ANALYSIS', ''], ['CE 5367, section 101, DESIGN OF EARTH STRUCTURES', 'CE 4320, section 001, EARTH STRUCTURES DESIGN', 'CE 4320, section 101, EARTH STRUCTURES DESIGN', 'AREN 3343, section 001, SOIL MECHANICS', 'AREN 3343, section 101, SOIL MECHANICS', 'CE 3343, section 001, SOIL MECHANICS', 'CE 3343, section 101, SOIL MECHANICS', ''], ['CE 4300, section 001, ADVANCED TOPICS IN CIVIL ENGR', 'CE 5300, section 001, TOPICS IN CIVIL ENGINEERING', ''], ['CE 5303, section 001, INTRODUCTION TO FINITE ELEMENT', ''], ['AREN 2313, section 001, MECHANICS OF MATERIALS I', 'CE 2313, section 001, MECHANICS OF MATERIALS I', ''], ['AREN 4331, section 001, BUILDING HVAC SYSTEMS DESIGN', ''], ['CE 5302, section 001, ADVANCED CONCRETE MATERIALS', 'CE 5302, section 101, ADVANCED CONCRETE MATERIALS', 'MSE 6999, section 084, DISSERTATION', 'MSE 7399, section 084, DOCTORAL DEGREE COMPLETION', 'MSE 6298, section 084, RESEARCH IN MSE', 'MSE 6698, section 084, RESEARCH IN MSE', 'MSE 6998, section 084, RESEARCH IN MSE', 'MSE 5698, section 084, THESIS', ''], ['CE 5330, section 001, CHARACTERISTICS OF TRAFFIC', ''], ['CE 4383, section 001, SENIOR PROJECT', 'CE 4383, section 011, SENIOR PROJECT', ''], ['CE 4383, section 001, SENIOR PROJECT', 'CE 4383, section 011, SENIOR PROJECT', 'AREN 3301, section 001, STOCHASTIC MODELS FOR CE', 'AREN 3301, section 101, STOCHASTIC MODELS FOR CE', 'CE 5338, section 101, SYSTEM EVALUATION', 'CE 4310, section 101, SYSTEM EVALUATION IN CE', ''], ['CE 4332, section 001, CONSTRUCTION EQUIP/METHODS/MGT', 'CM 4332, section 001, CONSTRUCTION FIELD OPERATIONS', 'CE 5344, section 001, CONSTRUCTION METHODS FIELD OPS', 'CM 5344, section 001, CONSTRUCTION METHODS FIELD OPS', ''], ['AREN 4314, section 001, TECH FOR HIGH PERFORM BUILDING', 'AREN 4314, section 101, TECH FOR HIGH PERFORM BUILDING', ''], ['CE 5327, section 101, ADVANCED PROJECT CONTROL', ''], ['CE 5329, section 001, CE INFORMATICS', ''], ['CE 5361, section 001, ASPHALT CONCRETE', 'CE 5361, section 101, ASPHALT CONCRETE', 'CE 4336, section 001, ASPHALT DESIGN & CONSTRUCTION', 'CE 4336, section 101, ASPHALT DESIGN & CONSTRUCTION', 'CE 3361, section 001, PROP & BEHAVIOR CE MATERIALS', 'CE 3361, section 011, PROP & BEHAVIOR CE MATERIALS', 'CE 3361, section 012, PROP & BEHAVIOR CE MATERIALS', 'CE 3361, section 101, PROP & BEHAVIOR CE MATERIALS', 'CE 3361, section 111, PROP & BEHAVIOR CE MATERIALS', 'CE 3361, section 112, PROP & BEHAVIOR CE MATERIALS', 'CE 5300, section 102, TOPICS IN CIVIL ENGINEERING', ''], ['CM 4317, section 001, CONSTRUCTION SCHEDULING', 'CM 4317, section 002, CONSTRUCTION SCHEDULING', ''], ['CE 5343, section 001, ADV BLDG INFORMATION MODELING', 'CE 5343, section 011, ADV BLDG INFORMATION MODELING', 'CM 5343, section 001, ADV BLDG INFORMATION MODELING', 'CM 5343, section 011, ADV BLDG INFORMATION MODELING', ''], ['AREN 4347, section 001, REINFORCED CONCRETE DESIGN', 'AREN 4347, section 101, REINFORCED CONCRETE DESIGN', 'CE 4347, section 001, REINFORCED CONCRETE DESIGN', 'CE 4347, section 101, REINFORCED CONCRETE DESIGN', ''], ['CE 5316, section 001, MACHINE LEARNING FOR CE', ''], ['CE 6311, section 101, ADVANCED FOUNDATION DESIGN', ''], ['CM 3337, section 001, CONSTR ADMIN & ECONOMICS', 'CM 3337, section 101, CONSTR ADMIN & ECONOMICS', 'CM 3315, section 001, CONSTRUCTION LAW AND ETHICS', 'CM 3315, section 101, CONSTRUCTION LAW AND ETHICS', 'CM 4337, section 001, LAND AND SITE DEVELOPMENT', 'CM 4337, section 101, LAND AND SITE DEVELOPMENT', ''], ['CM 4351, section 001, BUILDING INFO MODELING FOR CM', 'CM 2331, section 001, CONSTRUCTION DOCUMENTS', 'CM 2331, section 101, CONSTRUCTION DOCUMENTS', 'CM 1311, section 001, CONSTRUCTION DRAFTING', 'CM 4357, section 001, SUSTAINABLE BUILDING PRACTICE', 'CM 4357, section 101, SUSTAINABLE BUILDING PRACTICE', ''], ['CE 5311, section 001, ADVANCED STEEL DESIGN I', 'CE 5311, section 101, ADVANCED STEEL DESIGN I', 'CE 2221, section 001, DYNAMICS', 'CE 2221, section 101, DYNAMICS', 'CE 2311, section 001, STATICS', 'CE 5307, section 001, STRUCTURAL TIMBER DESIGN', 'CE 5307, section 101, STRUCTURAL TIMBER DESIGN', 'AREN 4365, section 101, STRUCTURAL WOOD DESIGN', 'CE 4365, section 001, STRUCTURAL WOOD DESIGN', 'CE 4365, section 101, STRUCTURAL WOOD DESIGN', ''], ['AREN 3330, section 001, APPLIC BUILDING CODES IN ARCH', 'AREN 3330, section 101, APPLIC BUILDING CODES IN ARCH', 'AREN 3315, section 001, BUILDING HYDRAULIC SRV SYSTEMS', 'AREN 3315, section 101, BUILDING HYDRAULIC SRV SYSTEMS', 'AREN 4316, section 001, BUILDING STRUCTURAL SYSTEMS', 'AREN 4360, section 001, DESIGN OF STRUCTURAL MASONRY', 'AREN 4360, section 101, DESIGN OF STRUCTURAL MASONRY', 'CE 4360, section 001, DESIGN OF STRUCTURAL MASONRY', 'CE 4360, section 101, DESIGN OF STRUCTURAL MASONRY', 'AREN 4383, section 001, SENIOR PROJECT', 'AREN 4348, section 001, STRUCTURAL DESIGN IN STEEL', 'CE 4348, section 001, STRUCTURAL DESIGN IN STEEL', 'CE 4348, section 101, STRUCTURAL DESIGN IN STEEL', 'CE 5308, section 001, STRUCTURAL MASONRY DESIGN', 'CE 5308, section 101, STRUCTURAL MASONRY DESIGN', 'CE 5306, section 001, STRUCTURAL STEEL DESIGN', ''], ['CM 2313, section 001, CONSTR MATERIALS & METHODS', 'CM 2313, section 101, CONSTR MATERIALS & METHODS', 'CM 3339, section 001, CONSTRUCTION SAFETY', 'CM 3331, section 001, MECHANICAL & ELECTRICAL SYSTEM', 'CM 3335, section 001, SOILS & FOUNDATION IN CONSTR', ''], ['AREN 4307, section 001, CONSTRUCTION SUSTAINABILITY', 'AREN 4307, section 101, CONSTRUCTION SUSTAINABILITY', 'CE 4307, section 001, CONSTRUCTION SUSTAINABILITY', 'CE 5382, section 101, CONSTRUCTION SUSTAINABILITY', 'CM 5382, section 101, CONSTRUCTION SUSTAINABILITY', 'CE 5358, section 101, SOLID WASTE ENGINEERING', 'CE 4395, section 001, SUSTAINABLE ENGR DESIGN PROJEC', ''], ['CE 4352, section 001, PROFESSIONAL PRACTICE', 'CE 4352, section 011, PROFESSIONAL PRACTICE', 'CE 3301, section 001, STOCHASTIC MODELS FOR CE', 'CE 3301, section 101, STOCHASTIC MODELS FOR CE', 'CE 3302, section 001, TRANSPORTATION ENGINEERING', 'CE 3302, section 101, TRANSPORTATION ENGINEERING', ''], ['CM 4306, section 001, BUILDING CONSTRUCTION CONTRACT', 'CM 4306, section 101, BUILDING CONSTRUCTION CONTRACT', 'CM 3341, section 001, CONSTRUCTION DESIGN', 'CM 3341, section 101, CONSTRUCTION DESIGN', 'CM 2315, section 001, INTRO MECHANICS FOR CONSTR', ''], ['CM 5379, section 001, CONSTRUCTION COST ESTIMATING', 'CM 5379, section 012, CONSTRUCTION COST ESTIMATING', 'CM 3313, section 001, CONSTRUCTION ESTIMATING I', 'CM 4315, section 001, CONSTRUCTION ESTIMATING II', 'CM 4315, section 101, CONSTRUCTION ESTIMATING II', ''], ['AREN 2315, section 001, CONSTR MATERIALS & METHODS', 'AREN 2315, section 101, CONSTR MATERIALS & METHODS', 'CE 5377, section 001, CONSTRUCTION FINANCE', 'CM 5377, section 001, CONSTRUCTION FINANCE', 'CM 5377, section 101, CONSTRUCTION FINANCE', 'CE 5355, section 001, CONSTRUCTION MATERIALS', 'CE 5355, section 101, CONSTRUCTION MATERIALS', 'CM 5355, section 001, CONSTRUCTION MATERIALS', 'CM 5355, section 101, CONSTRUCTION MATERIALS', 'AREN 1205, section 001, INTRO TO ARCHITECTURAL ENGR', 'AREN 1205, section 011, INTRO TO ARCHITECTURAL ENGR', ''], ['CE 5321, section 001, ENGRG FOR ENVIR SCIENTISTS', 'CE 3334, section 001, PRINCIPLES ENVIRONMENTAL ENGR', 'CE 3334, section 101, PRINCIPLES ENVIRONMENTAL ENGR', ''], ['CM 4331, section 001, CONSTRUCTION MGMT CAPSTONE', 'CM 4359, section 001, INDUSTRIAL INTERNSHIP I', 'CM 4360, section 001, INDUSTRIAL INTERNSHIP II', ''], ['CE 5387, section 001, CONSTRUCTION PRODUCTIVITY', 'CM 5387, section 001, CONSTRUCTION PRODUCTIVITY', 'CM 5387, section 101, CONSTRUCTION PRODUCTIVITY', 'CE 5342, section 001, CONSTRUCTION PROJECT ADMIN', 'CM 5342, section 001, CONSTRUCTION PROJECT ADMIN', 'CM 5342, section 101, CONSTRUCTION PROJECT ADMIN', 'CE 5350, section 001, RISK MANAGEMENT', 'CM 5350, section 001, RISK MANAGEMENT', 'CE 5300, section 003, TOPICS IN CIVIL ENGINEERING', 'CM 5300, section 003, TOPICS IN CONSTRUCTION MGMT', ''], ['CE 4304, section 001, CONSTR CONTRACT, SPECS & ADMIN', 'CE 5378, section 001, CONSTR CONTRACT, SPECS & ADMIN', 'CM 5378, section 001, CONSTR CONTRACT, SPECS & ADMIN', 'AREN 3311, section 001, CONSTRUCTION ENGINEERING', 'AREN 3311, section 101, CONSTRUCTION ENGINEERING', 'CE 3311, section 001, CONSTRUCTION ENGINEERING', 'CE 3311, section 101, CONSTRUCTION ENGINEERING', 'AREN 4334, section 001, DRONES & ADV CONSTRUCTION TECH', 'CE 4334, section 001, DRONES & ADV CONSTRUCTION TECH', 'CM 4334, section 001, DRONES & ADV CONSTRUCTION TECH', 'CE 1105, section 001, INTRO TO CIVIL ENGINEERING', 'CE 1105, section 002, INTRO TO CIVIL ENGINEERING', '']]\n" + ] + } + ], + "source": [ + "if not list_of_profs_urls:\n", + " print(\"No professor URLs found. Check the selector.\")\n", + "else:\n", + " for target_url in list_of_profs_urls:\n", + " # 3. Go to the specific professor's page\n", + " print(f\"Scraping: {target_url}\")\n", + " \n", + " driver.get(target_url+\"#Teaching\")\n", + " \n", + " # CRITICAL: Wait for JavaScript to load the \"Teaching\" section\n", + " # Sometimes you might need to click the tab button if it's hidden behind a click\n", + " time.sleep(5) \n", + "\n", + " # 4. Pass the rendered HTML to BeautifulSoup\n", + " soup_profile = BeautifulSoup(driver.page_source, \"html.parser\")\n", + "\n", + " target_semester = \"Spring 2026\"\n", + " semester_header = soup_profile.find(\n", + " \"h3\", \n", + " class_=\"dm-profile-heading\", \n", + " string=lambda text: text and target_semester in text\n", + " )\n", + " # 5. Find the teaching items\n", + " \n", + " if semester_header:\n", + " teaching_items = soup_profile.find_all('ol', class_=\"dm-profile-activities content--heading8--37285\")\n", + " try:\n", + " if not teaching_items:\n", + " print(\"No teaching items found. The content might be inside an iframe or requires a click.\")\n", + " list_of_prof_classes.append(teaching_items[0].text.split(\".\"))\n", + " else:\n", + " list_of_prof_classes.append(teaching_items[0].text.split(\".\"))\n", + " print(\"Added classes\")\n", + " except:\n", + " print(\"Likely a Emeritus Professor\")\n", + " else:\n", + " print(\"Does not offer Spring 2026 Classes\")\n", + "# Close the browser\n", + "print(list_of_prof_classes)\n", + "# driver.quit()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "db8eddf6", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "7b2682da", + "metadata": {}, + "outputs": [], + "source": [ + "ls = pd.DataFrame(list_of_profs_urls)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b7f3247", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['CE 3131', ' section 001', ' ENVIRONMENTAL ANALYSIS']\n", + "['CE 3131', ' section 002', ' ENVIRONMENTAL ANALYSIS']\n", + "['CE 3131', ' section 003', ' ENVIRONMENTAL ANALYSIS']\n", + "['CE 5319', ' section 001', ' PHYSICAL-CHEMICAL PROCESSES II']\n", + "['CE 4353', ' section 101', ' WATER CHEMISTRY']\n", + "\n", + "\n", + "['CE 5325', ' section 001', ' BIOLOGICAL PROCESSES']\n", + "['CE 5325', ' section 101', ' BIOLOGICAL PROCESSES']\n", + "['CE 4357', ' section 001', ' INTRO BIO WASTEWATER TREATMENT']\n", + "['CE 4357', ' section 101', ' INTRO BIO WASTEWATER TREATMENT']\n", + "\n", + "\n", + "['CE 3342', ' section 001', ' WATER RESOURCES ENGINEERING']\n", + "['CE 3342', ' section 101', ' WATER RESOURCES ENGINEERING']\n", + "\n", + "\n", + "['CE 4328', ' section 001', ' WATER SYSTEM DESIGN']\n", + "\n", + "\n", + "['CE 3341', ' section 001', ' STRUCTURAL ANALYSIS']\n", + "['CE 3341', ' section 101', ' STRUCTURAL ANALYSIS']\n", + "\n", + "\n", + "['CE 5367', ' section 101', ' DESIGN OF EARTH STRUCTURES']\n", + "['CE 4320', ' section 001', ' EARTH STRUCTURES DESIGN']\n", + "['CE 4320', ' section 101', ' EARTH STRUCTURES DESIGN']\n", + "['CE 3343', ' section 001', ' SOIL MECHANICS']\n", + "['CE 3343', ' section 101', ' SOIL MECHANICS']\n", + "\n", + "\n", + "['CE 4300', ' section 001', ' ADVANCED TOPICS IN CIVIL ENGR']\n", + "['CE 5300', ' section 001', ' TOPICS IN CIVIL ENGINEERING']\n", + "\n", + "\n", + "['CE 5303', ' section 001', ' INTRODUCTION TO FINITE ELEMENT']\n", + "\n", + "\n", + "['CE 2313', ' section 001', ' MECHANICS OF MATERIALS I']\n", + "\n", + "\n", + "\n", + "\n", + "['CE 5302', ' section 001', ' ADVANCED CONCRETE MATERIALS']\n", + "['CE 5302', ' section 101', ' ADVANCED CONCRETE MATERIALS']\n", + "\n", + "\n", + "['CE 5330', ' section 001', ' CHARACTERISTICS OF TRAFFIC']\n", + "\n", + "\n", + "['CE 4383', ' section 001', ' SENIOR PROJECT']\n", + "['CE 4383', ' section 011', ' SENIOR PROJECT']\n", + "\n", + "\n", + "['CE 4383', ' section 001', ' SENIOR PROJECT']\n", + "['CE 4383', ' section 011', ' SENIOR PROJECT']\n", + "['AREN 3301', ' section 001', ' STOCHASTIC MODELS FOR CE']\n", + "['AREN 3301', ' section 101', ' STOCHASTIC MODELS FOR CE']\n", + "['CE 5338', ' section 101', ' SYSTEM EVALUATION']\n", + "['CE 4310', ' section 101', ' SYSTEM EVALUATION IN CE']\n", + "\n", + "\n", + "['CE 4332', ' section 001', ' CONSTRUCTION EQUIP/METHODS/MGT']\n", + "['CE 5344', ' section 001', ' CONSTRUCTION METHODS FIELD OPS']\n", + "\n", + "\n", + "\n", + "\n", + "['CE 5327', ' section 101', ' ADVANCED PROJECT CONTROL']\n", + "\n", + "\n", + "['CE 5329', ' section 001', ' CE INFORMATICS']\n", + "\n", + "\n", + "['CE 5361', ' section 001', ' ASPHALT CONCRETE']\n", + "['CE 5361', ' section 101', ' ASPHALT CONCRETE']\n", + "['CE 4336', ' section 001', ' ASPHALT DESIGN & CONSTRUCTION']\n", + "['CE 4336', ' section 101', ' ASPHALT DESIGN & CONSTRUCTION']\n", + "['CE 3361', ' section 001', ' PROP & BEHAVIOR CE MATERIALS']\n", + "['CE 3361', ' section 011', ' PROP & BEHAVIOR CE MATERIALS']\n", + "['CE 3361', ' section 012', ' PROP & BEHAVIOR CE MATERIALS']\n", + "['CE 3361', ' section 101', ' PROP & BEHAVIOR CE MATERIALS']\n", + "['CE 3361', ' section 111', ' PROP & BEHAVIOR CE MATERIALS']\n", + "['CE 3361', ' section 112', ' PROP & BEHAVIOR CE MATERIALS']\n", + "['CE 5300', ' section 102', ' TOPICS IN CIVIL ENGINEERING']\n", + "\n", + "\n", + "\n", + "\n", + "['CE 5343', ' section 001', ' ADV BLDG INFORMATION MODELING']\n", + "['CE 5343', ' section 011', ' ADV BLDG INFORMATION MODELING']\n", + "\n", + "\n", + "['AREN 4347', ' section 001', ' REINFORCED CONCRETE DESIGN']\n", + "['AREN 4347', ' section 101', ' REINFORCED CONCRETE DESIGN']\n", + "['CE 4347', ' section 001', ' REINFORCED CONCRETE DESIGN']\n", + "['CE 4347', ' section 101', ' REINFORCED CONCRETE DESIGN']\n", + "\n", + "\n", + "['CE 5316', ' section 001', ' MACHINE LEARNING FOR CE']\n", + "\n", + "\n", + "['CE 6311', ' section 101', ' ADVANCED FOUNDATION DESIGN']\n", + "\n", + "\n", + "\n", + "\n", + "['CM 4357', ' section 001', ' SUSTAINABLE BUILDING PRACTICE']\n", + "['CM 4357', ' section 101', ' SUSTAINABLE BUILDING PRACTICE']\n", + "\n", + "\n", + "['CE 5311', ' section 001', ' ADVANCED STEEL DESIGN I']\n", + "['CE 5311', ' section 101', ' ADVANCED STEEL DESIGN I']\n", + "['CE 2221', ' section 001', ' DYNAMICS']\n", + "['CE 2221', ' section 101', ' DYNAMICS']\n", + "['CE 2311', ' section 001', ' STATICS']\n", + "['CE 5307', ' section 001', ' STRUCTURAL TIMBER DESIGN']\n", + "['CE 5307', ' section 101', ' STRUCTURAL TIMBER DESIGN']\n", + "['CE 4365', ' section 001', ' STRUCTURAL WOOD DESIGN']\n", + "['CE 4365', ' section 101', ' STRUCTURAL WOOD DESIGN']\n", + "\n", + "\n", + "['CE 4360', ' section 001', ' DESIGN OF STRUCTURAL MASONRY']\n", + "['CE 4360', ' section 101', ' DESIGN OF STRUCTURAL MASONRY']\n", + "['CE 4348', ' section 001', ' STRUCTURAL DESIGN IN STEEL']\n", + "['CE 4348', ' section 101', ' STRUCTURAL DESIGN IN STEEL']\n", + "['CE 5308', ' section 001', ' STRUCTURAL MASONRY DESIGN']\n", + "['CE 5308', ' section 101', ' STRUCTURAL MASONRY DESIGN']\n", + "['CE 5306', ' section 001', ' STRUCTURAL STEEL DESIGN']\n", + "\n", + "\n", + "\n", + "\n", + "['CE 4307', ' section 001', ' CONSTRUCTION SUSTAINABILITY']\n", + "['CE 5382', ' section 101', ' CONSTRUCTION SUSTAINABILITY']\n", + "['CE 5358', ' section 101', ' SOLID WASTE ENGINEERING']\n", + "['CE 4395', ' section 001', ' SUSTAINABLE ENGR DESIGN PROJEC']\n", + "\n", + "\n", + "['CE 4352', ' section 001', ' PROFESSIONAL PRACTICE']\n", + "['CE 4352', ' section 011', ' PROFESSIONAL PRACTICE']\n", + "['CE 3301', ' section 001', ' STOCHASTIC MODELS FOR CE']\n", + "['CE 3301', ' section 101', ' STOCHASTIC MODELS FOR CE']\n", + "['CE 3302', ' section 001', ' TRANSPORTATION ENGINEERING']\n", + "['CE 3302', ' section 101', ' TRANSPORTATION ENGINEERING']\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "['CE 5377', ' section 001', ' CONSTRUCTION FINANCE']\n", + "['CM 5377', ' section 001', ' CONSTRUCTION FINANCE']\n", + "['CM 5377', ' section 101', ' CONSTRUCTION FINANCE']\n", + "['CE 5355', ' section 001', ' CONSTRUCTION MATERIALS']\n", + "['CE 5355', ' section 101', ' CONSTRUCTION MATERIALS']\n", + "\n", + "\n", + "['CE 5321', ' section 001', ' ENGRG FOR ENVIR SCIENTISTS']\n", + "['CE 3334', ' section 001', ' PRINCIPLES ENVIRONMENTAL ENGR']\n", + "['CE 3334', ' section 101', ' PRINCIPLES ENVIRONMENTAL ENGR']\n", + "\n", + "\n", + "\n", + "\n", + "['CE 5387', ' section 001', ' CONSTRUCTION PRODUCTIVITY']\n", + "['CE 5342', ' section 001', ' CONSTRUCTION PROJECT ADMIN']\n", + "['CE 5350', ' section 001', ' RISK MANAGEMENT']\n", + "['CE 5300', ' section 003', ' TOPICS IN CIVIL ENGINEERING']\n", + "\n", + "\n", + "['CE 4304', ' section 001', ' CONSTR CONTRACT', ' SPECS & ADMIN']\n", + "['CE 5378', ' section 001', ' CONSTR CONTRACT', ' SPECS & ADMIN']\n", + "['CE 3311', ' section 001', ' CONSTRUCTION ENGINEERING']\n", + "['CE 3311', ' section 101', ' CONSTRUCTION ENGINEERING']\n", + "['CE 4334', ' section 001', ' DRONES & ADV CONSTRUCTION TECH']\n", + "['CE 1105', ' section 001', ' INTRO TO CIVIL ENGINEERING']\n", + "['CE 1105', ' section 002', ' INTRO TO CIVIL ENGINEERING']\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for i in list_of_prof_classes:\n", + " for j in i:\n", + " if \"CE\" in j:\n", + " print(j.split(\",\"))\n", + " print(\"\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d45b94f1", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}