diff --git a/.gitignore b/.gitignore index 5b6a065..f0bdebb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .Rhistory .RData .Ruserdata + diff --git a/README.md b/README.md index 8ab360d..c1554a2 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,10 @@ -# Assignment 2 +# Data Manipulation Project ### Data Wrangling and Visualization -In Assignment 2 we will be practicing data manipulation including use of the tidyverse. +In this project, we will be practicing data manipulation including use of the tidyverse. -The instructions to Assignment 2 are in the Assignment 2-2020.rmd file. Assignments are structured in three parts, in the first part you can just follow along with the code, in the second part you will need to apply the code, and in the third part is completely freestyle and you are expected to apply your new knowledge in a new way. +The final work are in the data manipulation.rmd file. The work is divided in to three different parts based on its structure. In the first part there are examples to show you how to construct the code, which you may follow along with the code to have an idea of it. In the second part you will need to apply what you learned in the first part, and answer the respective questions. In the last part you are completely free of how you answer the questions. It could be what you learned in the first part, or it could also be knowledges from outside research. -**Please complete as much as you can by midnight EDT, 10/05/20** - -Once you have finished, commit, push and pull your assignment back to the main branch. Include both the .Rmd file and the .html file. +Once it is finished, commit, push and pull the data manipulation project back to the main branch. Good luck! diff --git a/Assignment 2-2020.Rmd b/data manipulation.Rmd similarity index 74% rename from Assignment 2-2020.Rmd rename to data manipulation.Rmd index 0b235a3..b0a27de 100644 --- a/Assignment 2-2020.Rmd +++ b/data manipulation.Rmd @@ -1,6 +1,6 @@ --- -title: "Assignment 2" -author: "Charles Lang" +title: "Data Manipulation" +author: "Stanley Zhao" date: "September 24, 2020" output: html_document --- @@ -37,7 +37,7 @@ D2 <- filter(D1, year == 2018) hist(D2$watch.time) -#Change the number of breaks to 100, do you get the same impression? +#Change the number of breaks to 100, do you get the same impression? No hist(D2$watch.time, breaks = 100) @@ -91,17 +91,32 @@ pairs(D5) 1. Create a simulated data set containing 100 students, each with a score from 1-100 representing performance in an educational game. The scores should tend to cluster around 75. Also, each student should be given a classification that reflects one of four interest groups: sport, music, nature, literature. ```{r} -#rnorm(100, 75, 15) creates a random sample with a mean of 75 and standard deviation of 20 -#pmax sets a maximum value, pmin sets a minimum value -#round rounds numbers to whole number values -#sample draws a random samples from the groups vector according to a uniform distribution +#rnorm(100, 75, 15) creates a random sample with a mean of 75 and standard deviation of 15 +#filter() can be used to set a maximum and minimum value +#round() rounds numbers to whole number values +#sample() draws a random samples from the groups vector according to a uniform distribution +score <- rnorm(100, 75, 15) +hist(score,breaks = 30) +S1 <- data.frame(score) +library(dplyr) +S1 <- filter(S1, score <= 100) +hist(S1$score) + +S2 <- data.frame(rep(100,100-nrow(S1))) +names(S2) <- "score" +S3 <- bind_rows(S1,S2) +S3$score <- round(S3$score,0) +interest <- c("sport","music","nature","literature") +S3$interest <- sample(interest, 100, replace = TRUE) +S3$stid <- seq(1,100,1) ``` 2. Using base R commands, draw a histogram of the scores. Change the breaks in your histogram until you think they best represent your data. ```{r} +hist(S3$score, breaks = 10) ``` @@ -111,6 +126,8 @@ pairs(D5) ```{r} #cut() divides the range of scores into intervals and codes the values in scores according to which interval they fall. We use a vector called `letters` as the labels, `letters` is a vector made up of the letters of the alphabet. +lable <- letters[1:10] +S3$breaks <- cut(S3$score, breaks = 10, labels = lable) ``` 4. Now using the colorbrewer package (RColorBrewer; http://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3) design a pallette and assign it to the groups in your data on the histogram. @@ -118,12 +135,12 @@ pairs(D5) ```{r} library(RColorBrewer) #Let's look at the available palettes in RColorBrewer - +display.brewer.all() #The top section of palettes are sequential, the middle section are qualitative, and the lower section are diverging. #Make RColorBrewer palette available to R and assign to your bins - +S3$colors <- brewer.pal(10, "Spectral") #Use named palette in histogram - +hist(S3$score, col = S3$colors) ``` @@ -131,20 +148,24 @@ library(RColorBrewer) ```{r} #Make a vector of the colors from RColorBrewer +interest.col <- brewer.pal(4, "Dark2") +boxplot(score ~ interest, S3, col = interest.col) ``` 6. Now simulate a new variable that describes the number of logins that students made to the educational game. They should vary from 1-25. ```{r} - +S3$logins <- sample(1:25, 100, replace = TRUE) ``` 7. Plot the relationships between logins and scores. Give the plot a title and color the dots according to interest group. ```{r} +plot(S3$logins, S3$score, col = S3$colors, main = "Student Logins vs. Scores") +S3$col1 <- ifelse(S3$interest == "music", "red", "green") ``` @@ -152,14 +173,17 @@ library(RColorBrewer) 8. R contains several inbuilt data sets, one of these in called AirPassengers. Plot a line graph of the the airline passengers over time using this data set. ```{r} - +AP <- data.frame(AirPassengers) +plot(AirPassengers) ``` 9. Using another inbuilt data set, iris, plot the relationships between all of the variables in the data set. Which of these relationships is it appropraiet to run a correlation on? ```{r} - +IRIS <- data.frame(iris) +plot(iris) +#Petal.Length and Petal.Width is appropraiet to run a correlation. ``` # Part III - Analyzing Swirl @@ -171,7 +195,14 @@ In this repository you will find data describing Swirl activity from the class s ### Instructions 1. Insert a new code block +```{r} + +``` + 2. Create a data frame from the `swirl-data.csv` file called `DF1` +```{r} +DF1 <- read.csv("swirl-data.csv", header = TRUE) +``` The variables are: @@ -185,19 +216,44 @@ The variables are: `hash` - anonymyzed student ID 3. Create a new data frame that only includes the variables `hash`, `lesson_name` and `attempt` called `DF2` +```{r} +DF2 <- select(DF1, hash, lesson_name, attempt) +``` 4. Use the `group_by` function to create a data frame that sums all the attempts for each `hash` by each `lesson_name` called `DF3` +```{r} +DF3 <- DF2 %>% group_by(hash, lesson_name) %>% summarise(attempt = sum(attempt)) +``` 5. On a scrap piece of paper draw what you think `DF3` would look like if all the lesson names were column names - +![My Picture](Assignment 2 Part 3 Q5.jpeg) 6. Convert `DF3` to this format +```{r} +DF3 <- spread(DF3, lesson_name, attempt) +``` 7. Create a new data frame from `DF1` called `DF4` that only includes the variables `hash`, `lesson_name` and `correct` +```{r} +DF4 <- select(DF1, hash, lesson_name, correct) +``` 8. Convert the `correct` variable so that `TRUE` is coded as the **number** `1` and `FALSE` is coded as `0` +```{r} +DF4$correct <- ifelse(DF4$correct == TRUE, 1, 0) +``` 9. Create a new data frame called `DF5` that provides a mean score for each student on each course +```{r} +DF5 <- DF4 %>% group_by(hash, lesson_name) %>% summarise(mean.correct = mean(correct, na.rm = TRUE)) +``` 10. **Extra credit** Convert the `datetime` variable into month-day-year format and create a new data frame (`DF6`) that shows the average correct for each day +```{r} +DF1$datetime <- as.POSIXlt(DF1$datetime, origin = "1970-01-01") +DF1$datetime <- strftime(DF1$datetime, format = "%m:%d") +DF6 <- select(DF1, datetime, correct) +DF6$correct <- ifelse(DF6$correct == TRUE, 1, 0) +DF6 <- DF6 %>% group_by(datetime) %>% summarise(av.correct = mean(correct, na.rm = TRUE)) +``` Finally use the knitr function to generate an html document from your work. Commit, Push and Pull Request your work back to the main branch of the repository. Make sure you include both the .Rmd file and the .html file. diff --git a/swirl-data.csv b/swirl-data.csv index 66d19c9..fb6dbd3 100644 --- a/swirl-data.csv +++ b/swirl-data.csv @@ -21,7 +21,7 @@ "R Programming","Dates and Times",24,"TRUE",1,FALSE,1505668172.17721,30802 "R Programming","Subsetting Vectors",27,"TRUE",1,FALSE,1505505439.02967,30802 "R Programming","Dates and Times",23,"TRUE",1,FALSE,1505668154.23643,30802 -"R Programming","Dates and Times",19,"TRUE",1,FALSE,1505668109.32478,30802 +"R Programming","Dates and Times",19,"TRUE",1,FALSE,1505668109.32478,30802 "R Programming","Subsetting Vectors",22,"TRUE",1,FALSE,1505505353.49589,30802 "R Programming","Functions",5,"TRUE",1,FALSE,1505668637.37404,30802 "R Programming","Subsetting Vectors",26,"TRUE",1,FALSE,1505505409.78315,30802 diff --git a/video-data.csv b/video-data.csv index 5fcb3ef..3bb3dbf 100644 --- a/video-data.csv +++ b/video-data.csv @@ -296,6 +296,6 @@ 55,2019,"E",1,13.5,9,2 56,2019,"E",1,12,6,2 57,2019,"E",1,17.5,10,1 -58,2019,"E",1,6,4,1 +58,2019,"E",1,6,4,1 59,2019,"E",0,0,0,0 60,2019,"E",0,0,0,0