Oracle Spatial Studio で駅ごとの年齢層の人口を集計してみた


はじめに

本記事ではこちらの記事の続きとして、東京都の境界データと国勢調査の年齢階層データ、先ほどロードした全国の駅データを使って、Spatial Studioで分析をしてみます。

1. 境界データ/小地域(東京都)のダウンロードとロード

こちらから東京都の境界データのShapefileをダウンロードします。
利用規約を読んでzipファイルを展開します。

(補足)
Shapefile(シェープファイル)とは、Esri社が提唱する、GISデータのフォーマットの1つです。
https://www.esrij.com/gis-guide/esri-dataformat/shapefile/
図形情報と属性情報を持った地図データファイルが集まったファイルで、例えばこの後使う「市区町村の形状データ」では、市町村の形を示す情報や、その市町村の名前などが格納されています。*.shp, *.dbf など、決まった拡張子を持つ複数のファイルからなります。


出典:政府統計の総合窓口(e-Stat)

以下の4つのファイルが展開されます。

  • h27ka13.dbf
  • h27ka13.prj
  • h27ka13.shp
  • h27ka13.shx

2. 国勢調査の年齢階層データのダウンロード

こちらから東京都の年齢階層データ(age_group_tokyo.csv)をダウンロードします。合わせてテーブル定義書も確認します。
※ 政府統計の総合窓口(e-Stat)『平成27年国勢調査 人口等基本集計 年齢(5歳階級)、男女別人口、総年齢及び平均年齢(外国人-特掲)-町丁・字等』のデータを一部加工して作成しています。

3. 各データのSpatial Studioへのロード

先ほどダウンロードしたシェープファイルと年齢階層データをSpatial Studioへロードし、データセットを作成します。

  1. Spatial Studioへログインし、[Create Dataset]→[From file upload]を選択し、4つのファイルを全てインポートします。

  2. 以下の画像のように設定し、Submitします。

    • Upload to connection:SPATIAL_STUDIOを選択
    • Table name:TOKYO_BOUNDARYに変更
    • Dataset name:TOKYO_BOUNDARYに変更
    • Create Spatial Index:ON(デフォルト)に設定、空間索引が作成されます。
  3. AREA列を主キー列に設定します。

  4. age_group_tokyo.csvをインポートします。Issuesが2つありますが、ここはこのままで先に進みます。

4. Database Actionsで2つの表をjoinする

Spatial StudioでロードしたTOKYO_BOUNDARY表とAGE_GROUP_TOKYO表を、共通のKEY_CODE列でjoinします。
現在の設定では、studio_repoユーザーでDatabase Actionsにサインインできないため、ADMINユーザーでRESTの有効化をする必要があります。

  1. ADMINユーザーでDatabase Actionsにサインインします。

  2. [データベース・ユーザー]をクリックします。

  3. studio_repoユーザーにRESTの有効化をします。

  4. 一度サインアウトし、studio_repoユーザーでサインインし直します。

  5. 『開発』の[SQL]をクリックします。

  6. Spatial Studioでロードした3つの表AGE_GROUP_TOKYO、STATION20210312FREE、TOKYO_BOUNDARYがあることを確認します。

  7. 以下のコマンドでAGE_GROUP_TOKYO表とTOKYO_BOUNDARY表をjoinし、geo_age_tokyo表を作成します。

    create table geo_age_tokyo as select a.PREF, a.CITY, a.S_AREA, a.PREF_NAME, a.CITY_NAME, a.S_NAME, a.KIGO_E, a.HCODE, a.AREA, a.PERIMETER, a.H27KAXX_, a.H27KAXX_ID, a.KEN, a.KEN_NAME, a.SITYO_NAME, a.GST_NAME, a.CSS_NAME, a.KIHON1, a.DUMMY1, a.KIHON2, a.KEYCODE1, a.KEYCODE2, a.AREA_MAX_F, a.KIGO_D, a.N_KEN, a.N_CITY, a.KIGO_I, a.MOJI, a.KBSUM, a.JINKO, a.SETAI, a.X_CODE, a.Y_CODE, a.KCODE1, a.GEOM, b.*
    from TOKYO_BOUNDARY a, AGE_GROUP_TOKYO b 
    where a.key_code = b.key_code;
    
  8. 再度Spatial Studioに戻り、作成したgeo_age_tokyo表でデータセットを作成します。[Create Dataset]→[Table/view]からGEO_AGE_TOKYOを選択します。また、[Validate geometries]のトグルスイッチをONにします。

  9. 主キー列をAREA列に設定し、[Create Spatial Metadata and Index]をクリックします。

設定が成功するとGEO_AGE_TOKYOのアイコンがピンマークに変わります。

5. 地理情報を用いた分析

作成したgeo_age_tokyo表と駅データを用いて、駅周辺の特定の年齢層の人口を集計してみます。
以下は、東京都を駅周辺の650個の小地域に分け、駅ごとに0~14歳、15~64歳、65歳以上の人口を表示するSQL文です。
このSQL文をDatabase Actionsで実行します。

select sum(a.T000849017), sum(a.T000849018), sum(a.T000849019), b.station_name
from geo_age_tokyo a, STATION20210312FREE b
where sdo_anyinteract (a.geom, sdo_geometry(2001, 8307, sdo_point_type(b.lon, b.lat, NULL), NULL, NULL)) = 'TRUE'
group by b.station_name;
  • sdo_anyinteract:表内のジオメトリに、特定のジオメトリとの位相関係があるかどうかを確認する、つまり東京都の小地域の空間データと駅の座標位置になんらかの位相関係があればTRUEを返します。
  • sdo_geometry:Oracleのデータベース上に点やポリゴンを収容するオブジェクト型です。引数の2001は二次元の点を表し、8307はWGS84経度/緯度座標系に関連付けられています。詳しくはこちらをご参照ください。
  • sdo_point_type:点ジオメトリの座標を格納するオブジェクト型です。

10秒ほど待つと、以下のような結果が返されます。東京都の各駅周辺の地域の年齢階層別の人口が表示されています。

おわりに

Oracle Spatial Studioを使って、地理情報を含むデータの可視化やその空間分析ができることをご確認いただきました。
また、ここでは扱いませんでしたが、面積計算を織り込んだ分析や道路/経路面を考慮した対象商圏の分析などもOracle Spatial の機能を利用することで可能になっています。
さらにAutonomous Databaseで使用することで、大量のデータに対しても高速に処理を行うことができます。
Oracle Spatial StudioはAutonomous Databaseに標準で含まれておりますので、Autonomous Databaseを使用する際は合わせてご検討ください。

参考資料