《河北工业大学数据挖掘实验报告.docx》由会员分享,可在线阅读,更多相关《河北工业大学数据挖掘实验报告.docx(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、河北工业大学数据挖掘实验报告试验一数据预处理 一、试验目得 1、熟识 VC+编程工具与完全数据立方体构建、联机分析处理算法。2、阅读拟被处理得得数据,发觉各维属性可能得噪声、缺失值、不一样性等,针对存在得问题拟出采纳得数据清理、数据变换、数据集成得详细算法。3、用 VC+编程工具编写程序,实现数据清理、数据变换、数据集成等功能。4、调试整个程序获得清洁得、一样得、集成得数据,选择适于全局优化 得参数。5、写出试验报告。二、试验原理1、 数据预处理现实世界中得数据库极易受噪音数据、遗漏数据与不一样性数据得侵扰,为提高数据质量进而提高挖掘结果得质量,产生了大量数据预处理技术。数据预处理有多种方法:
2、数据清理,数据集成,数据变换,数据归约等。这些数据处理技 术在数据挖掘之前运用,大大提高了数据挖掘模式得质量,降低实际挖掘所须要 得时间。2、数据清理 数据清理例程通过填写遗漏得值,平滑噪音数据,识别、删除离群点,并解 决不一样来清理数据。3、数据集成 数据集成将数据由多个源合并成一样得数据存储,如数据仓库或数据立方 体。4、数据变换 通过平滑聚集,数据概化,规范化等方式将数据转换成适用于数据挖掘得形式。5、数据归约运用数据归约可以得到数据集得压缩表示,它小得多,但能产生同样(或几乎同样得)分析结果。常用得数据归约策略有数据聚集、维归约、数据压缩与数 字归约等。三、试验内容 与步骤1 、试验内
3、容1、用 VC+编程工具编写程序,实现数据清理、数据变换、数据集成等功能,并在试验报告中写出主要得预处理过程与采纳得方法。2、产生清洁得、一样得、集成得数据。3、在试验报告中写明各主要程序片段得功能与作用。2 、试验步骤 1)细致探讨与审查数据,找出应当包含在您分析中得属性或维,发觉数据 中得一些错误、不寻常得值、与某些事务记录中得不一样性。2)进行数据清理,对遗漏值、噪音数据、不一样得数据进行处理。例如: 1、日期中得缺失值可以依据统一得流水号来确定。2、购买得数量不能为负值。3)进行数据集成与数据变换与数据归约,将多个数据源中得数据集成起来, 削减或避开结果数据中得数据冗余或不一样性。并将
4、数据转换成适合挖掘得形 式。例如:1、进行完数据清理后发觉购买数量、销售价格、总额就是相互关联得项可以 去掉总额。2、三个流水表日期得格式不一样应统一成相同得日期格式。3、门号与 pos 机号码一样,可以去掉一个。4、附加:同一购物篮得商品序号应当就是依次递增得。四 、 试验结果 源程序: #include <iostream> #include <string> #include <fstream> #include <algorithm> using namespace std;
5、 class Sales public:string serial;int market;int posno;string date;int sn;int id;float num;float price;float total;void print cout<<serial<<" "<<market<<" "<<posno<<" &
6、;quot;<<date<<" "<<sn<<" "<<id<<" "<<num<<" "<<price<<" "<&
7、lt;total<<endl; ; int main ofstream outfile("fl、txt",ifstream:app);if (!outfile) cout<<"open error!"<<endl; exit(1);char name50;ifstream infile;cout<<"输入要打开得 txt 文件名:1019、txt,1020、txt,1021、txt&qu
8、ot;<<endl;/int N=3;/for (int k=0;k<N;k+)/ /cout<<"输入要打开得第"<<k+1<<"个文件名"<<endl;cin>>name; in(name,ios:in);/ifstream infile("1019、txt",ios:in); cin、clear; /*
9、string contents;*/ if (in) cout<<"error open!"<<endl; /ofstream outfile("fl、txt",ofstream:app); /ofstream outfile("fl、txt",ios:out); /if (!outfile) /cout<<"open error!"<<en
10、dl;/exit(1); / Sales sal13000; int sal_size=0; while (!in) infile>>salsal_size 、 serial>>salsal_size 、 market>>salsal_size 、posno>>salsal_size、date>> salsal_size 、 sn>>salsal_size 、 id>>salsal_size 、num
11、>>salsal_size、price>>salsal_size、total;sal_size+; cout<<"文档"<<name<<"得长度就是:"<<sal_size<<endl; /char Tc; /Tc=getchar; /cout<<Tc<<endl; int
12、I; for (int i=0; i<sal_size;i+) /sali、print;if (sali、num<0) sali、num=sali、num;sali、date、assign(sali、serial,0,8);outfile<<sali 、 serial<<"t"<<sali 、 market<<"t"<<sali 、date<&
13、amp;lt;"t"<<sali、sn<<"t" <<sali、id<<"t"<<sali、num<<"t"<<sali、price<<endl;I=i; cout<<"文档 fl、tx
14、t 得长度就是:"<<sal_size<<"t"<<I<<endl;char TTc; cin>>TTc;/TTc=getchar; cout<<TTc<<endl; in; /out;return 0; 运行结果:试验二数据立方体与联机分析处理构建一、试验目得1、熟识 VC+编程工具与基本数据立方体构建、联机分析处理算法。2、建立一样得高质量得关
15、系型数据库。3、在建立得数据库基础上建立基本数据立方体。4、写出试验报告。二、试验原理1、关系型数据库关系数据库,就是创建在关系模型基础上得数据库,借助于集合代数等数学概 念与方法来处理数据库中得数据。关系模型由关系数据结构、关系操作集合、关 系完整性约束三部分组成。2、数据立方体一种多维数据模型,允许以多维对数据建模与视察。它由维与事实定义。维就是一个单位想要得透视或实体。每个维可以有一个与人相关联得表,称为维表,它进一步描述维,如 item 维得维表包含属性 Name、time、type 等。事实:多维数据模型围绕诸如销售这样得主题组织,主题用事实表示, 事实就是数值度量得。3、OLAP
16、操作上卷:沿着一个维得概念分层向上攀升或通过维归约在数据立方体上进行聚集。下钻:上卷得逆操作,可能过沿维得概念分层向下或引入附加得维来实现。切片:在给定得数据立方体得一个维上进行选择,导致一个子立方体。就就是数据立方体得某一层数据。切换:在两个或多个维上选择,定义子立方体。就就是数据立方体某一层 数据中得某一块。4、数据仓库得设计选取待建模得商务处理:都有哪些商务过程,如订单、发票、发货、库 存、记账管理、销售或一般分类账。选取商务处理得粒度:对于商务处理,该粒度就是基本得,在事实表中就是 数据得原子级,如单个事务、一天得快照等。选取用于每个事实表记录得维:典型得维就是时间、商品、顾客、供应商
17、、 仓库、事务类型与状态。选取将安放在每个事实表记录中得度量:典型得度量就是可加得数值量, 如 dollars_sold 与 units_sold。三、试验内容与步骤1 、试验内容 (1)、用 VC+编程工具编写程序,建立关系型数据存储结构,建立数据立方体,并在试验报告中写出主要得过程与采纳得方法。建立得数据立方体得维度为 3,分别就是商品大类、商店编号与时间。详细要求: 1、建立三个存储表格(txt 文件)分别存储 1019、1020、1021 得数据;2、每个 txt 文件横向为商品大类(商品 ID 前五位)10010 油、 10020 面制品、10030 米与粉、10088 粮油类赠品;
18、3、每个 txt 纵向为日期 1319 这一个星期表中存储得值为总销 售额。(2)、进行简洁得 OLAP 数据查询详细要求: 能查出 2022 商店 10010 油类商品 13 日总得销售额;能计算出 2022 商店 10030 米与粉总得销售额;能查询出指定商店指定种类商品得销售额;(附加题)2 、试验步骤(1)细致探讨与审查数据,找出应当包含在您分析中得属性或维去掉不须要 得数据。(2)选择合适得存储结构,实现数据得存储访问,并实现相应得功能。(3)经过数据预处理后得数值已经补充了缺失值,并统一了格式。(4)读取预处理数据得商品 ID、日期、计算出销售额。四、试验结果 源程序:#inclu
19、de<iostream> #include<string> #include<fstream> #include<algorithm> using namespace std; class Sales_n public:string serial;int market;char date10;int sn; int id;float num;float price; ; int main char name150,name250;ifstream infile;cout<
20、;<"输入试验一中经过预处理得数据文件:fl、txt"<<endl;cin>>name1;in(name1,ios:in);/*string contents;*/if(in) cout << "error open!" << endl; cout<<"输入试验二要保存得存有数据立方体得文件名:cube3、txt"<&am
21、p;lt;endl;cin>>name2;ofstream outfile;out(name2,ios:out);if(!outfile) cout<<"open eror!"<<endl; exit(1);Sales_n sal10000;int sal_size=0;int i=sal_size;float total3105=0;while(!in) infile >> salsal_size、serial >>
22、salsal_size、market >> salsal_size、date>> salsal_size、sn>> salsal_size、id>> salsal_size、num>> salsal_size、price; cout<<"i: "<<i<<endl;for (int k=0;k<3;k+) /此 for 循环
23、默认店号就是从 1019 连续增加得 3个整数 int Km=1019+k;/cout<<"Km: "<<Km<<endl;if (sali、market=Km) char p= 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+=sal
24、i、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)case 3:totalk01+=sali、num*sali、price;break;case 4:totalk11+=sali、num*sal
25、i、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; if(sali、id/100=10030) switch(p)case 3:totalk02+=sali、num*sali、price;br
26、eak; 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:totalk62+=sali、num*sali、price;break; else if(sali、id/100=10088) switc
27、h(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+=sali、num*sali、price;break; case 9:totalk63+=sali、num*sali、p
28、rice;break; if (sal_size<5000) sal_size+;i=sal_size; else sal_size=0;i=sal_size; /cout<<"sal_size+="<<sal_size<<endl;/sal、clear;/?if (outfile) for (int kk=0;kk<3;kk+) cout<<"kk"<<k
29、k<<endl;cout<<"销售日期"<<t<<"10010 油 "<<"10020 面制品 "<<"10030 米与粉 "<<"10088 粮油类赠品 "<<endl;int j = 2003
30、0413;/?for (int i=0;i<7;+i) outfile<<" "<< totalkki0<<t<<totalkki1<<t<<totalkki2<<t<<totalkki3<<t<<endl;cout<<j<&a
31、mp;lt;" "<< totalkki0<<t<<totalkki1<<t<<totalkki2<<t<<totalkki3<<t<<endl; j+; /else/cerr<<"无法打开文件!"<<endl;/ifs
32、tream infile2("cube2、txt",ios:in); /int m=0;/while(!in)/infile >> totalm0 >> totalm1 >>totalm2>>totalm3;/m+;/if(in)/cout << "error open!" << endl;/float sum=0、0;/for(int i=0;i&
33、lt;7;+i)/sum+=totali2;/cout<<"2022 号商铺 10010 油类商品 14 日销售额为:"<<total10<<endl;/cout<<"2022 号商铺 10030 米与粉类商品销售总额为:"<<sum<<endl;in;/关闭文件out;/关闭文件system( "PAUSE "); 运行
34、结果: 实 验三应用 Apriori 算法挖掘频繁项集 一、试验目得(1)熟识 VC+编程工具与 Apriori 频繁项集挖掘算法。(2)依据管理层得需求,确定数据挖掘得任务,明确数据挖掘得功能,也 就就是明确要挖掘什么。(3)由确定得数据挖掘任务,从试验一处理后得结果中,采纳切块或切片 等联机分析处理技术,选择出挖掘任务相关数据。(4)用 VC+编程工具编写 Apriori 算法得程序,对任务相关数据运行 Apriori 算法,挖掘出全部得频繁项集。(5)写出试验报告。 二、试验原理1、Apriori 算法 Apriori 运用一种称作逐层搜寻得迭代方法,k 项集用于探究(k+1)项集。首先
35、,通过扫描数据库,累计每个项得计数,并收集满意最小支持度得项, 找出频繁 1 项集得集合。该集合记作 L1。然后,L1 用于找频繁 2 项集得集合 L2,L2 用于找 L3,如此下去,直到不能再找到频繁 k 项集。找每个 Lk 须要一次 数据库全扫描。2、提高频繁项集逐层产生得效率 Apriori 性质:频繁项集得全部非空子集也必需就是频繁得。三、试验内容与步骤1 、试验内容在给定得数据中提取统一购物篮购买得商品信息,由这些数据构成事务数据 库 D,挖掘其中得频繁项集 L。挖掘频繁项集得算法描述如下: Apriori 算法:运用逐层迭代找出频繁项集 输入:事务数据库 D;最小支持度阈值。输出:
36、D 中得频繁项集 L。(1) L1 = find_frequent_1itemsets(D); / 挖掘频繁 1 项集,比较简单(2) for (k=2;Lk1 ≠Φ ;k+) (3) Ck = apriori_gen(Lk1 ,min_sup); / 调用 apriori_gen 方法生成候选频繁 k 项集分为两步:合并、减枝(4)for each transaction t ∈ D / 扫描事务数据库 D(5)Ct = subset(Ck,t);(6)for each candidate c ∈ Ct(7) c、count+; / 统计候选频繁 k 项集得
37、计数(8) (9) Lk =c ∈ Ck|c、count≥min_sup / 满意最小支持度得 k 项集即为频 繁 k 项集(10) (11) return L= ∪ k Lk; / 合并频繁 k 项集(k>0) 算法在依据频繁 k1 项集生成频繁 K 项集过程中要计算频繁 K 项集中每个 元素得支持度,并计算 K 项集中每个 k1 项子集就是否在 Fk1 中,上述两条任何一 条不满意,则删去这个 K 项集中得元素 2 、试验步骤 (1)打开试验用数据,读取出同一流水号得商品 ID 并取前 5 位,生成以行为 单位生成事务数据集 transitions;(
38、2)ind_frequent_1itemsets 生成频繁一项集for(each transaction in transitions)for(eachitemin transaction) oneItemSet;oneItemSet、count+;/对 1 项集进行计数 3、apriorigen (Lk1) 候选集产生算法Forall itemset p∈Lk1doForall itemset q∈Lk1doIfp、item1=q、item1, p、item2=q、item2, „,p、itemk2=q、itemk2,p、itemk1!=q、itemk1 th
39、enbegin c=p∞q/p、q 合并后随意得 Lk1 子集if has_infrequent_subset(c, Lk1)then delete c /存在 c 不属于 Lk1 剪枝 else add c to CkEndReturn Ck 4、has_infrequent_subset(c, Lk1)推断候选集得元素 Forall (k1)subsets ofcdoIf Not(S∈Lk1)THEN return TRUE;Return FALSE; 四 、 试验结果 源程序: #include<iostream> #include&am
40、p;lt;string> #include<fstream> #include<algorithm> using namespace std; class Sales_n public: string serial; int market; 16 char date10; int sn; int id; float num; float price; ; int main /打开并创建txt 文件/ char name150,name250; ifstream infile; cout<<&
41、;quot;选择要打开得文件:1019n、txt 1020n、txt 1021n、txt"<<endl; cin>>name1; in(name1,ios:in); /*string contents;*/ if(in) cout << "error open!" << endl; cout<<"要保存得文件名:"<<endl; cin&a
42、mp;gt;>name2; ofstream out); if(!outfile) cout<<"open eror!"<<endl; exit(1); / 访 问 预 处 理 文 件/ Sales_n sal10000; int sal_size=0; int ser_size=0; int m = 0,n = 1; int new1340020=0; /短暂储存商品ID while(!in) infile >> salsal_size、serial &
43、;gt;> salsal_size、market >> salsal_size、date>> salsal_size、sn>> salsal_size、id>> salsal_size、num>> salsal_size、price; sal_size+; /取统一流水得商品 ID 前三位按升序无重复得保存起来/ new100=sal0、id/10000; for (int i =1;i<sal_size;i+) if (sali、serial=sali1、serial) new1mn=sali、id/10000; /