文档详情

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

发布:2017-02-01约3.36千字共5页下载文档
文本预览下载声明
数据挖掘实验报告(一) 数据预处理 姓名:李圣杰 班级:计算机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(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;inum;i++){ printf(\n箱%d:,i+1); for (j=0;jDEEP;j++) printf(%d ,box[i]); } p=head-next; printf(\n离群值为:); while(p!=NULL){ for(i=0;inum;i++) { for (j=0;jDEEP;j++) { if(abs(p-num-box[i])(int)V
显示全部
相似文档