本文转载自微信公众号《菜J学Python》,作者J哥,小男孩i。转载本文请联系蔡J学习Python公众号。大家好,我是J哥,当今社会是数字社会,各个领域最突出的应该是数据。目前,大数据已经变得越来越流行。无论在哪个领域,我们都可以访问数据,现在很多公司都积累了大量的数据。很多人开始往大数据开发和大数据分析这两个方向发展。那么你可能会问,这两个方向哪个更值得转行呢?很多人也在这两个方向上纠结。在这里我想告诉大家的是,没有最好的选择,你感兴趣的才是最好的选择。在这里,我选择大数据分析!下面让我们进入数据分析的一个环节——数据挖掘。01数据挖掘简介数据挖掘旨在让计算机根据现有数据做出决策。决策可以是预测明年的销售额、人口规模、阻止垃圾邮件、检测网站的语言。迄今为止,数据挖掘已经在很多应用中得到应用,甚至还有很多新的应用领域正在涌现。数据挖掘涉及算法、最优策略、统计、工程和计算机科学相关领域的知识。此外,我们还将使用其他领域的概念或知识,例如语言学、神经科学和城市规划。要想充分发挥数据挖掘的威力,算法肯定是必不可少的。(这里推荐读者刷LeetCode)一般来说,数据挖掘有这三个基本步骤:1.创建数据集。数据集可以直接反映一些真实事件;2.选择算法。只有选择合适的算法,才能更好地处理数据;3.优化算法。每个数据挖掘算法都有参数,这些参数包含在算法本身或用户添加的,这些参数将影响算法的具体决策。02亲和力分析案例下面我们来举例说明。不知道大家去超市购物的时候有没有发现,超市基本上是按照商品的种类来划分区域的,但是有些东西是有例外的。不同类型的商品放在产品旁边。不知道大家有没有注意到这个现象,或者有没有对此感到不解。在这里我要告诉大家的是,这样的安排也是合理的。这个原因就是商品之间的亲和力!前置知识:(1)defaultdict(int):初始化为0(2)defaultdict(float):初始化为0.0(3)defaultdict(str):初始化为''这里的defaultdict(function_factory)构建了一个类字典对象其中key的值是自己赋值的,但是values的类型是function_factory实例的类,有默认值。比如default(int)创建一个实例,其中字典对象中的任何值都是int,即使是不存在的key,d[key]也有一个默认值,也就是默认值的int()0。03代码实现现在进行代码部分:importnumpyasnpfromcollectionsimportdefaultdictdataset_filename="affinity_dataset.txt"features=["bread","milk","cheese","apple","banana"]#猜猜X=np是什么。loadtxt(dataset_filename)print(X[:5])#打印前五行的购物信息,统计购买苹果和香蕉的人数:num_apple_purchases=0#初始化一个变量forsampleinX:ifsample[3]==1:num_apple_purchases+=1print("{0}peopleboughtApples".format(num_apple_purchases))num_banana_purchases=0forsampleinX:ifsample[4]==1:num_banana_purchases+=1print("{0}peopleboughtbanana".format(num_banana_purchases))现在用于计算置信度规则的度数和支持度,我们可以将计算结果以字典的形式存储:valid_rules=defaultdict(int)invalid_rules=defaultdict(int)num_occurances=defaultdict(int)forsampleinX:forpremiseinrange(4):ifsample[premise]==0:continuenum_occurances[premise]+=1#当客户已经购买items,key对应的值变成1forconclusioninrange(4):ifpremise==conclusion:#访问相同key时直接跳过没有意义continueifsample[conclusion]==1:valid_rules[(premise,conclusion)]+=1else:invalid_rules[(premise,conclusion)]+=1得到所有必要的统计数据后,我们将计算每个规则的支持度和置信度。上面说了support就是满足的规则数:support=valid_rules#confidence的计算方法类似,遍历每条规则进行计算confidence=defaultdict(float)forpremise,conclusioninvalid_rules.keys():rule=(premise,conclusion)confidence[rule]=valid_rules[rule]/num_occurances[premise]statement一个函数,接收参数:特征索引值,支持字典,置信度字典,特征列表分别作为前提条件和结论。defprint_rule(前提,结论,支持,置信度,特征):premise_name=features[premise]conclusion_name=features[conclusion]print(“规则:ifapersonbuys{0}theywillalsobuy{1}”.format(premise_name,conclusion_name))print(“-Support:{0}".format(support[(premise,conclusion)]))print("-Confidence:{0:.3f}".format(confidence[(premise,conclusion)]))premise=1conclusion=3features=[“面包”,“牛奶”,“奶酪”,“苹果”,“香蕉”]print_rule(前提,结论,支持,置信度,特征)fromoperatorimportitemgettersorted_support=sorted(support.items(),key=itemgetter(1),reverse=True)排序完成后,可以输出支持度最高的前5条规则:forindexinrange(5):print("Rule#{0}".format(index+1))premise,conclusion=sorted_support[index][0]print_rule(premise,conclusion,support,confidence,features)以上就是我们这次学习的数据挖掘的产品亲和力分析。
