2024年全国医院数据清洗实战:从5万条名单到区域医疗资源评估 做数据项目这些年有一类数据始终绕不开就是公共服务设施类数据。这次项目处理的是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。然后写一段按地区维度聚合的SQLSELECT 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, oncity_code, howleft) 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万条医院数据后续还可以扩展的方向很多接住院量数据做床位周转分析、按专科拆分做学科评估、连上公开的患者满意度数据做服务质量评分。数据会过时但一套科学的数据处理流程和口径沉淀是可以反复复用、越用越顺手的资产。