大数据--关联规则挖掘案例

2023-10-27

环境:虚拟机hive+本地spark+python(pyspark)

数据:商品订单数据+商品种类数据

步骤:将数据上传到hdfs后,在python中完成hive表的创建,数据处理,关联规则挖掘,数据可视化

实现功能:对商品订单中的信息进行挖掘,得到商品组合之间的关联关系(本文只对order进行了处理,没有涉及到type)

一.数据准备

将GoodsOrder.csv和GoodsTypes.csv文件上传到hdfs创建的数据文件夹

hdfs dfs -mkdir /hive_data/homework/data/order            
hdfs dfs -mkdir /hive_data/homework/data/type
hdfs dfs -put /export/data/hive_data/GoodsOrder.csv /hive_data/homework/data/order
hdfs dfs -put /export/data/hive_data/GoodsTypes.csv /hive_data/homework/data/type

二.pyspark创建hive表

前提是已经完成了本地spark连接虚拟机hive的操作,见前文

而且这里有个小坑,spark直接删除hive表的话,只会删除表的元数据,不会删除表的数据文件,如果直接使用spark.sql(“drop..”)的话,在后面重新创建同名hive表的话,就会一直提示某某文件夹已存在,所以我查了一下可以直接去hive中删除,或者在spark中使用以下命令删除

spark.sql("ALTER TABLE homework.type SET TBLPROPERTIES ('external.table.purge'='true')")
spark.sql("drop table homework.type")

创建hive表--order和type

def createTable():
    spark = SparkSession \
        .builder \
        .appName("Python Spark SQL Hive integration example") \
        .enableHiveSupport() \
        .getOrCreate()
    spark.sql("show databases").show()
    # 创建数据库不指定location,则默认创建在hive.metastore.warehouse.dir设置的文件夹中,这个在hive-site.xml中设置
    spark.sql("create database IF NOT EXISTS homework")
    '''
    数据文件通过hdfs命令,hdfs dfs -put /export/data/hive_data/download.csv /hive_data/homework/data
    由虚拟机上传到hdfs的/hive_data/homework/data文件夹下,
    访问的前缀在hadoop的core-site.xml文件中设置,值为hdfs://master,master对应为node01和node02,
    具体的选择由Zookeeper完成,使用status命令查看哪一台虚拟机被选举为leader,当前是node2为leader,
    因此通过下面的地址就可以访问到hdfs文件系统(端口号为9000)
    注意建表语句的中表的数据格式要与导入的数据一致
    而且要注意加上分隔符的设置,否则导入都为null
    '''
    spark.sql("use homework")
    spark.sql("CREATE EXTERNAL TABLE IF NOT EXISTS homework.order(id INT,good STRING) "
              "ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION "
              "'hdfs://192.168.121.131:9000/hive_data/homework/data/order'")
    spark.sql("select * from homework.order").show()

    spark.sql("CREATE EXTERNAL TABLE IF NOT EXISTS homework.type(good STRING,type STRING) "
              "ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION "
              "'hdfs://192.168.121.131:9000/hive_data/homework/data/type'")
    spark.sql("show tables").show()
    spark.sql("select * from homework.type").show()

PS:如果发现select结果是乱码,那么很大的可能是因为csv文件没有保存为utf-8,修改格式后删除hdfs上的文件并重新上传修改后的文件,删除hive表后重新导入,即可解决乱码

成功创建

三.pyspark数据处理

使用的关联规则算法是Apriori,这里通过mlxtend库实现,因为它提供了支持度,更加详细,因此就需要先把order表中的数据转换成需要的列表格式。

# 按照id进行聚合,Goods_list存储每个订单中的商品
order_list = order.groupBy("id").agg(F.collect_list("good").alias("Goods_list"))
order_list.show()

# 将Goods_list列的内容取出存入good_list列表
Goods_list = order_list.select("Goods_list").collect()
good_list = []
for i in Goods_list:
     good_list.append(i["Goods_list"])

四.关联规则挖掘

这里研究订单的商品之间的关联规则,也就是说用户在购买了某一个商品的同时,购买另一个商品的概率。通过设置支持度和置信度得到合适的结果、支持度大于一表示正相关,小于一表示负相关。

'''
2.关联规则挖掘
'''
TE = TransactionEncoder()  # 构造转换模型
data = TE.fit_transform(good_list)  # 将原始数据转换为bool型
df = pd.DataFrame(data, columns=TE.columns_)  # 使用DataFrame存储bool数据

item_set = apriori(df, min_support=0.05, use_colnames=True)  # 设置最小支持度参数
print(item_set)

# 提示:Empty DataFrame----可能是没有超过该阈值的频繁项目,因此item_set为空,rules调用出错
rules = association_rules(item_set, min_threshold=0.2)  # 设置最小置信度,根据最小置信度在频繁项集中产生强关联规则
pd.set_option('expand_frame_repr', False)
print(rules)

data_a = []  # 柱状图的横坐标,记录关联关系
data_b = []  # 关联的第一个柱,表示置信度
data_c = []  # 关联的第二个柱,表示提升度
for i, j in rules.iterrows():  # 'for index, row in dataset.iterrows():'index是行索引值,row是对应的行内容
    X = j['antecedents']
    Y = j['consequents']
    Z = j['confidence']
    U = j['lift']
    x = ','.join([item for item in X])
    y = ','.join([item for item in Y])
    xy = x + "→" + y
    print(xy + " 置信度=" + str(Z) + " 提升度=" + str(U))
    data_a.append(xy)
    data_b.append(Z)
    data_c.append(U)

五.关联情况可视化

# 绘制柱状图
plt.rcParams['font.sans-serif'] = ["SimHei"]  # 不支持中文,所以进行临时设置
size = len(data_a)
place = np.arange(size)  # 根据数据个数生成柱子的中点位置,也是放置横轴数据的位置
# 1.设置横轴
plt.figure(figsize=(15, 12), dpi=200)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.set_xticks(place)  # x轴的位置
ax.set_xticklabels(data_a, rotation=0, fontsize=10)  # x轴
ax.set_xlabel('关联规则')  # x轴名称
# 2.设置两个柱
total_width, n = 0.8, 2  # n表示柱子的种类数
width = total_width / n  # 得到每个柱子的宽度
place = place - (total_width - width) / 2  # 得到柱子的每个起始位置
plt.bar(place, data_b, width=width, label='置信度')  # 柱1
plt.bar(place + width, data_c, width=width, label='提升度')  # 柱2
# 3.设置数字在柱上显示
for i in range(size):
    plt.text(place[i], data_b[i] + 0.01, '%.3f' % data_b[i], ha='center', va='bottom',
             fontsize=10)  # 设置在柱1的顶部显示数字--保留三位小数,在柱子上方0.01处居中显示
    plt.text(place[i] + width, data_c[i] + 0.01, '%.3f' % data_c[i], ha='center', va='bottom',
             fontsize=10)  # 设置在柱2的顶部显示数字
plt.legend()
plt.show()

六.完整代码以及数据文件

https://files.cnblogs.com/files/blogs/745215/%E5%85%B3%E8%81%94%E8%A7%84%E5%88%99%E6%8C%96%E6%8E%98.zip?t=1671788956

七.总结

通过关联规则挖掘,可以对商品的摆放提供参考,例如酸奶和全脂牛奶可以一起摆放,同时也可以结合商品种类,对于不同种类的商品摆放提供参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据--关联规则挖掘案例 的相关文章

  • Mac下IDEA + Java EE Web + Tomcat环境配置

    本篇文章主要用于简要记录Mac下IDEA Java EE Web Tomcat的环境配置的流程 因为环境我已经事先配置好了 这里只演示流程 就不再重新安装了 下面我们开始吧 目录 IDEA Java EE Web Tomcat的环境配置 J
  • GPIO 有3种状态, 上拉,下拉,不拉

    GPIO 有3种状态 上拉 下拉 不拉 当GPIO处于output模式 一般选择no pull 引脚能够正确地输出输出高电平低电平信号 当GPIO处于input模式 需要根据默认的输入值来确定配置模式 如果默认输入的值为1时 最好配置为pu

随机推荐

  • 解决java.lang.NoClassDefFoundError错误

    本文目录 1 问题背景 2 NoClassDefFoundError错误发生的原因 3 NoClassDefFoundError和ClassNotFoundException区别 4 如何解决NoClassDefFoundError错误 5
  • 【免费】油管无字幕视频如何转录成文本

    啊哈 周末做了个好玩的 之前我做了个小工具 把 youtube 无字幕视频转录成音频 再提取文本 交给 ChatGPT 或者 http Claude ai 摘录出大纲 并组织成 markdown 文档 本来只自己用 因需要部署代码 现在我把
  • 【EI/SCOPUS征稿】第五届IEEE机器人与智能制造技术国际会议 (ISRIMT 2023)

    第五届IEEE机器人与智能制造技术国际会议 ISRIMT 2023 2023 5th International Symposium on Robotics Intelligent Manufacturing Technology 重要信息
  • 智能指针的原理、使用和实现

    1 智能指针的作用 C 程序设计中使用堆内存是非常频繁的操作 堆内存的申请和释放都由程序员自己管理 程序员自己管理堆内存可以提高了程序的效率 但是整体来说堆内存的管理是麻烦的 C 11中引入了智能指针的概念 方便管理堆内存 使用普通指针 容
  • uniapp:APP开发,后台保活

    前言 在ios中 软件切换至后台 手机息屏 过了十来秒软件就会被系统挂起 APP内的任务就不能继续执行 在android中 默认情况下 软件在后台运行的时候 触发某些特定条件的情况下 会被杀掉进程 解决方案 以下方案均测试息屏后台运行两小时
  • 谭安林:大数据在智能外呼系统的应用

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由云加社区技术沙龙发表于云 社区专栏 谭安林 腾讯高级工程师 2015年加入腾讯 8年互联网从业经历 从事大数据平台与产品开发相关工作 先后参与广告 金融等领域产品项目 目前负责
  • vue-gojs-初学笔记-从简单完整案例剖析开始

    第一章 认识GOJS
  • matlab 实现dtmf 信号检测代码,DTMF信号的产生与检测算法研究与MATLAB实现.rar

    摘 要 双音多频信号 DTMF Dual Tone Multi Frequency 是电话系统中电话机与交换机之间的一种用户信令 通常用于发送被叫号码 由于其抗干扰性强和高速传输的优点 除了应用于电话系统 还被在全世界范围内广泛使用在各种按
  • chatgpt基于Qt实现的To-Do List小项目(内附源码),码农将何去何从....

    笔者前言 OpenAI前一段发布聊天机器人模型ChatGPT 迅速出圈全网 chatgpt的出现 让LLMs走进了普通人的视野 同时 也让传统的AI助手变成了原始人 chatgpt向我们展示了LLM目前的天花板 而且这个天花板还相当高 在突
  • 基本的线程机制

    一 线程概念 并发编程使我们可以将程序划分成多个分离的 独立运行的任务 通过使用多线程机制 这些独立任务中的每一个都将由执行线程来驱动 一个线程就是在进程中的一个单一的顺序控制流 因此 单个进程可以拥有多个并发执行的任务 但是你的程序是的每
  • PostgreSQL:流复制环境清除 pg_xlog 日志

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今天一流复制 Streaming Replication 数据库一目录空间告警 经查是 pg xlog 目录 WAL 日志文件过多 已超过阀值 pg xlog 是数据库重做
  • springboot整合LogstashTcpSocketAppender日志保存到ELK

    1 安装elasticsearch 2 安装kibana 3 安装logstash 配置logstash springboot logstash conf文件如下 input tcp mode gt server host gt 127 0
  • CMAKE 中 add_definitions的用法.

    1 官方的说明 Adds D define flags to the compilation of source files add definitions DFOO DBAR Adds definitions to the compile
  • 树莓派安装MJPG-streamer

    文章目录 一 简介 1 MJPG streamer方案的实现 2 JPEG MJPG格式简介 二 测试USB摄像头 1 开启摄像头服务 2 显示USB设备 3 查看设备文件 三 安装 1 更新源 2 安装必要的库 3 下载安装文件 4 编译
  • IPsec中IKE与ISAKMP过程分析(主模式-消息1)

    IPsec协议族中IKE Internet Key Exchange 是一种基于ISAKMP的协议 它为建立IPSec安全通信隧道提供了一种无痕密钥交换的机制 简单来说 IKE就是ISAKMP的扩展 为ISAKMP提供了更加高效 灵活和安全
  • ERP系统31.83版本发布,解决企业供应链管理难题

    近日 ERP系统31 83版本正式发布 无处不在的互联网 正在改变企业与用户的连接方式 一旦享受过什么叫实时 就再也无法忍受延迟 一旦感受过什么叫便捷 就再也无法忍受繁琐 企业如何全方位提高服务效率和用户体验 此次升级的智邦国际ERP系统3
  • [git] 小乌龟工具TortoiseGit记住账号密码 ——简单版操作指南

    如何让小乌龟 记住用户名和密码的操作指南 问题描述 步骤1 步骤2 问题描述 在小乌龟的使用过程中 每次push或者pull都要重复输入账号密码 非常麻烦 如果能记住账号密码就好了 这样就省去了时间 那么 怎么设置记住密码 步骤1 打开自己
  • JS中的类相关操作

    1 类相关操作 注意是 通过style属性来修改元素的样式 每修改一个样式 浏览器就需要重新渲染一次页面 这样的执行的性能是比较差的 而且这种形式当我们修改多个样式时 也不太方便 解决方案是 通过修改的class类名的方式 来达到效果 可以
  • 从零开始搭建游戏服务器第二天

    1 搭建开发环境 因为游戏服务器大多部署在linux系统下 所以这里选择的是Centos 7作为开发环境的镜像 预期以后的编译和调试也会在这个镜像上面进行开发 用镜像的方式开发有一个好处是可以随时打包带走 避免到一台新的机器上又要重新搭建开
  • 大数据--关联规则挖掘案例

    环境 虚拟机hive 本地spark python pyspark 数据 商品订单数据 商品种类数据 步骤 将数据上传到hdfs后 在python中完成hive表的创建 数据处理 关联规则挖掘 数据可视化 实现功能 对商品订单中的信息进行挖