一般社団法人世界メッシュ研究所

世界メッシュ統計作成の事例

このページでは位置情報(緯度と経度)を含むデータ(ポイントデータ)から世界メッシュ統計を作成する方法についてR言語用いた実際のソースコードを例に事例的に紹介する。R言語を実行するためにはRの実行環境が必要である。また、統合開発環境としてRStudioがそれぞれののOS用に提供されているので以下のソースコード実行に際して事前に実行環境と開発環境を準備されたい。


世界メッシュ統計の作り方

図1 世界メッシュ統計の作成手順の概念図

世界メッシュ統計を作成する方法について概説する。世界メッシュ統計を作成するための手順として4のステップが存在する。緯度経度情報を含むポイントデータを世界メッシュ統計に変換するためには、各レコードに含まれる緯度経度情報を基に世界メッシュコードを算出し、この世界メッシュコードを基に集計あるいは統計値計算をメッシュコードごとに行えばよい。図1にメッシュ統計を作成する概念図を示す。それぞれの手順は以下のような作業として分解される。

獲得:位置情報を含むデータ源を特定しデータのデータフォーマットの理解、ならびに、特定領域の専門知識を理解することよるデータが表現する文脈の理解が挙げられる。この時、データ源のデータ利用範囲を判明させ、許諾書や契約書を通じたデータの二次利用に関する契約作業も行われる。

収集:データの収集とは特定したデータ源からデータを繰り返し集め、csvファイルやデータベース上に格納していつでも利用できる形にデータを成型する作業を指す。データ収集では、収集されたデータのエラーや抜け、破損などがないかの検査する作業を含む。

エンコーディング:収集された位置情報付きのデータを用いることにより、データレコードに含まれる位置情報(緯度と経度)から世界メッシュコードを算出変換することができる。そして、各レコードに含まれる位置情報から計算される世界メッシュコードを各データレコードに付与する作業がこれに対応する。世界メッシュに含まれるかのラベリング作業を行う。

総和計算:エンドーディングで行われた各レコードに付与した世界メッシュコードを用いて、集計作業や統計処理の演算を行い統計データプロダクトの出力を行う。

緯度経度を含むポイントデータから世界メッシュ統計を作成することができるR言語のコードを以下に示す。ここで、このcsvファイル20170531.csv がRソースコードと同じディレクトリ上に設置されていると仮定する。

source("http://www.fttsus.jp/worldmesh/R/worldmesh.R")
mydir<-getwd()
infile<- paste0(mydir,"/20170531.csv")
ofile<- paste0(mydir,"/out_mesh3.csv")
a<-read.csv(infile,fileEncoding="UTF-8",header=F)
b<-head(a,100) # 最初の100行だけで世界メッシュ統計を算出してみる
mm<-c() for(i in 1:nrow(b)){ if(nchar(as.character(b[i,]$V13))>4){
      lat0<-unlist(strsplit(x=as.character(b[i,]$V13),split='[NS.]'))
      long0<-unlist(strsplit(x=as.character(b[i,]$V14),split='[WE.]'))
      lat<-as.numeric(lat0[2])+as.numeric(lat0[3])/60+as.numeric(lat0[4])/3600
      long<-as.numeric(long0[2])+as.numeric(long0[3])/60+as.numeric(long0[4])/3600
      wmeshcode <- cal_meshcode(lat,long)
      cat(sprintf("%s,%s,%s,%s,%s,%s,%s\n",wmeshcode,b[i,]$V1,b[i,]$V2,b[i,]$V3,b[i,]$V4,b[i,]$V5,b[i,]$V6))
      mm[i]<-wmeshcode
  }
}
wm<-unique(mm)
cat(file=ofile,sprintf("worldmeshcode,lat0,long0,lat1,long1,cnt\n"),append=F)
for(wmm in wm){
    cnt<-length(mm[mm==wmm&!is.na(mm)])
    res<-meshcode_to_latlong_grid(wmm)
    cat(file=ofile,sprintf("%s,%f,%f,%f,%f,%d\n",wmm,res$lat0,res$long0,res$lat1,res$long1,cnt),append=T)
}

Rソースコードを実行すると, 出力ファイルout_mesh3.csvには以下のように世界メッシュコード、南側経度、西側緯度、北側経度、東側緯度、求人広告数が出力される。このソースコードのhead(a,100)の数字を100より大きくすると、より多くのレコードを読み込んで求人広告数に関するメッシュ統計を作成することができる。

[出力結果例]

worldmeshcode,lat0,long0,lat1,long1,cnt
2053394526,35.691667,139.700000,35.683333,139.712500,2
2053393586,35.658333,139.700000,35.650000,139.712500,3
2053394601,35.675000,139.762500,35.666667,139.775000,2
2053394577,35.733333,139.712500,35.725000,139.725000,2
2053394611,35.683333,139.762500,35.675000,139.775000,2
2053393578,35.650000,139.725000,35.641667,139.737500,1
2053403039,35.616667,140.112500,35.608333,140.125000,2
2053394578,35.733333,139.725000,35.725000,139.737500,1
2053394507,35.675000,139.712500,35.666667,139.725000,1
2053394579,35.733333,139.737500,35.725000,139.750000,1
2053393566,35.641667,139.700000,35.633333,139.712500,1
2053394528,35.691667,139.725000,35.683333,139.737500,1
2053394672,35.733333,139.775000,35.725000,139.787500,1
2053396249,35.875000,139.362500,35.866667,139.375000,1
2054404345,36.375000,140.437500,36.366667,140.450000,1
2053393596,35.666667,139.700000,35.658333,139.712500,2
2053396522,35.858333,139.650000,35.850000,139.662500,1
2053393263,35.641667,139.287500,35.633333,139.300000,1
2053391541,35.458333,139.637500,35.450000,139.650000,1
2053393642,35.625000,139.775000,35.616667,139.787500,2
2053394353,35.716667,139.412500,35.708333,139.425000,1
2054407544,36.625000,140.675000,36.616667,140.687500,1
2053393547,35.625000,139.712500,35.616667,139.725000,1
2053394506,35.675000,139.700000,35.666667,139.712500,1
2053394709,35.675000,139.987500,35.666667,140.000000,1
2053392415,35.516667,139.562500,35.508333,139.575000,1
2053394632,35.700000,139.775000,35.691667,139.787500,9
2053407531,35.950000,140.637500,35.941667,140.650000,1
2053394576,35.733333,139.700000,35.725000,139.712500,1
2053393548,35.625000,139.725000,35.616667,139.737500,1
2053391530,35.450000,139.625000,35.441667,139.637500,1
2053391459,35.466667,139.612500,35.458333,139.625000,2
2053394435,35.700000,139.562500,35.691667,139.575000,1
2053394652,35.716667,139.775000,35.708333,139.787500,1
2053393394,35.666667,139.425000,35.658333,139.437500,1
2053393691,35.666667,139.762500,35.658333,139.775000,1
2053396463,35.891667,139.537500,35.883333,139.550000,1
2053392345,35.541667,139.437500,35.533333,139.450000,1
2053393559,35.633333,139.737500,35.625000,139.750000,1
2053393390,35.666667,139.375000,35.658333,139.387500,1
2053393330,35.616667,139.375000,35.608333,139.387500,1
2053394504,35.675000,139.675000,35.666667,139.687500,1
2053394612,35.683333,139.775000,35.675000,139.787500,1
2053394446,35.708333,139.575000,35.700000,139.587500,1
2053394543,35.708333,139.662500,35.700000,139.675000,1