先日京都観光データウォークというワークショップに参加してきました。
その取り組みの中で、最終成果には繋がらなかったのですが、京都市で営業している宿泊施設の数を調べていると興味深い数字を見つけました。

上の図は2018年1月末時点で京都市内で営業している宿泊施設の数です。
2016年、2017年に突然大量に営業許可されていることがわかります。
その内訳はほとんどが『簡易宿所』、すなわちゲストハウスなどの安価な宿泊施設です。
営業している宿泊施設の総数は2595件、そのうち2016年と2017年とに営業開始した簡易宿所の数が1540件ですので、なんと現存する宿泊施設の60%が直近2年間で建設された簡易宿所であるということです。
これだけの突然な変化が何か問題を引き起こしてはいないでしょうか?
【データを見る上での注意】
宿泊施設数は京都市のオープンデータKYOTO OPEN DATAから取得しました。
旅館業法に基づく許可施設一覧(平成30年1月末現在) | 京都市オープンデータポータルサイト
データを見る上で注意するべきは、現在営業している宿泊施設を集計しているため廃業した宿泊施設は集計されない点です。
ただホテル業がそこまで短期で廃業することは少ないと思われますので、以降の分析では過去10年以内は許可された数字と一致していると考えます。
【地域ごとの傾向】
まず地域ごとの傾向について調べます。
下の図は始めに見た図1を行政区ごとに分割したものです。
一部の行政区を除き、多くの区において直近2年で突然ゲストハウスが建設され始めたようです。
明らかに多いのは下京区、東山区、そして中京区です。
具体的な数値間を確認するため集約して図示します。
例えば下京区では3年前までは200件しかなかった宿泊施設が2015年以降400件近く建設され、たったの3年で宿泊施設数が3倍になっていることがわかります。
山科区、西京区は建設はほとんどありません。
私が住んでいる上京区、ほんの7.11km2しかないUSJ18個ちょいの小さな区ですが、たったの3年で200近くのゲストハウスが建設されています。
それぞれのUSJに10件ゲストハウスが建設された感じです。
この増加っぷりの数字を下記の表、グラフにまとめます。
行政区 | 2014年以前建設の宿泊施設数 | 2015年以降建設の宿泊施設数 | 3年で何倍になったか | 上京区 | 55 | 187 | 4.4倍 |
---|---|---|---|
下京区 | 197 | 388 | 3.0倍 |
中京区 | 96 | 323 | 4.4倍 |
伏見区 | 58 | 87 | 2.5倍 |
北区 | 21 | 68 | 4.2倍 |
南区 | 28 | 245 | 9.8倍 |
右京区 | 57 | 56 | 2.0倍 |
山科区 | 7 | 11 | 2.6倍 |
左京区 | 95 | 103 | 2.1倍 |
東山区 | 192 | 352 | 2.8倍 |
西京区 | 20 | 11 | 1.6倍 |

インパクトがあるのは南区で、なんと過去3年間で宿泊施設の数が10倍になっています。
3年でホテルの数が10倍になるとか意味わからんですね。
その後追って、上京区、中京区、北区が5倍、これもすごい数値で追いかけます。
こんな勢いで宿泊施設を増やすことは簡易宿所でなければ実現できなかったでしょう。
このような建設ラッシュは市民生活に影響を与えたりしないでしょうか?
数字を使って調べていきます。
【地価との関係】
まずは地価と宿泊施設の建設との関係について調べます。
地価のデータは下のサイトからウェブスクレイピングで取得しました。
京都市の土地価格・公示地価・坪単価
https://tochidai.info/kyoto/kyoto/
京都市の基準地価平均のトレンドは下図のようになっています。

バブルすげえな。
僕が物心つく前のため全く記憶にありませんが、こんだけバリバリ価格が上がればそりゃあ明るい世の中だったのでしょうね。
逆に考えると、このころ土地を買った人は未だにとんでもないキャピタルロスを被っているということです。
最近のアベノミクスで地価が上がったとはいえ、バブルのピークと比べるとまだ5分の1です。日銀まだまだがんばれ。
さて、このデータを使って宿泊施設の建設数と地価の推移との相関を可視化したのが下図です。

これを見るとおおよそ3つの集まりにまとめられそうです。
クラスタ1(たくさん) | 中京区、下京区、東山区 |
クラスタ2(中くらい) | 上京区、南区 |
クラスタ3(すこし) | 左京区、伏見区、北区、右京区、西京区、山科区 |
クラスタ1は5年間で1.5倍、年平均に戻すと+8.4%の成長です。アベノミクスの頑張りが反映されています。
一方クラスタ3は株価はほとんど動いていません。アベノミクスまだまだ足りてない。
そしてクラスタごとに考えれば容易に想定されるとおり地価の上昇とゲストハウスの建設には関係がある、つまり地価が上昇している行政区においてはゲストハウスが建設されていると言えそうです。
【人口との関係】
次に人口と宿泊施設の建設との関係について調べます。
世帯数データは京都市のウェブサイトから取得しました。
世帯数の取得
https://www2.city.kyoto.lg.jp/sogo/toukei/Population/index.html
下図は行政区の世帯数と簡易宿所数との相関です。

きれいな逆相関になっていることが読み取れます。
つまり世帯数が少ない行政区(東山区や下京区)ではたくさんのゲストハウスの建設がなされており世帯数の多い行政区(伏見区や西京区)では建設は少ないと言えそうです。
世帯数が多い伏見区、西京区、右京区は”いわゆる京都”の郊外に位置するベッドタウンです。
戦後に拡大した新興住宅地域が多く観光資源が比較的少ないためゲストハウスの需要が弱いのでしょうか。
人口が少ない行政区にゲストハウスが建設されてさらに地価まで上がっているのでは、住民が追い出されたりしていないでしょうか?
人口動態との比較で見たのが下図8です。
基本は人口が増加している区でゲストハウスの建設が進んでいます。
つまり一般的にはゲストハウスの建設と人口増加が同時に発生していると言えそうです。
例外は清水寺など最大の観光地を配する東山区で、この区だけはゲストハウスの建設と同時に人口が減少しています。
なんと、一般的には地価が上昇しゲストハウスの建設が進んでいる行政区では人口は減るどころか増えていることが分かりました。(東山区除く)
おそらくゲストハウスが建設されて住宅が埋まったとしても空き家多い問題もあって現時点で地域としてのキャパシティには余裕があるため住民は押し出されないようです。
むしろ人気があるのか仕事があるのか、人は集まる傾向があるようです。(東山区除く)
【まとめ】
京都市の宿泊施設の数と行政区の統計値とを並べることでいくつかのことが分かってきました。
結論をまとめると、
- 京都市ではここ2,3年間、大量の宿泊施設が建設され、その内訳はほぼ全てが簡易宿所である。
- 現存する宿泊施設の60%が直近2年に建設されていて、特に南区では施設数が10倍程度に増えている。
- 建設が進んでいる行政区では地価が上がっている。象率は5年で+50%
- 元々人口が少ない行政区で建設が進んでいる。ただしこれらの区は人口が増加傾向である。
となります。
実は猛烈な勢いで宿泊施設が建設されているため住民が逃げてしまっているのでは、と危惧しながら分析をしていたのですが、得られた結論はむしろ逆で宿泊施設も人間も小さな区に集中する傾向が見出されました。
これは郊外の過疎化という日本全体で起こっているトレンドを反映しているのかもしれません。
またこれらの京都市の人口の増加率を他の地方と比較してみるとさらなる洞察が得られるかもしれないなあと思いましたが、それはまた別の機会にします。
追記(3/25)
登録されている簡易宿所の住所をGoogle StreetViewで確認していたところ、新築でない物件が多く見つかりました。
おそらく既存の物件を宿泊施設に変えて許可登録をしているのだと思われます。
よって上で「建設されている」というところは実態とはニュアンスが異なるかもしれません。
【分析コード】
#R library(tidyverse) library(lubridate) library(stringr) library(readxl) library(scales) library(rvest) # オープンデータからダウンロードした宿泊施設のデータの読み込み sheets <- excel_sheets("data/0131open.xlsx") hotels <- lapply(sheets, function(x)read_excel("data/0131open.xlsx", sheet = x) %>% mutate(ward = x)) %>% bind_rows %>% mutate( wareki_head = str_sub(許可日, end = 1), wareki_year = str_sub(許可日, start = 2, end = 3), month = str_sub(許可日, start = 5, end = 6), day = str_sub(許可日, start = 8, end = 9) ) %>% mutate(year = if_else(wareki_head == "S", 1925, 1988) + as.numeric(wareki_year)) %>% mutate( date = make_date(year, month, day), ym = make_date(year, month, 1) ) # ゲストハウス数集計 gh.ymcount <- hotels %>% filter(旅館業の種別 == "簡易宿所") %>% count(ym, ward) %>% rename(ghcnt = n) %>% group_by(ward) %>% arrange(ym) %>% mutate(ghbuilt = cumsum(ghcnt)) %>% ungroup # 図1 gp.yearcount <- hotels %>% filter(year < 2018) %>% ggplot(aes(year)) + geom_bar(aes(fill = 旅館業の種別), na.rm = TRUE) + scale_x_continuous(breaks = seq(1935, 2020, by = 5)) + xlab("営業許可された年") + ylab("京都市で営業している宿泊施設の数") # 図2 gp.yearcount.byward <- hotels %>% filter(year < 2018) %>% count(year, 旅館業の種別, ward) %>% ggplot(aes(year, n)) + geom_col(aes(fill = 旅館業の種別), na.rm = TRUE) + facet_wrap(~ward) # 図3 gp.hotels <- hotels %>% filter(!is.na(ym)) %>% mutate(new = if_else(year(ym) < 2015, "built before 2014", "built in 2015,16,17") %>% factor) %>% mutate(new = reorder(new, as.numeric(new) * -1)) %>% ggplot(aes(new)) + geom_bar(aes(fill = 旅館業の種別)) + facet_wrap(~ward) # 図4 gp.hotels.multiple <- hotels %>% filter(!is.na(ym)) %>% mutate(built = if_else(year(ym) < 2015, "old", "new")) %>% count(ward, built) %>% spread(built, n) %>% mutate(ratio = (old + new)/old) %>% mutate(ward = factor(ward)) %>% mutate(ward = reorder(ward, as.numeric(ward) * -1)) %>% ggplot(aes(ward, ratio)) + geom_col() + geom_text(aes(label = sprintf("%1.2f", ratio)), hjust = 1.4, color = "white") + coord_flip() + ylab("growth ratio") # ウェブスクレイピングで地価情報取得 ## 行政区それぞれのhtmlのDOMを取得 baseurl <- "https://tochidai.info/kyoto/kyoto-" urllist <- tribble( ~ward, ~url, "中京区", "nakagyo", "下京区", "shimogyo", "東山区", "higashiyama", "上京区", "kamigyo", "北区", "kita", "左京区", "sakyo", "南区", "minami", "西京区", "nishikyo", "右京区", "ukyo", "伏見区", "fushimi", "山科区", "yamashina" ) %>% mutate(url = str_c(baseurl, url)) %>% mutate(html = map(url, read_html)) ## それぞれのDOMから地価データ作成 chika <- urllist %>% mutate(tbl = map(html, . %>% html_table %>% extract2(5) %>% select(-5) %>% transmute( year = str_sub(年, end = 4) %>% parse_integer, price = str_extract_all(基準地価平均, "\\d") %>% map(str_c, collapse = "") %>% unlist %>% str_sub(end = -2) %>% parse_integer %>% "/"(10000) ) ) ) %>% select(-html, -url) %>% unnest #chika ## A tibble: 383 x 3 # ward year price # <chr> <int> <dbl> # 1 中京区 1983 360.0000 # 2 中京区 1984 270.5000 # 3 中京区 1985 288.0000 # 4 中京区 1986 294.0000 # 5 中京区 1987 488.7666 # 6 中京区 1988 531.9600 # 7 中京区 1989 557.2857 # 8 中京区 1990 695.4285 # 9 中京区 1991 646.7142 #10 中京区 1992 446.4285 ## ... with 373 more rows # 図5 gp.chikatrend <- chika %>% ggplot(aes(year, price)) + geom_line(aes(color = ward)) + geom_point(aes(shape = ward, color = ward)) + scale_shape_manual(values = 1:11) + xlab("年") + ylab("基準地価平均(単位:万円/m2)") # 図6 gp.ghchika <- chikagrowth %>% spread(year, price) %>% left_join(gh.ymcount %>% group_by(ward) %>% filter(ym == max(ym)) %>% select(-ym), by = "ward") %>% mutate(chgrowth = `2017`/`2012`) %>% ggplot(aes(chgrowth, ghbuilt)) + geom_point(aes(color = ward, shape = ward), size = 3) + scale_shape_manual(values = 1:11) + geom_vline(xintercept = 1, linetype = 2, color = "gray") + scale_x_continuous(labels = percent) + xlab("2012年から2017年への地価の増加率(単位:パーセント)") + ylab("ゲストハウス数") # 世帯数、人口取得 household <- read_csv("data/kyoto_household.csv") %>% rename(ym = date) # 世帯数の伸び hhgrowth <- household %>% filter(ym %in% ymd(c(20130101, 20171201))) %>% mutate(year = year(ym)) %>% select(ward, year, hh = 世帯数) %>% spread(year, hh) %>% mutate(hhgrowth = `2017` / `2013`) %>% left_join(gh.ymcount %>% group_by(ward) %>% filter(ym == max(ym)) %>% select(-ym), by = "ward") # 人口の伸び popgrowth <- household %>% filter(ym %in% ymd(c(20130101, 20171201))) %>% mutate(year = year(ym)) %>% select(ward, year, pop = 総人口) %>% spread(year, pop) %>% mutate(popgrowth = `2017` / `2013`) %>% left_join(gh.ymcount %>% group_by(ward) %>% filter(ym == max(ym)) %>% select(-ym), by = "ward") # 図7 gp.hhscat <- hhgrowth %>% ggplot(aes(`2017`, ghbuilt)) + geom_point(aes(shape = ward, color = ward), size = 3) + scale_shape_manual(values = 1:11) + xlab("2017年時点の世帯数") + ylab("ゲストハウス数") # 図8 gp.pgscat <- popgrowth %>% ggplot(aes(popgrowth, ghbuilt)) + geom_point(aes(shape = ward, color = ward), size = 3) + scale_x_continuous(labels = percent) + scale_shape_manual(values = 1:11) + xlab("2013年から2017年にかけての人口増(単位:パーセント)") + ylab("ゲストハウス数")