본문 바로가기

데이터 과학/R 데이터 분석과 시각화

미세먼지와 대중교통 [ 데이터분석 ] - 1

여러 주제를 고심하다가 요즘 가장 핫한 문제 중 하나인 '미세먼지'에 대해 알아보기로 했다.

 

미세먼지가 많은 날에는 사람들이 밖에 많이 나가지 않는다. 더군다나 걸어서나 대중교통은 더욱 이용하지 않을 것이라고 생각한다. 그래서!! 나는 미세먼지와 대중교통 이용량의 상관관계를 분석해볼 것이다.

 

그러기 위해 필요한 정보는 날짜별 미세먼지 데이터와 날짜별 대중교통 이용량 데이터가 필요하다. 

 


 

먼저, 미세먼지 데이터를 찾아볼 수 있었다.

http://cleanair.seoul.go.kr/air_pollution.htm?method=daily

 

일별 대기오염도 통계 : 서울특별시 대기환경정보

 > 기후대기통계 > 대기환경 > 기간별 >  일별 --> --> --> 대기통계 기간별 일별 일별 ※ 이 자료는 최종확정자료가 아닙니다. 최종확정자료는 환경부 대기환경정보 홈페이지(http://www.airkorea.or.kr) 통계정보에서 확인 하실수 있습니다. [표] 측정기간 : 2018.01, 측정물질 : 미세먼지 도시대기측

cleanair.seoul.go.kr

위 서울특별시 사이트에서 매월 미세먼지 데이터를 제공한다. 

미세먼지 뿐만 아니라 초미세먼지, 오존, 이산화질소 등등 여러 대기환경에 대한 정보를 제공하고

(2019년 5월 12일 기준) 1987년부터 2019년 5월 12일 데이터까지 매일매일 올라오는 모양이다.

 


 

내려받은 데이터는 아래와 같다.

사이트에서 제공하는 형태

여기서 나는 행과 열을 바꿔준다음 불필요한 항목들을 제거한 후 저장했다.

 

간단하게 처리하기 쉽게 바꿈

나는 2018년 1월 ~ 2018년 12월까지의 데이터로 진행하기로 했다.

 


드디어 R을 써먹어 보자...!!

 

(티스토리의 코드블럭에 R이 없어 python으로 대체하니 이 점 감안해 주세요)

우선, csv파일을 읽어와야겠다.

 

month <- read.csv("January.csv", header = T)

 

그리고 1, 2행만 남기고 삭제한다. 왜냐하면 나는 서울시 전체 데이터만 있으면 되기 때문이다. 구마다 다른 미세먼지 농도는 나중에 실력을 더 키운 후 다루기로 하자.

1, 2행의 이름도 바꿔준다.

 

one <- month[,c(1, 2)]
names(one) <- c("date", "seoul")

 

범주형 변수를 취해준다.

아래는 degree라는 열을 만들어 미세먼지 농도에 따라 일정 농도의 범주 안이면 색상을 구분되게 표시해주었다.

 

one$degree <- cut(one$seoul, breaks = c(1, 31, 81, 151, 1000), include.lowest = T, right = F, labels = c("blue", "green", "yellow", "red"))

 

그리고 약간 무식한 방법으로 나중에 월별로 가공한 데이터를 합칠 때를 대비해서, 몇월인지 알 수 있는 열을 만들기로 했다. 그리고는 월을 나타낸 행을 맨 왼쪽으로 당겼다.

 

one$month <- cut(one$date, breaks = c(1, 100), include.lowest = T, right = F, labels = c(1))
one <- one[,c(4, 1, 2, 3)]

 

마지막으로 데이터를 csv파일로 저장한다.

 

write.table(one, file="month1.csv", sep=",", row.names=FALSE, col.names=TRUE)

 

12개의 월을 이렇게 가공한 후 합쳤다.

 

m01 <- read.csv("month1.csv", header = T)
m02 <- read.csv("month2.csv", header = T)
m03 <- read.csv("month3.csv", header = T)
m04 <- read.csv("month4.csv", header = T)
m05 <- read.csv("month5.csv", header = T)
m06 <- read.csv("month6.csv", header = T)
m07 <- read.csv("month7.csv", header = T)
m08 <- read.csv("month8.csv", header = T)
m09 <- read.csv("month9.csv", header = T)
m10 <- read.csv("month10.csv", header = T)
m11 <- read.csv("month11.csv", header = T)
m12 <- read.csv("month12.csv", header = T)

year <- rbind(m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12)
write.table(year, file="year.csv", sep=",", row.names=FALSE, col.names=TRUE)

 

해놓고 보니 합치고 R로 가공하는 게 나았던 것 같다.

ㅠㅠ

 

앞으로는 그렇게 해야겠다!

저장한 year데이터의 모습


정말 별거 아니었지만 하고나니 뿌듯했다.

책에서 나온 걸 따라친 것도 아니고 인터넷을 따라친 것도 아니고, 선생님을 따라친 것도 아니다.

내가 혼자 힘으로 했기 때문에 조그마하지만 얻어가는건 매우 큰 듯 하다.