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

基于SPSS的医疗医保费用数据分析预测(C#)

目 录
1 绪 论 1
1.1课题的研究背景 1
1.2国内外概况 2
1.2.1 国外概况 3
1.2.2 国内概况 3
1.3课题的研究意义 4
1.4 论文的主要内容与组织结构 4
1.4.1主要内容 4
1.4.2组织结构 5
2 相关理论 6
2.1数据仓库设计的理论基础 6
2.1.1数据仓库的基本概念 6
2.1.2 数据仓库的技术特点 6
2.1.3 建立数据仓库的步骤 7
2.1.4数据仓库与传统数据库的区别 7
2.2数据挖掘的相关理论 8
2.2.1数据挖掘的基本概念 8
2.2.2数据挖掘常用的方法 8
2.2.3.数据挖掘与OLAP的比较 10
2.3联机分析处理的相关理论 10
2.3.1联机分析处理的基本概念 10
2.3.2联机分析处理的处理特点 10
2.3.3 联机分析处理的多维数据结构 11
2.3.4 联机分析处理的三种存储格式 11
2.4 本章小结 12
3 医保费用挖掘系统的分析及设计 13
3.1 需求分析 13
3.2分析对应的两种策略 13
3.3 系统的体系结构设计 14
3.4医院信息系统及数据库结构 14
3.4.1医院信息系统的定义 14
3.4.2医院信息系统的优点与不足 15
3.4.3医疗费用信息结构 15
3.4.4 数据库中医疗费用相关数据 15
3.4.5主题域的确定 16
3.5 本章小结 18
4 医保费用分析系统的实现 19
4.1 数据准备 19
4.1.1 数据集成 19
4.1.2 数据清洗 19
4.2季节模型 20
4.2.1时间序列 20
4.2.2 时间序列分解模型 20
4.3算法实现 21
4.3.1算法的思想 21
4.3.2算法的描述 21
4.4 SPSS软件的预测 23
4.4.1 数据的键入 24
4.4.2数据的计算处理 26
4.5 代码的实现 27
4.5.1代码的功能展示 27
4.5.2 模型展示 40
4.6功能评价 43
5 总结及展望 44
5.1总结 44
5.2 展望 44
参考文献 46
致 谢 47
3 医保费用挖掘系统的分析及设计
3.1 需求分析
陕西省某医院是陕西省人民政府举办的大型综合性三级甲等医院,也是西安交通大学医学院第三附属医院,陕西省临床医学研究院,国家药物临床试验机构,承担着全省的医疗、教学、科研、预防、保健、康复任务。自2008年起,平均每年的门诊量达到一百万人次以上,住院人次达到四万以上,其中医保的病人约占其中的5%,随着医保制度的完善以及居民医疗保险的逐步推广,以后医保病人就诊的数量将达到一个新的高峰。随着医疗保险覆盖范围的逐渐扩大,医保补偿性收入会在医院总收入中占据越来越大的比例,其地位也将会越来越重要,对此医院也需要调整管理思路,采取一定的措施来适应这种变化。
针对这种情况我们需要在医院信息系统(HIS)以及医疗保险信息系统的基础上利用数据挖掘技术建立一套医保费用分析系统,用来对医保病人的返还费用进行定额分科处理,并进行进一步分析预测,了解产生异常情况的原因,指导各项医疗行为规范。
医保费用分析系统的设计所要实现的功能有:
1.按照时间,科室,医生等维度对医保费用进行有效的分析。
2.通过前几年的数据,利用有效的算法来预测下一年的医保费用使用情况。
3.根据所预测出的数据,制定出一套合理的医保费用分配方案。
3.2分析对应的两种策略
对于采用数据挖掘技术的复杂分析来说,对应着两种不同的策略:一种是建立面向对象的挖掘;另一种是建立面向应用的挖掘。不同的策略意味着挖掘的步骤、方法都将不同,因此在系统分析与设计时首先就应确定采取的策略。
面向对象的挖掘中对象指的是具体的数据源,即挖掘针对的是数据而不是其它要素,无论需求如何,挖掘过程都直接提取数据源,并对数据源进行各种后续操作,直到模型建立时才把各项数据按照需求整合起来形成一个有机的整体,提供给用户分析。
面向应用的挖掘指的是根据具体的应用需求制定主题,再由主题来组织数据的集成、清洗、抽取,利用主题来实现同一类数据的整合,它在建立模型前就已经成为了互相关联的整体并存储于数据仓库中。
通常对于采用面向对象方式的挖掘来说,数据在建模前是按照实际数据源中表的结构以数据文件的形式存储的,这使得挖掘过程相对简单,步骤较少,绝大部分的工作都放在在建模过程中完成,但是这也使得建模时对数据处理的要求较高,因为要在建模的同时对异构数据进行处理,必定在数据的抽取、集成、清洗过程中要耗费大量的时间和精力,造成模型建立的效率低下。如果数据量不大或者模型维度较少结构简单,则代价尚可接受,否则就需要尽量提高硬件条件并花费大量的时间在建模的过程中。
对于采用面向应用方式的挖掘来说,通常需要在数据准备阶段就建立数据仓库,把建模所需的数据在经过清洗处理后放入数据仓库,做为建模的统一数据源。因此挖掘初期过程比较复杂,工作量较大。它的优点在于模型的构建速度较快,方便调试。
针对医院医保费用分析的具体情况,我们考虑虽然建立数据仓库一开始工程会非常浩大,需要将大量所感兴趣的数据导入到数据仓库内,而且还要对这些数据进行处理,消除噪声,但它无疑也有很多优势:一方面保证了来源于医院信息系统和医保信息系统的异构数据的完整性与一致性,提高了模型的构建效率;另一方面对于医院长远的挖掘需求来说这将是一个符合长远利益的选择,今后所需的挖掘数据如果已经存在于数据仓库则无需再次集成、清洗,可以直接在数据仓库中进行关联,能有效降低二次开发的成本和代价。综合各种因素考虑,我们选择了面向应用的挖掘方式来对医保费用进行分析。
3.3 系统的体系结构设计
医保费用分析系统采用面向应用的挖掘策略[[ ]],建立数据仓库作为统一的数据平台,完成所有源数据的抽取,清洗功能。所以我们设计了三层体系结构的数据挖掘系统。
1.数据层:将医院的业务数据库和医保返还数据进行处理,抽取,清洗,建立以医保费用分析为主题的多维数据仓库。
2.应用层:选择合适的挖掘算法对数据进行分析并建模。
3.显示层:模型的前端展示工具,为用户提供对感兴趣的查询分析等(本系统采用条形图进行展示)。
3.4医院信息系统及数据库结构
3.4.1医院信息系统的定义
医院信息系统(HIS),在国际学术界已被公认为新兴的医学信息学的重要分支[[ ]]。医院信息系统是指利用计算机软硬件技术,网络通讯技术等现代化手段,对医院及其所属各部门对人流,物流,财流进行综合管理。对在医疗活动各阶段中产生的数据进行采集,存贮,处理,提取,传输,汇总,加工生成各种信息,从而为医院的整体运行提供全面的,自动化的管理及各种服务的信息系统。医院信息系统是现代化医院建设中不可缺少的基础设施与支撑环境。
3.4.2医院信息系统的优点与不足
目前大多数医院信息系统的应用时面向联机事务处理(OLAP)。其主要作用是使大量的日常业务(如挂号,划价,收费,结算等等)电子化,来提高医院的工作效率及质量。HIS实时处理业务数据,管理层只有简单的汇总数据,产生报表等功能。HIS的建立只是使日常业务得到了电子化,网络化,但日益膨胀的HIS数据却得不到有效的利用,形成巨大的信息浪费。结果是,一方面HIS 的建立使医院的日常业务管理发生了巨大变革,信息流,资金流,物流的收集,存储,传递,共享,分析都实现了电子化,网络化,以前所未有的规模积累着海量信息;另一方面医院的管理者不能从中获取有利于决策的信息,并不能建立有效的指标体系和分析决策方法从而对医院的管理,经营做出有效的评价。本文转载自http://www.biyezuopin.vip/onews.asp?id=13359而数据仓库和数据挖掘技术是我们解决这些问题有力的辅助工具。
3.4.3医疗费用信息结构
医疗费用信息结构主要指来源于病人就医过程中所产生的费用数据,如住院,门诊收费,预交金管理,从收支经费至会计账务管理等。将病人分为门诊病人和住院病人两大类:
1.门诊病人的医疗费用产生流程:
挂号(挂号费用)–>诊断(检查费用)–>开医嘱(药品费用,治疗费用)
住院病人的医疗费用产生流程:
门诊诊断需要住院–>办理住院手续(预交住院金)–>住院期间(床位费,护理费,药品费,检查费,手术费,治疗费)–>出院(费用总计)
3.4.4 数据库中医疗费用相关数据
由于数据库中的数据早已在后台输入,所以这里只做简要的介绍。
该系统拥有很多不同的数据表,经过筛选,所需数据可以再医院信息系统的数据库以下表中得到:病人住院主记录,病人索引,诊断记录,病人身份字典,医生身份字典,科室字典,费用类别字典等等。
主题相关主要信息有:
1.病人信息—姓名,出生日期,性别,职业,户籍,医疗付款方式等。
2.门诊管理与诊断治疗信息—门诊挂号,检查与治疗信息,门诊诊断名称等。
3.住院管理与诊断治疗信息—入院次数,出入院日期,住院费用以及住院期间医疗活动涉及的医生,护士,药品和耗材等。
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
using SeasonsProdict.FileProcesses;
using SeasonsProdict.OutputAndViewes;
using SeasonsProdict.Settings;

namespace SeasonsProdict
{
    public partial class Main : Form
    {
        [DllImport("ToDll.dll",CharSet = CharSet.Ansi)]
        static extern int SeasonTimeProdict(float[] data, int NumOfData, int ProdictNum,float[] IndexOfSeasonData,float[] Tci,float[] Tout,float[] Ci,float[] C,float[] monthsdata);
        [DllImport("ToDll.dll", CharSet = CharSet.Ansi)]
        static extern void Set_LogMethodCanProdict_value(bool LogMethodCanProdictToggle);
        [DllImport("ToDll.dll", CharSet = CharSet.Ansi)]
        static extern void Set_CurveMethodCanProdict_value(bool CurveMethodCanProdictToggle);
        [DllImport("ToDll.dll", CharSet = CharSet.Ansi)]

        static extern void set_Circle_value(int Circlevalue);
        [DllImport("ToDll.dll", CharSet = CharSet.Ansi)]
        static extern void set_ExponentialPercentage_value(float ExponentialPercentagevalue);
        [DllImport("ToDll.dll", CharSet = CharSet.Ansi)]
        static extern void set_LogIndex_value(int LogIndexvalue);
        [DllImport("ToDll.dll", CharSet = CharSet.Ansi)]

        static extern void set_PreMoveSteps_value(int OnceMoveTimeValue, int TwiceMoveTimeValue);
        [DllImport("ToDll.dll", CharSet = CharSet.Ansi)]
        static extern void set_PostMoveSteps_value(int PostOnceMoveTimeValue, int PostTwiceMoveTimeValue);
        [DllImport("ToDll.dll", CharSet = CharSet.Ansi)]
        static extern void set_seasons_value(int seasonsValue);

        FileProcess file = new FileProcess();//打开文件
        SettingVariables setvars = new SettingVariables();
        ModifiedVariables outvars=new ModifiedVariables();//设置参量
        OutputAndView outs = new OutputAndView();//绘制图形

        Setting setvar;
        Distribute disview;
        KeShi keshiview;
        public bool isApplayTrue = false;
        public int numofdata = 0;

        public bool islogprodic = false;
        public bool iscurveprodic = false;
        //float WindowWidth;
        //float WindowHeight;

        public Main()
        {
            InitializeComponent();
        }

        private void OpenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (file.DataAcess()) {
                LogProdictToolStripMenuItem.Enabled = true;
                CurveProdictToolStripMenuItem.Enabled = true;
                prodictToolStripMenuItem.Enabled = true;
                outvars.data = file.data;
                outvars.NumOfData = file.NumOfData;
                numofdata = file.NumOfData;
                setvars.ProdictNum = file.NumOfData + 1;
                file.NumOfData = 0;
                
                String DataImportSatus = "数据导入成功,总共导入" + outvars.NumOfData + "条记录";
                toolStripStatusLabel1.Text = DataImportSatus;

                
            }
        }


        public void caculateAndpaint(){
            SeasonTimeProdict(outvars.data, outvars.NumOfData, setvars.ProdictNum, outvars.IndexOfSeasonData, outvars.Tci, outvars.Tout, outvars.Ci, outvars.C,outvars.monthsdata);
            for (int i = 0; i < outvars.NumOfData; i++)
            {
                outvars.IndexOfSeasonData[i] = outvars.IndexOfSeasonData[i % setvars.seasons];
            }
           outs.View(panel1, panel2, panel3, panel4, panel5, panel6, toolStripStatusLabel1, outvars, setvars);
        }
        public void Repaint() {
            this.setvars = setvar.setvars;
            Set_LogMethodCanProdict_value(islogprodic);
            Set_CurveMethodCanProdict_value(iscurveprodic);
            setCjjVars(setvars);
            int MaxLength = 1000;
            outvars.Tout = new float[MaxLength];
            caculateAndpaint();
        }
        private void WindowsReSize(object sender, EventArgs e)
        {  
            //panel1.Location = new Point(12, 37);
            //panel1.Size = new Size((int)this.Width - 2 * 12, (int)this.Height - 37-22*2);
            //Graphics g = panel1.CreateGraphics();
            //g.Clear(Color.White);
            outs.View(panel1, panel2, panel3, panel4, panel5, panel6, toolStripStatusLabel1, outvars, setvars);
        }
        private void setCjjVars(SettingVariables setvars)
        {
            set_PreMoveSteps_value(setvars.OnceMoveTime, setvars.TwiceMoveTime);
            set_Circle_value(setvars.Circle);
            set_ExponentialPercentage_value(setvars.ExponentialPercentage);
            set_LogIndex_value(setvars.LogIndex);
            set_PostMoveSteps_value(setvars.PostOnceMoveTime,setvars.PostTwiceMoveTime);
            set_seasons_value(setvars.seasons);

            
        }
        private void LogProdictToolStripMenuItem_Click(object sender, EventArgs e)
        {

            distributeToolStripMenuItem1.Enabled = true;
            /*
             *参量设置 
             */
            isApplayTrue = true;
            setCjjVars(setvars);
            /*
             *拟合方法选择
             */
            islogprodic = true;
            iscurveprodic = false;
            Set_LogMethodCanProdict_value(islogprodic);
            Set_CurveMethodCanProdict_value(iscurveprodic);
            /*
             *预测 
             */

            caculateAndpaint();
        }

        private void CurveProdictToolStripMenuItem_Click(object sender, EventArgs e)
        {
            distributeToolStripMenuItem1.Enabled = true;
            isApplayTrue = true;
            setCjjVars(setvars);
            int MaxLength = 1000;
            outvars.Tout = new float[MaxLength];
            islogprodic = false;
            iscurveprodic = true;
            Set_LogMethodCanProdict_value(islogprodic);
            Set_CurveMethodCanProdict_value(iscurveprodic);

            caculateAndpaint();
        }

        private void prodictToolStripMenuItem_Click(object sender, EventArgs e)
        {//参数设置
            setvar = new Setting(this);
            setvar.Owner = this;
            setvar.Show();
            this.IsAccessible = false;
            
            //this.Enabled = false;
        }
        [DllImport("ToDll.dll", CharSet = CharSet.Ansi)]
        static extern float get_ProdictResult_value();

        public float[] distribute_data;
        public float setvarstotalcount;
        public int prodictnum;
        public float[] distribute_data_dispense;
        private void  distributeToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            distribute_data = outvars.monthsdata;
            setvarstotalcount = setvars.TotalCount;
            prodictnum = setvars.ProdictNum;
            outs.View(panel1, panel2, panel3, panel4, panel5, panel6, toolStripStatusLabel1, outvars, setvars);
            disview = new Distribute(this);
            distribute_data_dispense = disview.distribute_data_dispense;
            disview.Owner = this;
            disview.Show();
            disview.Enabled = true;
            this.IsAccessible = false;
        }

        private void distributeToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        public float setvarstotalcount_keshi;
        public float[] count_keshi =new float[4];
        public float[] keshi_data;

        private void keShiFileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            /*
             循环读取各个科室的数据
             */
          
            String FilePath = "C:/Users/Java Ben/Desktop/测试数据/科室数据/";
            float[] data = new float[1000];
            int NumOfData = 0;

            for (int i = 1; i < 5; i++)
            {

                StreamReader sr = new StreamReader(FilePath + i + ".txt", Encoding.Default);
                String line;
                while ((line = sr.ReadLine()) != null)
                {
                    data[NumOfData] = float.Parse(line);
                    NumOfData++;
                }
                outvars.data = data;
                outvars.NumOfData = NumOfData;
                numofdata = NumOfData;
                setvars.ProdictNum = NumOfData + 1;
                NumOfData = 0;

                distributeToolStripMenuItem1.Enabled = true;
                isApplayTrue = true;
                setCjjVars(setvars);
                int MaxLength = 1000;
                outvars.Tout = new float[MaxLength];
                islogprodic = false;
                iscurveprodic = true;
                Set_LogMethodCanProdict_value(islogprodic);
                Set_CurveMethodCanProdict_value(iscurveprodic);

                caculateAndpaint();

                keshi_data=outvars.monthsdata;

                count_keshi[i - 1] = keshi_data[0];

                
            }

            setvarstotalcount_keshi = setvars.TotalCount;
            setvarstotalcount_keshi = distribute_data_dispense[0];
            prodictnum = setvars.ProdictNum;
            keshiview = new KeShi(this);
            keshiview.Owner = this;
            keshiview.Show();
            keshiview.Enabled = true;
            this.IsAccessible = false;
        }


    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 2022年科协第二次硬件培训总结
  • 计算机网络 性能指标 思维导图
  • 【初学者入门C语言】之编译预处理(十)
  • 【MySQL从入门到精通】【高级篇】(二十六)建了索引就能用么?我看未必。来看看几种索引失效的情况吧
  • leetcode47全排列2刷题打卡
  • HTTP首部的那些事,通用首部,请求首部
  • 【C基础篇】之C语言概述
  • 【运维】linux shell 编程之函数使用
  • 【MATLAB教程案例25】常用图像变换域的matlab仿真分析——DFT频域,DCT域,小波域等
  • 【C++】类和对象(中)(万字详解)
  • 18-CSS3的2D和3D属性
  • 浅谈Linux下的redis攻击
  • 高频故障-忘记网页上已保存的密码解决方案
  • 大衣哥后悔了吗?谷传民绕开音乐进军影视结盟湖南操场邓铃
  • 图像的阴影检测消除和图像重建算法matlab仿真
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【个人向】《HTTP图解》阅后小结
  • eclipse的离线汉化
  • java正则表式的使用
  • magento 货币换算
  • select2 取值 遍历 设置默认值
  • Service Worker
  • SpringBoot 实战 (三) | 配置文件详解
  • Spring核心 Bean的高级装配
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 讲清楚之javascript作用域
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 实习面试笔记
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 译米田引理
  • 白色的风信子
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • #1014 : Trie树
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (第二周)效能测试
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (七)Java对象在Hibernate持久化层的状态
  • (转)德国人的记事本
  • (转)用.Net的File控件上传文件的解决方案
  • .NET BackgroundWorker
  • .NET Reactor简单使用教程
  • .NET 事件模型教程(二)
  • .net 提取注释生成API文档 帮助文档
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [BJDCTF 2020]easy_md5
  • [C++]AVL树怎么转