数据挖掘实验报告(一)

合集下载

数据挖掘实验报告1

数据挖掘实验报告1

实验一 ID3算法实现一、实验目的通过编程实现决策树算法,信息增益的计算、数据子集划分、决策树的构建过程。

加深对相关算法的理解过程。

实验类型:验证计划课间:4学时二、实验内容1、分析决策树算法的实现流程;2、分析信息增益的计算、数据子集划分、决策树的构建过程;3、根据算法描述编程实现算法,调试运行;4、对所给数据集进行验算,得到分析结果。

三、实验方法算法描述:以代表训练样本的单个结点开始建树;若样本都在同一个类,则该结点成为树叶,并用该类标记;否则,算法使用信息增益作为启发信息,选择能够最好地将样本分类的属性;对测试属性的每个已知值,创建一个分支,并据此划分样本;算法使用同样的过程,递归形成每个划分上的样本决策树递归划分步骤,当下列条件之一成立时停止:给定结点的所有样本属于同一类;没有剩余属性可以进一步划分样本,在此情况下,采用多数表决进行四、实验步骤1、算法实现过程中需要使用的数据结构描述:Struct{int Attrib_Col; // 当前节点对应属性int Value; // 对应边值Tree_Node* Left_Node; // 子树Tree_Node* Right_Node // 同层其他节点Boolean IsLeaf; // 是否叶子节点int ClassNo; // 对应分类标号}Tree_Node;2、整体算法流程主程序:InputData();T=Build_ID3(Data,Record_No, Num_Attrib);OutputRule(T);释放内存;3、相关子函数:3.1、 InputData(){输入属性集大小Num_Attrib;输入样本数Num_Record;分配内存Data[Num_Record][Num_Attrib];输入样本数据Data[Num_Record][Num_Attrib];获取类别数C(从最后一列中得到);}3.2、Build_ID3(Data,Record_No, Num_Attrib){Int Class_Distribute[C];If (Record_No==0) { return Null }N=new tree_node();计算Data中各类的分布情况存入Class_Distribute Temp_Num_Attrib=0;For (i=0;i<Num_Attrib;i++)If (Data[0][i]>=0) Temp_Num_Attrib++;If Temp_Num_Attrib==0{N->ClassNo=最多的类;N->IsLeaf=TRUE;N->Left_Node=NULL;N->Right_Node=NULL;Return N;}If Class_Distribute中仅一类的分布大于0{N->ClassNo=该类;N->IsLeaf=TRUE;N->Left_Node=NULL;N->Right_Node=NULL;Return N;}InforGain=0;CurrentCol=-1;For i=0;i<Num_Attrib-1;i++){TempGain=Compute_InforGain(Data,Record_No,I,Num_Attrib); If (InforGain<TempGain){ InforGain=TempGain; CurrentCol=I;}}N->Attrib_Col=CurrentCol;//记录CurrentCol所对应的不同值放入DiferentValue[];I=0;Value_No=-1;While i<Record_No {Flag=false;For (k=0;k<Value_No;k++)if (DiferentValu[k]=Data[i][CurrentCol]) flag=true;if (flag==false){Value_No++;DiferentValue[Value_No]=Data[i][CurrentCol] } I++;}SubData=以Data大小申请内存空间;For (i=0;i<Value_No;i++){k=-1;for (j=0;j<Record_No-1;j++)if (Data[j][CurrentCol]==DiferentValu[i]){k=k++;For(int i1=0;i1<Num_Attrib;i1++)If (i1<>CurrentCol)SubData[k][i1]=Data[j][i1];Else SubData[k][i1]=-1;}N->Attrib_Col=CurrentCol;N->Value=DiferentValu[i];N->Isleaf=false;N->ClassNo=0;N->Left_Node=Build_ID3(SubData,k+1, Num_Attrib);N->Right_Node=new Tree_Node;N=N->Right_Node;}}3.3、计算信息增益Compute_InforGain(Data,Record_No, Col_No, Num_Attrib) {Int DifferentValue[MaxDifferentValue];Int Total_DifferentValue;Int s[ClassNo][MaxDifferentValue];s=0;// 数组清0;Total_DifferentValue=-1;For (i=0;i<Record_No;i++){J=GetPosition(DifferentValue,Total_DifferentValue,Data[i][Col_no]);If (j<0) {Total_DifferentValue++;DifferentValue[Total_DifferentValue]=Data[i][Col_no];J=Total_DifferentValue;}S[Data[i][Num_Attrib-1]][j]++;}Total_I=0;For (i=0;i<ClassNo;i++){Sum=0;For(j=0;j<Record_No;j++) if Data[j][Num_Attrib-1]==i sum++; Total_I=Compute_PI(Sum/Record_No);}EA=0;For (i=0;i<Total_DifferentValue;i++);{ temp=0;sj=0; //sj是数据子集中属于类j的样本个数;For (j=0;j<ClassNO;j++)sj+=s[j][i];For (j=0;j<ClassNO;j++)EA+=sj/Record_No*Compute_PI(s[j][i]/sj);}Return total_I-EA;}3.4、得到某数字在数组中的位置GetPosition(Data, DataSize,Value){For (i=0;i<DataSize;i++) if (Data[i]=value) return I;Return -1;}3.5、计算Pi*LogPiFloat Compute_PI(float pi){If pi<=0 then return 0;If pi>=1 then return 0;Return 0-pi*log2(pi);}五、实验报告要求1、用C语言实现上述相关算法(可选择利用matlab函数实现)2、实验操作步骤和实验结果,实验中出现的问题和解决方法。

数据挖掘实验报告-实验1-Weka基础操作

数据挖掘实验报告-实验1-Weka基础操作

数据挖掘实验报告-实验1-W e k a基础操作学生实验报告学院:信息管理学院课程名称:数据挖掘教学班级: B01姓名:学号:实验报告课程名称数据挖掘教学班级B01 指导老师学号姓名行政班级实验项目实验一: Weka的基本操作组员名单独立完成实验类型■操作性实验□验证性实验□综合性实验实验地点H535 实验日期2016.09.281. 实验目的和要求:(1)Explorer界面的各项功能;注意不能与课件上的截图相同,可采用打开不同的数据文件以示区别。

(2)Weka的两种数据表格编辑文件方式下的功能介绍;①Explorer-Preprocess-edit,弹出Viewer对话框;②Weka GUI选择器窗口-Tools | ArffViewer,打开ARFF-Viewer窗口。

(3)ARFF文件组成。

2.实验过程(记录实验步骤、分析实验结果)2.1 Explorer界面的各项功能2.1.1 初始界面示意其中:explorer选项是数据挖掘梳理数据最常用界面,也是使用weka最简单的方法。

Experimenter:实验者选项,提供不同数值的比较,发现其中规律。

KnowledgeFlow:知识流,其中包含处理大型数据的方法,初学者应用较少。

Simple CLI :命令行窗口,有点像cmd 格式,非图形界面。

2.1.2 进入Explorer 界面功能介绍(1)任务面板Preprocess(数据预处理):选择和修改要处理的数据。

Classify(分类):训练和测试分类或回归模型。

Cluster(聚类):从数据中聚类。

聚类分析时用的较多。

Associate(关联分析):从数据中学习关联规则。

Select Attributes(选择属性):选择数据中最相关的属性。

Visualize(可视化):查看数据的二维散布图。

(2)常用按钮Openfile:打开文件Open URL:打开URL格式文件Open DB:打开数据库文件Generate:数据生成Undo:撤销操作Edit:编辑数据Save:保存数据文件,可实现文件格式的转换,比如csv 格式文件向ARFF格式文件转换等等。

数据挖掘实验报告

数据挖掘实验报告

数据挖掘实验报告一、引言。

数据挖掘作为一种从大量数据中发现隐藏模式和信息的技术,已经被广泛应用于各个领域。

本实验旨在通过对给定数据集的分析和挖掘,探索其中潜在的规律和价值信息,为实际问题的决策提供支持和参考。

二、数据集描述。

本次实验使用的数据集包含了某电商平台上用户的购物记录,其中包括了用户的基本信息、购买商品的种类和数量、购买时间等多个维度的数据。

数据集共包括了10000条记录,涵盖了近一年的购物数据。

三、数据预处理。

在进行数据挖掘之前,我们首先对数据进行了预处理。

具体包括了数据清洗、缺失值处理、异常值处理等步骤。

通过对数据的清洗和处理,保证了后续挖掘分析的准确性和可靠性。

四、数据分析与挖掘。

1. 用户购买行为分析。

我们首先对用户的购买行为进行了分析,包括了用户购买的商品种类偏好、购买频次、购买金额分布等。

通过对用户购买行为的分析,我们发现了用户的购买偏好和消费习惯,为电商平台的商品推荐和营销策略提供了参考。

2. 商品关联规则挖掘。

通过关联规则挖掘,我们发现了一些商品之间的潜在关联关系。

例如,购买商品A的用户80%也会购买商品B,这为商品的搭配推荐和促销活动提供了依据。

3. 用户价值分析。

基于用户的购买金额、购买频次等指标,我们对用户的价值进行了分析和挖掘。

通过对用户价值的评估,可以针对不同价值的用户采取个性化的营销策略,提高用户忠诚度和购买转化率。

五、实验结果。

通过对数据的分析和挖掘,我们得到了一些有价值的实验结果和结论。

例如,发现了用户的购买偏好和消费习惯,发现了商品之间的关联规则,发现了用户的不同价值等。

这些结论为电商平台的运营和管理提供了一定的参考和决策支持。

六、结论与展望。

通过本次实验,我们对数据挖掘技术有了更深入的理解和应用。

同时,也发现了一些问题和不足,例如数据质量对挖掘结果的影响,挖掘算法的选择和优化等。

未来,我们将继续深入研究数据挖掘技术,不断提升数据挖掘的准确性和效率,为更多实际问题的决策提供更有力的支持。

数据挖掘实验报告-数据预处理

数据挖掘实验报告-数据预处理

数据挖掘实验报告(一)数据预处理姓名:李圣杰班级:计算机1304学号:1311610602一、实验目的1.学习均值平滑,中值平滑,边界值平滑的基本原理2.掌握链表的使用方法3.掌握文件读取的方法二、实验设备PC一台,dev-c++5.11三、实验内容数据平滑假定用于分析的数据包含属性age。

数据元组中age的值如下(按递增序):13, 15, 16, 16, 19, 20, 20, 21, 22, 22, 25, 25, 25, 25, 30, 33, 33, 35, 35, 35, 35, 36, 40, 45, 46, 52, 70。

使用你所熟悉的程序设计语言进行编程,实现如下功能(要求程序具有通用性):(a) 使用按箱平均值平滑法对以上数据进行平滑,箱的深度为3。

(b) 使用按箱中值平滑法对以上数据进行平滑,箱的深度为3。

(c) 使用按箱边界值平滑法对以上数据进行平滑,箱的深度为3。

四、实验原理使用c语言,对数据文件进行读取,存入带头节点的指针链表中,同时计数,均值求三个数的平均值,中值求中间的一个数的值,边界值将中间的数转换为离边界较近的边界值五、实验步骤代码#include <stdio.h>#include <stdlib.h>#include <math.h>#define DEEP 3#define DATAFILE "data.txt" #define VPT 10//定义结构体typedef struct chain{int num;struct chain *next;}* data;//定义全局变量data head,p,q;FILE *fp;int num,sum,count=0;int i,j;int *box;void mean();void medain();void boundary();int main (){//定义头指针head=(data)malloc(sizeof(struct chain));head->next=NULL;/*打开文件*/fp=fopen(DATAFILE,"r");if(!fp)exit(0);p=head;while(!feof(fp)){q=(data)malloc(sizeof(structchain));q->next=NULL;fscanf(fp,"%d",&q->num); /*读一个数据*/p->next=q;p=q;count++;}/* 关闭文件 */fclose(fp);//输出printf("源数据为:\n");printf("共%d箱%d个数据\n",count/DEEP,count);p=head->next;count=1;num=1;while(p!=NULL){if(count==1)printf("箱%d:",num);if(count==DEEP){printf("%d\n",p->num);num++;count=1;}else{printf("%d ",p->num);count++;}p=p->next;}mean();medain();boundary();scanf("%d",&i);return 0;}//均值void mean(){printf("均值平滑后为:");box=(int*)malloc(sizeof(int)*num);p=head->next;count=1;num=0;sum=0;while(p!=NULL){if(count==DEEP){count=1;sum=sum+p->num;box[num]=sum/DEEP;sum=0;num++;}else{sum=sum+p->num;count++;}p=p->next;}for (i=0;i<num;i++){printf("\n箱%d:",i+1);for (j=0;j<DEEP;j++)printf("%d ",box[i]);}p=head->next;printf("\n离群值为:");while(p!=NULL){for(i=0;i<num;i++){for (j=0;j<DEEP;j++){if(abs(p->num-box[i])>(int)VPT) {printf("\n箱%d:",i+1);printf("%d ",p->num);}p=p->next;}}}}//中值void medain(){printf("\n中值平滑后为:");p=head->next;count=1;num=0;int mid;while(p!=NULL){if(count==DEEP){box[num]=sum;count=1;num++;}else {if(count==DEEP/2||count==DEEP/2+1 )if(DEEP%2){if(count==DEEP/2+1)sum=p->num;}else{if(count==DEEP/2+1)sum=(p->num+mid)/2;elsemid=p->num;}count++;}p=p->next;}for (i=0;i<num;i++){printf("\n箱%d:",i+1);for (j=0;j<DEEP;j++)printf("%d ",box[i]);}}//边界值void boundary(){printf("\n边界值平滑后为:\n");p=head->next;count=1;box=(int*)malloc(sizeof(int)*num*2);num=0;while(p!=NULL){if(count==DEEP){box[2*num+1]=p->num;count=1;num++;}else{if(count==1) {box[2*num]=p->num;}count++;}p=p->next;}p=head->next;count=1;num=0;while(p!=NULL){if(count==1)printf("箱%d:",num);if((p->num-box[2*num])>(box[2*num +1]-p->num)){printf("%d",box[2*num+1]);}elseprintf("%d ",box[2*num]);if(count==DEEP){printf("\n");count=0;num++;}count++;p=p->next;}}实验数据文件:data.txt用空格分开13 15 16 16 19 20 20 21 22 22 25 25 25 25 30 33 33 35 35 35 35 36 40 45 46 52 70六、结果截图。

数据挖掘实验报告结论(3篇)

数据挖掘实验报告结论(3篇)

第1篇一、实验概述本次数据挖掘实验以Apriori算法为核心,通过对GutenBerg和DBLP两个数据集进行关联规则挖掘,旨在探讨数据挖掘技术在知识发现中的应用。

实验过程中,我们遵循数据挖掘的一般流程,包括数据预处理、关联规则挖掘、结果分析和可视化等步骤。

二、实验结果分析1. 数据预处理在实验开始之前,我们对GutenBerg和DBLP数据集进行了预处理,包括数据清洗、数据集成和数据变换等。

通过对数据集的分析,我们发现了以下问题:(1)数据缺失:部分数据集存在缺失值,需要通过插补或删除缺失数据的方法进行处理。

(2)数据不一致:数据集中存在不同格式的数据,需要进行统一处理。

(3)数据噪声:数据集中存在一些异常值,需要通过滤波或聚类等方法进行处理。

2. 关联规则挖掘在数据预处理完成后,我们使用Apriori算法对数据集进行关联规则挖掘。

实验中,我们设置了不同的最小支持度和最小置信度阈值,以挖掘出不同粒度的关联规则。

以下是实验结果分析:(1)GutenBerg数据集在GutenBerg数据集中,我们以句子为篮子粒度,挖掘了林肯演讲集的关联规则。

通过分析挖掘结果,我们发现:- 单词“the”和“of”在句子中频繁出现,表明这两个词在林肯演讲中具有较高的出现频率。

- “and”和“to”等连接词也具有较高的出现频率,说明林肯演讲中句子结构较为复杂。

- 部分单词组合具有较高的置信度,如“war”和“soldier”,表明在林肯演讲中提到“war”时,很可能同时提到“soldier”。

(2)DBLP数据集在DBLP数据集中,我们以作者为单位,挖掘了作者之间的合作关系。

实验结果表明:- 部分作者之间存在较强的合作关系,如同一研究领域内的作者。

- 部分作者在多个研究领域均有合作关系,表明他们在不同领域具有一定的学术影响力。

3. 结果分析和可视化为了更好地展示实验结果,我们对挖掘出的关联规则进行了可视化处理。

通过可视化,我们可以直观地看出以下信息:(1)频繁项集的分布情况:通过柱状图展示频繁项集的分布情况,便于分析不同项集的出现频率。

数据挖掘实验报告

数据挖掘实验报告

数据挖掘实验报告数据挖掘是一门涉及发现、提取和分析大量数据的技术和过程,它可以揭示出隐藏在数据背后的模式、关系和趋势,对决策和预测具有重要的价值。

本文将介绍我在数据挖掘实验中的一些主要收获和心得体会。

实验一:数据预处理在数据挖掘的整个过程中,最重要的一环就是数据预处理。

数据预处理包括数据清洗、数据集成、数据转换和数据规约等步骤,目的是为了提高数据的质量和可用性。

首先,我对所使用的数据集进行了初步的观察和探索。

发现数据集中存在着一些缺失值和异常值。

为此,我使用了一些常见的缺失值处理方法,如均值替代、中值替代和删除等。

对于异常值,我采用了离群值检测和修正等方法,使得数据在后续的分析过程中更加真实可信。

其次,我进行了数据集成的工作。

数据集合并是为了整合多个来源的数据,从而得到更全面和综合的信息。

在这个过程中,我需要考虑数据的一致性和冗余情况。

通过采用数据压缩和去重等技术,我成功地完成了数据集成的工作。

接着,我进行了数据转换的处理。

数据转换是为了将原始的数据转换成适合数据挖掘算法处理的形式。

在这个实验中,我采用了数据标准化和归一化等方法,使得不同属性之间具备了可比性和可计算性,从而便于后续的分析过程。

最后,我进行了数据规约的操作。

数据规约的目的在于减少数据的维数和复杂度,以提高数据挖掘的效果。

在这个阶段,我采用了主成分分析和属性筛选等方法,通过压缩数据集的维度和减少冗余属性,成功地简化了数据结构,提高了挖掘效率。

实验二:关联规则挖掘关联规则挖掘是数据挖掘中常用的一种方法,它用于发现数据集中项集之间的关联关系。

在这个实验中,我使用了Apriori算法来进行关联规则的挖掘。

首先,我对数据进行了预处理,包括数据清洗和转换。

然后,我选择了适当的最小支持度和最小置信度阈值,通过对数据集的扫描和频繁项集生成,找出了数据集中的频繁项集。

接着,我使用了关联规则挖掘算法,从频繁项集中挖掘出了具有一定置信度的关联规则。

在实验过程中,我发现挖掘出的关联规则具有一定的实用性和可行性。

数据挖掘实验报告-数据预处理

数据挖掘实验报告-数据预处理

数据挖掘实验报告-数据预处理数据挖掘实验报告数据预处理一、实验目的本次实验的主要目的是深入了解和掌握数据预处理在数据挖掘过程中的重要性及相关技术,通过对实际数据集的处理,提高数据质量,为后续的数据挖掘和分析工作奠定良好的基础。

二、实验背景在当今数字化时代,数据的规模和复杂性不断增加,而原始数据往往存在着各种问题,如缺失值、噪声、异常值、不一致性等。

这些问题如果不加以处理,将会严重影响数据挖掘算法的性能和结果的准确性。

因此,数据预处理成为了数据挖掘过程中不可或缺的重要环节。

三、实验数据集本次实验使用了一个名为“销售数据”的数据集,该数据集包含了某公司在过去一年中不同产品的销售记录,包括产品名称、销售日期、销售数量、销售价格、客户信息等字段。

四、数据预处理技术(一)数据清洗1、处理缺失值首先,对数据集中的缺失值进行了识别和分析。

通过观察发现,“客户信息”字段存在部分缺失。

对于这些缺失值,采用了两种处理方法:一是如果缺失比例较小(小于5%),直接删除含有缺失值的记录;二是如果缺失比例较大,采用均值填充的方法进行补充。

2、处理噪声数据数据中的噪声通常表现为数据中的错误或异常值。

通过对销售数量和销售价格的观察,发现了一些明显不合理的数值,如销售数量为负数或销售价格过高或过低的情况。

对于这些噪声数据,采用了基于统计的方法进行识别和处理,将超出合理范围的数据视为噪声并进行删除。

(二)数据集成由于原始数据集可能来自多个数据源,存在着重复和不一致的问题。

在本次实验中,对“销售数据”进行了集成处理,通过对关键字段(如产品名称、销售日期)的比较和合并,消除了重复的记录,并确保了数据的一致性。

(三)数据变换1、数据标准化为了消除不同字段之间量纲的影响,对销售数量和销售价格进行了标准化处理,使其具有可比性。

2、数据离散化对于连续型的数据字段,如销售价格,采用了等宽离散化的方法将其转换为离散型数据,以便于后续的数据挖掘算法处理。

数据挖掘实验报告

数据挖掘实验报告

数据挖掘实验报告近年来,数据挖掘技术在各个领域得到了广泛的应用和发展。

作为一种从大量数据中自动或半自动地获取信息的技术手段,数据挖掘已经成为了解决复杂问题的重要工具。

本文就进行的一次数据挖掘实验进行介绍。

一、实验介绍本次实验使用的数据集是某电商平台的用户购买记录。

数据集中主要记录了用户的购买行为,包括商品名称、价格、购买时间、购买数量等。

本次实验旨在对用户购买行为进行分析,以发现用户的消费特点和购物习惯。

二、数据预处理在进行数据挖掘前,首先需要对原始数据进行处理。

本次实验对数据进行了以下处理:1. 数据清洗:去掉重复记录、缺失数据和异常值。

2. 数据转换:将数据转化为适合挖掘的形式,即去除无关数据和重要性较低的数据,并将数据标准化。

3. 数据集成:将多个数据源中的数据集成到一起,以便进行挖掘。

三、数据分析在进行数据分析时,首先需要选择适合的算法对数据进行分析。

本次实验使用了关联规则分析算法和聚类分析算法。

这两个算法对数据进行分析后,可以提取出不同方面的数据,以发现用户的消费特点和购物习惯。

1. 关联规则分析关联规则分析算法是一种从大规模数据中发现如果一个事件出现,另一个事件也经常出现的规则的方法。

本次实验中,通过关联规则分析找出购买某一件商品时,可能会购买的其他商品。

通过分析不同商品之间的关联,可以发现用户的消费行为和购物习惯。

2. 聚类分析聚类分析算法是一种将数据集划分为多个类别的方法,使得每个类别内数据的相似度高于类别间的相似度。

本次实验中,通过聚类分析将用户划分为不同的群组,以进一步发现用户的消费特点和购物习惯。

四、实验结论基于本次实验的数据挖掘分析,得到了以下结论:1. 用户的消费行为和购物习惯对其购买行为有重要影响,需通过分析消费行为和购物习惯来预测和推荐用户购买商品。

2. 不同商品之间具有一定的关联性,可以通过对商品之间的关联进行分析,来推广和营销相关商品。

3. 用户的购买行为和个人特性的关联值得深入研究,可以提供更加个性化的商品推荐服务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据挖掘实验报告(一)
数据预处理
姓名:李圣杰
班级:计算机1304
学号:1311610602
一、实验目的
1.学习均值平滑,中值平滑,边界值平滑的基本原理
2.掌握链表的使用方法
3.掌握文件读取的方法
二、实验设备
PC一台,dev-c++5.11
三、实验内容
数据平滑
假定用于分析的数据包含属性age。

数据元组中age的值如下(按递增序):13, 15, 16, 16, 19, 20, 20, 21, 22, 22, 25, 25, 25, 25, 30, 33, 33, 35, 35, 35, 35, 36, 40, 45, 46, 52, 70。

使用你所熟悉的程序设计语言进行编程,实现如下功能(要求程序具有通用性):
(a) 使用按箱平均值平滑法对以上数据进行平滑,箱的深度为3。

(b) 使用按箱中值平滑法对以上数据进行平滑,箱的深度为3。

(c) 使用按箱边界值平滑法对以上数据进行平滑,箱的深度为3。

四、实验原理
使用c语言,对数据文件进行读取,存入带头节点的指针链表中,同时计数,均值求三个数的平均值,中值求中间的一个数的值,边界值将中间的数转换为离边界较近的边界值
五、实验步骤
代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define DEEP 3
#define DATAFILE "data.txt" #define VPT 10
//定义结构体
typedef struct chain{
int num;
struct chain *next;
}* data;
//定义全局变量
data head,p,q;
FILE *fp;
int num,sum,count=0;
int i,j;
int *box;
void mean();
void medain();
void boundary();
int main ()
{
//定义头指针
head=(data)malloc(sizeof(struc t chain));
head->next=NULL;
/*打开文件*/
fp=fopen(DATAFILE,"r");
if(!fp)
exit(0);
p=head;
while(!feof(fp)){
q=(data)malloc(sizeof(struct chain));
q->next=NULL;
fscanf(fp,"%d",&q->num); /*读一个数据*/
p->next=q;
p=q;
count++;
}
/* 关闭文件 */
fclose(fp);
//输出
printf("源数据为:\n");
printf("共%d箱%d个数据\n",count/DEEP,count);
p=head->next;
count=1;
num=1;
while(p!=NULL){
if(count==1)printf("
箱%d:",num);
if(count==DEEP){
printf("%d\n",p->num);
num++;
count=1;
}
else{
printf("%d ",p->num);
count++;
}
p=p->next;
}
mean();
medain();
boundary();
scanf("%d",&i);
return 0;
}
//均值
void mean(){
printf("均值平滑后为:");
box=(int
*)malloc(sizeof(int)*num);
p=head->next;
count=1;
num=0;
sum=0;
while(p!=NULL){
if(count==DEEP){
count=1;
sum=sum+p->num;
box[num]=sum/DEEP;
sum=0;
num++;
}
else{
sum=sum+p->num;
count++;
}
p=p->next;
}
for (i=0;i<num;i++){
printf("\n箱%d:",i+1);
for (j=0;j<DEEP;j++)
printf("%d ",box[i]);
}
p=head->next;
printf("\n离群值为:");
while(p!=NULL){
for(i=0;i<num;i++)
{
for (j=0;j<DEEP;j++)
{
if(abs(p->num-box[i])>(int)VPT )
{
printf("\n箱%d:",i+1);
printf("%d ",p->num);
}
p=p->next;
}
}
}
}
//中值
void medain(){
printf("\n中值平滑后为:");
p=head->next;
count=1;
num=0;
int mid;
while(p!=NULL){
if(count==DEEP){
box[num]=sum;
count=1;
num++;
}
else {
if(count==DEEP/2||count==DEEP/ 2+1)
if(DEEP%2){
if(count==DEEP/2+1)
sum=p->num;
}
else{
if(count==DEEP/2+1)
sum=(p->num+mid)/2;
else
mid=p->num;
}
count++;
}
p=p->next;
}
for (i=0;i<num;i++){
printf("\n箱%d:",i+1);
for (j=0;j<DEEP;j++)
printf("%d ",box[i]);
}
}
//边界值
void boundary(){
printf("\n边界值平滑后为:\n");
p=head->next;
count=1;
box=(int *)malloc(sizeof(int)*num*2);
num=0;
while(p!=NULL){
if(count==DEEP){
box[2*num+1]=p->num;
count=1;
num++;
}
else{
if(count==1) {
box[2*num]=p->num;
}
count++;
}
p=p->next;
}
p=head->next;
count=1;
num=0;
while(p!=NULL){
if(count==1)
printf("箱%d:",num);
if((p->num-box[2*num])>(box[2* num+1]-p->num)){
printf("%d
",box[2*num+1]);
}
else
printf("%d ",box[2*num]);
if(count==DEEP){
printf("\n");
count=0;
num++;
}
count++;
p=p->next;
}
}
实验数据文件:data.txt用空格分开
13 15 16 16 19 20 20 21 22 22 25 25 25 25 30 33 33 35 35 35 35 36 40 45 46 52 70
六、结果截图。

相关文档
最新文档