Giter Club home page Giter Club logo

curricularanalytics.jl's Introduction

License: GPL v3 Documentation Status Coverage Status DOI

CurricularAnalytics.jl

CurricularAnalytics.jl is a toolbox for studying and analyzing academic program curricula. The toolbox represents curricula as graphs, allowing various graph-theoretic measures to be applied in order to quantify the complexity of curricula. In addition to analyzing curricular complexity, the toolbox supports the ability to visualize curricula, to compare and contrast curricula, to create optimal degree plans for completing curricula that satisfy particular constraints, and to simulate the impact of various events on student progression through a curriculum.

Documentation

Full documentation is available at GitHub Pages. Documentation for functions in this toolbox is also available via the Julia REPL help system. Additional tutorials can be found at the Curricular Analytics Notebooks site.

Installation

Installation is straightforward. First, install the Julia programming language on your computer. To do this, download Julia here: https://julialang.org, and follow the instructions for your operating system.

Next, open the Julia application that you just installed. It should look similar to the image below. This interface is referred to as the Julia REPL.

Screenshot 2022-11-20 at 12 22 55 PM

The toolbox must be loaded via the using CurricularAnalytics command every time you restart the Julia REPL.

For more information about installing the toolbox, including the steps neccessary to utilize degree plan optimization, please see the INSTALLING.md

Supported Versions

  • CurricularAnalytics master will be maintained/enhanced to work with the latest stable version of Julia.
  • Later versions: Some functionality might not work with older / prerelease / unstable / nightly versions of Julia. If you run into a problem, please file an issue.

Contributing and Reporting Bugs

We welcome contributions and bug reports! Please see CONTRIBUTING.md for guidance on development and bug reporting.

curricularanalytics.jl's People

Contributors

haydenfree avatar heileman avatar johnny-flynn avatar juliatagbot avatar kevinwarne avatar orhanabar avatar wgthompson avatar zymvincent avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

curricularanalytics.jl's Issues

Display Custom Course-Level Information

Allow for the display of course-level custom data. This could be done by one of the following:

Allow course names to break to a new line to display the data
Show custom metrics in the tooltip
Show the full course name in the tooltip

Leftover _temp files

If an error is encountered while working with a CSV file a _temp version of the file is sometimes left over.

Visually Catagorize Courses

A suggestion from Rick Miranda, Provost CSU.

For example, all core courses as one color. This might be a datatype on the course or at the graph level on a vertex.

Create json_to_csv function

The DataHandler.jl file should have a function to convert JSON to CSV. If someone loads their curriculum as a CSV, makes changes, and then wants to export it as a CSV this function would be neccessary.

Redundant requisite prints several times

A redundant requisite may be printed out multiple times. An easy fix would be to store all the strings before they're printed, and ensure there are no duplicates.

Cbc solver fails to build on Windows

The Cbc package will not build on Windows and thus prevents the toolbox from working correctly.

Potentially look for an alternative or work to make it compatible.

DataHandler.jl test fails no matter what

The following DataHandler.jl test fails no matter what. The failure occurs at read_csv("./UBW-curric.csv"). It is unable to find the COURSE_ID header in the file. The test has been commented out for now but needs to be resolved.

curric1 = Curriculum("Underwater Basket Weaving", [A,B,C,D,E,F], institution="ACME State University", CIP="445786")
# write curriculum to secondary storage
@test write_csv(curric1, "./UBW-curric.csv") == true
# read from same location
curric2 = read_csv("./UBW-curric.csv") # FAILURE OCCURS HERE
@test string(curric1) == string(curric2)  # read/write invariance test
rm("./UBW-curric.csv")

Concept of Engineering Standing

There is currently no way to capture the notion of Engineering Standing within the toolbox. This might be accomplished by creating a dummy course labeled "Engineering Standing" that has all of the prerequisite courses to reach Engineering Standing.

There is likely a better way to capture this.

Clean up examples folder

There are two folders for the purpose of "Introduction to CurricularAnalytics"

Notebook files should be moved to https://github.com/CurricularAnalytics/CA-Notebooks

There are a lot of files in the Notebooks directory that are not notebooks, as well as a large number of temporary files that shouldn't be included at all.

PDF files likely shouldn't be included in the examples directory but rather in the documentation.

CSV files should be separated from Julia files.

Redundant curricula/plans should be eliminated.

Make plan and curriculum visualization apps.

here are the vue curricula analytics docs. I would probably make separate embed_client_plan and embed_client_curriculum vue applications that use the plugin with different configurations. Take a look at embed_client/src/views/Graph.vue to see where most of the plugin abstraction code is.

vue-curricula-docs.pdf

Create Course_Set DataType

Some courses are actually a set of possible courses, such as an engineering elective. The elective may be filled by one of a set of courses.

We may want to optimize the degreeplan by choosing the electives that result in the lowest complexity, lowest number of credit hours for the term, or lowest number of credit hours over the entire curriculum.

Rename Delay

The delay path should be displayed but re-named to longest path

Update export_degree_plan

If a course name should be stored, as well as the prefix and number, then the export_degree_plan function must be updated to explicitly export both of these.

This means exporting the name, prefix, and number as separate fields. This will also depend on how the vue-curricula plugin takes in the name and prefix+number.

Fix toxicity_obj to expect a dictionary

Remove the code that extracts the dict from the file, and make that its own function.

Update the objective function to expect the final dict, and update the optimize_plan function to have an arg with that dict.

Rename Repository

I believe renaming the repository to "CurricularAnalytics.jl" would be more appropriate since that will be the package name.

This also seems to be convention, as many other packages do it.

Remove use recent-visualization.json

Rather than creating a recent-visualization file, create a JSON object and keep it in memory. We should only write a file if they opt to save or have made changes.

Create Development Branch

Create a development branch that we can all push to so our changes don't result in a ton of conflicts that have to be merged. Then periodically merge this branch to the master.

Accessing scope.id is deprecated, use scopeid(scope) instead.

Example:

julia> visualize(dp)
┌ Warning: Accessing `scope.id` is deprecated, use `scopeid(scope)` instead.
│   caller = ip:0x0
└ @ Core :-1
Blink.AtomShell.Window(1, Blink.AtomShell.Electron(Process(`/Users/hayden/.julia/packages/Blink/AO8uN/deps/Julia.app/Contents/MacOS/Julia /Users/hayden/.julia/packages/Blink/AO8uN/src/AtomShell/main.js port 7393`, ProcessRunning), Sockets.TCPSocket(RawFD(0x00000017) active, 0 bytes waiting), Dict{String,Any}("callback"=>##1#2())), Blink.Page(1, WebSocket(server, CONNECTED), Dict{String,Any}("webio"=>##28#29{WebIOBlinkComm}(WebIOBlinkComm(Window(#= circular reference @-5 =#))),"callback"=>##1#2()), Distributed.Future(1, 1, 1, Some(true))), Task (done) @0x0000000116066ad0)```

Hide Blocking

The blocking path should not be displayed and it should not be in the legend.

Fix Longest Path in Visualization

The visualization currently generates the longest path itself. It should instead accept the longest path from the toolbox and visualize it that way.

Generate course ID

Create a function generate_id(s::String) that creates a unique ID for the course. This is used when storing requisites.

For now just increment a global variable and assign the course a number starting at 1 for the first course.

Visualization for curriculums and degree plans

The visualization function currently only takes degree plans, but there should be an overloaded version that takes curriculums.

The regular function, for degree plans, should not have the arguments to hide terms and grid. These two things should be hidden by default in the curriculum visualization.

Extend compare_curriculua function

The compare_curricula function currently just compares to curricula metric by metric and tells you the difference between the two.

Brainstorm ideas for interesting comparisons to do. For example, comparing a set of courses across multiple curricula, or comparing sets of curricula. Examples of a set of curricula might be the engineering department of a school.

Fractional Credit Hours

Some institutions such as Carnegie Mellon list their courses in units. These units do not always requite to an whole number (integer) of credit hours. The toolbox should change the credit_hours type to something like Float64.

Refactor vertex_id to Dict

A course has a one to many relationship with curricula, therefor it may be associated with more than one curriculum graph. Refactor the vertex_id field to be a dictionary so that the course can have a unique vertex ID in more than curriculum graph.

ex: vertex_id::Dict{Int, Int} where the first Int is the ID of a curriculum graph, and the second int is the vertex_id of the course within that particular graph.

How to manage academic year

Academic year(s) (may be a range of years) associated with a given curriculum. Should it be a data member on a curriculum? Should it support future years? This may need to be an optional input when creating a curriculum, rather than a requirement.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.