数据挖掘实验报告-数据预处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
#include
#include
#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;i printf("\n箱%d:",i+1); for (j=0;j printf("%d ",box[i]); } p=head->next; printf("\n离群值为:"); while(p!=NULL){ for(i=0;i { for (j=0;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;