Данные

Информация о загрязнении воздуха (среднегодовом содержании мелких частиц (\(pm_{25}\)) в воздухе) по округам США.

Предмет исследования

В каких округах содержание мелких частиц превышает федеральный стандарт — \(12 мкг/м^3\)?

Загрузка данных

Файл с данными можно скачать отсюда: https://github.com/rdpeng/courses/blob/master/04_ExploratoryAnalysis/exploratoryGraphs/data/avgpm25.csv

setwd("~/Dropbox/Books/Data Science/exdata/")
classes <- c("numeric", "character", "factor", "numeric", "numeric")
pollution <- read.csv("data/avgpm25.csv", colClasses = classes)

Посмотрим на то, как выглядят данные:

head(pollution)
##        pm25  fips region longitude latitude
## 1  9.771185 01003   east -87.74826 30.59278
## 2  9.993817 01027   east -85.84286 33.26581
## 3 10.688618 01033   east -87.72596 34.73148
## 4 11.337424 01049   east -85.79892 34.45913
## 5 12.119764 01055   east -86.03212 34.01860
## 6 10.827805 01069   east -85.35039 31.18973
str(pollution)
## 'data.frame':    576 obs. of  5 variables:
##  $ pm25     : num  9.77 9.99 10.69 11.34 12.12 ...
##  $ fips     : chr  "01003" "01027" "01033" "01049" ...
##  $ region   : Factor w/ 2 levels "east","west": 1 1 1 1 1 1 1 1 1 1 ...
##  $ longitude: num  -87.7 -85.8 -87.7 -85.8 -86 ...
##  $ latitude : num  30.6 33.3 34.7 34.5 34 ...
summary(pollution$pm25)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.383   8.549  10.050   9.836  11.360  18.440

Графики

Ящик с усами

Для начала посмотрим, как выглядит распределение загрязнения с помощью простой диаграммы “ящик с усами” (boxplot). Дополнительно нарисуем горизонтальную линию, показывающую допустимый уровень загрязнения.

boxplot(pollution$pm25, col = "blue")
abline(h=12)

Видно, что есть несколько округов с очень высоким уровнем загрязнения, посмотрим, что это за округи.

library(dplyr)
## 
## Attaching package: 'dplyr'
## 
## Следующие объекты скрыты от 'package:stats':
## 
##     filter, lag
## 
## Следующие объекты скрыты от 'package:base':
## 
##     intersect, setdiff, setequal, union
filter(pollution, pm25 > 15)
##       pm25  fips region longitude latitude
## 1 16.19452 06019   west -119.9035 36.63837
## 2 15.80378 06029   west -118.6833 35.29602
## 3 18.44073 06031   west -119.8113 36.15514
## 4 16.66180 06037   west -118.2342 34.08851
## 5 15.01573 06047   west -120.6741 37.24578
## 6 17.42905 06065   west -116.8036 33.78331
## 7 16.25190 06099   west -120.9588 37.61380
## 8 16.18358 06107   west -119.1661 36.23465

В столбце fips два первых разряда у всех топ-записей — 06. Это штат Калифорния.

Округи с высоким загрязнением на карте.

Посмотрим, где находятся все эти округи.

library(maps)
map("county", "california")
with(filter(pollution, pm25>15), points(longitude, latitude, pch = 19, col = "red"))

Гистограмма

Посмотрим на распределение загрязнения с помощью гистограммы. Черной вертикальной линией снова отметим допустимый уровень 12, розовой — медиану распределения.

hist(pollution$pm25, col = "green", breaks = 100)
rug(pollution$pm25)
abline(v = 12, lwd = 2)
abline(v = median(pollution$pm25), col = "magenta", lwd = 4)

Столбцовая диаграмма

В данных есть столбец “регион”. Посмотрим с помощью столбцовой диаграммы, сколько у нас округов на западе и на востоке США.

table(pollution$region) %>% barplot(col = "wheat")

Видно, что в имеющихся данных гораздо больше восточных округов.

Несколько ящиков с усами

Посмотрим на ящики с усами отдельно для запада и востока

boxplot(pm25 ~ region, data = pollution, col = "red")

Несколько гистограмм

Посмотрим на гистограммы отдельно для запада и востока.

par(mfrow = c(2,1), mar = c(4,4,2,1))
hist(subset(pollution, region == "east")$pm25, col = "green")
hist(subset(pollution, region == "west")$pm25, col = "green")

Диаграмма рассеяния

Построим диаграмму рассеяния (scatterplots). Для каждого наблюдения возьмем его широту и степень загрязнения и отметим точкой на графике. Цвет точки будет означать регион. Горизонтальная линия~— допустимый уровень загрязнения.

par(mfrow = c(1,1))
with(pollution, plot(latitude, pm25, col = region))
abline(h = 12, lwd = 2, lty = 2)

Несколько диаграмм рассеяния

Нарисуем такие диаграммы отдельно для запада и востока.

par(mfrow = c(1,2), mar = c(5,4,2,1))
with(subset(pollution, region == "west"), plot(latitude, pm25, main = "West"))
with(subset(pollution, region == "east"), plot(latitude, pm25, main = "East"))

Другие графические пакеты R

Lattice

Построим последний график средствами пакета lattice

library(lattice)
xyplot(pm25~latitude | region, data = pollution)

ggplot2

А теперь с помощью пакета ggplot2

library(ggplot2)
qplot(latitude, pm25, data = pollution, facets = . ~ region)