大数据分析实验,包含五个子实验:wordCount实验,PageRank实验,关系挖掘实验,k-means算法,推荐系统算法。(上)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 大数据分析实验,包含五个子实验:wordCount实验,PageRank实验,关系挖掘实验,k-means算法,推荐系统算法。

完整代码:https://download.csdn.net/download/weixin_55771290/87428974


实验一 wordCount 算法及其实现


1.1 实验目的

  • 理解 map-reduce 算法思想与流程;
  • 应用 map-reduce 思想解决 wordCount 问题;
  • 可选)掌握并应用 combine 与 shuffle 过程。

1.2 实验内容


提供 9 个预处理过的源文件(source01-09)模拟 9 个分布式节点,每个源文件中包含一百万个由英文、数字和字符(不包括逗号)构成的单词,单词由逗号与换行符分割。


要求应用 map-reduce 思想,模拟 9 个 map 节点与 3 个 reduce 节点实现 wordCount 功能,输出对应的 map 文件和最终的 reduce 结果文件。由于源文件较大,要求使用多线程来模拟分布式节点。


学有余力的同学可以在 map-reduce 的基础上添加 combine 与 shuffle 过程,并可以计算线程运行时间来考察这些过程对算法整体的影响。


提示:实现 shuffle 过程时应保证每个 reduce 节点的工作量尽量相当,来减少整体运行时间。


1.3 实验过程


1.3.1 编程思路

总思路如图 1-1 所示:


7b1c529708901ce4198d553dd82ec403.png


图 1-1:总体逻辑实现


map:


编写面向一个 data 文件的 map 函数,具体实现逻辑就是对出现过的单词进行记录,生成形如“单词,1”的键值对,然后存入另一个 data 文件;


主函数里开 9 个线程,同时处理 9 个 data 文件,并生成 9 个 map 处理后的文件。


reduce:


编写面向三个 data 文件的 reduce 函数,具体实现逻辑就是对三个文件里的单词进行出现次数统计,生成形如“单词,出现次数”的键值对,然后存入一个 data 文件;


主函数里先开三个线程分别处理 9 个 map 生成的文件,同时会生成 3 个经过 reduce 处理的文件,最后等待三个线程处理结束后,将刚刚 reduce 生成的 3 个文件作为参数再次进行一次 reduce 操作,生成最终的结果文件。


1.3.2 遇到的问题及解决方式


map:


文件处理时的细节:由于我是按照特定的字符切割行来读取的文件流,但是文件的最后一行与其他行相比少了一个换行符,由此会出现一个单词统计的错误,解决方案就是在做文件解析之前先将文件里写入一个”\n”,保证所有行之间的一致性,这样就能避免此错误;


线程的实现:采用的是 threading 包里的 Thread 方法来实现多个线程。


reduce:


map 文件处理与 reduce 文件处理的一致性:由于经过 map 处理后的文件键值对的第二项均为 1,reduce 处理后的文件键值对的第二项为单词出现次数,原 reduce 函数实现时记录单词出现次数的方式肯定不能再用了,改为加上键值对第二项的数值这一逻辑后即解决了问题;


线程等待的实现:使用 join()方法实现主函数的阻塞,在三个线程结束之后才开始最后结果文件的生成。


1.3.3 实验测试与结果分析


  1. 经过 map 处理后生成的 data 文件如下图 1-2,图 1-3 所示:


f601199f23960f326adacf8f262ce52e.png


图 1-2 map 处理后生成的文件


90a67cedddc6a782a23d340b39826676.png


图 1-3:spurce01_ans 文件部分内容

  1. 经过 reduce 处理后生成的文件如下图 1-4,1-5 所示:



5cfba7f04bd65947561d0e352c69fd20.png



图 1-4:reduce 处理后生成的文件

0e002a8fb0f9281ea8b5633f6289c7f3.png


图 1-5:source123 文件部分内容

将三个 reduce 处理后生成的文件再进行一次 reduce 处理后生成的最终结果文件,如下图 1-6 所示:



75e7faf41912adb9899e56572ef50d75.png


图 1-6:final_ans 文件部分内容

1.4 实验总结


通过实验一更好的理解了 mapreduce 的核心思想,也是一次对于线程操作的实践。

实验二 PageRank 算法及其实现


2.1 实验目的

  • 学习 pagerank 算法并熟悉其推导过程;
  • 实现 pagerank 算法;(可选进阶版)理解阻尼系数的作用;
  • 将 pagerank 算法运用于实际,并对结果进行分析。

2.2 实验内容


提供的数据集包含邮件内容(emails.csv),人名与 id 映射(persons.csv),别名信息(aliases.csv),emails 文件中只考虑 MetadataTo 和 MetadataFrom 两列,分别表示收件人和寄件人姓名,但这些姓名包含许多别名,思考如何对邮件中人名进行统一并映射到唯一 id?(提供预处理代码 preprocess.py 以供参考)。


完成这些后,即可由寄件人和收件人为节点构造有向图,不考虑重复边,编写 pagerank 算法的代码,根据每个节点的入度计算其 pagerank 值,迭代直到误差小于 10-8


实验进阶版考虑加入 teleport β,用以对概率转移矩阵进行修正,解决 dead ends 和 spider trap 的问题。


输出人名 id 及其对应的 pagerank 值。


2.3 实验过程


2.3.1 编程思路


1.对 CSV 文件进行解析,生成一个阿拉伯数字到节点的映射,一个边集用来表示节点的关联关系;


2.通过边集与映射关系生成一个转移矩阵;


通过计算公式进行迭代计算,当误差小于 0.00000001 时,迭代结束,公式为:r


84a145e4e2dcc3018b1a2d37c287010f.png

,β为阻尼系数,值设为 0.85


3.根据映射关系将迭代后的结果转化成一个结果字典,最后对字典按照推荐度从大到小排序,最后写入文件。


2.3.2 遇到的问题及解决方式


文件处理,即转移矩阵初始化问题:由于给的原始文件中,sender 与 receiver 的 id 是没有规律的,所以就想着通过一个映射关系来简化操作,以便生成原始的转移矩阵,具体的映射方式就是按照节点在 CSV 文件里的出现次序来赋值;


2.3.3 实验测试与结果分析


结果文件如下图所示:


ef59aa49f8d128b8f5a484fc4b9b9852.png


图:final.txt 文件部分内容


2.4 实验总结


PageRank 实验是最简单的一个实验,只要将初始的转移矩阵构造出来,后面要处理的东西就势如破竹,直接套公式迭代即可,重要的还是拓展了视野,了解了网页排名算法的大致思想。


实验三 关系挖掘实验


3.1 实验内容


  1. 实验内容

编程实现 Apriori 算法,要求使用给定的数据文件进行实验,获得频繁项集以及关联规则。

  1. 实验要求


以 Groceries.csv 作为输入文件

输出 1~3 阶频繁项集与关联规则,各个频繁项的支持度,各个规则的置信度,各阶频繁项集的数量以及关联规则的总数


固定参数以方便检查,频繁项集的最小支持度为 0.005,关联规则的最小置信度为 0.5


3.2 实验过程


3.2.1 编程思路


  • 文件处理:将文件解析成一个列表,列表里的元素也为列表,列表里包含各个单词字符串;
  • 编写创建 1 项候选集函数:即将文件解析后的列表解析为单项集;
  • 编写扫描数据集函数:该函数根据设置的最小支持度生成频繁项集以及候选项集的支持度字典;
  • 编写利用频繁项集构建候选项集函数:该函数即基于 k 阶频繁项集生成 k+1 阶候选项集;
  • 编写 apriori 主函数,循环处理三次生成 1,2,3 阶频繁项集,函数逻辑如下图 3-1 所示:

66d4b43e11185aa6838b8ac96eafad81.png


图 3-1:apriori 函数逻辑

  1. 利用最小置信度 0.5 来遍历频繁项集生成关联规则。


3.2.2 遇到的问题及解决方式


关联规则算法的实现:首先直观的想法就是生成各个映射对来计算置信度,但是这样的工作量比较大并且逻辑容易紊乱,最后我发现如果按照阶的顺序来处理并且将每一阶的频繁项集按序排列后,会形成之前处理过的对是后面即将要处理的对的子集的特殊情形,这样就大大简化了计算的逻辑。


3.2.3 实验测试与结果分析

结果文件如图 3-2,3-3,3-4,3-5 所示:



e3cb00111dbc0e5e9e04918f35b262c7.png


图 3-2:结果文件(1)


3f6f68b58c37fee40c1f949b6c5fd2ba.png


图 3-3:结果文件(2)


8ee7cfcaa577900f3505bfec4b1f103c.png

图 3-4:结果文件(3)


图 3-5:结果文件(4)

结果分析:

由上图可知:1 阶频繁项集:120 个;2 阶频繁项集:605 个;3 阶频繁项集:264 个;关联规则总数:99 个。


3.3 实验总结


实验三应该是几个实验里最不好做的一个,主要在于数据处理以及一些关键点的理解上面,好在网上开源资料丰富,最后顺利的实现了要求。


实验四 kmeans 算法及其实现


4.1 实验目的


  • 加深对聚类算法的理解,进一步认识聚类算法的实现;
  • 分析 kmeans 流程,探究聚类算法院里;
  • 掌握 kmeans 算法核心要点;
  • 将 kmeans 算法运用于实际,并掌握其度量好坏方式。


相关文章
|
1月前
|
数据采集 机器学习/深度学习 算法
|
1月前
|
人工智能 算法 BI
第一周算法设计与分析 D : 两面包夹芝士
这篇文章介绍了解决算法问题"两面包夹芝士"的方法,通过找出两个数组中的最大最小值,计算这两个值之间的整数个数,包括特判不存在整数的情况。
|
20天前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
55 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
5天前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
20 4
|
3天前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
15 1
|
23天前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
|
9天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
19 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
1月前
|
算法
算法设计与分析作业
这篇文章是关于算法设计与分析的作业,其中包含了两个算法实现:一个是使用分治算法实现的十进制大整数相乘(包括加法、减法和乘法函数),并进行了正确性和健壮性测试;另一个是使用快速排序思想实现的分治查找第K小元素的程序,并分析了其平均和最坏时间复杂度。
算法设计与分析作业
|
27天前
|
编解码 算法 图形学
同一路RTSP|RTMP流如何同时回调YUV和RGB数据实现渲染和算法分析
我们播放RTSP|RTMP流,如果需要同时做渲染和算法分析的话,特别是渲染在上层实现(比如Unity),算法是python这种情况,拉两路流,更耗费带宽和性能,拉一路流,同时回调YUV和RGB数据也可以,但是更灵活的是本文提到的按需转算法期望的RGB数据,然后做算法处理
|
1月前
|
人工智能 算法
第一周算法设计与分析:C : 200和整数对之间的情缘
这篇文章介绍了解决算法问题"200和整数对之间的情缘"的方法,通过统计数组中每个数模200的余数,并计算每个同余类中数的组合数来找出所有满足条件的整数对(i, j),使得\( A_i - A_j \)是200的整数倍。

热门文章

最新文章