《大数据:互联网大规模数据挖掘与分布式处理》(第2版)习题6.1.1-6.1.3解析

本文详细解析了《大数据:互联网大规模数据挖掘与分布式处理》第2版习题6.1.1-6.1.3,涉及频繁项集计算、购物篮大小比较及项数总和。通过实例展示了如何运用支持度阈值筛选频繁1/2项集,并揭示最大购物篮的构成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《大数据:互联网大规模数据挖掘与分布式处理》(第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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值