1. 项目简介

        随着医院信息系统(HIS)在全国各大医院的推广和应用,会有大量和病人相关的临床数据每天在医院中记录,而这些真实的数据随着规模积累的增加,存在着对病人和医生来说潜在、有价值的信息作用也会越来越大。本项目利用数据挖掘分析某医院近几年的就诊数据,分析疾病病人年龄的平均数、众数,已婚/未婚占比,不同地区患病人数,不同职业患病人数,治愈疾病花费的钱的平均数等,根据分析得到的数据对当前疾病进行分类等功能。

       此系统已进行迭代升级,升级时间(2023-10-24)


【更新版】疾病数据分析与预测系统


2. 功能组成

        基于数据挖掘的疾病数据可视化分析与预测系统的主要功能包括:

1 系统首页与注册登录

2 历史就诊信息查询

3 就诊数据统计分析

3.1 患者婚姻状况与职业分布情况分析

3.2 患者住院天数分布情况分析

3.3 患者年龄分布情况分析

3.4 患者所在地区的分布情况分析

3.5 每日住院人数变化情况

3.6 每日患者缴费总金额变化情况

4 疾病未来发展趋势预测

4.1 年龄趋势分析

4.2 已婚率趋势分析

4.3 疾病住院天数趋势分析

3. 基于数据挖掘的疾病数据可视化分析与预测系统

3.1 系统首页与注册登录

常用医学数据挖掘方法 医疗数据挖掘与分析_数据分析

3.2 历史就诊信息查询

常用医学数据挖掘方法 医疗数据挖掘与分析_python_02

3.3 就诊数据统计分析

        对不同疾病不同年份和季度的统计分析,挖掘疾病就诊的规律信息:

def year_quarter_analysis(year, quarter, disease):
    """季度分析"""
    year = int(year)
    quarter = int(quarter)

    df1 = df[(df['疾病名称'] == disease) & (df['年'] == year) & (df['季度'] == quarter)]

    hunying_count = df1['婚姻状态'].value_counts().to_dict()
    zhiye_count = df1['职业'].value_counts().to_dict()
    days_count = df1['住院天数'].value_counts().to_dict()
    age_count = df1['年龄'].value_counts().to_dict()

    date_count = df1['日期_str'].value_counts().to_dict()
    date_count = sorted(date_count.items(), key=lambda x: x[0])

    day_jinge = df1[['日期_str', '总金额']].groupby('日期_str').sum().reset_index()
    df1['地区'] = df1['地址'].map(lambda x: x[:2])
    diqu_count = df1['地区'].value_counts()[:20].to_dict()
    
    ......

3.3.1 患者婚姻状况与职业分布情况分析

常用医学数据挖掘方法 医疗数据挖掘与分析_数据挖掘_03

3.3.2 患者住院天数分布情况分析

常用医学数据挖掘方法 医疗数据挖掘与分析_数据可视化_04

3.3.3 患者年龄分布情况分析

常用医学数据挖掘方法 医疗数据挖掘与分析_数据可视化_05

3.3.4 患者所在地区的分布情况分析

常用医学数据挖掘方法 医疗数据挖掘与分析_数据挖掘_06

3.3.5 每日住院人数变化情况

 3.3.6 每日患者缴费总金额变化情况

常用医学数据挖掘方法 医疗数据挖掘与分析_数据分析_07

3.4 疾病未来发展趋势预测

        基于ARIMA 时序模型,实现对不同疾病的年龄趋势、已婚率趋势和住院天数的趋势预测:

def future_predict(disease):
    ......
    df1 = df[df['疾病名称'] == disease]
    # 平均年龄
    jidu_age = df1.groupby(by='年季度').mean()['年龄'].reset_index()
    # 平均住院天数
    jidu_zhuyuan = df1.groupby(by='年季度').mean()['住院天数'].reset_index()
    # 已婚未婚的占比
    nianjidu_group = df1.groupby(by='年季度')

    yihun_ratios = []
    for nianjidu, tmp_df in nianjidu_group:
        hun_dict = tmp_df['婚姻状态'].value_counts().to_dict()
        hun_count = hun_dict['已婚'] if '已婚' in hun_dict else 0
        yihun_ratio = hun_count / sum(hun_dict.values())
        yihun_ratios.append(yihun_ratio)

    # 未来趋势预测
    predict_age = arima_model_train_eval(jidu_age['年龄'].values.tolist())
    predict_day = arima_model_train_eval(jidu_zhuyuan['住院天数'].values.tolist())

    predict_yihun_ratio = arima_model_train_eval(yihun_ratios)

    jidu = jidu_age['年季度'].values.tolist()
    jidu.append('2022年2季度')

    age = jidu_age['年龄'].values.tolist()
    age.append(predict_age)

    day = jidu_zhuyuan['住院天数'].values.tolist()
    day.append(predict_day)

    yihun_ratios.append(predict_yihun_ratio)

    ......

3.4.1 年龄、已婚率、住院天数变化趋势预测分析

        分析发现,部分疾病呈现发病年轻化趋势,值得引起重视!随着医疗水平的提高,大部分疾病住院天数呈现下降趋势:

常用医学数据挖掘方法 医疗数据挖掘与分析_常用医学数据挖掘方法_08

4. 总结

        本项目利用数据挖掘分析某医院近几年的就诊数据,分析疾病病人年龄的平均数、众数,已婚/未婚占比,不同地区患病人数,不同职业患病人数,治愈疾病花费的钱的平均数等,根据分析得到的数据对当前疾病进行分类等功能。