目录一、三份表三种形态二、跨表对账2,168 对 8,111三、表内也有三个量纲申请数 ≠ 设计数 ≠ 类别合计四、列名和行标签里塞了别的东西五、时点存量和年度流量不能放在一张图上六、可以直接抄的做法参考链接这两天有个很热的话题AI 把一项物理学的世界纪录刷新了接着就是「AI 做出来的东西算谁的」这种讨论。这个问题我答不了但我顺手打开了中国香港知识产权署的公开统计——三份零鉴权的 CSV只想做一件事把 2025 年的外观设计申请数找出来。结果第一脚就踩空了一份表按来源地和类别划分里2025 年的申请数是2,168另一份表按国家或地区划分里同一年同一个指标的合计是8,111——差 3.74 倍而第一份表里还藏着第三个数这些申请共含 4,038 个设计也就是说一份申请平均装了 1.86 个设计。三份文件加起来不到 20KB但形态、口径、时间语义全都不一样。一、三份表三种形态文件行数列数形态时间语义按来源地和类别20436长表年份是一个字段年度流量只有 2025按国家或地区526宽表年份当列名年度流量2021–2025有效注册/批予数56宽表列名是「截至某日」时点存量同一个发布者、同一个网站目录三份文件的组织方式没有一个是相同的一份年份躺在字段里、一份年份躺在列名里、一份列名干脆就是日期。你要是想写一个「通用读取器」套这三份表光是「年份在哪」这个问题就有三种答案。顺便看一眼第二份表那五年的合计7,755 → 6,605 → 7,153 → 9,201 → 8,111。它自己就在上下摆动所以「某年涨了多少」这种说法离开具体年份的绝对值是没有意义的。二、跨表对账2,168 对 8,111先看最刺眼的那个差# 两份都在讲「外观设计申请数」的表对一下 2025 年importcsv,io,pathlib RAWpathlib.Path(原始返回/ipd)defrows(name,rnd0):text(RAW/f{name}_r{rnd}.csv).read_bytes().decode(utf-8-sig)return[rforrincsv.reader(io.StringIO(text))ifrandany(x.strip()forxinr)]defnum(v):v(vor).strip()returnint(v)ifv.isdigit()else0Arows(origin_class)# 长表国家 × 年份 × 32 个类别Brows(country)# 宽表国家 × 五年a_appssum(num(r[2])forrinA[1:]ifr[1]2025)a_designssum(num(r[3])forrinA[1:]ifr[1]2025)b_totalsum(num(r[i])forrinB[1:]fori,yinenumerate(B[0][1:],start1)ify2025)print(a_apps,a_designs,b_total,round(b_total/a_apps,2))# 2168 4038 8111 3.742,168、4,038、8,111——三个数都在描述同一年的同一件事最大值是最小值的 3.74 倍绝对值差 5,943。我没有找到任何一处说明解释这个差所以我不打算猜哪个是对的。这里真正有价值的是那个动作本身跨表对账。很多时候你手上的「权威数字」是从某个表随手取的而同一个发布者的另一份表里躺着另一个数只有把两份摆在一起你才会发现「这个指标不是唯一的」。引用之前至少要确认三件事统计对象申请 / 设计 / 类别、覆盖范围204 个地区 vs 52 个地区、时间语义年度还是截至某日。三、表内也有三个量纲申请数 ≠ 设计数 ≠ 类别合计再往第一份表里面看它自己就提供了三个总量rows25[rforrinA[1:]ifr[1]2025]appssum(num(r[2])forrinrows25)# 申请数designssum(num(r[3])forrinrows25)# 申请所含设计数classessum(sum(num(x)forxinr[4:36])forrinrows25)# 32 个类别分项之和print(apps,designs,classes,round(designs/apps,2),classesdesigns)# 2168 4038 4038 1.86 Truezerosum(1forrinrows25ifnotany(num(x)forxinr[2:]))print(整行全 0 的国家/地区:,zero,/,len(rows25))# 整行全 0 的国家/地区: 170 / 204三个结论洛迦诺类别分项之和4,038正好等于「设计数」4,038差 0——这是一条能自证的恒等式说明这份表里「一个设计对应一个类别」。拿到新数据时先找这种等式跑一遍比读文档快设计数是申请数的 1.86 倍——一份外观申请可以装多个设计。把「设计数」当「申请数」报出去会凭空多出 86%204 个国家/地区里 170 个整行是 083.3%只有 34 行有数。所以按「国家」做排序或算平均时分母到底是 204 还是 34会给出完全不同的结论。四、列名和行标签里塞了别的东西第三份表有效注册/批予数只有 5 行但它的标签很野Crows(inforce)labels[r[0]forrinC[1:]]print(len(C[0][0]),max(len(x)forxinlabels))print([x[:38]forxinlabelsifNoteinx])print([repr(x)forxinlabelsifx!x.strip()])print(C[0][1:])# 29 116# [Standard Patents (O) (Note: The Patents Registry started...]# [Standard Patents (R) ]# [as at 31.12.2022, as at 31.12.2023, as at 31.12.2024,# as at 31.12.2025, as at 31.8.2026]三件事行标签里嵌了整段脚注Standard Patents (O) (Note: The Patents Registry started to receive standard patent (O) applications on 19.12.2019.)——116 个字符其中只有前 21 个是真正的名称。拿它当字典键、当数据库字段、当图表图例都会变成一场灾难行标签带尾部空格Standard Patents (R) strip 之前和Standard Patents (R)是两个不同的键列名就是数据as at 31.12.2022一直到as at 31.8.2026五个时点。这不是五个「年份」是五个快照日期最后一个是 8 月底不是年末——所以它跟前面四个年末的存量数字不完全可比。顺带说第一份表它的第一列列名有182 个字符整段关于 WIPO 2025 问卷的说明都塞在列名里。这不算错但影响很实际——任何按「列名是否等于预期值」做的校验都会失败任何把列名直接当数据库字段名或图例的做法都会炸。正确姿势是给列做一层显式映射位置 → 内部名不要让列名参与业务逻辑。五、时点存量和年度流量不能放在一张图上第三份表给的是存量截至某日有效的注册数前两份给的是流量某年的申请数。这两类数字最常见的误用是放在一起做「趋势图」把 2021–2025 的申请数和截至各年的有效量画在同一条轴上看起来像同一条曲线实际一个是「今年新增多少」一个是「账上还剩多少」。看一眼就能发现区别有效外观设计从 40,448 涨到 41,830五年涨 3.4%而年度申请量在 6,605 到 9,201 之间来回摆。存量平滑、流量波动——把它们混在一起你既看不出波动也会低估存量。六、可以直接抄的做法defload_ipd(path:str):读知识产权署统计宽表转长表 标签清洗 口径登记。out[]withopen(path,encodingutf-8-sig)asf:rows[rforrincsv.reader(f)ifrandany(x.strip()forxinr)]headrows[0]forrinrows[1:]:labelr[0]# 行标签去掉脚注括号、去掉尾部空格labelre.split(r\(Note,label)[0].strip()forcol,valinzip(head[1:],r[1:]):vnum(val)ifvisNone:continueout.append({label:label,period:col.strip(),value:v,kind:存量ifcol.strip().startswith(as at)else流量})returnout四个要点收尾跨表对账要在取数当天就做同一个指标有多份表时把它们的数字摆在一起再决定用哪个表内先找恒等式再算比率本文的「类别合计 设计数」差 0 就是一条标签先清洗再当键去脚注、去尾部空格分清存量与流量别把两类数字画在同一条轴上。今天 6 次请求三份表各两轮全部真实抓取原始文件已落盘脚本可以整篇复跑。参考链接https://www.ipd.gov.hk/datagovhk/ipstatistics/en/Statistics-of-design-applications-by-origin-class.csvhttps://www.ipd.gov.hk/datagovhk/ipstatistics/en/No_of_registrations_grants_in_force_in_hong_kong.csvhttps://data.gov.hk/en-data/api/3/action/package_show?idhk-ipd-ipstat-statistics-design-applications-by-origin-class原创声明本文所有数据于 2026 年 9 月 27 日实测抓取自中国香港知识产权署公开统计文件与 data.gov.hk抓取与校验脚本随文附上欢迎复现。文中 2,168 / 4,038 / 8,111 三个数字分别来自两份不同的官方统计文件其口径差异未见官方说明本文只呈现差异与核对方法不推断哪一个为准引用前请自行向发布方确认统计对象与覆盖范围。如果这篇帮你避开了一次「数字取错表」的事故点个收藏下一篇继续拆官方统计的坑。