《河北工业大学数据挖掘实验报告(共42页).docx》由会员分享,可在线阅读,更多相关《河北工业大学数据挖掘实验报告(共42页).docx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上实验一 数据预处理 一、实验目的 1、熟悉 VC+编程工具和完全数据立方体构建、联机分析处理算法。 2、浏览拟被处理的的数据,发现各维属性可能的噪声、缺失值、不一致性等,针对存在的问题拟出采用的数据清理、数据变换、数据集成的具体算法。3、用 VC+编程工具编写程序,实现数据清理、数据变换、数据集成等功能。 4、调试整个程序获得清洁的、一致的、集成的数据,选择适于全局优化 的参数。 5、写出实验报告。二、实验原理 1、 数据预处理现实世界中的数据库极易受噪音数据、遗漏数据和不一致性数据的侵扰,为提高数据质量进而提高挖掘结果的质量,产生了大量数据预处理技术。数据预处理有多
2、种方法:数据清理,数据集成,数据变换,数据归约等。这些数据处理技 术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低实际挖掘所需要 的时间。2、数据清理 数据清理例程通过填写遗漏的值,平滑噪音数据,识别、删除离群点,并解 决不一致来“清理”数据。 3、数据集成 数据集成将数据由多个源合并成一致的数据存储,如数据仓库或数据立方 体。 4、数据变换 通过平滑聚集,数据概化,规范化等方式将数据转换成适用于数据挖掘的形式。 5、数据归约使用数据归约可以得到数据集的压缩表示,它小得多,但能产生同样(或几乎同样的)分析结果。常用的数据归约策略有数据聚集、维归约、数据压缩和数 字归约等。三、实验内容和
3、步骤1、实验内容1、用 VC+编程工具编写程序,实现数据清理、数据变换、数据集成等功能,并在实验报告中写出主要的预处理过程和采用的方法。 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
5、;float price;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+
6、1个文件名name;infile.open(name,ios:in);/ifstream infile(1019.txt,ios:in);cin.clear();/*string contents;*/if (infile.fail()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
7、_size.datesalsal_size.snsalsal_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.m
8、arkettsali.datetsali.sntsali.idtsali.numtsali.priceendl;I=i;cout文档fl.txt的长度是:sal_sizetITTc;/TTc=getchar();coutTTcendl;infile.close();/outfile.close();return 0;运行结果: 实验二 数据立方体与联机分析处理构建 一、实验目的 1、熟悉 VC+编程工具和基本数据立方体构建、联机分析处理算法。 2、建立一致的高质量的关系型数据库。 3、在建立的数据库基础上建立基本数据立方体。 4、写出实验报告。 二、实验原理 1、关系型数据库 关系数据库,是创
9、建在关系模型基础上的数据库,借助于集合代数等数学概 念和方法来处理数据库中的数据。关系模型由关系数据结构、关系操作集合、关 系完整性约束三部分组成。 2、数据立方体 一种多维数据模型,允许以多维对数据建模和观察。它由维和事实定义。 维是一个单位想要的透视或实体。每个维可以有一个与人相关联的表,称为维表,它进一步描述维,如 item 维的维表包含属性 Name、time、type 等。 事实:多维数据模型围绕诸如销售这样的主题组织,主题用事实表示, 事实是数值度量的。 3、OLAP 操作 上卷:沿着一个维的概念分层向上攀升或通过维归约在数据立方体上进行聚集。 下钻:上卷的逆操作,可能过沿维的概念
10、分层向下或引入附加的维来实现。 切片:在给定的数据立方体的一个维上进行选择,导致一个子立方体。就是数据立方体的某一层数据。 切换:在两个或多个维上选择,定义子立方体。就是数据立方体某一层 数据中的某一块。4、数据仓库的设计 选取待建模的商务处理:都有哪些商务过程,如订单、发票、发货、库 存、记账管理、销售或一般分类账。 选取商务处理的粒度:对于商务处理,该粒度是基本的,在事实表中是 数据的原子级,如单个事务、一天的快照等。 选取用于每个事实表记录的维:典型的维是时间、商品、顾客、供应商、 仓库、事务类型和状态。 选取将安放在每个事实表记录中的度量:典型的度量是可加的数值量, 如 dollars
11、_sold 和 units_sold。三、实验内容和步骤 1、实验内容(1)、用 VC+编程工具编写程序,建立关系型数据存储结构,建立数据立方体,并在实验报告中写出主要的过程和采用的方法。 建立的数据立方体的维度为 3,分别是商品大类、商店编号和时间。 具体要求:1、建立三个存储表格(txt 文件)分别存储 1019、1020、1021 的数据; 2、每个 txt 文件横向为商品大类(商品 ID 前五位)10010 油、 10020 面制品、10030 米和粉、10088 粮油类赠品; 3、每个 txt 纵向为日期 13-19 这一个星期表中存储的值为总销 售额。 (2)、进行简单的 OLAP
12、 数据查询 具体要求:能查出 2020 商店 10010 油类商品 13 日总的销售额; 能计算出 2020 商店 10030 米和粉总的销售额; 能查询出指定商店指定种类商品的销售额;(附加题)2、实验步骤 (1)仔细研究和审查数据,找出应当包含在你分析中的属性或维去掉不需要 的数据。 (2)选择合适的存储结构,实现数据的存储访问,并实现相应的功能。(3)经过数据预处理后的数值已经补充了缺失值,并统一了格式。(4)读取预处理数据的商品 ID、日期、计算出销售额。四、实验结果源程序:#include#include#include#includeusing namespace std;clas
13、s Sales_npublic:string serial;int market;char date10;int sn; int id;float num;float price;int main()char name150,name250;ifstream infile;cout输入实验一中经过预处理的数据文件:fl.txtname1;infile.open(name1,ios:in); /*string contents;*/if(infile.fail()cout error open! endl;cout输入实验二要保存的存有数据立方体的文件名:cube3.txtname2;ofstr
14、eam outfile;outfile.open(name2,ios:out);if(!outfile)coutopen eror! salsal_size.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
15、= sali.date7;if(sali.id/100=10010 )switch(p)case 3:totalk00+=sali.num*sali.price;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;brea
16、k;case 9:totalk60+=sali.num*sali.price;break;if(sali.id/100=10020 )switch(p)case 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:to
17、talk51+=sali.num*sali.price;break;case 9:totalk61+=sali.num*sali.price;break;if(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+=sal
18、i.num*sali.price;break;case 8:totalk52+=sali.num*sali.price;break;case 9:totalk62+=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*
19、sali.price;break;case 7:totalk43+=sali.num*sali.price;break;case 8:totalk53+=sali.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;
20、cout销售日期t10010油 10020面制品 10030米和粉 10088粮油类赠品 endl;int j = ;/?for (int i=0;i7;+i)outfile totalkki0ttotalkki1ttotalkki2ttotalkki3tendl;coutj totalkki0ttotalkki1ttotalkki2ttotalkki3tendl;j+;/else/cerr无法打开文件! totalm0 totalm1 totalm2totalm3;/m+;/if(infile2.fail()/cout error open! endl;/float sum=0.0;/for
21、(int i=0;i7;+i)/sum+=totali2;/cout2020号商铺10010油类商品14日销售额为:total10endl;/cout2020号商铺10030米和粉类商品销售总额为:sum0) 算法在根据频繁 k-1 项集生成频繁 K 项集过程中要计算频繁 K 项集中每个 元素的支持度,并计算 K 项集中每个 k-1 项子集是否在 Fk-1中,上述两条任何一 条不满足,则删去这个 K 项集中的元素2、实验步骤 (1)打开试验用数据,读取出同一流水号的商品 ID 并取前 5 位,生成以行为 单位生成事务数据集 transitions; (2)ind_frequent_1-item
22、sets 生成频繁一项集 for(each transaction in transitions) for(eachitem intransaction) oneItemSet; 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 合
23、并后任意的 Lk-1子集 if has_infrequent_subset(c, Lk-1) then delete c /存在 c 不属于 Lk-1剪枝 else 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_n
24、public:string serial;int market;16char date10;int sn;int id;float num;float price;int main()/打开并创建txt 文件/char name150,name250;ifstream infile;cout选择要打开的文件:1019n.txt 1020n.txt 1021n.txtname1;infile.open(name1,ios:in);/*string contents;*/if(infile.fail()cout error open! endl;cout要保存的文件名:name2;ofstream
25、 outfile(name2,ios:out);if(!outfile)coutopen eror! salsal_size.serial salsal_size.market salsal_size.date salsal_size.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/1
26、0000; /流水号相同n+;/outfilesali.id/100t;else/排序/for(int k = 0;kn;k+)for(int j = 0;j new1mj+1)int t = new1mj;new1mj = new1mj+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+;infile.close();/关闭文件outfile.close();/关闭文件system( PAUSE );Apriori
27、算法挖掘频繁项集support = 2#include 18#include #include #include #include #include #include #include #include using namespace std;const int minsup=2; /设置最小支持度map items_count; /统计各个项集的数目vector mergeItem(vector vect1,vector vect2,int round); /合并生成新的候选项集int isExist(vector item,vectorvector items); /判断项集item 是否
28、已经存在候选项集集合items 中,存在则返回vector mergeItem(vector vect1,vector vect2,int round) /判断两个项集是否可以合并(要求只有一项不同)成一个新的项集(做为候选集)/剪枝工作/int count=0; /统计两个vector 中相同的项的数目vector vect;map tempMap; /辅助判断两个vector 中重复的项for(vector:size_type st=0;stvect1.size();st+)tempMapvect1st+;vect.push_back(vect1st);for(int st=0;stvec
29、t2.size();st+)tempMapvect2st+;if(tempMapvect2st=2) /表示这两项相同count+;elsevect.push_back(vect2st);if(count+1)!=round) /要求两个项目集只有一个项目不相同,其他都相同vect.clear();return vect;19int isExist(vector item,vectorvector items) /判断项集item 是否已经存在候选项集集合items 中,存在则返回int count; /统计相同的项的数目if(!items.empty()for(vectorvector :s
30、ize_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+)if(itemiz=itemsix.at(iy)count+;if(count=item.size() /表示存在return 1;return 0;int main()vectorvector datavec; /原始数据项集vectorvector candidatevec; /候选项集vectorvector fre
31、quentvec; /频繁项集vectormap bitmap; /判断某个项目在某一个事务中是否存在,存在则值为1,反之为0long trancount=0; /原始事务总数char name150;ifstream file;cout选择要打开的文件:new1.txt new2.txt new3.txtname1;file.open(name1,ios:in); /打开数据文件if(!file) /检查文件是否打开成功coutFail to open data file!endl;20return 1;elsestring temp;vector item; /项集的临时vectorint