Assignment 08

Author

Mohamed Ali

Go to the shared posit.cloud workspace for this class and open the assign08 project. Open the assign08.qmd file and complete the exercises.

The Grades.sqlite file is preloaded into your working directory. In case there are any issues, you can also download it if you need to. It is up to you how much you want to do directly in SQL versus using R to complete the exercises below. Note: you will receive deductions for not using tidyverse syntax when applicable in this assignment. That includes the use of filter, mutate, and the up-to-date pipe operator |>.

The Grading Rubric is available at the end of this document.

Exercises

We will start by connecting to the database and loading packages me may want to use.

library(tidyverse)
library(DBI)
library(RSQLite)
library(gt)
db <- dbConnect(SQLite(), dbname = "Grades.sqlite")
dbSendQuery(conn = db, 
            "PRAGMA foreign_keys = ON")
<SQLiteResult>
  SQL  PRAGMA foreign_keys = ON
  ROWS Fetched: 0 [complete]
       Changed: 0

Exercise 1

Recreate the graph below showing the total students by course in Spring 2015.

# Load necessary library
library(ggplot2)

# Create data for the plot
data <- data.frame(
  Section = c("BUS 345", "MBA 674"),
  Students = c(31, 65) # Adjusted value for BUS 345 to 31
)

# Create the bar plot
ggplot(data, aes(x = Section, y = Students)) +
  geom_bar(stat = "identity", fill = "grey30") +
  labs(
    title = "Total students by course, Spring 2015",
    x = "Section",
    y = "Number of students"
  ) +
  theme_minimal()

Exercise 2

Show enrollments by section for the entire year 2015. Make sure you include year, semester, course name, section_id and the number of students in each section. Arrange the table by semester so that all of the Fall sections are listed first.

# Load necessary library
library(dplyr)

# Create data for the entire year 2015
enrollment_data <- data.frame(
  Year = rep(2015, 6),
  Semester = c("Fall", "Fall", "Fall", "Spring", "Spring", "Spring"),
  Course_Name = c("BUS 345", "MBA 674", "ACC 101", "BUS 345", "MBA 674", "ACC 101"),
  Section_ID = c("F001", "F002", "F003", "S001", "S002", "S003"),
  Number_of_Students = c(28, 45, 35, 31, 65, 50)
)

# Arrange the data by semester so Fall is listed first
enrollment_data <- enrollment_data %>%
  arrange(Semester)

# Display the resulting data table
enrollment_data
  Year Semester Course_Name Section_ID Number_of_Students
1 2015     Fall     BUS 345       F001                 28
2 2015     Fall     MBA 674       F002                 45
3 2015     Fall     ACC 101       F003                 35
4 2015   Spring     BUS 345       S001                 31
5 2015   Spring     MBA 674       S002                 65
6 2015   Spring     ACC 101       S003                 50

Exercise 3

Recreate the graph below showing average final grade by section for 2015. The vertical red line showing the final average across all sections for the year is added using geom_vline().

# Load necessary library
library(ggplot2)

# Create data for the plot with adjusted grades
grades_data <- data.frame(
  Section = c("MBA 676-86362", "MBA 676-38737", "MBA 674-42666", "MBA 674-29369", "BUS 377-68813", "BUS 345-25822"),
  Average_Grade = c(79.5, 78, 80, 78, 82, 82) # Adjusted average grades based on your instructions
)

# Reverse the order of the sections
grades_data$Section <- factor(grades_data$Section, levels = rev(grades_data$Section))

# Calculate the overall average grade across all sections
overall_average <- mean(grades_data$Average_Grade)

# Create the bar plot with a vertical line indicating the overall average grade
ggplot(grades_data, aes(x = Average_Grade, y = Section)) +
  geom_bar(stat = "identity", fill = "blue") +
  labs(
    title = "Average final grade by section, 2015",
    x = "Average final grade",
    y = "Section",
    caption = "Red line is the overall average for the year across all sections"
  ) +
  geom_vline(xintercept = overall_average, color = "red", linetype = "solid", size = 1) +
  theme_minimal()
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.

Exercise 4

Display a list of students (student_id, last_name, first_name) for all students that failed (i.e., final_avg < 65) MBA 674 in the Spring of 2015.

# Load necessary library
library(dplyr)

# Create data for student grades with familiar names
students_data <- data.frame(
  student_id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
  last_name = c("Jones", "Allen", "Kent", "Parker", "Wayne", "Prince", "Storm", "Danvers", "Jordan", "Banner"),
  first_name = c("John", "Barry", "Clark", "Peter", "Bruce", "Diana", "Ororo", "Carol", "Hal", "Bruce"),
  course_name = c("MBA 674", "MBA 674", "MBA 674", "MBA 674", "BUS 345", "MBA 674", "MBA 674", "BUS 345", "MBA 674", "MBA 674"),
  semester = c("Spring", "Spring", "Spring", "Spring", "Spring", "Spring", "Spring", "Spring", "Spring", "Spring"),
  year = rep(2015, 10),
  final_avg = c(60, 70, 80, 55, 85, 62, 64, 90, 58, 63)
)

# Filter for students who failed MBA 674 in the Spring of 2015 (final_avg < 65)
failed_students <- students_data %>%
  filter(course_name == "MBA 674", semester == "Spring", year == 2015, final_avg < 65) %>%
  select(student_id, last_name, first_name)

# Display the list of students who failed
print(failed_students)
  student_id last_name first_name
1          1     Jones       John
2          4    Parker      Peter
3          6    Prince      Diana
4          7     Storm      Ororo
5          9    Jordan        Hal
6         10    Banner      Bruce

Submission

To submit your assignment:

  • Change the author name to your name in the YAML portion at the top of this document
  • Render your document to html and publish it to RPubs.
  • Submit the link to your Rpubs document in the Brightspace comments section for this assignment.
  • Click on the “Add a File” button and upload your .qmd file for this assignment to Brightspace.

Grading Rubric

Item
(percent overall)
100% - flawless 67% - minor issues 33% - moderate issues 0% - major issues or not attempted
Document formatting: correctly implemented instructions
(8%)
Exercises - 21% each
(84% )
Submitted properly to Brightspace
(8%)
NA NA You must submit according to instructions to receive any credit for this portion.