PM2.5 污染源資料探索
Johns Hopkins Exploratory Data Analysis 的第四週作業:Fine particulate matter
回答六個問題來完成這個課程作業,每個答案都必須要附上一個圖形作為佐證,假如題目沒有指定,可以使用任意的繪圖系統作圖;我對 ggplot2 作圖比較熟悉,因此在沒有指定繪圖系統的情況下,我會使用 ggplot2 來解題。
- 全美 PM2.5 的總排放量在 1999 年至 2008 年間是否有減少的趨勢?使用 base plotting system 回答
- 巴爾的摩市(fips 為 24510) PM2.5 的總排放量在 1999 年至 2008 年間是否有減少的趨勢?使用 base plotting system 回答
- 在巴爾的摩市歷年的排放量中,哪一種類型來源(point, nonpoint, onroad, nonroad)的排放量在 1999 年至 2008 年間是增加的趨勢?哪一種是減少的趨勢?使用 ggplot2 回答
- 全美燃燒煤礦(coal combustion-related)相關的 PM2.5 排放量在 1999 年至 2008 年間的變化趨勢為何?
- 巴爾的摩市交通工具(motor vehicle sources)相關的 PM2.5 排放量在 1999 年至 2008 年間的變化趨勢為何?
- 比較巴爾的摩市與洛杉磯(fips 為 06037)交通工具(motor vehicle sources)相關的 PM2.5 排放量在 1999 年至 2008 年間的變化趨勢為何?
作業來源
Many people have gotten jobs in machine learning just by completing that MOOC. There’re other similar online courses that help; for example the John Hopkins Data Science specialization.
Andrew Ng answering How should you start a career in Machine Learning? on Quora
Johns Hopkins University 在 Coursera 開設的資料科學專項課程是一門非常完整且質量俱佳的課程,但是獨立完成專項課程中的十門課程,對初學者並不是一件簡單的事情;由於課程中的 Programming Assignment 的難度比上課內容或 swirl 小作業都難上許多,容易在遇到要繳交 Programming Assignment 的時候,就澆熄了滿懷雄心壯志的學習熱情。
跟 DataInPoint 一起完成課程中的專題或作業吧,今天我們要解第四門課 Exploratory Data Analysis 第四週要繳交的作業:Fine particulate matter (PM2.5)。
作業的程式碼與圖形輸出可以參考這個 GitHub Repository:
概述
Fine particulate matter (PM2.5) is an ambient air pollutant for which there is strong evidence that it is harmful to human health. In the United States, the Environmental Protection Agency (EPA) is tasked with setting national ambient air quality standards for fine PM and for tracking the emissions of this pollutant into the atmosphere. Approximately every 3 years, the EPA releases its database on emissions of PM2.5. This database is known as the National Emissions Inventory (NEI). You can read more information about the NEI at the EPA National Emissions Inventory web site.
For each year and for each type of PM source, the NEI records how many tons of PM2.5 were emitted from that source over the course of the entire year. The data that you will use for this assignment are for 1999, 2002, 2005, and 2008.
這個作業所使用的資料來自 1999、2002、2005 與 2008 這四個年度的 NEI(National Emissions Inventory)資料庫,壓縮檔中有兩個副檔名為 .rds 的檔案,使用 readRDS()
函數可以直接將它們讀入成為 R 的資料框。
library(magrittr)# get_data
get_data <- function() {
#data_url <- "https://d396qusza40orc.cloudfront.net/exdata%2Fdata%2FNEI_data.zip"
dest_file <- "~/Downloads/NEI_data.zip"
ex_dir <- "~/Downloads/NEI_data/"
#download.file(data_url, destfile = dest_file) # 下載壓縮檔
unzip(dest_file, exdir = ex_dir) # 解壓縮
NEI <- paste0(ex_dir, "summarySCC_PM25.rds") %>%
readRDS()
SCC <- paste0(ex_dir, "Source_Classification_Code.rds") %>%
readRDS()
return(list(NEI = NEI, SCC = SCC))
}
data_list <- get_data()
NEI <- data_list$NEI
SCC <- data_list$SCC
第一個檔案 𝚜𝚞𝚖𝚖𝚊𝚛𝚢𝚂𝙲𝙲_𝙿𝙼𝟸𝟻.𝚛𝚍𝚜 是不同 PM2.5 污染物來源的年度排放量(噸)拆分不同行政區(郡)的資料,變數資訊為:
- 𝚏𝚒𝚙𝚜: A five-digit number (represented as a string) indicating the U.S. county
- 𝚂𝙲𝙲: The name of the source as indicated by a digit string (see source code classification table)
- 𝙿𝚘𝚕𝚕𝚞𝚝𝚊𝚗𝚝: A string indicating the pollutant
- 𝙴𝚖𝚒𝚜𝚜𝚒𝚘𝚗𝚜: Amount of PM2.5 emitted, in tons
- 𝚝𝚢𝚙𝚎: The type of source (point, non-point, on-road, or non-road)
- 𝚢𝚎𝚊𝚛: The year of emissions recorded
第二個檔案 𝚂𝚘𝚞𝚛𝚌𝚎_𝙲𝚕𝚊𝚜𝚜𝚒𝚏𝚒𝚌𝚊𝚝𝚒𝚘𝚗_𝙲𝚘𝚍𝚎.𝚛𝚍𝚜 是能夠將污染物來源由編碼對照為污染物來源名稱的資料,舉例來說 SCC 編碼 10100101 可以在資料中對照得知是 Ext Comb /Electric Gen /Anthracite Coal /Pulverized Coal。
作業內容
The overall goal of this assignment is to explore the National Emissions Inventory database and see what it say about fine particulate matter pollution in the United states over the 10-year period 1999–2008. You may use any R package you want to support your analysis. You must address the following questions and tasks in your exploratory analysis. For each question/task you will need to make a single plot. Unless specified, you can use any plotting system in R to make your plot.
問題一:全美 PM2.5 的總排放量在 1999 年至 2008 年間是否有減少的趨勢?使用 base plotting system 回答
Have total emissions from PM2.5 decreased in the United States from 1999 to 2008? Using the base plotting system, make a plot showing the total PM2.5 emission from all sources for each of the years 1999, 2002, 2005, and 2008.
回答問題一有幾點要注意:
- 使用
dplyr
套件中的函數協助將資料做歸納 - 依
year
變數分組,加總Emissions
變數 - 回答與時間(年份)相關的趨勢我習慣使用線圖
- 利用
plot()
函數指定type = “b”
參數就可以畫出有資料點的線圖
# plot1.R
library(magrittr)
library(dplyr)
gen_plot1 <- function() {
plot_tbl <- NEI %>%
group_by(year) %>% # 依 year 變數分組
summarise(ttl_emissions = sum(Emissions)) # 加總 Emissions 變數
png(filename = "~/ExData_Plotting2/plot1.png")
par(bg = NA)
plot(plot_tbl$year, plot_tbl$ttl_emissions, type = "b", xlab = "Year", ylab = "Total Emissions",
main = "Total emissions from PM2.5 have decreased in the United States")
dev.off()
}
gen_plot1()
全美 PM2.5 的總排放量在 1999 年至 2008 年間是減少的趨勢。
問題二:巴爾的摩市(fips 為 24510) PM2.5 的總排放量在 1999 年至 2008 年間是否有減少的趨勢?使用 base plotting system 回答
Have total emissions from PM2.5 decreased in the Baltimore City, Maryland (𝚏𝚒𝚙𝚜 == “𝟸𝟺𝟻𝟷𝟶”) from 1999 to 2008? Use the base plotting system to make a plot answering this question.
回答問題二有幾點要注意:
- 使用
dplyr
套件中的函數協助將資料做歸納 - 先將
fips == “24510”
的觀測值選出,再依year
變數分組,加總Emissions
變數 - 回答與時間(年份)相關的趨勢我習慣使用線圖
- 利用
plot()
函數指定type = “b”
參數就可以畫出有資料點的線圖
# plot2.R
library(magrittr)
library(dplyr)
gen_plot2 <- function() {
plot_tbl <- NEI %>%
filter(fips == "24510") %>% # 將 fips == “24510” 的觀測值選出
group_by(year) %>% # 依 year 變數分組
summarise(ttl_emissions = sum(Emissions)) # 加總 Emissions 變數
png(filename = "~/ExData_Plotting2/plot2.png")
par(bg = NA)
plot(plot_tbl$year, plot_tbl$ttl_emissions, type = "b", xlab = "Year", ylab = "Total Emissions",
main = "Total emissions from PM2.5 have decreased in the Baltimore City")
dev.off()
}
gen_plot2()
巴爾的摩市 PM2.5 的總排放量在 1999 年至 2008 年間是減少的趨勢。
問題三:在巴爾的摩市歷年的排放量中,哪一種類型來源(point, nonpoint, onroad, nonroad)的排放量在 1999 年至 2008 年間是增加的趨勢?哪一種是減少的趨勢?使用 ggplot2 回答
Of the four types of sources indicated by the 𝚝𝚢𝚙𝚎 (point, nonpoint, onroad, nonroad) variable, which of these four sources have seen decreases in emissions from 1999–2008 for Baltimore City? Which have seen increases in emissions from 1999–2008? Use the ggplot2 plotting system to make a plot answer this question.
回答問題三有幾點要注意:
- 使用
dplyr
套件中的函數協助將資料做歸納 - 先將
fips == “24510”
的觀測值選出,再依year
與type
兩個變數分組,加總Emissions
變數 - 回答與時間(年份)相關的趨勢我習慣使用線圖
- 在
aes()
中指定colour = type
將不同來源類型用不同顏色的線繪製
# plot3.R
library(magrittr)
library(dplyr)
library(ggplot2)
gen_plot3 <- function() {
plot_tbl <- NEI %>%
filter(fips == "24510") %>% # 將 fips == “24510” 的觀測值選出
group_by(year, type) %>% # 依 year 與 type 兩個變數分組
summarise(ttl_emissions = sum(Emissions)) # 加總 Emissions 變數
ggplot(plot_tbl, aes(x = year, y = ttl_emissions, colour = type)) +
geom_line() +
geom_point() +
xlab("Year") +
ylab("Emissions") +
ggtitle("Only POINT type has increased in the Baltimore City from 1999 to 2008")
ggsave("~/ExData_Plotting2/plot3.png")
}
gen_plot3()
巴爾的摩市的排放量只有 POINT 類型在 1999 年至 2008 年間是增加的趨勢,其他三種類型(NONPOINT, ONROAD, NONROAD)皆是減少的趨勢。
問題四:全美燃燒煤礦(coal combustion-related)相關的 PM2.5 排放量在 1999 年至 2008 年間的變化趨勢為何?
Across the United States, how have emissions from coal combustion-related sources changed from 1999–2008?
回答問題四有幾點要注意:
- 利用
grepl()
函數判斷文字是否有出現"Coal"
字串 - 利用 SCC 資料中的
EI.Sector
變數來判斷 - 使用
dplyr
套件中的函數協助將資料做歸納 - 將有
"Coal"
字串的 SCC 觀測值選出,再依year
變數分組,加總Emissions
變數 - 回答與時間(年份)相關的趨勢我習慣使用線圖
# plot4.R
library(magrittr)
library(dplyr)
library(ggplot2)
gen_plot4 <- function() {
has_coal <- grepl(pattern = "Coal", SCC$EI.Sector) # 利用 grepl() 函數判斷文字是否有出現 "Coal" 字串
has_coal_scc <- SCC$SCC[has_coal] %>%
as.character() # 利用 SCC 資料中的 SCC 變數來判斷
plot_tbl <- NEI %>%
filter(SCC %in% has_coal_scc) %>% # 將有 "Coal" 字串的 SCC 觀測值選出
group_by(year) %>% # 依 year 變數分組
summarise(ttl_emissions = sum(Emissions)) # 加總 Emissions 變數
ggplot(plot_tbl, aes(x = year, y = ttl_emissions)) +
geom_line() +
geom_point() +
xlab("Year") +
ylab("Emissions") +
ggtitle("The emissions from coal combustion-related in the US have decreased")
ggsave("~/ExData_Plotting2/plot4.png")
}
gen_plot4()
全美燃燒煤礦(coal combustion-related)相關的 PM2.5 排放量在 1999 年至 2008 年間是減少的趨勢。
問題五:巴爾的摩市交通工具(motor vehicle sources)相關的 PM2.5 排放量在 1999 年至 2008 年間的變化趨勢為何?
How have emissions from motor vehicle sources changed from 1999–2008 in Baltimore City?
回答問題五有幾點要注意:
- 利用
grepl()
函數判斷文字是否有出現"Mobile"
字串 - 利用 SCC 資料中的
EI.Sector
變數來判斷 - 使用
dplyr
套件中的函數協助將資料做歸納 - 將有
"Mobile"
字串的 SCC 觀測值選出,將fips == “24510”
的觀測值選出,再依year
變數分組,加總Emissions
變數 - 回答與時間(年份)相關的趨勢我習慣使用線圖
# plot5.R
library(magrittr)
library(dplyr)
library(ggplot2)
gen_plot5 <- function() {
has_mobile <- grepl(pattern = "Mobile", SCC$EI.Sector) # 利用 grepl() 函數判斷文字是否有出現 "Coal" 字串
has_mobile_scc <- SCC$SCC[has_mobile] %>%
as.character() # 利用 SCC 資料中的 SCC 變數來判斷
plot_tbl <- NEI %>%
filter(SCC %in% has_mobile_scc) %>% # 將有 "Mobile" 字串的 SCC 觀測值選出
filter(fips == "24510") %>% # 將 fips == “24510” 的觀測值選出
group_by(year) %>% # 依 year 變數分組
summarise(ttl_emissions = sum(Emissions)) # 加總 Emissions 變數
ggplot(plot_tbl, aes(x = year, y = ttl_emissions)) +
geom_line() +
geom_point() +
xlab("Year") +
ylab("Emissions") +
ggtitle("Emissions from motor vehicle sources in the Baltimore City have decreased")
ggsave("~/ExData_Plotting2/plot5.png")
}
gen_plot5()
巴爾的摩市交通工具(motor vehicle sources)相關的 PM2.5 排放量在 1999 年至 2008 年間是減少的趨勢。
問題六:比較巴爾的摩市與洛杉磯(fips 為 06037)交通工具(motor vehicle sources)相關的 PM2.5 排放量在 1999 年至 2008 年間的變化趨勢為何?
Compare emissions from motor vehicle sources in Baltimore City with emissions from motor vehicle sources in Los Angeles County, California (𝚏𝚒𝚙𝚜 == “𝟶𝟼𝟶𝟹𝟽”). Which city has seen greater changes over time in motor vehicle emissions?
回答問題六有幾點要注意:
- 利用
grepl()
函數判斷文字是否有出現"Mobile"
字串 - 利用 SCC 資料中的
EI.Sector
變數來判斷 - 使用
dplyr
套件中的函數協助將資料做歸納 - 將有
"Mobile"
字串的 SCC 觀測值選出,將fips %in% c("24510", "06037")
的觀測值選出,再依year
與fips
兩個變數分組,加總Emissions
變數 - 回答與時間(年份)相關的趨勢我習慣使用線圖
- 在
aes()
中指定colour = type
將巴爾的摩市與洛杉磯的排放量用不同顏色的線繪製
# plot6.R
library(magrittr)
library(dplyr)
library(ggplot2)
gen_plot6 <- function() {
has_mobile <- grepl(pattern = "Mobile", SCC$EI.Sector) # 利用 grepl() 函數判斷文字是否有出現 "Coal" 字串
has_mobile_scc <- SCC$SCC[has_mobile] %>%
as.character() # 利用 SCC 資料中的 SCC 變數來判斷
plot_tbl <- NEI %>%
filter(SCC %in% has_mobile_scc) %>% # 將有 "Mobile" 字串的 SCC 觀測值選出
filter(fips %in% c("24510", "06037")) %>% # 將 fips %in% c("24510", "06037") 的觀測值選出
group_by(year, fips) %>% # 依 year 與 fips 兩個變數分組
summarise(ttl_emissions = sum(Emissions)) # 加總 Emissions 變數
ggplot(plot_tbl, aes(x = year, y = ttl_emissions, colour = fips)) +
geom_line() +
geom_point() +
xlab("Year") +
ylab("Emissions") +
ggtitle("Emissions from motor vehicle sources in Los Angeles have increased")
ggsave("~/ExData_Plotting2/plot6.png")
}
gen_plot6()
與巴爾的摩市的趨勢相異,巴爾的摩市交通工具(motor vehicle sources)相關的 PM2.5 排放量在 1999 年至 2008 年間是增加的趨勢。
如果您喜歡這篇文章,請多按下方的「拍手」圖像幾次、分享到社群網站、成為我們的贊助者以及訂閱 DataInPoint 的新文章!
喜歡 DataInPoint 的文章嗎?成為我們的贊助者吧!
延伸閱讀
如果您覺得這篇文章用到的 R 程式有點難度,推薦參考 DataCamp 的 R 語言視覺化課程: