library("tidyverse")Air Quality Assignment
Air-quality Tutorial and Homework Assignment
Load in Library
Because air-quality is a pre-built dataset, we can write it to our data directory to store it for later use.
The source for this dataset is the New York State Department of Conservation and the National Weather Service of 1973 for five months from May to September recorded daily.
Load the dataset into your global environment
Look at the structure of the data
the function, head, will only disply the first 6 rows of the dataset. Notice in the global environment to the right, there are 153 observations (rows)
View the data using the “head” function
data("airquality")View the structure of the data
data("airquality") # places the dataset in the global environment
head(airquality) Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
Calculate summary statistics
mean(airquality$Temp)[1] 77.88235
mean(airquality[,4])[1] 77.88235
Calculate Median, Standard Deviation, and Variance
median(airquality$Temp)[1] 79
sd(airquality$Wind)[1] 3.523001
var(airquality$Wind)[1] 12.41154
Rename the months from numbers to names
Number 5 - 9 to May through September
airquality$Month[airquality$Month == 5]<- "May"
airquality$Month[airquality$Month == 6]<- "June"
airquality$Month[airquality$Month == 7]<- "July"
airquality$Month[airquality$Month == 8]<- "August"
airquality$Month[airquality$Month == 9]<- "September"Now look at the summary statistics of the dataset
See how Month has changed to have characters instead of numbers
summary(airquality$Month) Length Class Mode
153 character character
Convert Month to a factor with specified levels
airquality$Month <- factor(airquality$Month, levels = c("May", "June", "July", "August", "September"))Plot 1: Histogram categorized by Month
Here is a first attempt at viewing a histogram of temperature by the months May through September. We will see that temperatures increase over these months. The median temperature appears to be about 75 degrees.
Reorder the legend so that it is not the default (alphabetical), but rather in chronological order.
fill = Month colors the histogram by months between May - Sept.
scale_fill_discrete(name = “Month”…) provides the month names on the right side as a legend.
p1 <- airquality |>
ggplot(aes(x=Temp, fill=Month)) +
geom_histogram(position="identity")+
scale_fill_discrete(name = "Month",
labels = c("May", "June","July", "August", "September")) +
labs(x = "Monthly Temperatures from May - Sept",
y = "Frequency of Temps",
title = "Histogram of Monthly Temperatures from May - Sept, 1973",
caption = "New York State Department of Conservation and the National Weather Service") #provide the data source
p1`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Is this plot useful in answering questions about monthly temperature values?
Plot 2: Improved histogram with transparency and white borders
Outline the bars in white using the color = “white” command
Use alpha to add some transparency (values between 0 and 1)
Change the binwidth
##Histogram of Average Temperature by Month
Add some transparency and white borders around the histogram bars. Here July stands out for having high frequency of 85 degree temperatures. The dark purple color indicates overlaps of months due to the transparency.
p2 <- airquality |>
ggplot(aes(x=Temp, fill=Month)) +
geom_histogram(position="identity", alpha=0.5, binwidth = 5, color = "white")+
scale_fill_discrete(name = "Month", labels = c("May", "June","July", "August", "September")) +
labs(x = "Monthly Temperatures from May - Sept",
y = "Frequency of Temps",
title = "Histogram of Monthly Temperatures from May - Sept, 1973",
caption = "New York State Department of Conservation and the National Weather Service")
p2Did this improve the readability of the plot?
Plot 3: Side-by-side boxplots categorized by Month
We can see that August has the highest temperatures based on the boxplot distribution.
p3 <- airquality |>
ggplot(aes(Month, Temp, fill = Month)) +
labs(x = "Months from May through September", y = "Temperatures",
title = "Side-by-Side Boxplot of Monthly Temperatures",
caption = "New York State Department of Conservation and the National Weather Service") +
geom_boxplot() +
scale_fill_discrete(name = "Month", labels = c("May", "June","July", "August", "September"))
p3 Notice that the points above and below the boxplots in June and July are outliers.
Plot 4: Side-by-side boxplots in grey-scale
Use the scale_fill_grey command for the grey-scale legend, and again, use fill=Month in the aesthetics
##Side by Side Boxplots in Gray Scale
Here we just changed the color palette to gray scale using scale_fill_grey
p4 <- airquality |>
ggplot(aes(Month, Temp, fill = Month)) +
labs(x = "Monthly Temperatures", y = "Temperatures",
title = "Side-by-Side Boxplot of Monthly Temperatures",
caption = "New York State Department of Conservation and the National Weather Service") +
geom_boxplot()+
scale_fill_grey(name = "Month", labels = c("May", "June","July", "August", "September"))
p4Plot 5/6: Scatter Plots
p5 <- airquality|>
ggplot(aes(x = Solar.R, y = Temp, color = Month))+
geom_point(size = 5, shape = 21, stroke = 1, fill = "white") +
labs(x = "Solar Radiation",
y = "Temp",
title = "Scatter Plot of Temperature vs. Solar Radiation by Month",
caption = "New York State Department of Conservation and the National Weather Service")+
scale_fill_discrete(name = "Month", labels = c("May", "June","July", "August", "September"))
p5p5 <- airquality|>
ggplot(aes(x = Solar.R, y = Temp, color = Month)) +
geom_point(size = 5, shape = 21, stroke = 1, fill = "white") +
geom_smooth(method = "lm", se = FALSE) +
labs(x = "Solar Radiation",
y = "Temp",
title = "Scatter Plot of Temperature vs. Solar Radiation by Month",
caption = "New York State Department of Conservation and the National Weather Service") +
scale_color_discrete(name = "Month") +
facet_wrap(~ Month, ncol = 2) # Create small multiples
p5These are two scatter plots of how the Solar Radiation affects Temperature. I used a geom_point to create the scatter plots, geom_smooth to create a trend line, then finally facet_wrap to have small multiples by month. While there is value in seeing all the data at the same time to see the overall trend, it seemed more valuable to see the breakdown by month in smaller data sets that is easier to see.