Upgrade to Pro — share decks privately, control downloads, hide ads and more …

地図を描画する / ggplot_map

Uryu Shinya
September 05, 2021

地図を描画する / ggplot_map

2021年9月5日にオンラインで開催された統計関連学会連合大会のチュートリアル「Rによるデータ解析のためのデータ可視化」(三村喬生、江口哲史、瓜生真也)の発表資料です。
コード: https://github.com/uribo/jfssa2021_datavis

Uryu Shinya

September 05, 2021
Tweet

More Decks by Uryu Shinya

Other Decks in Education

Transcript

  1. ӝੜਅ໵
    3ʹΑΔσʔλղੳͷͨΊͷσʔλՄࢹԽ
    ౷ܭؔ࿈ֶձ࿈߹େձνϡʔτϦΞϧ
    地図を描画する
    第3部
    [email protected]
    ࠃཱ؀ڥݚڀॴੜ෺ଟ༷ੑྖҬ

    View Slide

  2. ໨࣍
    ɾॻ੶Ͱ͸ΞϝϦΧ߹ऺࠃͷࣄྫɺ
    ɹ஍ਤ͕ओͰ͕͢ɺൃදͰ͸೔ຊΛ୊ࡐʹ͠·͢ɻ
    ɾ஍ਤඳըͷͨΊͷ৽ͨͳσʔλܗࣜTGͱ
    ɹHHQMPUύοέʔδͰͷඳըؔ਺
    ɹ[email protected]
    Λѻ͍·͢ɻ
    ⾏政区域の地図
    地図を磨き上げる
    1
    2
    空間配置を考慮したグラフ
    3
    HHQMPUͰͷ஍ਤදݱͷجૅ
    ஍ਤදݱΛߦ͏ࡍͷ՝୊ͱ޲͖߹͏
    ஍ਤʹݶΒͳ͍දݱͷ۠෼

    View Slide

  3. ࢿྉ
    https:
    /
    /
    github.com/uribo/jfssa2021_datavis
    スライド(PDF)
    予稿集のコード付き原稿(R Markdown)
    (JUΫϩʔϯ΋͘͠͸;JQμ΢ϯϩʔυ
    チュートリアルで利⽤するデータ
    3QSPKϑΝΠϧΛ34UVEJPͰ։͍͍ͯͩ͘͞ɻ
    usethis
    ::
    use_course("uribo/jfssa2021_datavis")
    or

    View Slide

  4. νϡʔτϦΞϧͰશൠతʹར༻͢Δύοέʔδ
    library(dplyr) # σʔλૢ࡞Λ༰қʹߦ͏ύοέʔδ


    library(ggplot2) # ՄࢹԽͷͨΊͷύοέʔδ


    library(sf) # ஍ཧۭؒσʔλΛѻ͏ύοέʔδ


    library(rnaturalearth) # ύϒϦοΫυϝΠϯͰར༻Մೳͳߦ੓஍ਤσʔλΛఏڙ͢Δύοέʔδ
    HHQMPUςʔϚͷઃఆ
    theme_set(theme_bw(base_family = "IPAexGothic"))
    ೔ຊޠϑΥϯτ
    ޷ΈͷϑΥϯτΛࢦఆͯ͠0,Ͱ͢
    ೔ຊޠϓϩοτͷจࣈԽ͚ετϨεΛ௿ݮ͢Δ34UVEJPWͱSBHHύοέʔδΛ࢖͏
    IUUQTVSJCPIBUFOBCMPHDPNFOUSZ

    View Slide

  5. ߦ੓۠Ҭͷ஍ਤ
    HHQMPUͰͷ஍ਤදݱͷجૅ

    View Slide

  6. データ: Natural Earth
    # Natural Earth͔Β೔ຊͷ౎ಓ෎ݝϙϦΰϯΛऔಘ
    ne_jpn <-


    ne_states(country = "Japan",


    returnclass = "sf") %>%


    # ࢖Θͳ͍ྻΛআ֎͠ɺඞཁͳྻ͚ͩΛબͿΑ͏ʹ͠·͢
    select(iso_3166_2, gn_name) %>%


    tibble::new_tibble(nrow = nrow(.), class = “sf"
    )

    class(ne_jpn)
    #> [1] "sf" "tbl_df" "tbl" "data.frame
    "

    glimpse(ne_jpn)
    #> Rows: 47
    #> Columns: 3
    #> $ iso_3166_2 "JP-46", "JP-44", "JP-40", "JP-41", "JP-42", "JP-43", "JP-4…
    #> $ gn_name "Kagoshima-ken", "Oita-ken", "Fukuoka-ken", "Saga-ken", "Na…
    #> $ geometry MULTIPOLYGON (((129.7832 31..., MULTIPOLYGON (…
    ฦΓ஋ͷΫϥεΛTGʹࢦఆ
    ౎ಓ෎ݝϙϦΰϯΛ༻ҙ

    View Slide

  7. TGύοέʔδ
    GIS規格のsimple features(sf)をRに実装
    ne_jpn


    #> Simple feature collection with 47 features and 2 fields


    #> Geometry type: MULTIPOLYGON


    #> Dimension: XY


    #> Bounding box: xmin: 122.9382 ymin: 24.2121 xmax: 153.9856 ymax: 45.52041


    #> CRS
    : +
    proj=longlat
    +
    datum=WGS84
    +
    no_defs
    +
    ellps=WGS84
    +
    towgs84=0,0,0


    #> # A tibble: 47 × 3


    #> iso_3166_2 gn_name geometry


    #>


    #> 1 JP-46 Kagoshima
    -
    ken (((129.7832 31.79963, 129.7909 31.78441, 129.7986 3…


    #> 2 JP-44 Oita
    -
    ken (((131.2009 33.61271, 131.2199 33.60754, 131.2565 3…


    #> 3 JP-40 Fukuoka
    -
    ken (((130.0363 33.45759, 130.0402 33.46125, 130.0446 3…


    #> (লུ)


    #> # … with 44 more rows
    地物(feature)の情報を格納する3つのクラス(sfg,sfc,sf)
    TG
    TGD DPMVNO

    TGH HFPNFUSZ

    View Slide

  8. ಉ͡ग़ྗ݁Ռ
    [email protected]

    ggplot(ne_jpn) +
    geom_sf()
    ggplot() +
    geom_sf(data = ne_jpn)
    sfオブジェクトをマッピングするgeom_*()
    ڭՊॻͰ͸஍ਤσʔλͷඳըʹ[email protected]
    Λ࢖͍·͕ͨ͠ɺ
    ݱࡏ͸ͪ͜ΒʢTGܗࣜʣΛར༻͢Δͷ͕ඪ४తͰ͢ɻ

    View Slide

  9. ಉ͡ग़ྗ݁Ռ
    [email protected]

    ggplot() +


    geom_sf(data = ne_jpn,


    aes(fill = gn_name))
    sfオブジェクトには他の変数が紐付けられるので…
    ggplot(ne_jpn) +


    geom_sf(aes(fill = gn_name))
    ggplot2の審美的要素のマッピングが容易
    ౎ಓ෎ݝ͝ͱʹృΓͭͿ͠

    View Slide

  10. ߦ੓۠Ҭͷ஍ਤͷྫબڍ݁ՌͷϚοϐϯά
    データ: 第48回衆議院議員総選挙
    都道府県別届出政党等別得票数(⼩選挙区)
    [email protected]
    glimpse(ne_jpn_shugiin48)


    #> Rows: 47


    #> Columns: 8


    #> $ iso_3166_2 "JP-46", "JP-44", …


    #> $ prefecture "ࣛࣇౡݝ", “େ෼ݝ", …


    #> $ gn_name "Kagoshima
    -
    ken", “Oita
    -
    ken", …


    #> $ party "ࣗ༝ຽओౘ", “ࣗ༝ຽओౘ", …


    #> $ votes 403187.0, 279778.0, …


    #> $ is_ruling TRUE, TRUE, …


    #> $ prop 53.15506, 51.12192,…


    #> $ geometry MULTIPOLYGON (((129.7832 31
    . ..
    各都道府県でもっとも得票率  の⾼かった党派 party
    prop

    View Slide

  11. ߦ੓۠Ҭͷ஍ਤͷྫબڍ݁ՌͷϚοϐϯά
    党派を塗り分けるカラーコードを定義
    party_colors
    <-
    c(`ࣗ༝ຽओౘ` = "#41A12E",


    `ެ໌ౘ` = "#F35A82",


    `ཱݑຽओౘ` = "#1B4787",


    `ر๬ͷౘ` = "#136437",


    `೔ຊڞ࢈ౘ` = "#D90A26",


    `೔ຊҡ৽ͷձ` = "#3EC021",


    `ࣾձຽओౘ` = "#1CA9E9",


    `ॾ೿` = "#D3D3D3",


    `ແॴଐ` = "#691D82")
    p
    <-

    ggplot(data = ne_jpn_shugiin48,


    aes(fill = party))
    σʔλΛఆٛ͠
    ৹ඒతཁૉΛϚοϐϯά
    ʢౘ೿ͰృΓ෼͚Δʣ
    1
    2
    Step1
    Step2

    View Slide

  12. ߦ੓۠Ҭͷ஍ਤͷྫબڍ݁ՌͷϚοϐϯά
    p1
    <-

    p +


    geom_sf() +


    scale_fill_manual(


    values = party_colors,


    guide = guide_legend(title = "ౘ೿"))


    p1
    ౎ಓ෎ݝ͝ͱͷୈҰౘ

    View Slide

  13. ߦ੓۠Ҭͷ஍ਤͷྫબڍ݁ՌͷϚοϐϯά
    ౎ಓ෎ݝ͝ͱͷୈҰౘ
    p2
    <-

    p +


    # ݝڥΛ໌֬ʹ͢ΔͨΊʹଠ͞Λௐઅ͢Δ


    geom_sf(size = 0.2) +


    # ࢖ΘΕͳ͍ຌྫΛ࡟আ͢Δ


    scale_fill_manual(


    values = party_colors[c(1, 9)],


    guide = guide_legend(title = "ౘ೿"))


    p2

    View Slide

  14. ஍ਤΛຏ্͖͛Δ
    ஍ਤදݱΛߦ͏ࡍͷ՝୊ͱ޲͖߹͏

    View Slide

  15. ஍ٿ ࣍ݩ
    Λฏ໘ ࣍ݩ
    ʹදݱ͢Δʹ͸
    球体 平⾯
    歪みが発⽣

    View Slide

  16. ͭͷ࠲ඪࢀরܥʢ$PPSEJOBUF3FGFSFODF4ZTUFN$34ʣ
    地理座標系
    投影座標系
    ҢઢͱܦઢͰߏ੒͞ΕΔɻ౦੢ํ޲Λܦ౓ɺೆ๺ํ޲ΛҢ౓Ͱදݱ͢Δɻ
    ଟ͘ͷ৔߹ɺ๺൒ٿ͸ਖ਼ͷҢ౓Λ࣋ͪɺೆ൒ٿ͸ෛͷҢ౓ͱͳΔɻܦ౓ͷݪ఺ͱͯ͠ຊॳࢠޕઢ͕࢖༻͞ΕΔɻ
    ࣍ݩͷ9:࠲ඪͰදݱɻ໘ੵɾڑ཭ɾ֯౓ͷ͍ͣΕ͔ʹର͢Δ࿪ΈΛิਖ਼Ͱ͖Δɻ
    ϞϧϫΠσਤ๏ ϝϧΧτϧਤ๏ άʔυਤ๏
    ೔ຊपลΛදࣔ͢Δ౤Ө๏
    ɾϝϧΧτϧਤ๏
    ɾ65.࠲ඪܥ
    ɾฏ໘௚֯࠲ඪܥ
    空間データ座標が地球上のどの位置にあるか特定するための仕組み

    View Slide

  17. ஍ਤ౤Ө๏ͷม׵
    # Natural Earth͔ΒશٿϙϦΰϯΛऔಘ
    ne_world
    <-

    ne_countries(scale = 10,


    returnclass = "sf")
    データ: Natural Earth
    x
    <-

    st_crs(ne_world)


    x$input


    #> [1] "
    +
    proj=longlat
    +
    datum=WGS84
    +
    no_defs
    +
    ellps=WGS84
    +
    towgs84=0,0,0"
    sfパッケージの関数st_crs()で座標参照系を確認
    ஍ཧ࠲ඪܥΛࣔ͢

    View Slide

  18. ஍ਤ౤Ө๏ͷม׵
    p
    <-

    ggplot(data = ne_world) +


    geom_sf()


    p
    地理座標系のsfオブジェクトをマッピング
    coord_sf()でマッピング時に
    変換
    対象オブジェクトのCRSを事前に
    1 2

    View Slide

  19. ஍ਤ౤Ө๏ͷม׵
    coord_sf()の適⽤
    1
    # ϞϧϫΠσਤ๏ʹΑΔੈք஍ਤͷඳը
    p +


    coord_sf(crs = "
    +
    proj=moll")
    sfオブジェクトの座標参照系を変更
    2
    # st_transform()ʹΑΔ࠲ඪࢀরܥͷมߋ


    ne_world_moll
    <-

    st_transform(ne_world, crs = "
    +
    proj=moll")


    ggplot(data = ne_world_moll) +


    geom_sf()

    View Slide

  20. ஍ਤσʔλͱख࣋ͪͷσʔλΛ݁߹͍ͨ͠ͱ͖
    sfとデータ操作のためのdplyrパッケージを使って実現

    QSFGFDUVSF HFPNFUSZ
    ๺ւಓ 10-:(0/ ʜ

    ੨৿ݝ 10-:(0/ ʜ

    ʜ ʜ
    ԭೄݝ 10-:(0/ ʜ

    QSFGFDUVSF QPQVMBUJPO
    ๺ւಓ
    ੨৿ݝ
    ʜ ʜ
    ԭೄݝ
    ஍ཧۭؒσʔλʢTGʣ ଐੑσʔλ EBUBGSBNF

    View Slide

  21. ஍ཧۭؒσʔλͱଐੑσʔλΛඥ͚ͮΔ
    df_shugiin48_party_votes
    <-

    readr
    ::
    read_rds(here
    ::
    here("data/shugiin48_prefecture_party_votes.rds"))


    glimpse(df_shugiin48_party_votes)


    #> Rows: 48


    #> Columns: 31


    #> $ ۠෼ "๺ւಓ", "੨৿ݝ", "ؠखݝ", "ٶ৓ݝ", "ळాݝ", "ࢁܗ…


    #> $ ࣗ༝ຽओౘ_உ 1107667, 365462, 226455, 552240, 261709, 214176, 425155, 477…


    #> $ ࣗ༝ຽओౘ_ঁ 82096.0, NA, 57381.0, NA, NA, 103973.1, NA, 165437.0, NA, 20…


    #> $ ࣗ༝ຽओౘ_ܭ 1189763.0, 365462.0, 283836.0, 552240.0, 261709.0, 318149.1,…


    #> (লུ)


    #> $ ߹ܭ_உ 2250452.0, 577864.0, 543060.0, 813560.0, 508327.0, 490173…


    #> $ ߹ܭ_ঁ 442164.0, 19004.0, 78930.0, 188947.0, 13642.0, 103973.1, …


    #> $ ߹ܭ_ܭ 2692616, 596868, 621990, 1002507, 521969, 594147, 902732,…
    データ: 第48回衆議院議員総選挙
    都道府県別届出政党等別得票数(⼩選挙区)
    [email protected]

    View Slide

  22. ஍ཧۭؒσʔλͱଐੑσʔλΛඥ͚ͮΔ
    df_shugiin48_party_votes_mod
    <-

    df_shugiin48_party_votes %>%


    filter(۠෼
    !=
    "ܭ") %>%


    select(prefecture = ۠෼, ends_with("ܭ")) %>%


    select(!starts_with("߹ܭ"))
    2つのデータを結合するための加⼯が必要
    QSFGFDUVSF ࣗ༝ຽओౘ@ܭ ཱݑຽओౘ@ܭ ر๬ͷౘ@ܭ ެ໌ౘ@ܭ ೔ຊڞ࢈ౘ@ܭ ೔ຊҡ৽ͷձ@ܭ ࣾձຽओౘ@ܭ ॾ೿@ܭ ແॴଐ@ܭ
    ๺ւಓ /"
    ੨৿ݝ /" /" /" /" /"
    ؠखݝ /" /" /" /" /"
    ٶ৓ݝ /" /"
    ळాݝ /" /" /" /" /" /"
    ࢁܗݝ /" /" /" /" /"
    Step1
    ౎ಓ෎ݝͷूܭ݁ՌͷΈʹ
    બ୒ͱಉ࣌ʹྻ໊Λมߋ
    உঁͷ߹ܭ஋Λબ୒
    ౘ೿͝ͱͷूܭ݁Ռ͚ͩʹ
    1
    2
    3

    View Slide

  23. ஍ཧۭؒσʔλͱଐੑσʔλΛඥ͚ͮΔ
    df_shugiin48_party_votes_long
    <-

    df_shugiin48_party_votes_mod %>%


    tidyr
    ::
    pivot_longer(cols = ends_with("ܭ"),


    names_to = "party",


    values_to = "votes") %>%


    mutate(party = stringr
    ::
    str_remove(party, "_ܭ"),


    is_ruling = if_else(party %in% c("ࣗ༝ຽओౘ", "ެ໌ౘ"),


    TRUE,


    FALSE))
    Step2
    QSFGFDUVSF QBSUZ WPUFT [email protected]
    ๺ւಓ ࣗ༝ຽओౘ 536&
    ๺ւಓ ཱݑຽओౘ '"-4&
    ๺ւಓ ر๬ͷౘ '"-4&
    ๺ւಓ ެ໌ౘ 536&
    ๺ւಓ ೔ຊڞ࢈ౘ '"-4&
    ๺ւಓ ೔ຊҡ৽ͷձ '"-4&
    ྻ໊ͱ஋ͷ૊Έ߹Θͤ
    Λͭͷྻʹ͢Δ

    View Slide

  24. ஍ཧۭؒσʔλͱଐੑσʔλΛඥ͚ͮΔ
    df_shugiin48_party_votes_tops
    <-

    df_shugiin48_party_votes_long %>%


    group_by(prefecture) %>%


    mutate(prop = votes / sum(votes, na.rm = TRUE) * 100) %>%


    top_n(n = 1, wt = prop) %>%


    ungroup()
    Step3
    QSFGFDUVSF QBSUZ WPUFT [email protected] QSPQ
    ๺ւಓ ࣗ༝ຽओౘ 536&
    ੨৿ݝ ࣗ༝ຽओౘ 536&
    ؠखݝ ࣗ༝ຽओౘ 536&
    ٶ৓ݝ ࣗ༝ຽओౘ 536&
    ʜ ʜ ʜ ʜ ʜ
    ԭೄݝ ࣗ༝ຽओౘ 536&
    ά
    ϧʔϓʢ౎ಓ෎ݝʣ͝ͱʹ
    ॲཧΛͯ͠৽ͨͳྻΛ௥Ճ͢Δ
    各都道府県でもっとも得票率が⾼い党派の得票数

    View Slide

  25. ϩʔϚࣈͱ׽ࣈͷ݁߹͸ࣦഊ͢Δ
    ne_jpn$gn_name


    #> [1] "Kagoshima
    -
    ken" "Oita
    -
    ken" …


    df_shugiin48_party_votes_tops$prefecture


    #> [1] "๺ւಓ" "੨৿ݝ" …
    データフレーム間の結合処理では、共通の値が記録された列が必要
    QSFGFDUVSF HFPNFUSZ
    )PLLBJEP 10-:(0/ ʜ

    "PNPSJLFO 10-:(0/ ʜ

    ʜ ʜ
    0LJOBXBLFO 10-:(0/ ʜ

    QSFGFDUVSF QPQVMBUJPO
    ๺ւಓ
    ੨৿ݝ
    ʜ ʜ
    ԭೄݝ

    View Slide

  26. ׽ࣈͱ׽ࣈͷ݁߹Λߦ͑ΔΑ͏ʹ͢Δ
    # zipanguύοέʔδ͔ΒσʔληοτΛར༻͢Δ


    jpnprefs
    <-

    zipangu
    ::
    jpnprefs %>%


    select(prefecture_kanji, gn_name = prefecture)


    ne_jpn_kanji
    <-

    ne_jpn %>%


    mutate(gn_name = recode(gn_name,


    # ϩʔϚࣈදهͷنଇΛଞݝͱ߹ΘͤΔ


    `Miyagi Ken` = "Miyagi
    -
    ken")) %>%


    inner_join(jpnprefs,


    by = "gn_name") %>%


    select(iso_3166_2, prefecture = prefecture_kanji, gn_name)
    Step4

    View Slide

  27. ஍ཧۭؒσʔλͱଐੑσʔλΛඥ͚ͮΔ
    ne_jpn_shugiin48
    <
    -

    ne_jpn_kanji %>%


    left_join(df_shugiin48_party_votes_tops, by = "prefecture") %>%


    relocate(geometry, .after = last_col())
    Step5
    sfオブジェクトに対してdata.frameの列を追加する
    બڍ݁ՌͷϚοϐϯάͰ
    ར༻ͨ͠σʔλ

    View Slide

  28. ूܭ୯ҐΛมߋ͍ͨ͠
    地図データの⽅も合わせて集約したい
    ஍ํ
    ݝ ˠ
    QSFGFDUVSF QPQVMBUJPO
    ๺ւಓ
    ੨৿ݝ
    ʜ ʜ
    ԭೄݝ
    QSFGFDUVSF QPQVMBUJPO
    ๺ւಓ
    ౦๺
    ʜ ʜ
    ԭೄɾ۝भ
    ݝ୯Ґͷूܭ ஍ํ୯ҐͰͷूܭ

    View Slide

  29. TGͷHFPNFUSZʹର͢ΔEQMZSͷؔ਺ͷద༻
    group_by()とsummarise()でポリゴンの集約が⾏われる
    ne_jpn_region
    <-

    ne_jpn_kanji %>%


    left_join(zipangu
    ::
    jpnprefs %>%


    select(prefecture = prefecture_kanji,


    region),


    by = "prefecture") %>%


    group_by(region) %>%


    summarise(.groups = "drop")
    ౎ಓ෎ݝ͔Β஍ํ΁ͷू໿
    ʢಘථ਺ͱϙϦΰϯσʔλʣ

    View Slide

  30. ۭؒ഑ஔΛߟྀͨ͠άϥϑ
    ஍ਤʹݶΒͳ͍දݱͷ۠෼

    View Slide

  31. ۭؒ഑ஔΛߟྀͨ͠άϥϑ
    ⾏政単位での地図…⾯積の違いによる差異が発⽣
    教科書ではアメリカ合衆国を表現する"statebins"を紹介
    ⾯積を無視して、空間配置を簡略化
    ஍ཧతͳۭؒ഑ஔΛ
    ׬શʹ͸࠶ݱ͠ͳ͍
    খ͍͞भ΋େ͖͍भ΋ۉ౳
    େ·͔ͳҐஔؔ܎Ͱ0,
    1
    2
    3

    View Slide

  32. ΧϥϜ஍ਤ
    \UBCVMBSNBQT^ύοέʔδ
    ⽇本の都道府県、市町村を表形式に配置して表現
    IUUQTXXXTUPQDPWJEKQ
    IUUQTHJUIVCDPNUBCVMBSNBQT
    世界地図、県より⼩さな⾏政単位にも応⽤可能
    λΠϧܗࣜʹσʔλΛฒ΂ͯදࣔ͢ΔUBCVMBSNBQTύοέʔδ͕$3"/ʹొ࿥͞Ε·ͨ͠
    IUUQTVSJCPIBUFOBCMPHDPNFOUSZ

    View Slide

  33. UBCVMBSNBQύοέʔδ
    library(tabularmaps)




    jpn77 %>%


    select(jis_code,


    prefecture = prefecture_kanji,


    x,


    y) %>%


    left_join(df_shugiin48_party_votes_tops,


    by = "prefecture") %>%


    tabularmap(x = x,


    y = y,


    group = jis_code,


    label = prefecture,


    fill = prop,


    size = 2,


    family = "IPAexGothic") +


    scale_fill_viridis_b() +


    theme_tabularmap(base_family = "IPAexGothic")

    View Slide

  34. ·ͱΊ

    View Slide

  35. ⾏政区域の地図
    地図を磨き上げる
    1
    2
    空間配置を考慮したグラフ
    3
    HHQMPUͰͷ஍ਤදݱ͸TGύοέʔδ͕ఏڙ͢ΔTGΦϒδΣΫτͱ[email protected]
    Λ࢖ͬͯߦ͏
    EBUBGSBNFͱTGΛ݁߹͢Δͱ͖ʹ͸஫ҙ͕ඞཁɻTGΦϒδΣΫτͱEQMZSͷ૬ੑ͸ྑ͘ɺHFPNFUSZͷ݁߹΋ߦ͑Δ
    ۭؒతͳਖ਼֬͞ΛݮΒ͢͜ͱͰࢹೝੑΛߴΊΔ͜ͱ͕Ͱ͖Δ

    View Slide

  36. View Slide