LoginSignup
1
1

More than 5 years have passed since last update.

Daru::Viewで都道府県のマップを描いてみた

Last updated at Posted at 2019-02-11

都道府県別のデータをRESAS-APIから取得してDaru::Viewでグラフを描いてみました。本家のサンプルに国ごとのマップを描く方法は載っていますが、県別にマップに色つけする方法がなかったので記録を残します。

image.png

前提となる環境

  • Jupyter Notebook / Lab
  • IRuby

Daru::Viewとは?

Ruby用のデータフレーム Daru のライブラリ。バックエンドにGoogle Chartsや、Highchartsを利用する。Google Chartsの基本的な機能はほぼカバーされている。
https://github.com/SciRuby/daru-view

require 'daru/view'
require 'resas_kit'

RESAS-APIから情報の取得するのはResasKitというGemを利用した。(Qiitaに作者による解説記事があります)

client = ResasKit::Client.new(api_key: KEY) # キー取得には登録が必要

都道府県のリストを取得。あとでGoogle Chartに投げるために「県」「都」「府」を消しておきます。


prefs = client.get('prefectures').body.result.map do |item|
    name = item.prefName
    name.chop! unless name == "北海道"
    [name, item.prefCode]
end
#[["北海道", 1],
# ["青森", 2],
# ["岩手", 3],
# ...
# ["沖縄", 47]]

都道府県別の総人口を取得する

今回は練習のため、県ごとの総人口を取得してみます。

データの取得

県別のデータを一括して取得する方法がわからなかったので、ここではループをまわして取得しています。

population_data = prefs.map do |name, n|
    hoge = client.get 'population/composition/perYear', pref_code: n
    value = hoge.body.result.data[0].data[12].value # 12 は 2020年のデータ
    population_data << [name, value]
end

データフレームの作成

df = Daru::DataFrame.rows(population_data)
df.vectors = Daru::Index.new ["都道府県","総人口"]
df.head 3 # 上から3行を表示して確認

image.png

今回は使いませんが、nilの除去をする場合は下記のようにしたりします。

df.replace_values nil, 0 # nilを0に変換する

都道府県のチャートを描く

Daru::View::Plot.new(df,
    adapter: :googlecharts,
    region: 'JP',
    resolution: 'provinces',
    type: :geo,
    height: 500, width: 800
    ).show_in_iruby

image.png

おまけで、円グラフや棒グラフも描いておきましょう。

円グラフ

df2 = df.sort(["総人口"], ascending: false)
# ↑ ソートをかけた
Daru::View::Plot.new(df2,
    type: :pie,
    height: 500, width: 800
    ).show_in_iruby

image.png

棒グラフ

Daru::View::Plot.new(df,
    adapter: :googlecharts,
    type: :bar,
    vAxis: {textStyle: {fontSize: 8}},
    height: 800, width: 800
    ).show_in_iruby

image.png

 上記のコードを少し書き換えるだけでも、さまざまなグラフが作成できそうです。

 Pythonのすばらしい可視化ライブラリには遠く及びませんが、使用頻度の高い古典的なグラフについてはかなり便利に使えるのではないでしょうか。

 余談ですが、上記の簡単なコードを書くのには実はそれなりに時間がかかっています。初めて見たAPIで何の情報がどこに格納されているかを探すのに、かなり時間がかかるようです。

 この記事は以上です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1