자료 출처: http://data.seoul.go.kr/openinf/sheetview.jsp?infId=OA-2218&tMenu=11
공공데이터 중 2016년도 8월~2017년 8월까지 1년동안의 대기오염정보를 이용한 데이터 분석을 시도한다. 특정한 결론을 내리기보다는 데이터의 가공 및 데이터의 분포를 가시화하는데 주력한다.
library(dplyr)
library(ggplot2)
library(psych)
library(lubridate) # month() 함수 사용
자료를 읽는다.
df_data <- read.csv("./170806-서울시 일별 평균 대기오염도 정보_utf8.csv")
names(df_data) <- c("날짜", "장소", "이산화질소농도", "오존농도", "일산화탄소농도", "아황산가스", "미세먼지", "초미세먼지")
df_data$날짜 <- as.Date(as.character(df_data$날짜), format = "%Y%m%d")
각 장소별 이산화질소농도의 평균을 계산하고 가장 높은 장소가 어디인지 알아본다.
df_data.1 <- df_data %>% group_by(장소) %>% summarise(avg = mean(이산화질소농도, na.rm=T)) %>% arrange(desc(avg))
head(df_data.1, 5)
## # A tibble: 5 x 2
## 장소 avg
## <fctr> <dbl>
## 1 강남대로 0.06695082
## 2 영등포로 0.05767486
## 3 동작대로 0.05691803
## 4 신촌로 0.05336885
## 5 공항대로 0.04782514
g <- ggplot(head(df_data.1, 5), aes(x = 장소, y = avg, fill=장소)) + geom_bar(stat="identity")
g
boxplot(df_data.1$avg)
지역 전체 평균은 0.0365993 이지만, 강남대로는 0.067로 가장 높다.
각 변수들간의 상관관계를 살펴보자. 여기서 NA 값에 대한 처리는 고려하지 않고 진행한다.
pairs.panels(df_data[-c(1:2)])
특이한 점은 오존농도는 다른 변수들과 역의 상관관계를 보이고 있다.
참고로 초미세먼지의 관측치 중 NA는 0.07 이고 여기서는 영향도가 작다고 판단한다.
각 지역별 오존농도 분포 현황을 보자
g <- ggplot(df_data, aes(x = 장소, y = 오존농도, fill = 장소)) + geom_boxplot()
#g <- g + theme(text = element_text(family = "나눔명조"))
g <- g + theme(axis.text.x = element_text(angle=30, hjust=1, vjust=1)) # 눈금 라벨을 30도 기울인다.
g
## Warning: Removed 137 rows containing non-finite values (stat_boxplot).
이중에서 관심지역인 강남대로의 일자별 이산화질소농도의 추이를 농도가 가장 낮은 구로구와 비교해 본다. 여기에 linear regression 그래프를 추가해본다.
df_data.2 <- df_data %>% select (장소, 날짜, 이산화질소농도) %>% filter(장소 %in% c("강남대로", "구로구"))
g <- ggplot(df_data.2, aes(x = 날짜, y = 이산화질소농도, color=장소)) + geom_line() + geom_smooth(method="lm")
g
작년 8월 이후로 점차 감소하고 있으며, 강남대로의 감소 추세가 더 큰 것으로 보여진다.
강남대로의 월별 추이를 살펴보자.
df_data.3 <- df_data %>% select (장소, 이산화질소농도, 날짜) %>% filter(장소 == "강남대로") %>% mutate(month = month(날짜)) %>% group_by(month) %>% summarise(avg = mean(이산화질소농도))
df_data.3$month <- as.factor(df_data.3$month)
g <- ggplot(df_data.3, aes(x = month, y = avg, group=1)) + geom_line() + geom_point()
g
7월달이 가장 낮고, 8월 이후부터 이산화질소농도가 올라가면서 겨울이 가장 높게 나타난다.
(To be continued)