Airquality Assignment

Author

Rachel Saidi

Published

May 5, 2023

Air Quality Tutorial and Homework Assignment

Willy Bilong

Source: AirNow.gov

Load in the library

Because air quality is a pre-built data set, we can write it to our data directory to store it for later use.

The source for this data set is the New York State Department of Conservation and the National Weather Service of 1973 for five months from May to September recorded daily.

library(tidyverse)

Load the data set into your global environment

data("airquality")

Look at the structure of the data

the function, head, will only display the first 6 rows of the data set. Notice in the global environment to the right, there are 153 observations (rows)

View the data using the “head” function

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

If you want to look at specific statistics, here are some variations on coding. Here are 2 different ways to calculate “mean.”

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 number 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 data set

See how Month has changed to have characters instead of numbers

summary(airquality$Month)
   Length     Class      Mode 
      153 character character 

Month is a categorical variable with different levels, called factors.

This is one way to reorder the Months so they do not default to alphabetical (you will see another way to reorder DIRECTLY in the chunk that creates the plot below in Plot 1)

airquality$Month<-factor(airquality$Month, levels=c("May", "June","July", "August", "September"))

Plot 1: Create a 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?

Yes it is, its kind of complicated but it can be used to answer questions about monthly temperature values.

Plot 2: Improve the histogram using ggplot

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")
p2

Did this improve the readability of the plot?

I personally think this makes it harder to read, it’s already so many colors all and once and making it transparent doesn’t really do much to help.

Plot 3: Create side-by-side boxplots categorized by Month

We can see that August has the highest temperatures based on the box plot 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: Make the same side-by-side boxplots, but 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"))
p4

Plot 5: Now make one new plot on your own, that is meaningfully different from the 4 I have shown you. You can select any of the variables in this data set. Be sure to explore the data set to see which variables are included that we have not explored yet. You may create a scatter plot, histogram, box plot, or something else.

  • Be sure to include a title, axis label, and caption for the data source.

  • Then write a brief essay, described below.

Be sure to write a brief essay that describes the plot you have created, what the plot shows, and what code you used to make this modification.


p1 <- airquality |>
  ggplot(aes(x=Ozone, y=Solar.R, color= Month)) +
  geom_point()+
  scale_fill_discrete(name = "Month", 
                      labels = c("May", "June","July", "August", "September")) +
  labs(x = "Monthly Ozone Levels from May - Sept", 
       y = "Solar Radiation",
       title = "Scatterplot of Monthly Ozone levels based on Solar Radiation",
       caption = "New York State Department of Conservation and the National Weather Service")  #provide the data source
p1
Warning: Removed 42 rows containing missing values (`geom_point()`).

The graph above shows a scatter plot of the levels of Ozone per month based on the levels of Solar Radiation that same month. In order to create this plot I used many of the same code that was used in the Plot 1 Histogram. Instead of a Histogram I chose a scatter plot because I believed it would make the data easier to see and to understand. One of the large differences you’ll see in my code is the aesthetics that come after the ggplot function. While in a histogram you’d have either an x or a y axis and then your fill, in a scatter plot you need variables on both axes. In order to get a scatter plot the function you use is geom_point and for the sake of this graph you don’t need to add anything else to that function. Now that I’m doing a scatter plot rather than a histogram I need both an X and a Y-axis. In this case my x-axis is Ozone and my y-axis is Solar Radiation. For the individual points I separate them by color so that we know which month the point is referring to which is done by the “color=Month” function inside the aesthetic. Aside from that everything else in the code was the same with some minor changes to the titles.