当前位置: 首页 > news >正文

基于Python的医疗质量管理指标智能提取系统【2025代码版】

在这里插入图片描述

系统概述

本系统旨在帮助医疗质量管理部从医院信息系统(HIS)中智能提取《2025年国家医疗质量安全改进目标》中的关键指标数据。系统采用Python编程语言,结合现代数据处理库,实现高效、准确的数据提取与分析功能。

import json
import logging
import logging.handlers
import pandas as pd
import pyodbc
from dataclasses import dataclass
from typing import Dict# 日志配置
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
file_handler = logging.handlers.RotatingFileHandler('quality_management.log', maxBytes=5*1024*1024, backupCount=3)
file_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
logger.addHandler(file_handler)@dataclass
class QualityGoal:key: strname: strdescription: strsql_query: strdef load_config(path: str) -> dict:with open(path, "r", encoding="utf-8") as f:return json.load(f)def load_quality_goals(goals_dict: dict) -> Dict[str, QualityGoal]:return {k: QualityGoal(k, v['name'], v['description'], v['sql_query']) for k, v in goals_dict.items()}class Database:def __init__(self, config: dict):self.config = configself.conn = Nonedef connect(self):try:conn_str = (f"DRIVER={{{self.config['driver']}}};SERVER={self.config['server']};DATABASE={self.config['database']};Trusted_Connection={self.config.get('trusted_connection', 'yes')};")if 'username' in self.config and 'password' in self.config:conn_str += f"UID={self.config['username']};PWD={self.config['password']};"self.conn = pyodbc.connect(conn_str)logger.info("数据库连接成功")except Exception as e:logger.error(f"数据库连接失败: {e}")raisedef query(self, sql: str) -> pd.DataFrame:if self.conn is None:self.connect()try:df = pd.read_sql(sql, self.conn)logger.info(f"SQL执行成功,返回 {len(df)} 条记录")return dfexcept Exception as e:logger.error(f"SQL执行失败: {e}")raisedef close(self):if self.conn:self.conn.close()logger.info("数据库连接关闭")def fetch_goal_data(db: Database, goal_key: str, goal_dict: Dict[str, QualityGoal]) -> pd.DataFrame:goal = goal_dict.get(goal_key)if not goal:logger.error(f"目标 {goal_key} 不存在")return pd.DataFrame()try:return db.query(goal.sql_query)except Exception as e:logger.error(f"获取目标 {goal_key} 数据失败: {e}")return pd.DataFrame()# 示例加载和使用
if __name__ == "__main__":DB_CONFIG = load_config("db_config.json")NATIONAL_QUALITY_GOALS_RAW = load_config("national_quality_goals.json")national_goals = load_quality_goals(NATIONAL_QUALITY_GOALS_RAW)db = Database(DB_CONFIG)df = fetch_goal_data(db, 'acute_stroke', national_goals)print(df.head())db.close()

在这里插入图片描述

系统核心功能模块

1. 数据提取模块

import logging
from dataclasses import dataclass
from typing import Dict
from abc import ABC, abstractmethod
from datetime import datetime
import pandas as pd
import pyodbc# 配置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',handlers=[logging.FileHandler('quality_management.log'),logging.StreamHandler()]
)
logger = logging.getLogger(__name__)class QualityDataExtractor(ABC):"""医疗质量数据提取器基类"""def __init__(self, db_config: Dict, goal_id: str, goal_name: str, sql_query: str):self.db_config = db_configself.goal_id = goal_idself.goal_name = goal_nameself.sql_query = sql_query@abstractmethoddef extract_data(self) -> pd.DataFrame:"""从HIS系统提取医疗质量数据"""pass@abstractmethoddef calculate_metrics(self, data: pd.DataFrame) -> Dict:"""计算医疗质量指标"""passclass SQLServerQualityDataExtractor(QualityDataExtractor):"""SQL Server数据库医疗质量数据提取器"""def __init__(self, db_config: Dict, goal_id: str, goal_name: str, sql_query: str):super().__init__(db_config, goal_id, goal_name, sql_query)self.conn = Nonedef _connect(self) -> bool:"""建立数据库连接"""try:conn_str = (f"DRIVER={{{self.db_config['driver']}}};"f"SERVER={self.db_config['server']};"f"DATABASE={self.db_config['database']};"f"UID={self.db_config['username']};"f"PWD={self.db_config['password']};"f"Trusted_Connection={self.db_config.get('trusted_connection', 'yes')}")self.conn = pyodbc.connect(conn_str)logger.info(f"成功连接到SQL Server数据库: {self.db_config['server']}")return Trueexcept Exception as e:logger.error(f"连接数据库失败: {e}")return Falsedef extract_data(self) -> pd.DataFrame:"""从HIS系统提取医疗质量数据"""if not self._connect():raise ConnectionError("无法连接到数据库")try:start_time = datetime.now()logger.info(f"开始提取数据: {self.goal_name}")df = pd.read_sql_query(self.sql_query, self.conn)end_time = datetime.now()elapsed = (end_time - start_time).total_seconds()logger.info(f"成功提取数据: {len(df)}条记录,耗时{elapsed:.2f}秒")return dfexcept Exception as e:logger.error(f"提取数据失败: {e}")raisefinally:if self.conn is not None:self.conn.close()def calculate_metrics(self, data: pd.DataFrame) -> Dict:if data.empty:return {"error": "没有可用的数据"}calculators = {"acute_stroke": self._calc_acute_stroke,"cancer_tnm": self._calc_cancer_tnm,"vte_prevention": self._calc_vte_prevention,"septic_shock": self._calc_septic_shock,"iv_therapy": self._calc_iv_therapy,"adverse_events": self._calc_adverse_events,"surgery_discussion": self._calc_surgery_discussion,"key_records": self._calc_key_records,"reoperation_rate": self._calc_reoperation_rate,"test_recognition": self._calc_test_recognition}func = calculators.get(self.goal_id)if func is None:return {"error": "未知的质量目标"}return func(data)def _calc_acute_stroke(self, data: pd.DataFrame) -> Dict:total_patients = len(data)treated_patients = data['treatment_type'].str.contains('再灌注', na=False).sum

相关文章:

  • 从入门到精通【MySQL】 JDBC
  • 05-DevOps-Jenkins自动拉取构建代码2
  • 「数据可视化 D3系列」入门第七章:坐标轴的使用
  • 数据结构——八大排序算法
  • 第十节:性能优化-如何排查组件不必要的重复渲染?
  • PH热榜 | 2025-04-17
  • requestAnimationFrame 深度理解
  • 第二十三天 - 性能优化技巧 - 内存分析与调优 - 练习:资源泄漏检测工具
  • GPT对话UI--通义千问API
  • 【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战!| 附源码
  • 基于labview模拟出租车计价器的设计
  • 解锁动态规划的奥秘:从零到精通的创新思维解析(9)
  • React 设计艺术:如何精确拆分组件接口,实现接口隔离原则
  • 逻辑回归 (Logistic Regression)
  • C++学习:六个月从基础到就业——面向对象编程:重载运算符(下)
  • GPU 招投标全流程分析与总结
  • UE5 相机裁剪面
  • qt与html通信
  • 10.(vue3.x+vite)div实现tooltip功能(css实现)
  • 从0到1:让AI赋能计算机的全流程实践指南
  • 北师大发布《短视频家长指南》,回应短视频时代家庭教育挑战
  • 受工友诱骗为获好处费代购免税品,海口海关:两当事人被立案
  • 连续两个交易日涨停,华夏幸福:生产经营活动正常,不存在影响股价波动的重大事宜
  • 俄美元首通话超2小时,普京称愿与乌方共同起草和平备忘录
  • 优质文化资源下基层,上海各区优秀群文团队“文化走亲”
  • 俄乌刚谈完美国便筹划与俄乌领导人通话,目的几何?