Информация о загрязнении воздуха (среднегодовом содержании мелких частиц (\(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"))
Построим последний график средствами пакета lattice
library(lattice)
xyplot(pm25~latitude | region, data = pollution)
А теперь с помощью пакета ggplot2
library(ggplot2)
qplot(latitude, pm25, data = pollution, facets = . ~ region)