見出し画像

人流オープンデータを使って時系列変化を可視化してみた

こんにちは。M研の尾崎です。世の中にはいろんなオープンデータが公開されていますが、大手携帯電話会社のスマホアプリなどからの位置情報を匿名化/統計加工したデータを使って、人の流れがどのように変化しているかがわかる人流データが公開されています。新型コロナウイルス感染症の拡大で、感染を抑える一つの有力な政策として、人流を制限することが挙げられました。こういった人流データの分析がなされ、飲食店の時短営業要請などの施策が行われたのは、記憶に新しいと思います。この記事では簡単なツールを使って、人流データを加工し可視化してみたという内容になります。

人流オープンデータをダウンロード

こちらのG空間情報センターのサイトから、全国の人流オープンデータ(1kmメッシュ、県ごと)がダウンロードできます(要ユーザー登録)。
https://www.geospatial.jp/ckan/dataset/mlit-1km-fromto

今回は、上記のところから、東京都「1kmメッシュ別の滞在人口データ」をダウンロードして利用しようと思います。

monthly_mdp_mesh1km_13(東京都)

ダウンロードすると2019年~2021年の東京都の各月ごとの1kmメッシュの滞在人口データが入手できます。2022年のデータは今はないですが、もう少し時間が経てば公開されるかもしれません。
データ定義書にも書かれていますが、このデータは、1kmメッシュ別に、いつ、何人が滞在したのかを収録したデータファイルで、各カラムのデータの意味は以下のとおり。滞在人口値は、各集計期間における人口の平均値を表していて、10人未満は出力されていません。

図1 1kmメッシュ別の滞在人口データ定義書

このデータから、今回は、2021年の平日(dayflag=1)、昼間(timezone=0)のデータのみをフィルタリングして利用しようと思います。

1kmメッシュのgeojsonデータをダウンロード

上記のデータを地図上に可視化するために、1kmメッシュのgeojsonデータ(csvファイルではない方)もダウンロードしておきます。
https://www.geospatial.jp/ckan/dataset/npli-pref-1km

1kmメッシュ_13_東京都GeoJSON

これらのgeojsonメッシュデータと、人流のcsvデータを結合して可視化していきます。
geojsonデータの”code”とcsvデータのメッシュID"mesh1kmid”をキーに結合します。
結合する方法は、QGISというオープンソースのソフトウエアを使って結合することもできますが、今回は、以下のツールを使って結合してみました。

csvファイルは、2021年1月分のデータをまずは使います。
index.jsのsetting部分に結合するキーとなる”code”と"mesh1kmid”のカラム名と、入力するgeojsonファイル(in.geojson)とcsvファイル(in.csv)のファイル名、出力するgeojson(out.geojson)を所望のものに書き換えて実行します。

$ npm install
$ node index.js

実行すると、csvファイルと1kmメッシュのgeojsonファイルのプロパティーが結合されたgeojsonファイルが出力されます。"code”と”mesh1kmid"のカラムは値が重複していますが、ご容赦を。。

{
    "type": "FeatureCollection",
    "crs": {
        "type": "name",
        "properties": {
            "name": "urn:ogc:def:crs:EPSG::4612"
        }
    },
    "features": [
        {
            "type": "Feature",
            "properties": {
                "code": "53394509",
                "mesh1kmid": "53394509",
                "prefcode": "13",
                "citycode": "13103",
                "year": "2021",
                "month": "1",
                "dayflag": "1",
                "timezone": "0",
                "population": "118384"
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    [
                        [
                            139.7375,
                            35.6666666666667
                        ],
                        [
                            139.75,
                            35.6666666666667
                        ],
                        [
                            139.75,
                            35.675
                        ],
                        [
                            139.7375,
                            35.675
                        ],
                        [
                            139.7375,
                            35.6666666666667
                        ]
                    ]
                ]
            }
        },
        {
            "type": "Feature",
            "properties": {
                "code": "53394518",
                "mesh1kmid": "53394518",
                "prefcode": "13",
                "citycode": "13103",
                "year": "2021",
                "month": "1",
                "dayflag": "1",
                "timezone": "0",
                "population": "34497"
            },・・・・

同じように2021年2月分~12月分のcsvデータと1kmメッシュのgeojsonデータを結合して、ファイルを作成します。
後ほどmonthデータ部分で時系列に表示してあげたいのですが、
monthの値はint型で、時系列に可視化するためにはdatetime型にしないといけないので、今回は、以下のように1月分のデータだと、1月1日の00:00:00とテキストエディタを使って一括置換します。以下、2月以降も同様に毎月1日の00:00:00のデータに一括置換します。

:%s/"month": "1"/"datetime": "2021-01-01 00:00:00"/g

できた12個のgeojsonファイルをjqコマンドで結合してあげます。

jq '.features[]' *.geojson | jq -s '{"type": "FeatureCollection","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4612"}},"features":.}' > merged.geojson

このデータを可視化しますが、今回使用した可視化ツールとしては、
kepler.glを使います。kepler.glはUber社が開発しているオープンソースのWebGISツールです。

https://kepler.gl/

kepler.glにアクセスして、GetStartedをクリックします。
「Add Data To Map」でファイルをアップロードできる画面が出てきますので、先ほど作成したmerged.geojsonファイルをアップロードします。

図2 kepler.gl ファイルアップロード画面
図3 Layers 設定画面

LayersでLayer Settingのプルダウンをクリックして、いろんな設定パラメータが出てくるので、Fill Colorの横にある3点ボタン(…)をクリックします。

図4 Fill Color 設定画面

Color Based Onのカラムが追加されるので、そこで(int)populationをクリックします。

図5 Color Based On 設定画面

(int)populationを選択したら、カラーバーのところをクリックしてあげて、Stepsを6⇒20に変更します。

図6 Filters 設定画面

次にメニュー左上の2段目左から2つ目のFilters設定画面をクリックして、
先ほど置き換えたdatetime列を選択します。すると右下にdatetimeの時系列のバーが出現します。

図7 時系列の設定画面

時系列の幅を調整し、ギリギリ1か月分ぐらいの幅に設定して、再生ボタンをクリックすると、1か月ごとの1kmメッシュ人口の分布が変わっていく様子を見ることができます。再生速度の調整も可能です。

図8 時系列の設定画面

時系列の動きを可視化できるようになりました。(下記から可視化した動画をダウンロードできます)滞在人口は1ヶ⽉間における1日あたりの平均値で、もっとも人流の多いところがオレンジの明るい色の部分で、色が赤黒くなるにつれて人流が少なくなります。色は20階層に分かれていて、今回のデータだと一番多いメッシュで20万人ぐらい、少ないところでは10人になっています。
東京都全体の1kmメッシュで1か月ごとの1年分の変化しかないので、このデータからわかることは少ないかもしれませんが、もっと細かい単位のデータで試してみると、なんでこの時間にこんなに人流が・・・といった発見ができるかもしれません。

(メディア研究開発センター・尾崎正典)