科学の箱

科学・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

factorと数値型の変換

ジニ係数にファクターと数値変換についてコメントをいただいたので調べてみた。 その結果以下の3つのことがわかった。 read.csvで桁区切り文字つきの値を読み込むとfactorになる。 区切り文字つき …

no image

factor

factorを利用することでベクトルやデータフレームで質的変数を取り扱うことができる。 ファクター化するフィールドに対してfactor()関数を適用すると、ファクター化されたベクトルが取得できる。 値 …

no image

Rオブジェクト指向のメモ

whichではwhich.minとwhich.maxが用意されているという指摘を受けたので調べ見てた。 which.minとwhich.maxはRでいうところのオブジェクト指向を利用した構造にみえる。 …

no image

Rに関するmemo

グループ毎に度数分布を作成する by(housing$VAL, housing$SERIALNO, length) グループで平均値を計算するための式 DT[,mean(pwgtp15),by=SEX …

no image

cexについてまとめる

Rでグラフィックのパラメータはpar()で指定する。par()のパラメータを変更することでplotなどの表示方法を柔軟に変更できる。例えばラベルのフォントの大きさなどである。下記はpar()で指定でき …

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

side bar top



アーカイブ

カテゴリー