Python 计算大型数据集中规则的支持度

Python 计算大型数据集中规则的支持度,python,pandas,function,numpy,optimization,Python,Pandas,Function,Numpy,Optimization,我尝试了这个方法,但是速度太慢了,因为数据集有900万行,所以我寻找一个有效的解决方案来执行此代码。使用此解决方案需要4秒钟以上的时间,这是将数据帧转换为numpy数组的方法还是执行此代码的所有方法 df = pd.Series([["26"], ["81", "15", "27"], ["50"], ["8"], ["81", "15"], ["10"], ["81"]]).to_frame(name='itemsets') itemsets 0 [26]

我尝试了这个方法,但是速度太慢了,因为数据集有900万行,所以我寻找一个有效的解决方案来执行此代码。使用此解决方案需要4秒钟以上的时间,这是将数据帧转换为numpy数组的方法还是执行此代码的所有方法

df = pd.Series([["26"], ["81", "15", "27"], ["50"], ["8"], ["81", "15"], 
["10"], ["81"]]).to_frame(name='itemsets')


       itemsets
0          [26]
1  [81, 15, 27]
2          [50]
3           [8]
4      [81, 15]
5          [10]
6          [81]

rule = [["81"],["15"]]
def支持(规则):
规则=规则[0]+规则[1]
支持=0
支持=总和([设置(规则)IIUC:

规则定义为

def support(rule):
    rule = rule[0] + rule[1]
    support = 0
    support = sum([set(rule)<=set(row) for row in df])
return support/SIZE

when i try it on the largest dataset which contains 9 million transactions the result is :

support(rule)
0.001039247773829178

Numpy替代方案 我们应该加快速度

rule = ['81', '15']

df.itemsets.apply(set).le(set(rule)).mean()

0.2857142857142857
IIUC:

规则定义为

def support(rule):
    rule = rule[0] + rule[1]
    support = 0
    support = sum([set(rule)<=set(row) for row in df])
return support/SIZE

when i try it on the largest dataset which contains 9 million transactions the result is :

support(rule)
0.001039247773829178

Numpy替代方案 我们应该加快速度

rule = ['81', '15']

df.itemsets.apply(set).le(set(rule)).mean()

0.2857142857142857


你能不能也提供你想要的结果,并更详细地描述你想要达到的目标?!你不清楚你想要的结果是什么。我编辑了这篇文章,你能看到吗?你不清楚你的函数是如何在整个系列中应用的,或者
SIZE
是从哪里来的。你应该清楚地概述问题中的步骤h您提供的示例数据集。大小是整个数据集的大小,数据帧大小等于8286763您是否也可以提供您想要的结果,并更详细地描述您试图实现的目标?!还不清楚您想要的结果是什么。我编辑了这篇文章,您能看到吗s应用于整个系列,或者应用于
SIZE
的来源。您应该清楚地概述您提供的示例数据集问题中的步骤。SIZE是整个数据集的大小,即dataframe SIZE等于8286763。它不返回真值,需要5秒。它太慢,并且不返回ex行为值“它不返回真实值”是什么意思?你的函数返回了一个数字。我的函数也返回了一个数字。如果不是数字,你想要什么作为输出?当我在数据集上尝试你的函数时,它没有。返回规则的确切支持,以便我可以比较,给定你提供的输入,结果或确切值是多少?还有,
大小是多少?我假设它是e dataframe.我尝试了这个规则['24'、'25'、'20'],它返回0.011245615785078我的解决方案是精确的,但太慢了,它不返回真值,需要5秒钟,太慢了,不返回真值你说“它不返回真值”是什么意思?你的函数返回了一个数字。我的函数也返回了一个数字。如果不是数字,你想要什么作为输出?当我在数据集上尝试你的函数时,它没有。返回规则的确切支持,以便我可以比较,给定你提供的输入,结果或确切值是多少?还有,
大小是多少?我假设它是我尝试使用这个规则[24'、'25'、'20'],它返回0.011245615785078。我的解决方案是精确的,但太慢了