如果同学不喜欢看理论,可以直接看后面王者数据分析的部分。

关联规则

  1. 如果不知道尿布和啤酒问题,建议百度百科,先有个大致的了解
  2. 我们找百度百科上面的例子来讲一下
    1. tid是交易单号,后面每一纵列中1代表购买,0代表没买。
    2. 我们只需要明白
      1. 支持度==概率(只有这个支持度足够大,说明我们选出的集合买的人多,对于商家的价值也就越大)
      2. 置信度==条件概率(这是算关联程度的)
  3. 关联规则挖掘过程主要包含两个阶段:第一阶段必须先从资料集合中找出所有的高频项目组(Frequent Itemsets),第二阶段再由这些高频项目组中产生关联规则(Association Rules),这里我们说说apriori算法。
    1. Apriori算法分为两部分

      1. 我们要算出符合支持度>0.4的集合

        1. 一开始我们的集合1列有个成员,我们可以看到羽毛球小于支持度0.4,所以跟他有关的我们的直接舍去
        2. 集合2列个我们同样得出支持度。
      2. 我们要算出里面符合置信度的。这里只有2项
        1. 网球拍=>网球,置信度3/5
        2. 网球=>网球拍,置信度3/4
      3. 也就数说网球拍=>网球,网球=>网球拍,这两个规则都满足要求
      4. 这里我们提一下:转自
        1. Apriori原理:如果某个项集是频繁的,那么它的所有子集也是频繁的。该定理的逆反定理为:如果某一个项集是非频繁的,那么它的所有超集(包含该集合的集合)也是非频繁的。Apriori原理的出现,可以在得知某些项集是非频繁之后,不需要计算该集合的超集,有效地避免项集数目的指数增长,从而在合理时间内计算出频繁项集。
        2. 在图中,已知阴影项集{2,3}是非频繁的。利用这个知识,我们就知道项集{0,2,3},{1,2,3}以及{0,1,2,3}也是非频繁的。也就是说,一旦计算出了{2,3}的支持度,知道它是非频繁的后,就可以紧接着排除{0,2,3}、{1,2,3}和{0,1,2,3}。
    2. 代码如下
      1. 如果我们计算组合直接调用 apriori(dataSet, min_support=0.5),修改dateset和min_support就行。
      2. 当然如果我们需要置信度和支持度和提升度,就需要arules(dataSet, min_support=0.5)
        1. 先说下什么叫提升度:

          提升度表示含有X的条件下,同时含有Y的概率,与只看Y发生的概率之比。提升度反映了关联规则中的X与Y的相关性,提升度>1且越高表明正相关性越高,提升度<1且越低表明负相关性越高,提升度=1表明没有相关性,即相互独立。

          Lift(X→Y) = P(Y|X) / P(Y)

        2. arules函数会返回rules|support|confidence|lift。最后直接通过DataFrame的方法提取符合条件的组合就行。

import itertools
import pandas as pddef createC1(dataSet):  # 'C1' for Candidate-itemset of 1 item.“C1”表示1个项目的候选项集# Flatten the dataSet, leave unique item 展平数据集,保留唯一项C1 = set(itertools.chain(*dataSet))  # Transform to a list of frozenset 转换为冻结集列表return [frozenset([i]) for i in C1]
# 计算集合的支持度
def scanD(dataSet, Ck, min_support): # 'Ck' for Candidate-set of k items. k项候选集的“Ck”support = {}# Calculate the support of all itemsets 计算所有项集的支持for i in dataSet:for j in Ck:if j.issubset(i):support[j] = support.get(j, 0) + 1n = len(dataSet)# Return litemset with supportreturn {k: v/n for k, v in support.items() if v/n >= min_support}def aprioriGen(Lk):  # 'Lk' for Large-itemset of k items. “Lk”表示k个项目的大项目集# Generate candidate k+1 itemset  from litemset  从litemset生成候选k+1项集lenLk = len(Lk)k = len(Lk[0])if lenLk > 1 and k > 0:return set([Lk[i].union(Lk[j])for i in range(lenLk - 1)for j in range(i + 1, lenLk)if len(Lk[i] | Lk[j]) == k +1])  #  Use set() to drop duplicatesdef apriori(dataSet, min_support=0.5): '''Return all large itemsets'''C1 = createC1(dataSet)L1 = scanD(dataSet, C1, min_support)L = [L1, ]       # Large-itemsetsk = 2while len(L[k-2]) > 1:Ck = aprioriGen(list(L[k-2].keys()))Lk = scanD(dataSet, Ck, min_support)if len(Lk) > 0:L.append(Lk)k += 1else:break# Flatten the freqSets    展平频率集d = {}for Lk in L:  d.update(Lk)return ddef rulesGen(iterable):  # Generate nonvoid proper subset of litemset. 生成litemset的非空真子集subSet = []for i in range(1, len(iterable)):subSet.extend(itertools.combinations(iterable, i))return [(frozenset(lhs), frozenset(iterable.difference(lhs)))for lhs in subSet] # Left hand rule and right hand rule 左手定则和右手定则def arules(dataSet, min_support=0.5):'''Return a pandas.DataFrame of 'rules|support|confidence|lift'    '''# Generate a dict of 'large-itemset: support' pairsL = apriori(dataSet, min_support) # Generate candidate rulesrules = []for Lk in L.keys():if len(Lk) > 1:rules.extend(rulesGen(Lk))# Calculate support、confidence、liftscl = []  # 'scl' for 'Support, Confidence and Lift'for rule in rules:lhs = rule[0]; rhs = rule[1]support = L[lhs | rhs]confidence = support / L[lhs]lift = confidence / L[rhs]scl.append({'LHS':lhs, 'RHS':rhs, 'support':support, 'confidence':confidence, 'lift':lift})return pd.DataFrame(scl)          if __name__ == '__main__':transactions = pd.read_csv("./Transactions.csv")baskets = transactions['Model'].groupby(transactions['OrderNumber']).apply(list)# 为了满足arules函数的变量,将其转化为嵌套的列表。dataSet = baskets.tolist()rules = arules(dataSet, min_support=0.02)conf = rules[(rules.confidence > 0.5) & (rules.lift > 1)]# print(conf.sort_values(by = 'support', ascending=True).head())else:print ('apriori imported!')

王者荣耀数据分析实战

  1. 如果知道ban/pick的同学,任何一款imba类的游戏都有自己的英雄搭配。随着比赛战队的不同和英雄属性的调整,英雄的搭配也就不同了。如果我们考虑不同战队的ban或者以选代ban,那数据就太少了。因为要排除版本更替带来的影响,我们选取了2018年冬冠EDG.M的战绩分析。
  2. 首先我们要先去找数据,如果你会爬虫,可以直接爬。数据地址。也可以用开发者模式(如果你有兴趣)。
  3. 经过一些数据清洗,这些我就不介绍了,爬下来的数据一般都很乱,不会写代码还要手动处理。可以看到有很多无用信息。
  4. 最后搞成只有英雄就行。                                                                                                                              
  5. 下面就简单了,直接调用我上面给的函数
    import pandas as pd
    import numpy as np
    import sys
    sys.path.append(r'../apriori')
    # python 原有apriori.py 文件故需要少些最后一个字母
    import apriorcsv = pd.read_csv("edg1.csv")content_list = csv['op_pick']with open('op_pick1.csv','a') as f:for content in content_list:f.write(content)f.write('\n')dataset = pd.read_csv('op_pick1.csv')
    data = np.array(dataset).reshape(-1, 5)print(aprior.apriori(data,min_support = 0.09))

    # 我取最后两个组合,对此王者官网确定,确定(154,花木兰),(199,公孙离),(162,鸟人),(134,达摩)
    # 这次的数据较少,只体现了edg在2018冬季冠军杯最喜欢的两队组合是(花木兰,公孙离)和(达摩,娜可露露)。也就是当时初晨(打野)和阿澈(下单)的组合较为稳定。

如果大家有兴趣可以自己试一试。

参考:

Python机器学习算法 — 关联规则(Apriori、FP-growth):https://www.cnblogs.com/lsqin/p/9342926.html

百度百科:https://baike.baidu.com/item/%E5%85%B3%E8%81%94%E8%A7%84%E5%88%99/6319603?fr=aladdin

Python_数据分析_关联规则和王者荣耀数据分析实战相关推荐

  1. python脚本 游戏赚金币兑换钱_一种王者荣耀刷金币方法(python脚本)

    所用工具环境 python3.6.5 和 支持自动鼠标键盘点击等编程的pyautogui功能包 windows PC,安卓模拟器bluestacks,安装王者荣耀 基本思路 王者荣耀有闯关任务模式可以 ...

  2. 安卓车机root改流浪地球_教你王者荣耀改战区

    王者荣耀怎么改荣耀战区呢?今天小编给大家带来的是王者荣耀改荣耀战区方法哦!想知道的小伙伴就和小编一起来看看吧! 1.首先玩家需要下载一个多开器,保证能够多开王者荣耀,多开器安卓的可以直接市场里面找,苹 ...

  3. td里面字体大小怎么改_教你王者荣耀改战区

    王者荣耀怎么改荣耀战区呢?今天小编给大家带来的是王者荣耀改荣耀战区方法哦!想知道的小伙伴就和小编一起来看看吧! 1.首先玩家需要下载一个多开器,保证能够多开王者荣耀,多开器安卓的可以直接市场里面找,苹 ...

  4. 荣耀v10玩flash游戏_沫子玩王者荣耀被打哭?直言这个游戏比吃鸡还难玩

    对于经常玩<绝地求生>的小伙伴,说起吃鸡一姐沫子相信不少人都会有所耳闻,职业选手出身的沫子,操作在很多技术主播中都是相当排前的,再加上有一颗大大咧咧的心脏,直播间内也是不缺乏欢声笑语.然而 ...

  5. qq令牌码怎么提取_和平精英王者荣耀微视集令牌活动玩法介绍 王者荣耀英雄令怎么刷...

    微视最近推出了和游戏联动的活动,迎春嘉年华,在这个活动中,王者荣耀/和平精英等游戏的玩家可以通过参加活动,收集令牌,兑换奖励,奖励非常丰厚,收集精英令和英雄令可以获得免费永久皮肤等奖励,那么自己一个人 ...

  6. 安卓listview点击空白事件_安卓最新王者荣耀空白名

    适用平台:Android 获取方式: 关注下方公众号,回复<2015> ①安卓最新王者荣耀空白名v2.0 软件介绍: 王者空白名最新版2.0来了.平时在王者荣耀看到别人的空白昵称是不是很羡 ...

  7. 学习excel数据分析_为什么Excel是学习数据分析的最佳方法

    学习excel数据分析 它是视觉的,它是透明的,并且使事情变得简单. (It's visual, it's transparent, and it keeps things simple.) The ...

  8. 七月在线python数据分析_七月在线Python基础+数据分析班+爬虫项目

    资源介绍 七月在线Python基础+数据分析班+爬虫项目 目录 ├─Python基础入门班2017年 ││代码.rar │└─视频 │xa0 xa0 01.第1课 入门基础.rar │xa0 xa0 ...

  9. 利用python进行数据分析_资料 | 利用Python进行数据分析

    下载地址:https://www.yanxishe.com/resourceDetail/1443?from=leiphonecolumn_res0518 以下内容节选自豆瓣: 内容简介 · · · ...

最新文章

  1. 使用Identity Server 4建立Authorization Server (2)
  2. ASP.NET的一套笔试题
  3. DOM0,DOM2,DOM3事件,事件基础知识入门
  4. 怎样用css设置图片下的投影,css – 做这种投影的最佳方法是什么?
  5. [js] 使用js实现一个图片剪裁的功能
  6. 人工智能的前景:更高智慧的体的诞生
  7. Lua程序设计--全局变量
  8. div内容过长自动省略号
  9. SQL Server – QP的另一个X射线
  10. CentOS7.1安装 Vsftpd FTP 服务器
  11. python如何获得列表中某个元素的index
  12. Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案 [转]
  13. MatlabR2021b自学笔记一:安装教程(附安装包链接)
  14. 人工智能终将自我进化?排除无用功能,让自己更加完美?
  15. excel 画散点图 怎么设置图片的分辨率_最全的Excel图表的基本类型与选择
  16. wstmall wstmart wstshop区别
  17. Learn OpenGL 笔记7.4 PBR-Specular IBL(Image based lighting-特殊的基于图像的照明)
  18. clk子系统 - 代码分析
  19. KOL营销→品牌IP,小红书品牌升级方法论
  20. CH2-Android常见界面布局

热门文章

  1. ca根证书校验 java_JAVA-Android-根据CA证书验证X509Certificate(颁发者证书)
  2. 优化:java递归实现笛卡尔积算法
  3. 电路——判断电压源和电流源是发出还是吸收功率
  4. WPF异常:调用线程无法访问此对象,因为另一个线程拥有该对象。
  5. Chrome 66之后禁止网页声音自动播放问题解决
  6. java开发人员工资多少钱_全世界有多少Java开发人员?
  7. 将自定义程序写入U盘引导区,并在真机执行
  8. uniapp 动画的实现
  9. ppt学习06——排版
  10. 7招,远离大数据杀熟!