ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

香港酒店数据实测:入住率冲上 93% 新高,房价却比峰值跌了 12%

香港酒店数据实测:入住率冲上 93% 新高,房价却比峰值跌了 12% 国庆黄金周今天开场出行平台的数据预报说景区客流高峰在 10 月 2 到 5 日。正好香港文体旅局公开的酒店三件套——入住率、平均房价、房间数——上个月刚更新到 2026 年 7 月。三张表对着读完最扎眼的是一对错位入住率的五年新高出现在 2025 年 11 月93%而房价的五年峰值停在两年前的 2023 年 12 月1,646 港元。住得更满了卖得更贵了账不是这么算的。目录一、三张姊妹表连列名都没对齐二、量价错位两个峰值差了两年三、RevPAR住得更满赚得更少四、存量指标的惰性与两个月的数据时差四个要点收尾一、三张姊妹表连列名都没对齐三份数据全部零鉴权每份小到不到 1KB701 / 824 / 871 字节双轮抓取指纹 3/3 一致。但把三张表摆到一起想做个 join 时第一排坑就出现了表期列名值列名入住率Year-MonthHotel_room_occupancy_rate(%)房价Year-MonthAverage_achieved_hotel_room_rate(HKD)房间数Year-monthNumber_hotel_rooms同一发布者、同一批月度表期列名的大小写都不一致Year-Month对Year-month单位(%)和(HKD)直接嵌在列名里。做合并时onYear-Month会静默丢掉房间数表的所有行——pandas 的 join 不报错只是结果悄悄少了三分之一。期值本身是202108这种八位数pandas 读进来是int64importpandasaspd dfpd.read_csv(原始返回/hotel/occ_r0.csv)print(df.iloc[:,0].dtype)badpd.to_datetime(df.iloc[:,0])goodpd.to_datetime(df.iloc[:,0].astype(str),format%Y%m)print(bad.iloc[0].date(),→,good.iloc[0].date())# int64# 1970-01-01 → 2021-08-01上一个坑是「解析器自由发挥填了个错日期」这一份是它的反面、也更危险pd.to_datetime对整数列不猜字符串格式而是把数字直接当纳秒数——202108 被解析成1970-01-01 00:00:00.000202108。整列变成 1970 年元旦附近的一串微秒差异时间轴整个错掉 51 年却没有任何报错你拿它画时间序列图也能画出来只是 x 轴全部挤在一个点上。唯一的解法是自己说清楚先转字符串再format%Y%m。顺带交代这份数据的出处与体量发布方是文化体育及旅游局旅游事务三份文件在资料一线通各有一个数据集页每种还有繁体与简体版单份不到 1KB 的体量意味着它没有历史包袱——三张表齐刷刷从 2021 年 8 月开始60 个月疫情之前的老数据一份都不在。所以本文所有「五年」都是 2021-08 起算的五年不是行业口径的「疫前疫后对比」这个窗口是数据替你选的。二、量价错位两个峰值差了两年把入住率和房价画在同一张图上五年里发生了三段故事2021-08 到 2022 年是疫情尾巴入住率最低55%2022 年 2 月房价却还有 980 港元——隔离酒店撑住的2023 年 2 月通关房价四个月内从 1,162 冲到 1,532然后进入本文的核心错位importcsvdefload(name):rows[rforrincsv.reader(open(f原始返回/hotel/{name}_r0.csv,encodingutf-8-sig))ifrandany(x.strip()forxinr)]return{int(r[0]):float(r[1])forrinrows[1:]}occ,rate,roomsload(occ),load(rate),load(rooms)occ_peakmax(occ,keyocc.get)# 202511rate_peakmax(rate,keyrate.get)# 202312print(occ_peak,occ[occ_peak],房价,rate[occ_peak])print(rate_peak,rate[rate_peak],入住率,occ[rate_peak])print(入住率峰值月的房价距峰:,round((1-rate[occ_peak]/rate[rate_peak])*100,1),%)# 202511 93.0 房价 1443.0# 202312 1646.0 入住率 87.0# 入住率峰值月的房价距峰: 12.3 %入住率 93% 的历史新高2025-11对应的房价是 1,443 港元比 2023 年 12 月的峰值 1,646 低了 12.3%。换句话说酒店全部住满了每间房收的钱反而比两年前少。这不是滞后的巧合——2025 年 11 月前后房价一路在 1,393–1,502 徘徊而 2023 年底是 1,646 的平台。三、RevPAR住得更满赚得更少酒店业的行话把这叫 RevPAR每间可售房收入入住率 × 平均房价。三张表凑齐了正好能算monthssorted(set(occ)set(rate)set(rooms))revpar{m:round(occ[m]/100*rate[m],1)forminmonths}pkmax(revpar,keyrevpar.get)first,lastmonths[0],months[-1]print(pk,revpar[pk],|,last,revpar[last],round((1-revpar[last]/revpar[pk])*100,1))print(五年:,round(revpar[first],1),→,revpar[last],round((revpar[last]/revpar[first]-1)*100,1),%)# 202312 1432.0 | 202607 1072.5 25.1# 五年: 612.7 → 1072.5 75.0 %RevPAR 的峰值是 2023 年 12 月的 1,432 港元2026 年 7 月只有 1,072.5距峰 −25.1%。而拉长到五年看RevPAR 从 612.7 涨到 1,072.575%——大趋势在涨短周期在跌。量的复苏入住率 18 个百分点吃不掉价的回落39.6% 的涨幅比起 2023 底已回吐。给「黄金周酒店会涨价吗」这类问题找数据支撑时「入住率高」和「房价会涨」是两句话这份三表恰好是它们的反例。四、存量指标的惰性与两个月的数据时差第三张表是房间数它的形态和前两张完全不同60 个月里出现 4 段平台期最长一段连续 5 个月一字不动最近五个月全都是 93,456 间。这不是数据没更新——存量指标本来就不动一次装修加减几十间房才跳一格。识别「这张表是流量还是存量」很重要流量表入住率每月必有变化存量表房间数连平才是正常拿「连续几个月没变」去怀疑数据死了会误报。最后是时差三张表的最新一期都是2026 年 7 月到今天 9 月 30 日8 月和 9 月——两个客流最大的月份——都还没有数字。官方口径的黄金周数据要用两个月后的报表才能看到。另外两列值全是整数入住率精度 1 个百分点、房价精度 1 港元做同比环比时先round到这个粒度再比较否则会算出93.0 - 89.0 4.000000000000004这种假精度。精度还要反过来用在另一头入住率 92% 和 93% 在这份表里没有区别但房价 1,443 和 1,444 是真实的两档——不同量纲的最小分辨单位不同混在一张汇总表里排序或分级时先按各自精度归一。四个要点收尾姊妹表也要核 schema期列名大小写不一致、单位嵌在列名里join 前先print(columns)整数期让解析器直接 NaT202108要显式format%Y%m自由解析整个失败入住率与房价是两个量历史新高与历史峰值可以差两年——衡量酒店景气用 RevPAR别单看入住率流量表和存量表行为不同连平不代表数据死了而月度发布有约两个月的时差黄金周的数据要等入冬。照例声明本文只讨论公开数据的口径与工程处理不构成任何酒店、旅游或投资建议2026 年 10 月黄金周的实际表现官方数据要到 11 月之后的报表才有。全部数字可复现——三份文件双轮抓取的原始返回与审计脚本14 项断言放在仓库取数时间 2026-09-30。参考链接https://www.tourism.gov.hk/datagovhk/hotelroomoccupancy/hotel_room_occupancy_rate_monthly_en.csvhttps://www.tourism.gov.hk/datagovhk/hotelroomrate/average_achieved_hotel_room_rate_en.csvhttps://www.tourism.gov.hk/datagovhk/hotelrooms/number_of_hotel_rooms_en.csv
返回列表