Python 计算大型数据集中规则的支持度
我尝试了这个方法,但是速度太慢了,因为数据集有900万行,所以我寻找一个有效的解决方案来执行此代码。使用此解决方案需要4秒钟以上的时间,这是将数据帧转换为numpy数组的方法还是执行此代码的所有方法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]
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。我的解决方案是精确的,但太慢了