Data Types

CurricularAnalytics.jl Data Types

This section describes the basic data types associated with the CurricularAnalytics.jl toolbox. These are used to construct courses (with associated learning outcomes), curricula and degree plans.

Courses

The Course data type is used to represent a single course consisting of a given number of credit hours. To instantiate a Course use:

Course(name, credit_hours; <keyword arguments>)

Arguments

Required:

  • name::AbstractString : the name of the course.
  • credit_hours::int : the number of credit hours associated with the course.

Keyword:

  • prefix::AbstractString : the prefix associated with the course.
  • num::AbstractString : the number associated with the course.
  • institution:AbstractString : the name of the institution offering the course.
  • canonical_name::AbstractString : the common name used for the course.

Examples:

julia> Course("Calculus with Applications", 4, prefix="MA", num="112", canonical_name="Calculus I")
source

Once a course has been created, requisites may be added to it, or deleted from it, using the following functions.

add_requisite!(rc, tc, requisite_type)

Add course rc as a requisite, of type requisite_type, for target course tc.

Requisite types

One of the following requisite types must be specified for rc:

  • pre : a prerequisite course that must be passed before tc can be attempted.
  • co : a co-requisite course that may be taken before or at the same time as tc.
  • strict_co : a strict co-requisite course that must be taken at the same time as tc.
source
add_requisite!([rc1, rc2, ...], tc, [requisite_type1, requisite_type2, ...])

Add a collection of requisites to target course tc.

Requisite types

The following requisite types may be specified for rc:

  • pre : a prerequisite course that must be passed before tc can be attempted.
  • co : a co-requisite course that may be taken before or at the same time as tc.
  • strict_co : a strict co-requisite course that must be taken at the same time as tc.
source
delete_requisite!(rc, tc)

Remove course rc as a requisite for target course tc. If rc is not an existing requisite for tc, an error is thrown.

Requisite types

The following requisite types may be specified for rc:

  • pre : a prerequisite course that must be passed before tc can be attempted.
  • co : a co-requisite course that may be taken before or at the same time as tc.
  • strict_co : a strict co-requisite course that must be taken at the same time as tc.
source

Just like courses, learning outcomes can have requisite relationships between them.

Learning Outcomes

The LearningOutcome data type is used to associate a set of learning outcomes with a course or a curriculum. To instantiate a LearningOutcome use:

LearningOutcome(name, description, hours)

Arguments

  • name::AbstractString : the name of the learning outcome.
  • description::AbstractString : detailed description of the learning outcome.
  • hours::int : number of class (contact) hours needed to attain the learning outcome.

Examples:

julia> LearningOutcome("M1", "Learner will demonstrate the ability to ...", 12)
source

Curricula

To create a curriculum from a collection of courses, and their assoiated requsites, use:

The Curriculum data type is used to represent the collection of courses that must be be completed in order to earn a particualr degree. To instantiate a Curriculum use:

Curriculum(name, courses; <keyword arguments>)

Arguments

Required:

  • name::AbstractString : the name of the curriculum.
  • courses::Array{Course} : the collection of required courses that comprise the curriculum.

Keyword:

  • degree_type::Degree : the type of degree, allowable types: AA, AS, AAS, BA, BS (default).
  • institution:AbstractString : the name of the institution offering the curriculum.
  • system_type::System : the type of system the institution uses, allowable types: semester (default), quarter.
  • CIP::AbstractString : the Classification of Instructional Programs (CIP) code for the curriculum. See: https://nces.ed.gov/ipeds/cipcode

Examples:

julia> Curriculum("Biology", courses, institution="South Harmon Tech", degree_type=AS, CIP="26.0101")
source

The following function can be used to ensure that a constructed curriculum is valid.

isvalid_curriculum(c::Curriculum, errors::IOBuffer)

Tests whether or not the curriculum graph $G_c$ associated with curriculum c is valid. Returns a boolean value, with true indicating the curriculum is valid, and false indicating it is not.

If $G_c$ is not valid, the reason(s) why are written to the errors buffer. To view these reasons, use:

julia> errors = IOBuffer()
julia> isvalid_curriculum(c, errors)
julia> println(String(take!(errors)))

There are two reasons why a curriculum graph might not be valid:

  • Cycles : If a curriculum graph contains a directed cycle, it is not possible to complete the curriculum.
  • Extraneous Requisites : These are redundant requisites that introduce spurious complexity. If a curriculum has the prerequisite relationships $c_1 \rightarrow c_2 \rightarrow c_3$ and $c_1 \rightarrow c_3$, and $c_1$ and $c_2$ are not co-requisites, then $c_1 \rightarrow c_3$ is redundant and therefore extraneous.
source

Terms

The Term data type is used to represent a single term within a DegreePlan. To instantiate a Term use:

Term([c1, c2, ...])

where c1, c2, ... are Course data objects

source

Degree Plans

To create a degree plan that satisfies the courses associated with a particular curriculum, use:

The DegreePlan data type is used to represent the collection of courses that must be be completed in order to earn a particualr degree. To instantiate a Curriculum use:

DegreePlan(name, curriculum, terms, additional_courses)

Arguments

  • name::AbstractString : the name of the degree plan.
  • curriculum::Curriculum : the curriculum the degree plan must satisfy.
  • terms::Array{Term} : the arrangement of terms associated with the degree plan.
  • additional_courses::Array{Course} : additional courses in the degree plan that are not a part of the curriculum. E.g., a prerequisite math class to the first required math class in the curriculum.

Examples:

julia> DegreePlan("Biology 4-year Degree Plan", curriculum, terms)
source

The following function can be used to ensure that a constructed degree plan is valid.

isvalid_degree_plan(plan::DegreePlan, errors::IOBuffer)

Tests whether or not the degree plan $plan$ is valid. Returns a boolean value, with true indicating the degree plan is valid, and false indicating it is not.

If $plan$ is not valid, the reason(s) why are written to the errors buffer. To view these reasons, use:

julia> errors = IOBuffer()
julia> isvalid_degree_plan(plan, errors)
julia> println(String(take!(errors)))

There are two reasons why a curriculum graph might not be valid:

  • Requisites not satsified : A prerequisite for a course occurs in a later term than the course itself.
  • Incomplete plan : There are course in the curriculum not included in the degree plan.
  • Redundant plan : The same course appears in the degree plan multiple times.
source