河北工业大学数据挖掘实验报告_第1页
河北工业大学数据挖掘实验报告_第2页
河北工业大学数据挖掘实验报告_第3页
河北工业大学数据挖掘实验报告_第4页
河北工业大学数据挖掘实验报告_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一 数据预处理 一、实验目的 1、熟悉 VC+编程工具和完全数据立方体构建、联机分析处理算法。 2、浏览拟被处理的的数据,发现各维属性可能的噪声、缺失值、不一致性等,针对存在的问题拟出采用的数据清理、数据变换、数据集成的具体算法。3、用 VC+编程工具编写程序,实现数据清理、数据变换、数据集成等功能。 4、调试整个程序获得清洁的、一致的、集成的数据,选择适于全局优化 的参数。 5、写出实验报告。二、实验原理 1、 数据预处理现实世界中的数据库极易受噪音数据、遗漏数据和不一致性数据的侵扰,为提高数据质量进而提高挖掘结果的质量,产生了大量数据预处理技术。数据预处理有多种方法:数据清理,数据集成

2、,数据变换,数据归约等。这些数据处理技 术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低实际挖掘所需要 的时间。2、数据清理 数据清理例程通过填写遗漏的值,平滑噪音数据,识别、删除离群点,并解 决不一致来“清理”数据。 3、数据集成 数据集成将数据由多个源合并成一致的数据存储,如数据仓库或数据立方 体。 4、数据变换 通过平滑聚集,数据概化,规范化等方式将数据转换成适用于数据挖掘的形式。 5、数据归约使用数据归约可以得到数据集的压缩表示,它小得多,但能产生同样(或几乎同样的)分析结果。常用的数据归约策略有数据聚集、维归约、数据压缩和数 字归约等。三、实验内容和步骤1、实验内容1、用 V

3、C+编程工具编写程序,实现数据清理、数据变换、数据集成等功能,并在实验报告中写出主要的预处理过程和采用的方法。 2、产生清洁的、一致的、集成的数据。 3、在试验报告中写明各主要程序片段的功能和作用。2、实验步骤 1)仔细研究和审查数据,找出应当包含在你分析中的属性或维,发现数据 中的一些错误、不寻常的值、和某些事务记录中的不一致性。2)进行数据清理,对遗漏值、噪音数据、不一致的数据进行处理。 例如: 1、日期中的缺失值可以根据统一的流水号来确定。 2、购买的数量不能为负值。 3)进行数据集成和数据变换和数据归约,将多个数据源中的数据集成起来, 减少或避免结果数据中的数据冗余或不一致性。并将数据

4、转换成适合挖掘的形 式。 例如: 1、进行完数据清理后发现购买数量、销售价格、总额是相互关联的项可以 去掉总额。 2、三个流水表日期的格式不一样应统一成相同的日期格式。 3、门号和 pos 机号码一样,可以去掉一个。 4、附加:同一购物篮的商品序号应该是顺序递增的。四、实验结果源程序:#include #include #include #include using namespace std;class Salespublic:string serial;int market;int posno;string date;int sn;int id;float num;float price;

5、float total;void print()coutserial market posno date sn id num price totalendl;int main()ofstream outfile(fl.txt,ifstream:app);if (!outfile)coutopen error!endl;exit(1);char name50;ifstream infile;cout输入要打开的txt文件名:1019.txt,1020.txt,1021.txtendl;/int N=3;/for (int k=0;kN;k+)/cout输入要打开的第k+1个文件名name;in(

6、name,ios:in);/ifstream infile(1019.txt,ios:in);cin.clear();/*string contents;*/if (in()couterror open!endl;/ofstream outfile(fl.txt,ofstream:app);/ofstream outfile(fl.txt,ios:out);/if (!outfile)/coutopen error!salsal_size.serialsalsal_size.marketsalsal_size.posnosalsal_size.datesalsal_size.snsalsal_

7、size.idsalsal_size.numsalsal_size.pricesalsal_size.total;sal_size+;cout文档name的长度是:sal_sizeendl;/char Tc;/Tc=getchar();/coutTcendl;int I;for (int i=0; isal_size;i+)/sali.print();if (sali.num0)sali.num=-sali.num;sali.date.assign(sali.serial,0,8);outfilesali.serialtsali.markettsali.datetsali.sntsali.id

8、tsali.numtsali.priceendl;I=i;cout文档fl.txt的长度是:sal_sizetITTc;/TTc=getchar();coutTTcendl;in();/out();return 0;运行结果: 实验二 数据立方体与联机分析处理构建 一、实验目的 1、熟悉 VC+编程工具和基本数据立方体构建、联机分析处理算法。 2、建立一致的高质量的关系型数据库。 3、在建立的数据库基础上建立基本数据立方体。 4、写出实验报告。 二、实验原理 1、关系型数据库 关系数据库,是创建在关系模型基础上的数据库,借助于集合代数等数学概 念和方法来处理数据库中的数据。关系模型由关系数据结

9、构、关系操作集合、关 系完整性约束三部分组成。 2、数据立方体 一种多维数据模型,允许以多维对数据建模和观察。它由维和事实定义。 维是一个单位想要的透视或实体。每个维可以有一个与人相关联的表,称为维表,它进一步描述维,如 item 维的维表包含属性 Name、time、type 等。 事实:多维数据模型围绕诸如销售这样的主题组织,主题用事实表示, 事实是数值度量的。 3、OLAP 操作 上卷:沿着一个维的概念分层向上攀升或通过维归约在数据立方体上进行聚集。 下钻:上卷的逆操作,可能过沿维的概念分层向下或引入附加的维来实现。 切片:在给定的数据立方体的一个维上进行选择,导致一个子立方体。就是数据

10、立方体的某一层数据。 切换:在两个或多个维上选择,定义子立方体。就是数据立方体某一层 数据中的某一块。4、数据仓库的设计 选取待建模的商务处理:都有哪些商务过程,如订单、发票、发货、库 存、记账管理、销售或一般分类账。 选取商务处理的粒度:对于商务处理,该粒度是基本的,在事实表中是 数据的原子级,如单个事务、一天的快照等。 选取用于每个事实表记录的维:典型的维是时间、商品、顾客、供应商、 仓库、事务类型和状态。 选取将安放在每个事实表记录中的度量:典型的度量是可加的数值量, 如 dollars_sold 和 units_sold。三、实验内容和步骤 1、实验内容(1)、用 VC+编程工具编写程

11、序,建立关系型数据存储结构,建立数据立方体,并在实验报告中写出主要的过程和采用的方法。 建立的数据立方体的维度为 3,分别是商品大类、商店编号和时间。 具体要求:1、建立三个存储表格(txt 文件)分别存储 1019、1020、1021 的数据; 2、每个 txt 文件横向为商品大类(商品 ID 前五位)10010 油、 10020 面制品、10030 米和粉、10088 粮油类赠品; 3、每个 txt 纵向为日期 13-19 这一个星期表中存储的值为总销 售额。 (2)、进行简单的 OLAP 数据查询 具体要求:能查出 2020 商店 10010 油类商品 13 日总的销售额; 能计算出 2

12、020 商店 10030 米和粉总的销售额; 能查询出指定商店指定种类商品的销售额;(附加题)2、实验步骤 (1)仔细研究和审查数据,找出应当包含在你分析中的属性或维去掉不需要 的数据。 (2)选择合适的存储结构,实现数据的存储访问,并实现相应的功能。(3)经过数据预处理后的数值已经补充了缺失值,并统一了格式。(4)读取预处理数据的商品 ID、日期、计算出销售额。四、实验结果源程序:#include#include#include#includeusing namespace std;class Sales_npublic:string serial;int market;char date1

13、0;int sn; int id;float num;float price;int main()char name150,name250;ifstream infile;cout输入实验一中经过预处理的数据文件:fl.txtname1;in(name1,ios:in); /*string contents;*/if(in()cout error open! endl;cout输入实验二要保存的存有数据立方体的文件名:cube3.txtname2;ofstream outfile;out(name2,ios:out);if(!outfile)coutopen eror! salsal_size

14、.serial salsal_size.market salsal_size.date salsal_size.sn salsal_size.id salsal_size.num salsal_size.price;couti: iendl;for (int k=0;k3;k+) /此for循环默认店号是从1019连续增加的3个整数int Km=1019+k;/coutKm: Kmendl;if (sali.market=Km)char p= sali.date7;if(sali.id/100=10010 )switch(p)case 3:totalk00+=sali.num*sali.pri

15、ce;break;case 4:totalk10+=sali.num*sali.price;break;case 5:totalk20+=sali.num*sali.price;break;case 6:totalk30+=sali.num*sali.price;break;case 7:totalk40+=sali.num*sali.price;break;case 8:totalk50+=sali.num*sali.price;break;case 9:totalk60+=sali.num*sali.price;break;if(sali.id/100=10020 )switch(p)ca

16、se 3:totalk01+=sali.num*sali.price;break;case 4:totalk11+=sali.num*sali.price;break;case 5:totalk21+=sali.num*sali.price;break;case 6:totalk31+=sali.num*sali.price;break;case 7:totalk41+=sali.num*sali.price;break;case 8:totalk51+=sali.num*sali.price;break;case 9:totalk61+=sali.num*sali.price;break;i

17、f(sali.id/100=10030)switch(p) case 3:totalk02+=sali.num*sali.price;break;case 4:totalk12+=sali.num*sali.price;break;case 5:totalk22+=sali.num*sali.price;break;case 6:totalk32+=sali.num*sali.price;break;case 7:totalk42+=sali.num*sali.price;break;case 8:totalk52+=sali.num*sali.price;break;case 9:total

18、k62+=sali.num*sali.price;break;else if(sali.id/100=10088)switch(p) case 3:totalk03+=sali.num*sali.price;break;case 4:totalk13+=sali.num*sali.price;break;case 5:totalk23+=sali.num*sali.price;break;case 6:totalk33+=sali.num*sali.price;break;case 7:totalk43+=sali.num*sali.price;break;case 8:totalk53+=s

19、ali.num*sali.price;break;case 9:totalk63+=sali.num*sali.price;break;if (sal_size5000)sal_size+;i=sal_size;elsesal_size=0;i=sal_size;/coutsal_size+=sal_sizeendl;/sal.clear();/?if (outfile)for (int kk=0;kk3;kk+)coutkkkkendl;cout销售日期t10010油 10020面制品 10030米和粉 10088粮油类赠品 endl;int j = 20030413;/?for (int

20、i=0;i7;+i)outfile totalkki0ttotalkki1ttotalkki2ttotalkki3tendl;coutj totalkki0ttotalkki1ttotalkki2ttotalkki3tendl;j+;/else/cerr无法打开文件! totalm0 totalm1 totalm2totalm3;/m+;/if(in()/cout error open! endl;/float sum=0.0;/for(int i=0;i7;+i)/sum+=totali2;/cout2020号商铺10010油类商品14日销售额为:total10endl;/cout2020号

21、商铺10030米和粉类商品销售总额为:sum0) 算法在根据频繁 k-1 项集生成频繁 K 项集过程中要计算频繁 K 项集中每个 元素的支持度,并计算 K 项集中每个 k-1 项子集是否在 Fk-1中,上述两条任何一 条不满足,则删去这个 K 项集中的元素2、实验步骤 (1)打开试验用数据,读取出同一流水号的商品 ID 并取前 5 位,生成以行为 单位生成事务数据集 transitions; (2)ind_frequent_1-itemsets 生成频繁一项集 for(each transaction in transitions) for(eachitem intransaction) on

22、eItemSet; oneItemSet.count+;/对 1 项集进行计数 3、apriori-gen (Lk-1) 候选集产生算法 For all itemset pLk-1 do For all itemset qLk-1 do If p.item1=q.item1, p.item2=q.item2, ,p.itemk-2=q.itemk-2, p.itemk-1!=q.itemk-1 then begin c=pq/p、q 合并后任意的 Lk-1子集 if has_infrequent_subset(c, Lk-1) then delete c /存在 c 不属于 Lk-1剪枝 el

23、se add c to Ck End Return Ck 4、has_infrequent_subset(c, Lk-1)判断候选集的元素 For all (k-1)-subsets of c do If Not(SLk-1) THEN return TRUE; Return FALSE;四、实验结果源程序:#include#include#include#includeusing namespace std;class Sales_npublic:string serial;int market;16char date10;int sn;int id;float num;float pric

24、e;int main()/打开并创建txt 文件/char name150,name250;ifstream infile;cout选择要打开的文件:1019n.txt 1020n.txt 1021n.txtname1;in(name1,ios:in);/*string contents;*/if(in()cout error open! endl;cout要保存的文件名:name2;ofstream out);if(!outfile)coutopen eror! salsal_size.serial salsal_size.market salsal_size.date salsal_siz

25、e.snsalsal_size.id salsal_size.num salsal_size.price;sal_size+;/取统一流水的商品ID 前三位按升序无重复的保存起来/new100=sal0.id/10000;for (int i =1;isal_size;i+)if (sali.serial=sali-1.serial)new1mn=sali.id/10000; /流水号相同n+;/outfilesali.id/100t;else/排序/for(int k = 0;kn;k+)for(int j = 0;j new1mj+1)int t = new1mj;new1mj = new

26、1mj+1;new1mj+1 = t;for(int l= 0;l n;l+)if(new1ml-1!=new1ml)outfilenew1mlt;outfileendl;m+;n = 0;new1mn=sali.id/10000;n+;in();/关闭文件out();/关闭文件system( PAUSE );Apriori 算法挖掘频繁项集support = 2#include 18#include #include #include #include #include #include #include #include using namespace std;const int mins

27、up=2; /设置最小支持度map items_count; /统计各个项集的数目vector mergeItem(vector vect1,vector vect2,int round); /合并生成新的候选项集int isExist(vector item,vectorvector items); /判断项集item 是否已经存在候选项集集合items 中,存在则返回vector mergeItem(vector vect1,vector vect2,int round) /判断两个项集是否可以合并(要求只有一项不同)成一个新的项集(做为候选集)/剪枝工作/int count=0; /统计

28、两个vector 中相同的项的数目vector vect;map tempMap; /辅助判断两个vector 中重复的项for(vector:size_type st=0;stvect1.size();st+)tempMapvect1st+;vect.push_back(vect1st);for(int st=0;stvect2.size();st+)tempMapvect2st+;if(tempMapvect2st=2) /表示这两项相同count+;elsevect.push_back(vect2st);if(count+1)!=round) /要求两个项目集只有一个项目不相同,其他都相

29、同vect.clear();return vect;19int isExist(vector item,vectorvector items) /判断项集item 是否已经存在候选项集集合items 中,存在则返回int count; /统计相同的项的数目if(!items.empty()for(vectorvector :size_type ix=0;ix!=items.size();ix+)count=0;for(vector:size_type iy=0;iy!=itemsix.size();iy+)for(vector:size_type iz=0;iz!=item.size();iz

30、+)if(itemiz=itemsix.at(iy)count+;if(count=item.size() /表示存在return 1;return 0;int main()vectorvector datavec; /原始数据项集vectorvector candidatevec; /候选项集vectorvector frequentvec; /频繁项集vectormap bitmap; /判断某个项目在某一个事务中是否存在,存在则值为1,反之为0long trancount=0; /原始事务总数char name150;ifstream file;cout选择要打开的文件:new1.txt

31、 new2.txt new3.txtname1;(name1,ios:in); /打开数据文件if(!file) /检查文件是否打开成功coutFail to open data file!endl;20return 1;elsestring temp;vector item; /项集的临时vectorint begin,end;while(getline() /一行一行读入数据trancount+;begin=0;temp.erase(0,temp.find_first_not_of(rtn ); /去除字符串首部的空格temp.erase(temp.find_last_not_of(rtn

32、)+1);while(end=temp.find(t,begin)!=string:npos) /每一个事务中的项是以t为分隔符的item.push_back(temp.substr(begin,end-begin); /将每一个项插入item 中begin=end+1;item.push_back(temp.substr(begin); /一个事务中的最后一项datavec.push_back(item); /将一个事务中的所有项当成一个整体插入另一个大的vector中item.clear(); /清空itemcoutPress Enter to continue the processin

33、g; /pausegetchar();map item_map;for(vectorvector :size_type ix=0;ix!=datavec.size();+ix)for(vector:size_type iy=0;iy!=datavecix.size();+iy)items_countdatavecix.at(iy)+; /该项集的计数加item_mapdatavecix.at(iy)=1; /表示该项目在该事务中存在,值为1,否则默认为0bitmap.push_back(item_map);item_map.clear(); /这里一定要清空一下map:const_iterat

34、or map_it=items_count.begin();cout候选项集1:endl;while(map_it!=items_count.end() /输出候选1 项集coutfirstendl;map_it+;coutPress Enter to continue the processing; /pause21getchar();map_it=items_count.begin();cout频繁1 项集(minsup=2):secondminsup) /支持度大于2cout.setf(ios:fixed);coutfirst 支持度:setprecision(6)secondfirst

35、);frequentvec.push_back(item); /插入候选项集的vector 中item.clear();map_it+;if(!frequentvec.empty() /判断频繁项集是否为空,为空则退出coutPress Enter to continue the processing; /pausegetchar();int round=1; /生成候选项集轮次int found; /是否包含有非频繁的子集,为表示含有,有的话进行剪枝string tempstr;vector tempvec;do/生成下一轮的候选项集vectorvector :size_type st=fr

36、equentvec.size();candidatevec.clear(); /清除上一轮的候选项集for(vectorvector :size_type st1=0;st1st;st1+)for(vectorvector :size_type st2=st1+1;st2st;st2+)found=0;item=mergeItem(frequentvecst1,frequentvecst2,round); /调用函数合并生成下一轮的候选项集if(!item.empty()&!isExist(item,candidatevec) /若经过判断处理后返回的vector 不为空且还不存在该项集,则作

37、为候选项集加入候选vector 中/实现剪枝/string teststr;int testint;tempvec=item;sort(tempvec.begin(),tempvec.end();while(next_permutation(tempvec.begin(),tempvec.end() /遍历所有的组22合for(vector:size_type tempst=0;tempst!=tempvec.size();tempst+) /拼接出该字符串组合tempstr+=tempvectempst;for(map:const_iteratortempit=items_count.beg

38、in();tempit!=items_count.end();tempit+)if(tempit-secondfirst)!=string:npos) /表示包含有非频繁子项集found=1;teststr=tempit-first;testint=tempit-second;break;tempstr.erase();if(found) /包含非频繁子项集break;if(!found) /只有不包含有非频繁子项集才加入候选项集中,否则剪枝掉candidatevec.push_back(item);found=0; /重置frequentvec.clear(); /清除上一轮的频繁项集rou

39、nd+;cout候选round项集:endl;for(vectorvector :size_type ix=0;ix!=candidatevec.size();+ix) /输出候选项集23cout;for(vector:size_type iy=0;iy!=candidatevecix.size();+iy)coutcandidatevecix.at(iy) ;coutendl;if(candidatevec.empty() /候选项集为空cout候选round项集为空!endl;int flag; /标记某个项集在某条事务中是否出现,出现为1,不出现为0int count; /统计某个想集在整个交易的事务集中出现的次数string tempstr; /临时string,用于串接各个项成一个字符串int mark; /为避免执行多余的字符串串接工作for(vectorvector :size_type sx=0;sx!=candidatevec.siz

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论