《大数据:互联网大规模数据挖掘与分布式处理》(第2版)习题6.1.1-6.1.3解析
《大数据:互联网大规模数据挖掘与分布式处理》(第2版)习题6.1.1-6.1.3解析
电子科技大学课程《大数据分析与挖掘》(2022秋)第一次作业。
问题描述
6.1.1与6.1.2问题求解
程序:
# 购物篮T
T = []
# 初始化购物篮T
for value in range(1, 101):
t = []
for i in range(1, value + 1):
if value % i == 0:
t.append(i)
T.append(t)
# 打印购物篮T
print("\n购物篮T: " + str(T))
# 候选1项集C1,key为项集,value为该项集对应的支持度
C1 = {}
# 求C1
for i in range(1, 101):
count = 0
for t in T:
if i in t:
count += 1
C1[i] = count
# 打印候选1项集C1
print("\n候选1项集C1: " + str(C1))
# 支持度阈值s
s = 5
# 频繁1项集L1,key为项集,value为该项集对应的支持度
L1 = {}
# 求L1
for key, value in C1.items():
if value >= 5:
L1[key] = value
# 打印频繁1项集L1
print("\n频繁1项集L1: " + str(L1))
# 候选2项集C2,key为项集,value为该项集对应的支持度
C2 = {}
for i in range(1, 21):
for j in range(1, 21):
if i == j:
continue
count = 0
pair = f"[{i}, {j}]"
for t in T:
if i in t and j in t:
count += 1
C2[pair] = count
# 打印候选2项集C2
print("\n候选2项集C2: " + str(C2))
# 支持度阈值s
s = 5
# 频繁2项集L2,key为项集,value为该项集对应的支持度
L2 = {}
# 求L2
for key, value in C2.items():
if value >= 5:
L2[key] = value
# 打印频繁2项集L2
print("\n频繁2项集L2: " + str(L2))
# 求所有购物篮中项的数目之和
sum = 0
for t in T:
for t_value in t:
sum += 1
print(f"\n所有购物篮中项的数目之和为:{sum}。")
# 求所有购物篮中最大的购物篮,即元素个数最多的购物篮
# t_len存储T中每个购物篮t的元素个数
t_len = []
for t in T:
t_len.append(len(t))
# print(t_len)
max_t_len = max(t_len)
print(f"\n在最大的购物篮中,元素个数为:{max_t_len}。\n它们分别是:")
for i in range(100):
if t_len[i] == max_t_len:
print(f"购物篮t{i}:{T[i]}")
运行结果:
6.1.1 a. 如果支持度阈值是5,求频繁1项集L1
L1 = {‘1’: 100, ‘2’: 50, ‘3’: 33, ‘4’: 25, ‘5’: 20, ‘6’: 16, ‘7’: 14, ‘8’: 12, ‘9’: 11, ‘10’: 10, ‘11’: 9, ‘12’: 8, ‘13’: 7, ‘14’: 7, ‘15’: 6, ‘16’: 6, ‘17’: 5, ‘18’: 5, ‘19’: 5, ‘20’: 5}
这是一个字典,其中 key为项集,value为该项集对应的支持度。
6.1.1 b. 如果支持度阈值是5,求频繁2项集L2
L2 = {‘[1, 2]’: 50, ‘[1, 3]’: 33, ‘[1, 4]’: 25, ‘[1, 5]’: 20, ‘[1, 6]’: 16, ‘[1, 7]’: 14, ‘[1, 8]’: 12, ‘[1, 9]’: 11, ‘[1, 10]’: 10, ‘[1, 11]’: 9, ‘[1, 12]’: 8, ‘[1, 13]’: 7, ‘[1, 14]’: 7, ‘[1, 15]’: 6, ‘[1, 16]’: 6, ‘[1, 17]’: 5, ‘[1, 18]’: 5, ‘[1, 19]’: 5, ‘[1, 20]’: 5, ‘[2, 3]’: 16, ‘[2, 4]’: 25, ‘[2, 5]’: 10, ‘[2, 6]’: 16, ‘[2, 7]’: 7, ‘[2, 8]’: 12, ‘[2, 9]’: 5, ‘[2, 10]’: 10, ‘[2, 12]’: 8, ‘[2, 14]’: 7, ‘[2, 16]’: 6, ‘[2, 18]’: 5, ‘[2, 20]’: 5, ‘[3, 4]’: 8, ‘[3, 5]’: 6, ‘[3, 6]’: 16, ‘[3, 9]’: 11, ‘[3, 12]’: 8, ‘[3, 15]’: 6, ‘[3, 18]’: 5, ‘[4, 5]’: 5, ‘[4, 6]’: 8, ‘[4, 8]’: 12, ‘[4, 10]’: 5, ‘[4, 12]’: 8, ‘[4, 16]’: 6, ‘[4, 20]’: 5, ‘[5, 10]’: 10, ‘[5, 15]’: 6, ‘[5, 20]’: 5, ‘[6, 9]’: 5, ‘[6, 12]’: 8, ‘[6, 18]’: 5, ‘[7, 14]’: 7, ‘[8, 16]’: 6, ‘[9, 18]’: 5, ‘[10, 20]’: 5}
这是一个字典,其中 key为项集,value为该项集对应的支持度。
6.1.1 c. 所有购物篮中项的数目之和是多少
所有购物篮中项的数目之和为:482。
6.1.2 对于习题6.1.1中的项-购物篮数据,哪个购物篮是最大的?
在最大的购物篮中,元素个数为:12。
它们分别是:
购物篮t59:[1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60]
购物篮t71:[1, 2, 3, 4, 6, 8, 9, 12, 18, 24, 36, 72]
购物篮t83:[1, 2, 3, 4, 6, 7, 12, 14, 21, 28, 42, 84]
购物篮t89:[1, 2, 3, 5, 6, 9, 10, 15, 18, 30, 45, 90]
购物篮t95:[1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 96]
6.1.3问题求解
只需要修改一下生成购物篮T的代码即可。
程序:
# 购物篮T
T = []
# 初始化购物篮T
for i in range(1, 101):
t = []
for value in range(i, 101):
if value % i == 0:
t.append(value)
T.append(t)
# 打印购物篮T
print("\n购物篮T: " + str(T))
# 候选1项集C1,key为项集,value为该项集对应的支持度
C1 = {}
# 求C1
for i in range(1, 101):
count = 0
for t in T:
if i in t:
count += 1
C1[str(i)] = count
# 打印候选1项集C1
print("\n候选1项集C1: " + str(C1))
# 支持度阈值s
s = 5
# 频繁1项集L1,key为项集,value为该项集对应的支持度
L1 = {}
# 求L1
for key, value in C1.items():
if value >= 5:
L1[key] = value
# 打印频繁1项集L1
print("\n频繁1项集L1: " + str(L1))
# 候选2项集C2,key为项集,value为该项集对应的支持度
C2 = {}
for i in range(1, 21):
for j in range(i, 21):
if i == j:
continue
count = 0
pair = f"[{i}, {j}]"
for t in T:
if i in t and j in t:
count += 1
C2[pair] = count
# 打印候选2项集C2
print("\n候选2项集C2: " + str(C2))
# 支持度阈值s
s = 5
# 频繁2项集L2,key为项集,value为该项集对应的支持度
L2 = {}
# 求L2
for key, value in C2.items():
if value >= 5:
L2[key] = value
# 打印频繁2项集L2
print("\n频繁2项集L2: " + str(L2))
# 求所有购物篮中项的数目之和
sum = 0
for t in T:
for t_value in t:
sum += 1
print(f"\n所有购物篮中项的数目之和为:{sum}。")
# 求所有购物篮中最大的购物篮,即元素个数最多的购物篮
# t_len存储T中每个购物篮t的元素个数
t_len = []
for t in T:
t_len.append(len(t))
# print(t_len)
max_t_len = max(t_len)
print(f"\n在最大的购物篮中,元素个数为:{max_t_len}。\n它是:")
for i in range(100):
if t_len[i] == max_t_len:
print(f"购物篮t{i}:{T[i]}")
6.1.1 a. 如果支持度阈值是5,求频繁1项集L1
L1 = {‘12’: 6, ‘16’: 5, ‘18’: 6, ‘20’: 6, ‘24’: 8, ‘28’: 6, ‘30’: 8, ‘32’: 6, ‘36’: 9, ‘40’: 8, ‘42’: 8, ‘44’: 6, ‘45’: 6, ‘48’: 10, ‘50’: 6, ‘52’: 6, ‘54’: 8, ‘56’: 8, ‘60’: 12, ‘63’: 6, ‘64’: 7, ‘66’: 8, ‘68’: 6, ‘70’: 8, ‘72’: 12, ‘75’: 6, ‘76’: 6, ‘78’: 8, ‘80’: 10, ‘81’: 5, ‘84’: 12, ‘88’: 8, ‘90’: 12, ‘92’: 6, ‘96’: 12, ‘98’: 6, ‘99’: 6, ‘100’: 9}
这是一个字典,其中 key为项集,value为该项集对应的支持度。
6.1.1 b. 如果支持度阈值是5,求频繁2项集L2
L2 = {}
这是一个空字典,说明当支持度阈值是5时,频繁2项集L2为空集,算法到此结束。
6.1.1 c. 所有购物篮中项的数目之和是多少
所有购物篮中项的数目之和为:482。
6.1.2 对于习题6.1.3中的项-购物篮数据,哪个购物篮是最大的?
在最大的购物篮中,元素个数为:100。
它是:
购物篮t0:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]