見出し画像

[Rによるデータ分析]GIS情報の取り扱い(2)

本コラムではGIS情報の活用について説明します。GISとはGeography Information Systemの略で、緯度経度情報などを数値解析するシステムです。第2回は、ちょっと試してみようということで不動産賃貸物件の住所情報を緯度経度に変換し、ここから計算した距離を回帰モデルの説明変数として導入してみましょう。事例としては、英語ではNIMBY(Not In My Backyad) とよばれる「必需品だが自分の近隣には来てほしくない施設」の存在が賃貸料に及ぼす影響について分析します。具体的には、東京都墨田区の墨田清掃工場の近隣の不動産賃貸物件の賃貸料を題材に分析します。

第1回を読みたい方はこちら


事例の背景

少し背景を説明します。墨田区の墨田清掃工場は1998年に完成した清掃工場で、すみだスポーツ健康センターが併設されるなど設備が整った清掃工場です。余熱をスポーツセンターの温水プールに利用しているそうです。一般に、最新鋭の清掃工場では極力匂いなどが発生しないような設備が導入されていますが、清掃車がひっきりなしに入ってくるなど、現代でも清掃工場が近くにあることによる負の外部性が存在すると言われています。墨田清掃工場については以下に紹介があります。

墨田清掃工場は、以下の地図の通り、地図のS字型をした旧中川の近くで、地図の右上の荒川からも近いところにあります。鉄道の駅から少し離れていることもわかります。

ここでは墨田区の賃貸物件X件のデータを用いて分析します。ここで使用するデータには物件の所在地の情報が含まれています。

具体的な手順

この先の作業ですが具体的には以下のような手順で作業を進めます。
Step 1. 各物件の地番を緯度経度に変換
Step 2. 墨田清掃工場の緯度経度を調べる
Step 3. 清掃工場までの距離を含むデータセットを作成
Step 4. 回帰分析:清掃工場の隣接地域と1km離れた地点で家賃はどの程度異なるかを分析

Step 1. 各物件の地番を緯度経度に変換

まずCSVファイルの所在地情報(丁目までの情報あり)を緯度経度に変換します。この作業は、東京大学空間情報科学研究センターCSVアドレスマッチングサービスを利用します。このサイトでは住所情報を含むCSVファイルを入れると緯度経度を付与したデータを返してくれるサービスを提供しています。なお、住所は街区レベル、たとえば「東京都港区三田2丁目」まで対応しています(正確な住所が三田2-15-45であっても三田2丁目の情報で緯度経度を割り振っている)。このサービスにアクセスるには以下のURLをクリックしてください。

上記のリンクからCSVアドレスマッチングのサイトに入ると、以下のようなWindowが出てきますので、CSVファイルの何列目に住所情報が入っているかを指定し、「ファイルを選択」します。

以下はCSVアドレスマッチング後に加工済みのデータを開いたところです。H列とI列に緯度経度が、J列とK列にはマッチングの精度が示されています。

Step 2. 墨田清掃工場の緯度経度を調べる

次に墨田清掃工場の緯度経度を調べる必要があります。「墨田清掃工場 緯度経度」でググル、あるいはMapfanで検索すると緯度経度が出てきます。以下の画像ではGoogleの検索例が出ています。

Degree形式とDMS形式の2つが表示される場合、前者を使います(後者は60進法で表記したもの)。

Step 3. 清掃工場までの距離を含むデータセットを作成

賃貸物件の各物件の緯度経度と墨田清掃工場の緯度経度がわかったら、距離を計算します。ここでは、2地点の緯度大円距離(英: great-circular distance)の公式を使用します。これは球面上の大円に沿う距離で、

公式 地点A(経度x1, 緯度y1)、地点B(経度x2, 緯度y2)とすると
2点間距離=rcos-1(sin(y1)sin(y2)+cos(y1)cos(y2)cos(x2-x1))

と定義できます。

この計算はEXCELでも計算可能で詳しくは以下のサイトを見てください。

ここではRのdist2Laine()という関数を使った計算方法を紹介します。この関数は事前にgeosphereパッケージをインストールすることで利用可能になります。使い方は、
dist2Line(地点1の経度・緯度, 地点2の経度・緯度)
で、2地点間の距離が出力される(単位m)が出力されます。

スクリプト例と緯度経度を接続したデータは以下にあります。

では、スクリプト例を見ていきましょう。
以下では、fy_sとfx_sに墨田清掃工場の緯度経度を格納しています。さらにそれをlocation1に格納しています。fXとfYはCSVアドレスマッチングで返ってきたファイルに含まれる各賃貸物件の緯度経度で、これをlocation2に格納します。dist2Lineでlocation1とlocation2の距離を計算しそれをdistance(単位m)に格納し、これをdatafにくっつけるためにcbindという関数を使っています。

library(tidyverse)
library(geosphere)   #データ読み込み 
dataf <- readr::read_csv(“Sumida-plant-location.csv”)
dataf <- dataf %>% mutate( fy_s=35.717323)
dataf <- dataf %>% mutate(fx_s=139.8318804)
location1 <-dataf %>% select(fX, fY)
location2 <-dataf %>% select(fx_s, fy_s)
distance <- dist2Line(location1,location2)
dataf <-cbind(dataf,distance)

Step 4. 回帰分析

この後は、各変数を定義して回帰分析を実施します。距離distanceの単位はmなので1000で割ってkm単位に変換しています。回帰分析では賃貸料rent_totalを被説明変数、床面積floor、築年数age、駅からの徒歩分数walkを説明変数に入れます。そして、清掃工場までの距離についてはdistanceそのものを説明変数にしたものと、墨田清掃工場から半径500m未満の物件であれば1をとるダミー変数dist_lt500、500m-1km内の物件なら1をとるダミー変数dist_lt1kを説明変数に加えた回帰式を推定しています。

dataf <- dataf %>% mutate(rent_total=rent+service/10000)
dataf <- dataf %>% mutate(distance=distance/1000)
dataf <- dataf %>% mutate(dist_lt500=if_else(distance<0.5,1,0))
dataf <- dataf %>% mutate(dist_lt1k=if_else(distance>=0.5&distance<1,1,0))
lm(rent_total~floor+age+walk+distance, data=dataf) %>% summary()
lm(rent_total~floor+age+walk+dist_lt500+dist_lt1k, data=dataf) %>% summary()

以下がdistanceを説明変数に加えた推計結果です。距離の係数はプラスで5%で有意となっています。賃貸料の単位は1万円なので墨田清掃工場から1Km離れると賃貸料は5500円高くなる、言い換えると清掃工場の周辺は1km離れた場所より賃貸料が5500円低いと言えます。

次に墨田清掃工場から半径500m未満の物件であれば1をとるダミー変数dist_lt500、500m-1km内の物件なら1をとるダミー変数dist_lt1kを説明変数に加えた場合が以下です。係数はともにマイナスで"."が付いていますので10%水準で統計的に有意です。ダミー変数の意味ですが、1Km以上離れている物件と比較して、墨田清掃工場から500m未満物件だと3000円、500m-1Km圏内物件は2400円安いと解釈できます。

本コラムは「Rによるデータ分析入門」のWEBサポートページとして作成されました。WEBサポートの一覧は以下を参照してください。

WEBサポートの一覧は以下を参照してください。


この記事が気に入ったらサポートをしてみませんか?