31丨关联规则挖掘(下):导演如何选择演员?
31丨关联规则挖掘(下):导演如何选择演员?
讲述:陈旸
时长07:42大小7.06M
如何使用 Apriori 工具包
挖掘导演是如何选择演员的
总结
赞 9
提建议
精选留言(30)
- mickey2019-03-05最小支持度为0.1: { 1: {('倪大红',): 2, ('刘德华',): 2, ('姜文',): 2, ('巩俐',): 5, ('李雪健',): 2, ('章子怡',): 3, ('葛优',): 2, ('郭涛',): 2, ('陈道明',): 2}, 2: {('倪大红', '巩俐'): 2, ('巩俐', '郭涛'): 2}} [{倪大红} -> {巩俐}, {郭涛} -> {巩俐}] 最小支持度为0.05: 太多了。。。。 结论:不管男一号选谁,女一号必须是巩俐。展开
作者回复: 哈哈
共 2 条评论12 - third2019-02-22个人的直觉感觉,这个应该跟数据集的大小和特点有关。
编辑回复: 对 和数据集特点有关系,不过数据集大的情况下,不好观察特征。我们可以通过设置最小值支持度和最小置信度来观察关联规则的结果。 一般来说最小支持度常见的取值有0.5,0.1, 0.05。最小置信度常见的取值有1.0, 0.9, 0.8。可以通过尝试一些取值,然后观察关联结果的方式来调整最小值尺度和最小置信度的取值。
11 - 滢2019-04-20选的张艺谋爬取数据,开始的时候设置min_support = 0.5 没有分析出项集,还以为是数据有错,结果发现是支持度设的太高来,没有达到条件的。好尴尬~ #第二步:用Apriori算法进行关联分析 #数据加载 director = '张艺谋' #写CSV文件 path = '/Users/apple/Desktop/GitHubProject/Read mark/数据分析/geekTime/data/' file_name = path + director +'.csv' print(file_name) lists = csv.reader(open(file_name, 'r', encoding='utf-8-sig')) data =[] for names in lists: name_new = [] for name in names: name_new.append(name.strip()) if len(name_new[1:]) >0: data.append(name_new[1:]) print('data--',data) #挖掘频繁项集合关联规则 items,rules = apriori(data,min_support=0.05,min_confidence=1) print(items) print(rules) 输出结果: {1: {('倪大红',): 3, ('傅彪',): 2, ('刘佩琦',): 2, ('刘德华',): 2, ('姜文',): 2, ('孙红雷',): 3, ('巩俐',): 9, ('李保田',): 3, ('李曼',): 2, ('李雪健',): 5, ('杨凤良',): 2, ('牛犇',): 2, ('章子怡',): 3, ('葛优',): 3, ('赵本山',): 2, ('郭涛',): 2, ('闫妮',): 2, ('陈道明',): 2}, 2: {('倪大红', '巩俐'): 2, ('傅彪', '李雪健'): 2, ('刘佩琦', '巩俐'): 2, ('孙红雷', '赵本山'): 2, ('巩俐', '李保田'): 2, ('巩俐', '杨凤良'): 2, ('巩俐', '葛优'): 2, ('巩俐', '郭涛'): 2, ('李保田', '李雪健'): 2}} [{傅彪} -> {李雪健}, {刘佩琦} -> {巩俐}, {赵本山} -> {孙红雷}, {杨凤良} -> {巩俐}, {郭涛} -> {巩俐}]展开
作者回复: Good Job 滢
共 2 条评论6 - Miracle2020-02-06通过一天的学习,结合老师的讲解,算是关联规则入了一个门吧。 老师讲的真的很清晰了,并且实战也很好,大赞一个, 把笔记整理到博客了,又补充了几个实战项目,并且补充了一个mlxtend包实现apriori算法,并分析了不同。 https://blog.csdn.net/wuzhongqiang/article/details/1041961944
- 一 青(๑• . •...2019-10-25老师,FP-growth 在python有集成吗,,想用fp-growth试试
作者回复: 有一个工具包 import fptools as fp 你可以试试
5 - Geeky_Ben2020-07-03请问一下各位大神,为什么我这个代码只把每一页的第一个电影的资料下载下来。我反复核对了很多次,跟导师的一样... 苦恼~~@@ from efficient_apriori import apriori from lxml import etree import time from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager import csv driver = webdriver.Chrome(ChromeDriverManager().install()) director = u'宁浩' file_name = './' + director + '.csv' base_url = 'https://movie.douban.com/subject_search?search_text='+director+'&cat=1002&start=' out = open(file_name,'w',newline = '',encoding='utf-8-sig') csv_write = csv.writer(out,dialect='excel') flags = [] def download(request_url): driver.get(request_url) time.sleep(1) html = driver.find_element_by_xpath("//*").get_attribute("outerHTML") html = etree.HTML(html) movie_lists = html.xpath("/html/body/div[@id='wrapper']/div[@id='root']/div[1]//div[@class='item-root']/div[@class='detail']/div[@class='title']/a[@class='title-text']") name_lists = html.xpath("/html/body/div[@id='wrapper']/div[@id='root']/div[1]//div[@class='item-root']/div[@class='detail']/div[@class='meta abstract_2']") num = len(movie_lists) if num > 15: movie_lists = movie_lists[1:] name_lists = name_lists[1:] for (movie,name_list) in zip(movie_lists,name_lists): if name_list.text is None: continue print(name_list.text) names = name_list.text.split('/') if names[0].strip() == director and movie.text not in flags: names[0] = movie.text flags.append(movie.text) csv_write.writerow(names) print('OK') print(num) if num >= 14: return True else: return False start = 0 while start <10000: request_url = base_url + str(start) flag = download(request_url) if flag: start = start + 15 else: break out.close() print('Finished')展开
作者回复: if num >= 14: return True else: return False 这部分代码需要在for循环外面。当for循环中有return时,一旦return运行,则for循环会被终止。
2 - JustDoDT2020-04-08Python3.6 遇到如下错误及解决方案: 运行时报错: ModuleNotFoundError: No module named 'dataclasses' 是因为efficient_apriori 依赖 dataclasses 安装 dataclasses 即可 pip install dataclasses
作者回复: 感谢JustDoIt同学的分享,相似报错的同学可以看看
2 - 普罗米修斯2019-04-11如果要使用FP-Growth这个算法,是直接使用FP-Growth这个包吗?
作者回复: import fptools as fp 这个也可以
2 - 滢2019-03-11老师能推荐几本有关 概率论、统计学、运筹学的书嘛 ,感觉大学的课本比较枯燥
作者回复: 看来你还是对统计学感兴趣,可以看下《统计数据会说谎》 这本不错,哈哈
2 - third2019-02-22感觉:1,张艺谋喜欢用那些组合的人 2.某些组合出现的匹配率 最小支持度为0.1,{1: {(' 巩俐 ',): 9, (' 李雪健 ',): 5}} 最小支持度为0.05,{1: {(' 葛优 ',): 3, (' 巩俐 ',): 9, (' 姜文 ',): 2, (' 郭涛 ',): 2, (' 李雪健 ',): 5, (' 陈维亚 ',): 2, (' 张继钢 ',): 2, (' 刘德华 ',): 2, (' 倪大红 ',): 3, (' 傅彪 ',): 2, (' 牛犇 ',): 2, (' 孙红雷 ',): 2, (' 闫妮 ',): 2, (' 陈道明 ',): 2, (' 赵本山 ',): 2, (' 杨凤良 ',): 2, (' 章子怡 ',): 3, (' 李保田 ',): 3, (' 刘佩琦 ',): 2}, 2: {(' 巩俐 ', ' 李保田 '): 2, (' 巩俐 ', ' 刘佩琦 '): 2, (' 葛优 ', ' 巩俐 '): 2, (' 李雪健 ', ' 傅彪 '): 2, (' 李雪健 ', ' 李保田 '): 2, (' 巩俐 ', ' 郭涛 '): 2, (' 陈维亚 ', ' 张继钢 '): 2, (' 巩俐 ', ' 杨凤良 '): 2, (' 巩俐 ', ' 倪大红 '): 2}} [{ 刘佩琦 } -> { 巩俐 }, { 傅彪 } -> { 李雪健 }, { 郭涛 } -> { 巩俐 }, { 张继钢 } -> { 陈维亚 }, { 陈维亚 } -> { 张继钢 }, { 杨凤良 } -> { 巩俐 }]展开
作者回复: Good Job
2 - 周志翔2019-07-16为什么min_support只有设置成0.3才能得到老师的结果: {1: {('徐峥',): 5, ('黄渤',): 6}, 2: {('徐峥', '黄渤'): 5}} [{徐峥} -> {黄渤}] 如果是0.5,只有{1: {('黄渤',): 6}}2
- 听妈妈的话2019-03-23我觉得mtime网上的电影信息更加全面,就从上面爬取的信息 最小支持度为0.1: {1: {('倪大红',): 3, ('孙红雷',): 3, ('巩俐',): 9, ('李保田',): 4, ('李雪健',): 4, ('章子怡',): 3, ('葛优',): 3, ('赵本山',): 3}, 2: {('巩俐', '李保田'): 3}} [] 最小支持度为0.05: {1: {('丁嘉丽',): 2, ('倪大红',): 3, ('傅彪',): 2, ('刘佩琦',): 2, ('刘德华',): 2, ('姜文',): 2, ('孙红雷',): 3, ('巩俐',): 9, ('张艺谋',): 2, ('李保田',): 4, ('李雪健',): 4, ('牛犇',): 2, ('窦骁',): 2, ('章子怡',): 3, ('葛优',): 3, ('董立范',): 2, ('赵本山',): 3, ('郑恺',): 2, ('郭涛',): 2, ('闫妮',): 2, ('陈道明',): 2, ('齐达内·苏阿内',): 2}, 2: {('倪大红', '巩俐'): 2, ('傅彪', '李雪健'): 2, ('刘佩琦', '巩俐'): 2, ('孙红雷', '赵本山'): 2, ('巩俐', '李保田'): 3, ('巩俐', '葛优'): 2, ('巩俐', '郭涛'): 2, ('李保田', '李雪健'): 2, ('李雪健', '赵本山'): 2, ('牛犇', '董立范'): 2}} [{傅彪} -> {李雪健}, {刘佩琦} -> {巩俐}, {郭涛} -> {巩俐}, {董立范} -> {牛犇}, {牛犇} -> {董立范}]展开
作者回复: Good Sharing
1 - mickey2019-03-01安装工具包报错,请问怎样解决? E:\DevelopTool\Python\Python27\Scripts>pip install efficient-apriori DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future versio ill drop support for Python 2.7. Collecting efficient-apriori Using cached https://files.pythonhosted.org/packages/d2/7b/71c12582b2e1b561e76cf52239bcece4ced6aac9c93974b7fdede5f407e7/efficient_apriori-0.4.5.tar.gz Complete output from command python setup.py egg_info: Traceback (most recent call last): File "<string>", line 1, in <module> File "c:\users\wujian\appdata\local\temp\pip-install-p5k8a3\efficient-apriori\setup.py", line 15, in <module> from efficient_apriori import __version__ File "c:\users\wujian\appdata\local\temp\pip-install-p5k8a3\efficient-apriori\efficient_apriori\__init__.py", line 9, in <module> from efficient_apriori.apriori import apriori File "c:\users\wujian\appdata\local\temp\pip-install-p5k8a3\efficient-apriori\efficient_apriori\apriori.py", line 12 def apriori(transactions: typing.List[tuple], min_support: float=0.5, ^ SyntaxError: invalid syntax ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in c:\users\wujian\appdata\local\temp\pip-install-p5k8a3\efficient-apriori\展开
作者回复: python 3
共 2 条评论1 - JingZ2019-02-28# 关联规则挖掘 出现错误 selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. 参考https://blog.csdn.net/liaoningxinmin/article/details/82686185 按正常的套路Mac下载了Chromedriver,将解压好的文件放入/usr/local/bin目录中,由于mac的很多目录都是隐藏的,所以我们按快捷键command+shift+g就可以打开这个目录,接着将解压好的驱动放入此目录即可 min_support=0.1 频繁项集: {1: {('倪大红',): 3, ('孙红雷',): 3, ('巩俐',): 9, ('李保田',): 3, ('李雪健',): 4, ('章子怡',): 3, ('葛优',): 3}} 关联规则: [] min_support=0.05 频繁项集: {1: {('倪大红',): 3, ('傅彪',): 2, ('刘佩琦',): 2, ('刘德华',): 2, ('姜文',): 2, ('孙红雷',): 3, ('巩俐',): 9, ('李保田',): 3, ('李雪健',): 4, ('杨凤良',): 2, ('牛犇',): 2, ('章子怡',): 3, ('葛优',): 3, ('赵本山',): 2, ('郭涛',): 2, ('闫妮',): 2, ('陈道明',): 2}, 2: {('倪大红', '巩俐'): 2, ('傅彪', '李雪健'): 2, ('刘佩琦', '巩俐'): 2, ('孙红雷', '赵本山'): 2, ('巩俐', '李保田'): 2, ('巩俐', '杨凤良'): 2, ('巩俐', '葛优'): 2, ('巩俐', '郭涛'): 2, ('李保田', '李雪健'): 2}} 关联规则: [{傅彪} -> {李雪健}, {刘佩琦} -> {巩俐}, {赵本山} -> {孙红雷}, {杨凤良} -> {巩俐}, {郭涛} -> {巩俐}]展开1
- 王彬成2019-02-241)最小支持度设置为0.1 {1: {('倪大红',): 3, ('孙红雷',): 3, ('巩俐',): 9, ('李保田',): 3, ('李雪健',): 4, ('章子怡',): 3, ('葛优',): 3}} [] 2)最小支持度设置为0.05 {1: {('倪大红',): 3, ('傅彪',): 2, ('刘佩琦',): 2, ('刘德华',): 2, ('姜文',): 2, ('孙红雷',): 3, ('巩俐',): 9, ('李保田',): 3, ('李雪健',): 4, ('杨凤良',): 2, ('牛犇',): 2, ('章子怡',): 3, ('葛优',): 3, ('赵本山',): 2, ('郭涛',): 2, ('闫妮',): 2, ('陈道明',): 2}, 2: {('倪大红', '巩俐'): 2, ('傅彪', '李雪健'): 2, ('刘佩琦', '巩俐'): 2, ('孙红雷', '赵本山'): 2, ('巩俐', '李保田'): 2, ('巩俐', '杨凤良'): 2, ('巩俐', '葛优'): 2, ('巩俐', '郭涛'): 2, ('李保田', '李雪健'): 2}} [{傅彪} -> {李雪健}, {刘佩琦} -> {巩俐}, {赵本山} -> {孙红雷}, {杨凤良} -> {巩俐}, {郭涛} -> {巩俐}]展开
作者回复: Good Job
1 - third2019-02-22对于Xpath的query的删除,来找到需要查找的内容,表示艰难。 自己总结的是, 1.保留div[1] 2.删除名字比较长的class 3.保留// 4.注意看右边的结果 不知道该怎么删,有什么技巧吗?展开
编辑回复: 我的技巧就是不断的尝试,另外XPath是有自己规则的,99%的情况下都是以//开头,因为想要匹配所有的元素,然后找一些关键的特征来进行匹配,比如class='item-root'的节点,或者id='root'都是很好的特征。通过观察id或class,可以自己编写XPath,这样写的XPath会更短。总之,都是要不断的尝试,才能找到自己想要找的内容。寻找XPath的过程就是一个找规律的过程。
1 - 白夜2019-02-22最小支持度可以设置的小,而如果最小支持度小,置信度就要设置的相对大一点,不然即使提升度高,也有可能是巧合。这个参数跟数据量以及项的数量有关。 理解对吗? # -*- coding: utf-8 -*- from efficient_apriori import apriori import csv import pprint director = u'张艺谋' file_name = './'+director+'.csv' lists = csv.reader(open(file_name, 'r', encoding='utf-8-sig')) # 数据加载 data = [] for names in lists: name_new = [] for name in names: # 去掉演员数据中的空格 name_new.append(name.strip()) data.append(name_new[1:]) # 挖掘频繁项集和关联规则 itemsets, rules = apriori(data, min_support=0.05, min_confidence=0.5) #data 是我们要提供的数据集,它是一个 list 数组类型。min_support 参数为最小支持度,在 efficient-apriori 工具包中用 0 到 1 的数值代表百分比,比如 0.5 代表最小支持度为 50%。min_confidence 是最小置信度,数值也代表百分比,比如 1 代表 100%。 pprint.pprint(itemsets) print(rules)展开
编辑回复: 一般来说最小置信度都会大一些,比如1.0, 0.9或者0.8。最小支持度和数据集大小和特点有关,可以尝试一些数值来观察结果,比如0.1, 0.5
1 - 竹梦2021-07-20{1: {('尿布',): 5, ('牛奶',): 4, ('面包',): 4, ('啤酒',): 3}, 2: {('尿布', '牛奶'): 4, ('尿布', '面包'): 4, ('牛奶', '面包'): 3, ('啤酒', '尿布'): 3}, 3: {('尿布', '牛奶', '面包'): 3}},请问老师这里面的数字代表什么含义呢?
- Soul of the Drago...2021-04-23刚开始把支持度设为0.5,发现没有数据出现,可能是太高了,后来降低支持度才出现数据。老谋子是不是以前喜欢巩俐,现在喜欢刘浩存? 另外问个问题,请问陈老师,Xpath的编写到底有什么样的规律?为什么不能直接复制网页中的XPath呢?
- 完美坚持2021-04-20哈哈,这里把最小支持度的参数调低了,真的非常有必要。 刚开始没有看到这个思考题,我自己想到的就是张艺谋,就直接做了。 我刚开始设置 min_support=0.5, min_confidence=1 跑出来的结果是空的,因为这个支持度设置得太高了。 通过降低阈值,可以发现,张艺谋和巩俐的合作非常多,但是其它男明星就没有这么高频繁合作的,记得有一句玩笑话讲,“铁打的巩俐,流水的男明星”,很好地解释了这一点。展开