🐙
メモ:交通量 API を R から使ってみる
(なんと呼べばいいのかよくわからないのでとりあえず「交通量 API」と呼んでいます)
アナウンス
コード
たぶんこんな感じです。どのパラメータが必須かとかは仕様を参照してください。
library(httr2)
req <- request("https://api.jartic-open-traffic.org/geoserver") |>
req_url_query(
service = "WFS",
version = "2.0.0",
request = "GetFeature",
typeNames = "t_travospublic_measure_1h",
srsName = "EPSG:4326",
outputFormat = "application/json", # これを指定すると結果が GeoJSON になる
exceptions = "application/json",
cql_filter = paste(
"道路種別 = 3",
"時間コード >= 202505120000",
"時間コード <= 202505130000",
"BBOX(ジオメトリ, 139.40, 35.46, 140.05, 35.93, 'EPSG:4326')",
sep = " AND "
)
)
resp <- req |>
req_perform()
j <- resp |>
# sf で GeoJSON を読む必要があるので、resp_body_json() ではなく resp_body_string()
resp_body_string() |>
sf::read_sf() |>
# 不要そうなカラムを削除
dplyr::select(
!id,
!観測年月日,
!時間帯,
!道路種別,
!`収集時間フラグ(5分間/1時間)`
) |>
# 時刻型に変換しておく
dplyr::mutate(
時間コード = lubridate::ymd_hm(時間コード, tz = "Japan")
)
- データ保持期間は、5分値で過去1か月、1時間値で過去3か月となっているが、このサービスが公開された
202505120000
以降しかデータがなさそう - API は4つあるが、たぶん
typeNames
が違うだけであとのパラメータは同じ - pagination はなさそうなので、長い期間をリクエストしたときに重かったりしないか不安
ちなみに、req_perform()
は path
を指定して結果をファイルに保存することもできます。
tmp <- tempfile(fileext = ".geojson")
res <- req |>
req_perform(path = tmp)
結果の見た目
こんな感じでした。
dplyr::glimpse(j)
#> Rows: 682
#> Columns: 24
#> $ 地方整備局等番号 <int> 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,…
#> $ `開発建設部/都道府県コード` <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",…
#> $ 常時観測点コード <int> 3110010, 3110140, 3110160, 3110170, 3110180, 3110230, 3110270, 3110280, 3110400, 3110600, 3110610, 3110620,…
#> $ `収集時間フラグ(5分間/1時間)` <chr> "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2…
#> $ 観測年月日 <int> 20250512, 20250512, 20250512, 20250512, 20250512, 20250512, 20250512, 20250512, 20250512, 20250512, 2025051…
#> $ 時間帯 <int> 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100,…
#> $ `上り・小型交通量` <int> 864, 707, 789, 673, 749, 409, 542, 1056, 805, 1417, 1026, 955, 625, 231, 790, 535, 1017, 901, 718, 942, 751…
#> $ `上り・大型交通量` <int> 172, 150, 304, 416, 314, 39, 163, 569, 136, 167, 224, 363, 389, 239, 171, 113, 268, 246, 123, 248, 209, 140…
#> $ `上り・車種判別不能交通量` <int> 49, 45, 50, 0, 0, 21, 23, 0, 37, 155, 31, 19, 34, 11, 25, 29, 38, 54, 206, 40, 33, 102, 46, 56, 45, 63, 75,…
#> $ `上り・停電` <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0…
#> $ `上り・ループ異常` <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0…
#> $ `上り・超音波異常` <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0…
#> $ `上り・欠測` <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0…
#> $ `下り・小型交通量` <int> 916, 825, 747, 825, 693, 381, 708, 1168, 744, 1239, 1288, 970, 291, 196, 904, 536, 885, 938, 777, 0, 894, 6…
#> $ `下り・大型交通量` <int> 147, 170, 232, 269, 329, 41, 223, 601, 135, 134, 299, 477, 286, 349, 152, 103, 248, 334, 167, 0, 247, 195, …
#> $ `下り・車種判別不能交通量` <int> 29, 38, 46, 0, 0, 16, 28, 0, 50, 78, 38, 27, 63, 67, 36, 32, 32, 48, 51, 0, 53, 51, 46, 87, 38, 57, 164, 31…
#> $ `下り・停電` <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0…
#> $ `下り・ループ異常` <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0…
#> $ `下り・超音波異常` <chr> "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0…
#> $ `下り・欠測` <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0…
#> $ 道路種別 <chr> "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3…
#> $ 時間コード <dttm> 2025-05-12 11:00:00, 2025-05-12 11:00:00, 2025-05-12 11:00:00, 2025-05-12 11:00:00, 2025-05-12 11:00:00, 2…
#> $ geometry <MULTIPOINT [°]> MULTIPOINT ((139.7049 35.58..., MULTIPOINT ((139.8787 35.70..., MULTIPOINT ((139.7273 35.56..., …
Discussion