今回はオープンデータについてです。オープンデータとは誰もが自由に利用でき、再利用や再配布が許可されているデータのことを指します。つまり、「著作権フリーで自由に利用可能」ということです。素晴らしいですね!オープンデータをうまく活用すれば地図上にこんなことをすることが可能です。
①「世界のサッカー場を配置してみる」
②「世界のダイビングポイントを配置してみる」
③「世界のお酒の名店を配置してみる」
ただし、それぞれ座標を調べる必要があるので、そういったものが公開されているデータを利用するのが現実的かと思います。←①を作りたいのですが、公開されているデータがなく断念しました。
とりあえず、今回は世界の空港が配置された世界地図を作ってみようと思います。まずは素の世界地図をthematicmapping.orgからダウンロードします。
いい感じですね!
続いて、空港のデータをOpenFlights: Airport and airline dataからダウンロードします。
datになっていますね。
コピペしてCSVを作成します。以下のような感じですね。
そして、マップレイヤに作成したCSVを追加してください。
CSVを右クリックして「XYデータの表示」をクリックしてください。←これArcpyでできないのかなぁ。
こんな感じでOKをおしてください。
エラーが出ますが、無視してかまいません。
ポイントが配置されました。空港ってこんなあるんですね(笑)
日本だけでもこんなにあります。
とりあえず国別の空港数と1空港あたりの利用人数を抽出してみました。
サンプルコード
numpyとpandasが必要です。
# -*- coding: utf-8 -*- import arcpy import pandas as pd import numpy as np #フィーチャの属性をpandasに食べさせる arrAir = arcpy.da.TableToNumPyArray("AirPort", ('Country')) df = pd.DataFrame(arrAir) #国ごとの空港数を集計する dfAir = pd.DataFrame(df['Country'].value_counts()) dfAir.columns = ['AirPortNum'] dfAir['Country'] = 0 for key,rowD in dfAir.iterrows(): dfAir['Country'][key] = key #フィーチャの属性をpandasに食べさせる arrCountry = arcpy.da.TableToNumPyArray("TM_WORLD_BORDERS-0.3", ('NAME','POP2005')) dfCountry = pd.DataFrame(arrCountry) dfCountry.columns = ['Country', 'POP2005'] #データフレームを結合させる dfMerge= pd.merge(dfAir,dfCountry,on='Country',how='right') #1空港あたりの利用人数を計算 dfMerge['CAL'] = dfMerge['POP2005'] / dfMerge['AirPortNum'] #CSV出力 dfMerge.to_csv('D:\python\global\AirPortByCountry.csv',encoding="SHIFT-JIS")
出力したCSVを確認してみるとアメリカが圧倒的ですね。AirPortNumが空港数、POP2005が2005年の人口、CALが1空港あたりの利用人数です。これを元に国の色分けをしたらおもしろそうなので、以下スクリプトを追加してください。
#カラム追加 arcpy.AddField_management("TM_WORLD_BORDERS-0.3", "CAL", "Double") for key,rowD in dfMerge.iterrows(): cursorJ = arcpy.UpdateCursor("TM_WORLD_BORDERS-0.3") for rowJ in cursorJ: if rowD.Country == rowJ.NAME: rowJ.setValue("CAL", rowD.CAL) cursorJ.updateRow(rowJ)
こうなったら成功です。
シンボル設定をこのようにしてみました。
結果を見ると中国、インドなど人口の多い国が1空港あたりの利用人数が多いということがわかりました。また、欧米は1空港あたりの利用人数が少ないことがわかりました。なんでもヨーロッパなんかは線路を引くのが面倒だから飛行機を飛ばしちまえみたいな感覚だとかなんとか。
データの保存
データ>データのエクスポート を行います。これでデータの作成が完了しました。
こんな感じでシンボルを設定してもおもしろいですね。
上記ではShapeに出力しましたが、GDBに保存して、シンボル設定をしたレイヤファイルを作成した方がいいかもしれませんね。そして、今回はたまたま空港のデータを使用しましたが、色々探せばおもしろいデータを発見することができそうですね。例えば、国ごとの犯罪率や地震発生率などを視覚化することができますし、また、サッカーW杯優勝回数やその国に属するクラブの世界ランキングを考慮した上の国ごとの世界ランキングなんかも作れると思います。その場合、やはりヨーロッパ、南米が強いということが視覚的にわかるのではないでしょうか。次回以降も色々やってみたいと思います。
以上、本日は「【ArcMapとArcpy】オープンデータを使って自分だけの地図を作ろう! ~世界の空港編~」でした。