河北工业大学数据挖掘实验报告.docx
- 文档编号:5764575
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:53
- 大小:402.52KB
河北工业大学数据挖掘实验报告.docx
《河北工业大学数据挖掘实验报告.docx》由会员分享,可在线阅读,更多相关《河北工业大学数据挖掘实验报告.docx(53页珍藏版)》请在冰豆网上搜索。
河北工业大学数据挖掘实验报告
实验一数据预处理
一、实验目的
1、熟悉VC++编程工具和完全数据立方体构建、联机分析处理算法。
2、浏览拟被处理的的数据,发现各维属性可能的噪声、缺失值、不一致性等,针对存在的问题拟出采用的数据清理、数据变换、数据集成的具体算法。
3、用VC++编程工具编写程序,实现数据清理、数据变换、数据集成等功能。
4、调试整个程序获得清洁的、一致的、集成的数据,选择适于全局优化的参数。
5、写出实验报告。
二、实验原理
1、数据预处理现实世界中的数据库极易受噪音数据、遗漏数据和不一致性数据的侵扰,为提高数据质量进而提高挖掘结果的质量,产生了大量数据预处理技术。
数据预处理有多种方法:
数据清理,数据集成,数据变换,数据归约等。
这些数据处理技术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低实际挖掘所需要的时间。
2、数据清理数据清理例程通过填写遗漏的值,平滑噪音数据,识别、删除离群点,并解决不一致来“清理”数据。
3、数据集成数据集成将数据由多个源合并成一致的数据存储,如数据仓库或数据立方体。
4、数据变换通过平滑聚集,数据概化,规范化等方式将数据转换成适用于数据挖掘的形式。
5、数据归约使用数据归约可以得到数据集的压缩表示,它小得多,但能产生同样(或几乎同样的)分析结果。
常用的数据归约策略有数据聚集、维归约、数据压缩和数字归约等。
三、实验内容和步骤
1、实验内容
1、用VC++编程工具编写程序,实现数据清理、数据变换、数据集成等功能,并在实验报告中写出主要的预处理过程和采用的方法。
2、产生清洁的、一致的、集成的数据。
3、在试验报告中写明各主要程序片段的功能和作用。
2、实验步骤
1)仔细研究和审查数据,找出应当包含在你分析中的属性或维,发现数据中的一些错误、不寻常的值、和某些事务记录中的不一致性。
2)进行数据清理,对遗漏值、噪音数据、不一致的数据进行处理。
例如:
1、日期中的缺失值可以根据统一的流水号来确定。
2、购买的数量不能为负值。
3)进行数据集成和数据变换和数据归约,将多个数据源中的数据集成起来,减少或避免结果数据中的数据冗余或不一致性。
并将数据转换成适合挖掘的形式。
例如:
1、进行完数据清理后发现购买数量、销售价格、总额是相互关联的项可以去掉总额。
2、三个流水表日期的格式不一样应统一成相同的日期格式。
3、门号和pos机号码一样,可以去掉一个。
4、附加:
同一购物篮的商品序号应该是顺序递增的。
四、实验结果
源程序:
#include
#include
#include
#include
usingnamespacestd;
classSales
{
public:
stringserial;
intmarket;
intposno;
stringdate;
intsn;
intid;
floatnum;
floatprice;
floattotal;
voidprint()
{
cout< < } }; intmain() { ofstreamoutfile("fl.txt",ifstream: : app); if(! outfile) { cout<<"openerror! "< exit (1); } charname[50]; ifstreaminfile; cout<<"输入要打开的txt文件名: 1019.txt,1020.txt,1021.txt"< //intN=3; //for(intk=0;k //{ //cout<<"输入要打开的第"< cin>>name; infile.open(name,ios: : in);//ifstreaminfile("1019.txt",ios: : in); cin.clear(); /*stringcontents;*/ if(infile.fail()) { cout<<"erroropen! "< } //ofstreamoutfile("fl.txt",ofstream: : app); //ofstreamoutfile("fl.txt",ios: : out); //if(! outfile) //{ //cout<<"openerror! "< //exit (1); //} Salessal[13000]; intsal_size=0; while(! infile.eof()) { infile>>sal[sal_size].serial>>sal[sal_size].market>>sal[sal_size].posno>>sal[sal_size].date>> sal[sal_size].sn>>sal[sal_size].id>>sal[sal_size].num>>sal[sal_size].price>>sal[sal_size].total; sal_size++; } cout<<"文档"< "< //charTc; //Tc=getchar(); //cout< intI; for(inti=0;i { //sal[i].print(); if(sal[i].num<0) { sal[i].num=-sal[i].num; } sal[i].date.assign(sal[i].serial,0,8); outfile< < I=i; } cout<<"文档fl.txt的长度是: "< charTTc; cin>>TTc;//TTc=getchar(); cout< infile.close(); //} outfile.close(); return0; } 运行结果: 实验二数据立方体与联机分析处理构建 一、实验目的 1、熟悉VC++编程工具和基本数据立方体构建、联机分析处理算法。 2、建立一致的高质量的关系型数据库。 3、在建立的数据库基础上建立基本数据立方体。 4、写出实验报告。 二、实验原理 1、关系型数据库 关系数据库,是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。 2、数据立方体 一种多维数据模型,允许以多维对数据建模和观察。 它由维和事实定义。 维是一个单位想要的透视或实体。 每个维可以有一个与人相关联的表,称为维表,它进一步描述维,如item维的维表包含属性Name、time、type等。 事实: 多维数据模型围绕诸如销售这样的主题组织,主题用事实表示,事实是数值度量的。 3、OLAP操作 上卷: 沿着一个维的概念分层向上攀升或通过维归约在数据立方体上进行聚集。 下钻: 上卷的逆操作,可能过沿维的概念分层向下或引入附加的维来实现。 切片: 在给定的数据立方体的一个维上进行选择,导致一个子立方体。 就是数据立方体的某一层数据。 切换: 在两个或多个维上选择,定义子立方体。 就是数据立方体某一层数据中的某一块。 4、数据仓库的设计 选取待建模的商务处理: 都有哪些商务过程,如订单、发票、发货、库存、记账管理、销售或一般分类账。 选取商务处理的粒度: 对于商务处理,该粒度是基本的,在事实表中是数据的原子级,如单个事务、一天的快照等。 选取用于每个事实表记录的维: 典型的维是时间、商品、顾客、供应商、仓库、事务类型和状态。 选取将安放在每个事实表记录中的度量: 典型的度量是可加的数值量,如dollars_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数据查询 具体要求: 能查出2020商店10010油类商品13日总的销售额; 能计算出2020商店10030米和粉总的销售额; 能查询出指定商店指定种类商品的销售额;(附加题) 2、实验步骤 (1)仔细研究和审查数据,找出应当包含在你分析中的属性或维去掉不需要的数据。 (2)选择合适的存储结构,实现数据的存储访问,并实现相应的功能。 (3)经过数据预处理后的数值已经补充了缺失值,并统一了格式。 (4)读取预处理数据的商品ID、日期、计算出销售额。 四、实验结果 源程序: #include #include #include #include usingnamespacestd; classSales_n { public: stringserial; intmarket; chardate[10]; intsn; intid; floatnum; floatprice; }; intmain() { charname1[50],name2[50]; ifstreaminfile; cout<<"输入实验一中经过预处理的数据文件: fl.txt"< cin>>name1; infile.open(name1,ios: : in); /*stringcontents;*/ if(infile.fail()) cout<<"erroropen! "< cout<<"输入实验二要保存的存有数据立方体的文件名: cube3.txt"< cin>>name2; ofstreamoutfile; outfile.open(name2,ios: : out); if(! outfile) { cout<<"openeror! "< exit (1); } Sales_nsal[10000]; intsal_size=0; inti=sal_size; floattotal[3][10][5]={0}; while(! infile.eof()) { infile>>sal[sal_size].serial>>sal[sal_size].market>>sal[sal_size].date>>sal[sal_size].sn>>sal[sal_size].id>>sal[sal_size].num>>sal[sal_size].price; cout<<"i: "< for(intk=0;k<3;k++)//此for循环默认店号是从1019连续增加的3个整数 { intKm=1019+k; //cout<<"Km: "< if(sal[i].market==Km) { charp=sal[i].date[7]; if(sal[i].id/100==10010) { switch(p) { case'3': total[k][0][0]+=sal[i].num*sal[i].price;break; case'4': total[k][1][0]+=sal[i].num*sal[i].price;break; case'5': total[k][2][0]+=sal[i].num*sal[i].price;break; case'6': total[k][3][0]+=sal[i].num*sal[i].price;break; case'7': total[k][4][0]+=sal[i].num*sal[i].price;break; case'8': total[k][5][0]+=sal[i].num*sal[i].price;break; case'9': total[k][6][0]+=sal[i].num*sal[i].price;break; } } if(sal[i].id/100==10020) { switch(p) { case'3': total[k][0][1]+=sal[i].num*sal[i].price;break; case'4': total[k][1][1]+=sal[i].num*sal[i].price;break; case'5': total[k][2][1]+=sal[i].num*sal[i].price;break; case'6': total[k][3][1]+=sal[i].num*sal[i].price;break; case'7': total[k][4][1]+=sal[i].num*sal[i].price;break; case'8': total[k][5][1]+=sal[i].num*sal[i].price;break; case'9': total[k][6][1]+=sal[i].num*sal[i].price;break; } } if(sal[i].id/100==10030) { switch(p) { case'3': total[k][0][2]+=sal[i].num*sal[i].price;break; case'4': total[k][1][2]+=sal[i].num*sal[i].price;break; case'5': total[k][2][2]+=sal[i].num*sal[i].price;break; case'6': total[k][3][2]+=sal[i].num*sal[i].price;break; case'7': total[k][4][2]+=sal[i].num*sal[i].price;break; case'8': total[k][5][2]+=sal[i].num*sal[i].price;break; case'9': total[k][6][2]+=sal[i].num*sal[i].price;break; } } elseif(sal[i].id/100==10088) { switch(p) { case'3': total[k][0][3]+=sal[i].num*sal[i].price;break; case'4': total[k][1][3]+=sal[i].num*sal[i].price;break; case'5': total[k][2][3]+=sal[i].num*sal[i].price;break; case'6': total[k][3][3]+=sal[i].num*sal[i].price;break; case'7': total[k][4][3]+=sal[i].num*sal[i].price;break; case'8': total[k][5][3]+=sal[i].num*sal[i].price;break; case'9': total[k][6][3]+=sal[i].num*sal[i].price;break; } } } } if(sal_size<5000) { sal_size++; i=sal_size; } else { sal_size=0; i=sal_size; } //cout<<"sal_size++="< } //sal.clear();// if(outfile) { for(intkk=0;kk<3;kk++) { cout<<"kk"< cout<<"销售日期"<<'\t'<<"10010油"<<"10020面制品"<<"10030米和粉"<<"10088粮油类赠品"< intj=20030413;// for(inti=0;i<7;++i) { outfile<<""< cout< j++; } } } //else //cerr<<"无法打开文件! "< //ifstreaminfile2("cube2.txt",ios: : in); //intm=0; //while(! infile.eof()) //{ //infile>>total[m][0]>>total[m][1]>>total[m][2]>>total[m][3]; //m++; //} //if(infile2.fail()) //{ //cout<<"erroropen! "< //} //floatsum=0.0; //for(inti=0;i<7;++i) //{ //sum+=total[i][2]; //} //cout<<"2020号商铺10010油类商品14日销售额为: "< //cout<<"2020号商铺10030米和粉类商品销售总额为: "< infile.close();//关闭文件 outfile.close();//关闭文件 system("PAUSE"); } 运行结果: 实验三应用Apriori算法挖掘频繁项集 一、实验目的 (1)熟悉VC++编程工具和Apriori频繁项集挖掘算法。 (2)根据管理层的需求,确定数据挖掘的任务,明确数据挖掘的功能,也就是明确要挖掘什么。 (3)由确定的数据挖掘任务,从实验一处理后的结果中,采用切块或切片等联机分析处理技术,选择出挖掘任务相关数据。 (4)用VC++编程工具编写Apriori算法的程序,对任务相关数据运行Apriori算法,挖掘出所有的频繁项集。 (5)写出实验报告。 二、实验原理 1、Apriori算法Apriori使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。 首先,通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合。 该集合记作L1。 然后,L1用于找频繁2项集的集合L2,L2用于找L3,如此下去,直到不能再找到频繁k项集。 找每个Lk需要一次数据库全扫描。 2、提高频繁项集逐层产生的效率Apriori性质: 频繁项集的所有非空子集也必须是频繁的。 三、实验内容和步骤 1、实验内容 在给定的数据中提取统一购物篮购买的商品信息,由这些数据构成事务数据库D,挖掘其中的频繁项集L。 挖掘频繁项集的算法描述如下: Apriori算法: 使用逐层迭代找出频繁项集输入: 事务数据库D;最小支持度阈值。 输出: D中的频繁项集L。 (1)L1=find_frequent_1-itemsets(D);//挖掘频繁1-项集,比较容易 (2)for(k=2;Lk-1≠Φ;k++){ (3)Ck=apriori_gen(Lk-1,min_sup);//调用apriori_gen方法生成候选频繁k-项集分为两步: 合并、减枝 (4)foreachtransactiont∈D{//扫描事务数据库D (5)Ct=subset(Ck,t); (6)foreachcandidatec∈Ct (7)c.count++;//统计候选频繁k-项集的计数 (8)} (9)Lk={c∈Ck|c.count≥min_sup}//满足最小支持度的k-项集即为频繁k-项集 (10)} (11)returnL=∪kLk;//合并频繁k-项集(k>0)算法在根据频繁k-1项集生成频繁K项集过程中要计算频繁K项集中每个元素的支持度,并计算K项集中每个k-1项子集是否在F
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 河北 工业大学 数据 挖掘 实验 报告