python中基于参数的动态If-else
我在一个用户细分过程(“RFM”细分)中工作,根据用户所在的“桶”对用户进行分类 举个简单的例子,根据用户的活动和购买情况(他们的RFM分数),用户可能在“冠军”或“不能输”的范围内 所有这些都是使用一个算法计算的,该算法在这里解释: 最后,按本例计算:python中基于参数的动态If-else,python,analytics,Python,Analytics,我在一个用户细分过程(“RFM”细分)中工作,根据用户所在的“桶”对用户进行分类 举个简单的例子,根据用户的活动和购买情况(他们的RFM分数),用户可能在“冠军”或“不能输”的范围内 所有这些都是使用一个算法计算的,该算法在这里解释: 最后,按本例计算: if RFM_Score >= 9: return "Cannot lose them" elif ((RFM_Score >= 8) and (RFM_Score < 9)): return "Winners
if RFM_Score >= 9:
return "Cannot lose them"
elif ((RFM_Score >= 8) and (RFM_Score < 9)):
return "Winners"
如果RFM\U得分>=9:
return“不能丢失它们”
elif((RFM_分数>=8)和(RFM_分数<9)):
返回“赢家”
现在,我想让用户能够配置存储桶的边界(和名称)
是否可以构建可通过参数配置的动态if-else结构?
我想到了某种字典,比如:
#The first value in the tuple is the lowerbound, the second value is the upperbound.
params={'cannot lose':(9,), 'winners':(8, 9), [...] 'promising':(4, 5)}
def find_class(value):
for classname, boundaries in params:
if value >= boundaries[0]:
if len(boundaries) == 1:
return classname
elif value < boundaries[1]:
return classname
元组中的第一个值是下界,第二个值是上界。
params={'cannotlose':(9,),'winners':(8,9),[…]“providing':(4,5)}
def find_类(值):
对于classname,参数中的边界:
如果值>=边界[0]:
如果len(边界)==1:
返回类名
elif值<边界[1]:
返回类名
然而,我感到震惊的是,这将使算法变得更加复杂(想象一下,我们正在对可能数以千万计的条目运行该算法),而我认为由于python解释器的实现方式,简单的if/else将是最快的
我想了解一下:(1)dict方法可以接受吗?哪些是可能的衰退;(2) 速度慢得多吗?你应该看看熊猫。剪切可以将值划分为多个桶,并相应地标记它们:
import pandas as pd
values = [8,10,6,4,4,1]
labels = pd.cut(values, bins = [0,4,5,8,10],
labels = ["not so promising", "promising", "winners", "cannot lose them"])
我认为这是一个非常优化的版本,它的性能可能至少不会比基于foor循环和if-else语句的自实现版本差多少
默认情况下,箱子是右关闭的间隔,因此在上面的示例中,它应该是((0,4],(4,5],(5,8],(8,10])。这意味着该点被划分为大于左界但不大于右界的区间。此行为可通过参数
right
或include_lowest
进行调整(请参阅)这是一个好主意。我会测试它,看看它是否有效。然后我会发布我的反馈。我刚刚测试过。它非常简单,并且利用了熊猫优化的计算。但是,我似乎无法轻松想象垃圾箱是如何制作的(哪个“类”在哪个范围内)。你能在回答中更好地解释一下吗?