科学の箱

科学・IT・登山の話題

R

大気汚染データの観測

投稿日:

コーセラのDeveloping Data Productで知りたい場所の緯度経度を入力すると過去の観測データからオゾン濃度とPM25汚染濃度を予測するコードを紹介していた。Video Lectureのみだったので、コーディングしてコメントを追加しておく。

サイトのURLはこちら https://class.coursera.org/devdataprod-002/

setwd("C:/r/yhat")

## 大気汚染のデータをRに取り込む。
d <- read.csv("annual_all_2013.csv")
str(d)

## PM2.5およびオゾンデータのみとりこむ。さらに必要な変数のみにする。
sub <- subset(d, (Parameter.Name %in% c("PM2.5 - Local Conditions", "Ozone") 
  & Pollutant.Standard %in% c("Ozone 8-Hour 2008", "PM25 Annual 2006")),
  c(Longitude, Latitude, Parameter.Name, Arithmetic.Mean))
head(sub)

## 時系列で重複しているので地点で集計する。
pollavg <- aggregate(sub[,"Arithmetic.Mean"], 
  sub[,c("Longitude", "Latitude", "Parameter.Name")],
  mean, na.rm = TRUE)
names(pollavg)[4] <- "level"
pollavg <- transform(pollavg, Parameter.Name = factor(Parameter.Name))
pollavg

rm(d, sub)

## 監視地点の行列を作成する。
monitors <- data.matrix(pollavg[,c("Longitude", "Latitude")])
monitors

library(fields)

## input parameter : data frame
##    lon: longitude
##    lat: latitude
##    radius: Radius in miles for findng monitors.

pollutant <- function(df){
  x <- data.matrix(df[, c("lon", "lat")])
  r <- df$radius

  ## パラメータで引き渡された地点と監視地点の距離を計算する
  d <- rdist.earth(monitors, x) 
   # dはx地点からのmonitors地点への距離が含まれる。
   # dはリストで戻される、行数=観察対象の地点数、列数=モニタしている地点数

  ## モニタしている地点すべてについて 距離 < rとなる地点を探す
  use <- lapply(seq_len(ncol(d)), function(i) {
      which (d[,i] < r[i])
  })

  ## オゾンとPM25について集計する
  levels <- sapply(use, function(idx){
       with(pollavg[idx,], tapply(level,Parameter.Name, mean))
  })
  dlevels <- as.data.frame(t(levels))
  data.frame(df, dlevels)
}

## テスト
pollutant(data.frame(lon = -76.61, lat=39.2, radius=40))

メタ情報

inarticle



メタ情報

inarticle



-R
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

条件付きでレコードを取得する

データフレームでは条件付きでレコードを取得できる。 以下のようなフォーマットのデータフレームを考える id name height vector1 <- c(1, 2, 3, 4, 5) vec …

no image

Rによるやさしい統計学/4-母集団と標本

言葉の定義 推測統計、推定、点推定、区間推定、検定 標本、標本統計量、推定量、標本抽出、確率変数、確率分布、標本誤差 標本分布、標本統計量、平均、標準偏差、標準誤差 4.5 標本分布 標本平均の標本分 …

no image

Rによるやさしい統計学/3-2つの変数の記述統計

散布図を作成 Rで散布図を作成する。データはrunifで10個ずつ作成する。データのレンジは50~100. x_test <- as.integer(runif(10, 50, 100)) y_ …

no image

回帰分析

回帰分析の手順 データを取得する。 回帰分析をする意味があるかを検討する 回帰分析のモデルを検討する 回帰分析をする 回帰分析の結果について考察する 回帰分析のメモ 回帰分析では目的変数を説明できる変 …

no image

与えられたパラメータにもっとも近い値を探す

ベクトルからパラメータにもっとも近い値を探す方法 >  x <- 1:10 >  num <- which( abs(x-5.2) == min(abs(x-5.2)) ) & …

2014年6月
« 5月   7月 »
 1
2345678
9101112131415
16171819202122
23242526272829
30  

side bar top



アーカイブ

カテゴリー