xwMOOC 데이터 저널리즘

측정소 위치 - 대한민국

1. 공기 불평등 민주화

공기질이 삶의 질에 영향을 지대하게 미친다. 깨끗한 공기는 건강과 직결된다. 공기 불평등과 투쟁을 선언한 OpenAQ(Open Air Quality) “2018-01-29” 기준 64개국에 설치된 8,254개 측정솔ㄹ 통해 155,673,930 공기품질 측정값을 수집하여 제공하고 있다.

2. 전세계 측정소 현황

가장 먼저 OpenAQ에서 수집하는 공기질 측정소 위치를 살펴보자. ropenaq 팩키지를 설치하면 aq_locations() 함수를 통해 공기질 측정소 위치에 대한 국가별 정보를 얻을 수 있다.

# 0. 환경설정 -----
library(tidyverse)
library(ropenaq)
Error in library(ropenaq): there is no package called 'ropenaq'
library(leaflet)
library(crosstalk)
library(DT)

# 1. 데이터 가져오기 -----
## 1.1. 전세계 측정소 
data_station_df <- aq_locations()
Error in aq_locations(): could not find function "aq_locations"
data_station_df %>% 
    count(country, sort =TRUE) %>% 
    mutate(비율 = n / sum(n),
             누적비율 = cumsum(비율)) %>% 
    select(국가 = country, 측정소 = n, 비율, 누적비율) %>% 
    datatable() %>% 
      formatCurrency("측정소", currency="", digits=0) %>% 
      formatPercentage(c("비율", "누적비율"), digits=1)
Error in count(., country, sort = TRUE): object 'data_station_df' not found

3. 측정소 위치 및 측정 데이터

공기질 측정소별로 측정할 수 있는 측정값이 다르다. 미세먼지(微細-, Particulate Matter, PM)또는 분진(粉塵)이란 아황산가스, 질소 산화물, 납, 오존, 일산화 탄소 등과 함께 수많은 대기오염물질을 포함하는 대기오염 물질로 자동차, 공장 등에서 발생하여 대기중 장기간 떠다니는 입경 10㎛ 이하의 미세한 먼지이며, PM10이라 하고, 입자가 2.5㎛ 이하인 경우는 PM 2.5라고 쓰며 ‘초미세먼지’ 또는 ‘극미세먼지’ 라고 부른다. 학술적으로는 에어로졸(aerosol)이라고 부른다. 1

  • pm25: 초미세먼지(PM 2.5)
  • pm10: 미세먼지(PM 10)
  • so2 : 이산화황(SO2)
  • o3 : 오존(O3)
  • co : 일산화타소(CO)
  • bc : BC

전세계 위치는 OpenAQ Map을 참조하고, 우리나라와 관계있는 아시아 지역 공기품질 측정소 위치만 시각화한다.

# 2. 공간정보 시각화 -----
## 2.1. 공유 데이터
iso2_continent_lookup <- read_csv("https://raw.githubusercontent.com/lukes/ISO-3166-Countries-with-Regional-Codes/master/all/all.csv")

names(iso2_continent_lookup) <- c("name", "country", "alpha-3", "country-code", "iso_3166-2", 
                                  "region", "sub-region", "region-code", "sub-region-code")

data_station_asia_df <- left_join(data_station_df, iso2_continent_lookup) %>% 
    filter(region == "Asia")
Error in left_join(data_station_df, iso2_continent_lookup): object 'data_station_df' not found
aq_sd <- SharedData$new(data_station_asia_df)
Error in .subset2(public_bind_env, "initialize")(...): object 'data_station_asia_df' not found
## 3.2. 제어
filter_checkbox("pm25", "PM 2.5", aq_sd, ~pm25, inline = TRUE, allLevels = FALSE, TRUE)
Error in makeGroupOptions(sharedData, group, allLevels): object 'aq_sd' not found
filter_checkbox("pm10", "PM 10",  aq_sd, ~pm10, inline = TRUE)
Error in makeGroupOptions(sharedData, group, allLevels): object 'aq_sd' not found
filter_checkbox("so2",  "이산화황(SO2)",  aq_sd, ~so2, inline = TRUE)
Error in makeGroupOptions(sharedData, group, allLevels): object 'aq_sd' not found
filter_checkbox("o3",  "오존(O3)",  aq_sd, ~o3, inline = TRUE)
Error in makeGroupOptions(sharedData, group, allLevels): object 'aq_sd' not found
filter_checkbox("co",  "일산화타소(CO)",  aq_sd, ~co, inline = TRUE)
Error in makeGroupOptions(sharedData, group, allLevels): object 'aq_sd' not found
filter_checkbox("bc",  "BC",  aq_sd, ~bc, inline = TRUE)
Error in makeGroupOptions(sharedData, group, allLevels): object 'aq_sd' not found
## 3.3. 공간 정보 시각화
world_pm_leaflet <- leaflet(aq_sd) %>% 
    addProviderTiles(providers$OpenStreetMap) %>% 
    addMarkers(popup = ~ as.character(paste0("<strong> 측정소 위치 </strong><br><br>",
                                             "&middot; 명칭: ", sourceNames, "<br>",
                                             "&middot; 국가: ", country, "<br>",
                                             "&middot; 도시: ", city, "<br>",
                                             "&middot; 위치: ", location, "<br>")))
Error in structure(list(options = options), leafletData = data): object 'aq_sd' not found
## 3.4. 인터랙티브 시각화
bscols(world_pm_leaflet)
Error in bscols(world_pm_leaflet): object 'world_pm_leaflet' not found

  1. 위키백과 - 미세먼지↩︎