关联分析——apprior算法

news2024/10/7 10:13:38

1.txt文件的打开与关闭
2.list的操作
3.字典的创建及保存
4.txt文件的创建与写入

输入:
在这里插入图片描述
结果:
在这里插入图片描述

import os


#input
min_sup=4
max_item=[]
data = []
transaction=[]

curent_transaction,current_sup=[],[]
result_transaction,result_sup=[],[]

#Storage results
result_dict={}

#exameple file
transactions_file_path="example_data.txt"

#Calculate sup
def apriori(current_itemset):
    itemset=[]
    for i in current_itemset:
        # print(i)
        m=0
        for j in  transaction :
            #判断i是否为list类型
            if  not isinstance( i,list):
                for k in j:
                    if (i== k):
                        m=m+1
            else:
                m_set = list(set(i).intersection(set(list(j))))
                if len(m_set)==len(i):
                    m=m+1

        if m>=min_sup:
            result_dict.update({' '+str(i).replace(',','').replace('[','').replace(']','')+' #SUP:'+' ':m})
            itemset.append(i)
    return itemset,result_dict


#Count the elements in the current itemset
def item_element(new_transaction):
    element=[]
    if not isinstance(new_transaction[0],list):
        for ele_t in new_transaction:

            element.append(ele_t)
    else:
        element = new_transaction[0]
        for transaction_cell in new_transaction:

            element = list(set(element).union(set(transaction_cell)))
    return element


#Generate a new itemset and record the itemset after each update
def transactions(transaction2,element):
    new_transaction=[]
    #Judge whether transaction is a list type
    if not isinstance(transaction2[0],list) :
        for i_elment in transaction2:

            for j_element in element:
                transport_item = []
                transport_item.append(i_elment)
                if i_elment!=j_element:
                    transport_item.append(j_element)
                    new_transaction.append(transport_item)
    else:
        for transaction_cell in transaction2:
            diffrence_transaction_cell= list(set(element).difference(set(transaction_cell)))

            for diffrence_element in diffrence_transaction_cell:
                transport_item=[]
                for item_element in transaction_cell:
                    transport_item.append(item_element)

                transport_item.append(diffrence_element)

                new_transaction.append(transport_item)

    #删除重复的item
    itemset=[]
    Number_transaction=len(new_transaction)

    flag=[1]* Number_transaction

    for  i  in range(Number_transaction-1):
        # j_d = i + 1
        for j_d in range(i+1,Number_transaction):
            m=list(set(new_transaction[i]).union(set(list(new_transaction[j_d]))))
            if len(m)==len(new_transaction[j_d]):
                flag[j_d]=0

    for i in range(Number_transaction):
        if flag[i]==1:
            itemset.append(new_transaction[i])

    return itemset



#current_itemset表示随机组合的item的集合,也即当前长度的transaction。
#transaction表示输入的集合,即已知的交易类目集合。
#minsup表示最小支持度
#max_item表示最大itemset中类目编号最大的值
def entrance(current_itemset):
    element=item_element(current_itemset)
    current_itemset= transactions(current_itemset, element)

    if len(current_itemset)==0:
        return result_transaction, result_sup
    else:

        if len(current_itemset[0]) <= len(transaction[0]) :
                curent_transaction,current_sup=apriori(current_itemset)
                result_transaction.append(curent_transaction)
                result_sup.append(current_sup)
                #回调函数,Callback function
                return entrance(curent_transaction)
    return result_transaction,result_sup



#Program entry
with open(transactions_file_path,"r") as file:
    for line in file.readlines():
        line = line.strip("\n").split(" ")
        data =list(map(int, line))
        transaction.append(data)
        # length.append(len(transaction))
        max_item.append(max(data))
    max_number = int(max(max_item))
    file.close()
    #生成第一次的itemset,Generate the first itemset
    for i in range(1,max_number+1):
        curent_transaction.append(i)



curent_transaction,current_sup=apriori(curent_transaction)

entrance(curent_transaction)

#Write the results to the txt document
result_file=open('itemet_sup.txt',mode='w')
for item_sup in result_dict.items():
    for value in range(len(item_sup)):
        str1=item_sup[value]

        result_file.write(str(str1))

    result_file.write("\n")

result_file.close()

#Console Display Results
print(result_dict)



# for sup_len in result_sup:
#     for sup in sup_len:
#         print(result_transaction[sup_len][sup], end="")
#         print(" ",end="")
#         print("#sup: ",end="")
#         print(sup)
#         sup_i=+1
# # for sup_item in result_sup:
# #     for sup in sup_item:
# #         for result_item in result_transaction:
# #             for item in result_item:
# #                 print(item,end="")
# #                 print(" ",end="")
# #                 print("#sup: ",end="")
# #                 print(sup)






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线索二叉树操作详解(详细图例+cpp实现+源码)

文章目录线索二叉树中序线索二叉树构造线索二叉树节点的线索化其他操作销毁二叉搜索树获取中序遍历的第一个节点获取中序遍历的最后一个节点输出中序遍历序列逆序输出中序遍历序列源码线索二叉树 线索二叉树又称为二叉树的线索化。 在一个具有n个节点的二叉树中&#xff0c;它…

Linux零基础入门(一)初识Linux

Linux零基础入门&#xff08;一&#xff09;初识Linux前言操作系统概述一 操作系统概述1 硬件和软件2 操作系统二 初识Linux1 Linux的诞生2 Linux内核3 Linux发行版三 虚拟机介绍1 虚拟机四 VMware WorkStation安装1 虚拟化软件五 在VMware上安装Linux1 下载CentOS操作系统六 远…

[附源码]计算机毕业设计springboot体育馆场地预约管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SwiftUI 如何快速识别视图(View)界面的刷新是由哪个状态的改变导致的?

功能需求 在 SwiftUI 中,我们视图的界面可能在不经意间被意外刷新了。这时,我们希望知道是该视图中的哪个状态导致了刷新。在包含众多状态的复杂视图中,这往往很难实现。 如上图所示,当我们随机改变视图中的状态时,可以在调试控制台中轻松看到是哪个状态导致了视图的刷新…

什么样的跨网数据摆渡系统,能够减少数据泄密的风险?

企业在公司正常运行下难免会产生一些重要数据或者敏感数据&#xff0c;这些都是企业在发展过程中积累下来的重要数据资产&#xff0c;对企业的发展至关重要。这些数据资产往往关联着企业的核心数据&#xff0c;一旦面临泄露&#xff0c;不仅仅会影响企业发展&#xff0c;甚至会…

词法分析(编译原理不用慌)

目录 一.简单版 二.简单版&#xff08;文本保存&#xff09; c版 运行结果&#xff1a; Java版 运行结果&#xff1a; 三.第三版&#xff08;文本保存&#xff09; c版 运行结果&#xff1a; 一.简单版 #include<stdio.h> #include<iostream> using namesp…

独立站SaaS系统站群模式怎么玩

做独立站的人都知道“站群”这个游戏&#xff0c;意思是通过建站工具一次性建好几百个或者几千个独立站。各个独立站卖的品类比较垂直&#xff0c;不会有太多SKU。销量好的站会留着精细化运营&#xff0c;没流量的就放弃。 使用脸书或谷歌和其他广告渠道来测试产品。每个产品…

Unity3d bounds包围盒 和collider碰撞器区别

Bounds 外包围盒 Bounds 叫作外包围盒、边界框、外扩矩形.是struct 结构体。而我们获得Bounds的主要途径有三种&#xff1a;Render,Collider,Mesh。 Render.bounds 世界坐标 Collider.bounds 世界坐标 Mesh.bounds 本地坐标 var m GetComponent<MeshFilter>().bound…

抖音用户浏览行为数据分析与挖掘

下文部分代码省略&#xff0c;完整项目代码及数据集链接&#xff1a;抖音用户浏览行为数据分析与挖掘 目录1.特征指标构建0. 项目介绍与说明**数据集说明**浏览行为1. 数据简单处理2. 特征指标构建用户指标分析&#xff1a;作者指标分析&#xff1a;作品指标分析&#xff1a;3.…

5分钟快速上手Nmap指令(基于Kali系统)

前言正文1、修改Kali系统中网络配置2、Nmap简介2.1 用途2.2优势2.3 相关知识3、Nmap中最常用的命令3.1 单主机扫描3.2 多目标扫描3.3 检测目标主机漏洞3.3 时序选择3.4 保存4、kali系统中常见报错参考文献前言 本篇为理论篇&#xff0c;主要为CTF攻防做铺垫&#xff0c;围绕 基…

[附源码]SSM计算机毕业设计影院售票系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

mac m1 mysqlworkbench8 Unknown table ‘COLUMN_STATISTICS‘

原因&#xff1a;本地mysql版本是8&#xff0c;远程是mariaDb-10&#xff0c;版本不匹配导致报错。 仔细看mysqlworkbench8.0导出时的错误信息&#xff0c;有mysqldump的具体路径。 mac os (m1, ventura系统)&#xff0c;具体位置是这里&#xff1a; /Applications/MySQLWor…

【树莓派开发日记1】1.3k预算的树莓派+显示屏+键鼠的选型与拆箱物理安装

树莓派开发日记1 经过了漫长的上课与考试周期&#xff0c;终于有时间闲下来进行技术栈的开发与学习 作为立志成为优秀机器人开发者的青年工程师&#xff08;青春版&#xff09;&#xff0c;不可能不去了解微机处理系统和Ubuntu系统&#xff0c;所以在此又给自己开了一个大坑 …

OpManager 帮助排查网络延迟问题

什么是网络延迟 网络中的延迟是指数据通过网络传输到其预期目的地所需的时间。它通常表示为往返延迟&#xff0c;即数据从一个位置传输到另一个位置所需的时间。 什么原因导致网络延迟 有四个主要原因会影响网络延迟。其中包括&#xff1a; 传输介质&#xff0c;例如 WAN 或…

JUC并发编程第六篇,带你了解Java内存模型JMM

JUC并发编程第六篇&#xff0c;带你了解Java内存模型JMM一、Java Memory Model&#xff08;Java内存模型&#xff09;是什么&#xff1f;二、JMM规范三大特性1. 可见性2. 原子性3. 有序性三、JMM规范下多线程对变量的读写过程四、JMM规范下多线程先行发生原则&#xff08;happe…

Oracle面试题整理

目录 Oracle面试题整理 1.MySQL和Oracle的区别&#xff1a; 2.Oracle中function和procedure的区别&#xff1f; 3. 比较truncate和delete命令 &#xff1f; 4.oralce中 rowid, rownum的定义 5. 事务的特性&#xff08;ACID&#xff09;是指什么 6. 列举几种表连接方式…

[附源码]计算机毕业设计springboot天狗电子商城系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

plink2.0和plink1.9的忧伤笔记

虽然plink2.0已经存在好久了&#xff0c;但是一直用的都是plink1.9&#xff0c;因为语法熟悉。更主要是plink2.0语法变动太大&#xff0c;害怕步子迈得太大了…… 今天看一下plink2.0的读入和输出数据常用参数&#xff0c; plink2.0用是不会用的&#xff0c;2022年都不会用&am…

计算机网络基础

前言 计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的&#xff0c;两者需要进行通信&#xff0c;必须要在一定的标准上进行。一个很形象地比喻就是…

平时健身买什么耳机好、分享五款最好的运动耳机推荐

不少人喜欢在健身房或者户外运动中使用手机或者MP3来听音乐&#xff0c;这种方式不仅可以减少运动中的枯燥感&#xff0c;而且那些节奏较强的音乐还能够进一步激发人们的运动潜能&#xff0c;达到事半功倍的效果。作为音乐传递的桥梁&#xff0c;一款佩戴舒适的运动耳机是必不可…