☰
2024年全国医院数据清洗实战:从5万条名单到区域医疗资源评估
2026/10/14 4:36:51 网站建设 项目流程

做数据项目这些年,有一类数据始终绕不开,就是公共服务设施类数据。这次项目处理的是2024年全国省市县医院名单数据,总共5万条记录,核心字段包括医院等级、医院类型、床位数、年门诊量和医护人数。说是名单,实际用起来是一份标准的机构等级与能力画像数据库,既能支撑单点分析,比如评估某家医院的资源配套情况;也能直接做区域比较,判断不同省、市、县医疗服务的供给结构。这篇内容把整个处理流程和应用思路完整拆一遍,从数据清洗到业务分析,适合正在接触公共数据、也适合做区域经济分析和医疗投资研究的朋友参考。

这个项目真正有价值的不是那个“5万条”的数字,而是字段之间的关系。医院等级代表服务质量,医院类型代表学科方向,床位数和医护人数代表服务容量,年门诊量则反映真实的服务负荷。四个维度组合起来,能比大多数工商注册数据更准确地刻画一个地区的医疗公共服务水平。下面从数据整体设计、字段处理、实操分析到常见问题,按我的实际处理顺序来讲。

1. 这个数据项目在解决什么问题

1.1 一份医院数据库能支撑哪些应用方向

刚拿到这份数据的时候,我对它的定位是“宏观社会经济与公共服务数据库”里的一个子集。这个定位很关键,决定了我后续的分析粒度。如果只把它当成一份名单来用,那就是查查医院名字、看看地址,价值很有限;但把它放进宏观公共服务评估的框架里,能做的事情就完全不一样了。

首先是区域医疗资源配置分析。通过按省、市、县三个层级聚合床位数和医护人数,可以快速算出人均医疗资源指标。比如某市有60万常住人口,辖区所有医院建制的床位数合计2000张,人均床位指标就是3.3张/千人。再对比全国平均水平和同省其他城市,这个市医疗资源是相对充足还是紧缺,基本一眼可见。这个指标在宏观社会经济数据库的应用层面上,直接对应公共服务均等化、基础设施供给这些研究题目。

其次是医院运营与投资评估。床位数、年门诊量、医护人数这三个字段组合起来,可以推算医院的床位使用率和单位医生负担的门诊量。一家医院如果床位数2000张、年门诊量400万人次,平均每张床位一年承担2000人次门诊,对应的门诊服务能力明显偏强,反之则可能存在门诊量虚高或者统计口径差异。这类判断在并购评估、改扩建项目可行性分析中都用得上。

再次是公共服务设施的可靠性评估。医疗资源通常被当作区域社会经济运行的基础保障之一。制造业园区选址、大型社区规划、产业新城配套设计,都会先拉一份周边医院清单,看等级和床位数能不能满足人群需求。5万条完整数据覆盖了全国省市县,不用再花时间从各渠道零散收集,整个前期调研周期能缩短一半以上。

1.2 数据规模和字段结构决定了分析上限

5万条记录是什么概念?大概相当于全国各级各类医院建制的总量级规模,覆盖了从城市三甲医院到乡镇一级卫生服务机构。我实际整理后,数据行数与标题描述一致,包含县级及以上医院名单,也包含一部分基层医疗机构。这个颗粒度对省级、市级甚至县级分析都够用,唯一要考虑的是部分数据时效性,后面会专门讲。

字段方面,医院等级、医院类型、床位数、年门诊量、医护人数这五个是核心。医院等级最常见的是三级甲等、三级乙等、二级甲等、二级乙等,还包含一级和未定级的机构。医院类型则分为综合医院、中医医院、中西医结合医院、专科医院、妇幼保健院、护理院等,专科医院还能细分到口腔、眼科、骨科、康复、传染病等方向。床位数和医护人数代表规模,年门诊量代表实际业务量。五个字段交叉起来,能给每家医院画出一张比较完整的画像。

这份数据在数据库设计上有一点值得借鉴:它没有停留在“有没有医院”的布尔判断,而是进一步刻画了“医院强不强、忙不忙、床位够不够”。这种多维属性型数据结构,才是宏观社会经济数据库真正能支撑分析的关键。单一的名单查询,和深入的规模异质性分析,结论的参考价值差别非常大。

2. 医院数据核心字段的处理思路

2.1 医院等级与类型字段的标准化

医院等级字段的原始文本通常长这样:“三级甲等”“三级乙等”“二级甲等”“二级未定等”“未评级”。处理的时候不能只删空格,还要做等级分层编码。我习惯先把字段拆成两个维度:等级档位和甲等标志。等级档位从一级到三级,甲等标志单独用0/1表示。这样既保留了“二级甲等”这类细分信息,也能支持只看“三级及以上医院”的筛选需求。

医院类型字段的坑更多。原始数据里常见的问题是“综合医院”“综合”“综合类医院”混用,还有“中医医院”“中医院”混用。我用的是两步策略:第一步建立同义词映射表,把常见变体归一;第二步按业务需求打标签。比如综合医院和中医医院归到“综合医疗类”,妇幼保健院、儿童医院归到“妇儿类”,各类专科医院按专科方向归到对应类别。这里别直接按名称关键字一刀切,因为“人民医院”不一定是“综合医院”,有的地方会把“人民医院”做成专科医院,必须结合类型字段和实际科室设置去判断。

标准化过程我在Python里用字典做映射,再加一层模糊匹配兜底。实际清洗下来,类型字段的原始取值能收敛掉三分之一左右的冗余变体,从几十种集中到十几种有效类别。等级字段相对规范,但要特别注意“未定级”和“一级”的区别,前者说明评审状态未定,后者是明确的一级等级,在统计区域资源的时候建议分开处理,否则容易高估基层医疗供给。

2.2 床位数、门诊量、医护人数的口径认定

这三个数值字段比前面两个名字字段更复杂,核心原因是统计口径不一致。

床位数要区分“编制床位”和“开放床位”。编制床位数是政府批复的规划数,开放床位是实际投用的数。同一个数据源里可能混用,直接求和会影响分析。医院等级越高,两者差距越小;基层医院可能编制床位50张,实际只启用30张。如果你做的是资源潜力评估,用编制床位;如果做的是服务能力负荷分析,应该用开放床位。我在这份数据里遇到的情况是,绝大多数记录直接给了一个床位数,没有标注口径,这种时候只能按“开放床位”来理解,并在分析报告中注明假设。

年门诊量的口径差异更明显。有的机构上报的是“门急诊总量”,包含急诊与健康体检人次;有的只是“门诊人次”,不含急诊。差异比例通常会有10%到20%。对于5万条数据的全量分析,这个口径差异没法逐条核实,我的处理方式是保留原值,不做跨机构横向对比,只做区域总量口径下的分析。如果只比较两三家医院,就必须找原始统计和公开报告做交叉验证。

医护人数也一样。有的数据只统计执业医师,有的统计执业(助理)医师,有的把护士和医技人员都算进去。我在数据库里把“医护人数”理解成一个复合指标,分析时尽量同时关注医师数和护师数,而不是只看一个总和。如果表中只有一个总数字,我会结合床位数和门诊量做合理性校验,偏差超过合理范围就标记成异常记录,不直接进入后续计算。

2.3 缺失值与异常值的处理策略

拿到原始数据之后,第一轮质检就会发现问题:床位数存在0值,门诊量有缺失,医护人数部分记录是空值。我处理缺失值的原则是“不轻易填数,但要让数据进得了模型”。具体做法是先分字段统计缺失率,再决定处理方案。

床位数缺失或0值的记录,如果医院等级属于三级或二级,基本上属于录入问题,我用同类医院的中位数做插补,并在数据表里增加一个is_imputed标志。年门诊量缺失的情况更普遍,基层医院尤其多,这一块我倾向于根据床位数和医护人数做回归预估,但预估值只用于区域汇总,不用于单院评价。医护人数缺失则优先从医院官网、年度统计报告等公开信息回补,回补不了的就留空。

异常值方面,重点盯门诊量。有些医院年门诊量填到几千万人次,单日十几万,明显超出一家医院的接诊能力。遇到这种情况我会先看床位数,用“床位数乘以365再乘以单床日均接诊能力”的粗估区间去筛选。通常单张床位日均门诊量在1到3人次之间波动,超过这个范围就需要人工复核,或者打上数据可信度低的标签。这种标签机制让后续的分析不至于被个别脏数据带偏。

3. 实操过程:用医院数据做一次区域医疗资源分析

3.1 从业务目标推导分析指标

这个环节我建议先别碰代码,先把业务目标写清楚。比如领导或者客户问“某省医疗资源配置是否合理”,这个目标至少能拆出三个可计算指标:每千人口床位数、每千人口医师数、三级医院县域覆盖率。

每千人口床位数等于区域床位总数除以区域常住人口再乘以1000。这个指标直观反映住院服务容量。

每千人口医师数等于区域执业医师总数除以区域常住人口再乘以1000,反映诊疗人力供给。

三级医院县域覆盖率,则是看一个县内有没有三级医院,有就记为1,没有就记0,覆盖比例高说明优质医疗资源下沉得好。

这三个指标分别对应资源配置、人力供给、优质资源可达性。我在设计指标的时候有一个口诀:不是先想有哪些数据,而是先想客户要回答什么问题。数据是弹药,问题才是靶子。

3.2 SQL聚合与Python计算的实现细节

我用的是标准数据仓库流程。先把5万条医院数据导入数据表,字段命名统一为hospital_id、province、city、county、level、type、beds、outpatient_visits、doctors_nurses。然后写一段按地区维度聚合的SQL:

SELECT province, city, COUNT(*) AS hospital_cnt, SUM(beds) AS total_beds, SUM(doctors_nurses) AS total_medical_staff, SUM(outpatient_visits) AS total_outpatient_visits FROM hospital_list_2024 WHERE beds > 0 GROUP BY province, city ORDER BY province, city;

这里有个细节:WHERE beds > 0 这个条件会把床位数缺失的记录排除掉。如果缺失率不高,可以接受;如果缺失率高,就换成保留0值但标记状态,避免区域汇总值被低估。我实际处理时更喜欢保留0值再单独统计缺失记录数,这样拿到结果后能清楚知道有多少家医院没有床位数口径,给结论留一点余地。

Python端我的处理方式是把区域聚合结果接上来,再算人均指标。常住人口数据从统计年鉴匹配,按照省份和城市两个层级进行关联。关联时注意区划代码的一致性,有些城市做了区划调整,名称对不上,需要用统一的行政区划编码中转。

import pandas as pd agg = pd.read_sql(query, engine) population = pd.read_csv("population_2024.csv", dtype={"city_code": str}) merged = agg.merge(population, on="city_code", how="left") merged["beds_per_1000"] = merged["total_beds"] / merged["population"] * 1000 merged["doctors_per_1000"] = merged["total_medical_staff"] / merged["population"] * 1000

跑完聚合之后,先不要急着做图。先看几个总量数字是不是符合直观预期。比如某省医院总数5000家左右、床位总数30万张、医护总数40万人,这个量级大体匹配公开统计口径,说明数据基本可信。总量验证通过,再做排名和分布分析。

3.3 数据切片与结论输出

分析结果出来之后,我发现资源分布的不均衡性非常明显。省会城市和计划单列市的每千人口床位数能跑到5以上,而部分地级市的指数只有2出头,县域层面更极端,有三级医院的县和没有三级医院的县,中间隔着一整个服务半径的问题。

我用一个简单的阈值表做结论输出:

指标判断标准本省表现
每千人口床位数低于2为紧缺大部分城市在2到4之间
每千人口医师数低于1.2为紧缺省会明显高于地市
三级医院县域覆盖率低于50%为不足中西部县域明显偏低

这个结论不能直接写成“资源不均衡”,要落到具体建议层面。比如某地市每千人口床位数偏低,可能的原因不是医院数量少,而是床位数分散在多个小型医院,没有形成规模效应。这时候建议的方向不是新建医院,而是资源整合和医联体建设。数据到这一步才算真正转化成了业务语言。

3.4 数据可视化呈现技巧

可视化的核心原则是“一张图回答一个问题”。医院分布密度用地图散点图,床位规模用气泡大小表示;省市对比用横向条形图,按指标排序;趋势类分析用折线图。

我实际用交互式工具做了一张全国医院分布图,气泡的颜色代表医院等级,大小代表床位数。投到屏幕上的第一视觉冲击力很强,但这个图的说明文字一定要写清楚口径,比如“床位数据含未定级机构,不代表实际开放数量”。加这行字没多长,却能避免业务方拿着图去做错误决策。

还有一个细节:做地市级对比时,注意把“医院总数”和“高水平医院数量”分开展示。有的城市医院数量很多,但三级医院只占5%,这样的结构性问题在总量图里看不出来,拆开才能暴露。

4. 常见问题与排查技巧实录

4.1 等级字段的脏数据陷阱

等级字段看着简单,实际处理时最容易翻车。原始数据里存在“三级甲”和“三甲”混写的情况,还有“三级合格”和“二级乙”这类不规范表述。我的处理顺序是先对原始文本做规范化,再做枚举映射。

重点提示:不要在规范化之前只用关键词搜索。比如搜“三甲”,会把“三级甲等”搜出来,但也会把“三级甲等妇幼保健院”这种机构类型混进来。关键词匹配必须同时约束等级和类型两个字段才能得到准确结果。我踩过一次这个坑,当时统计某区域三甲医院数量,把妇幼保健院和儿童医院都漏掉了,后来重新按类型字段加规则才算准。

4.2 门诊量与床位数的缺失处理

门诊量缺失是这种公开数据的老问题。我统计过,基层医院的门诊量缺失率能达到三成以上。如果直接用非缺失值求平均,结果会明显偏向较规范的医院,造成区域门诊量虚高。我的做法是按医院等级分层的均值插补,再在模型里增加权重调整,用缺失率做敏感性分析。

床位数为0的记录则要小心,0值可能是真实的“尚未开放”,也可能是漏填。判断方法很简单:看这家医院的医护人数,如果医护人数有几十人,床位数不可能是0,这种就属于录入错误。我把这类记录单独列出来,标记为“待回补”,不会直接删掉,因为删除会损失医院名单完整性。宁可保留带标签的数据,也不要做不可追溯的清理。

4.3 医院更名与合并的连续性处理

做数据的时候要留意同一家医院可能存在多个名称。比如“市第二医院”后来改成“市肿瘤医院”,“县人民医院”与“中医院”合并成“县医疗集团”。如果不同批次的数据源混在一起,同一个实体很可能被算成多家医院,区域医院数量和床位数都会虚高。

我的处理方式是给每一家医院分配一个稳定的内部编号,再建立一个历史名称映射表。后续拿到新数据源时先按医院名称匹配,匹配不上的再用地址、电话、经纬度坐标做第二层相似度匹配。名称匹配这里不能用简单的等值连接,常见做法是结合编辑距离算法和分词,但要注意误匹配率,别把同城同名的情况当成同一家医院。

4.4 数据时效性与使用边界

5万条记录听着多,但要说清这份数据的时效边界。医院等级是动态的,每年都有新的医院通过评审,也有医院被整改降级;门诊量数据滞后更明显,公开渠道能拿到的完整统计往往要等到次年。所以在使用这份2024年数据做决策时,我习惯在报告里加一句“数据为年度截点快照”。

做趋势分析时要格外小心。如果要把2024年数据和2020年数据做对比,得先确认这两年之间有没有行政区划调整。某地级市2020年下辖5个县,2024年变成了6个县,直接对比会得出医疗资源大幅增长的错误结论。我处理这类问题的方法是建立区划变迁映射表,把历史数据统一到最新区划口径下再比较。

最后说一点个人体会。医院数据的最大价值不在名单本身,而在它能作为其他数据的连接点。把医院数据跟人口、交通、经济数据进行融合分析的时候,很多表面上看不到的问题才会浮现出来。比如某区域产业园区周边医院数量不少,但细看床位和门诊量,发现负荷已经接近上限,这种信息对产业规划的价值远大于单纯名单查询。做公共服务数据,手里有名单只是开始,真正有经验的从业者都在做交叉融合与口径沉淀。这份5万条医院数据后续还可以扩展的方向很多:接住院量数据做床位周转分析、按专科拆分做学科评估、连上公开的患者满意度数据做服务质量评分。数据会过时,但一套科学的数据处理流程和口径沉淀,是可以反复复用、越用越顺手的资产。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询