欢迎访问宙启技术站
智能推送

基于Python的数据关联分析和关联规则挖掘

发布时间:2023-12-24 03:36:42

数据关联分析和关联规则挖掘是一种在数据集中寻找项集之间的关联关系的技术。它可以用于发现数据中的潜在规律和关系,帮助我们了解数据中隐藏的模式和趋势。在Python中,有一些强大的工具和库可以用于进行数据关联分析和关联规则挖掘,如Apriori算法和FPGrowth算法。

Apriori算法是一种常用的关联规则挖掘算法,它通过寻找频繁项集来发现数据中的关联规则。下面是一个使用Python实现Apriori算法的简单示例:

from itertools import chain, combinations
from collections import defaultdict

def power_sets(items):
    """
    生成项集的所有子集
    """
    return chain(*map(lambda x: combinations(items, x), range(0, len(items)+1)))

def get_frequencies(data, itemsets):
    """
    计算项集在数据集中的频率
    """
    frequencies = defaultdict(int)
    for transaction in data:
        for itemset in itemsets:
            if itemset.issubset(transaction):
                frequencies[itemset] += 1
    return frequencies

def apriori(data, min_support=0.5):
    """
    Apriori算法主函数
    """
    itemsets = set()
    for transaction in data:
        for item in transaction:
            itemsets.add(frozenset([item]))

    frequencies = get_frequencies(data, itemsets)
    frequent_itemsets = {itemset for itemset, frequency in frequencies.items() if frequency/len(data) >= min_support}
    current_itemsets = frequent_itemsets
    while current_itemsets:
        current_itemsets = set(itemset1.union(itemset2) for itemset1 in current_itemsets for itemset2 in current_itemsets if len(itemset1.union(itemset2)) == len(itemset1)+1)
        frequent_itemsets.update({itemset for itemset in current_itemsets if get_frequencies(data, [itemset]) and get_frequencies(data, [itemset])[itemset]/len(data) >= min_support})

    return frequent_itemsets

# 测试数据
data = [
    frozenset(['bread', 'milk', 'eggs']),
    frozenset(['milk', 'eggs', 'bacon']),
    frozenset(['bread', 'butter']),
    frozenset(['bread', 'milk', 'butter', 'bacon']),
    frozenset(['bread', 'butter', 'eggs']),
    frozenset(['bread', 'milk', 'butter'])
]

frequent_itemsets = apriori(data, min_support=0.3)
print(frequent_itemsets)

上述代码中,我们定义了power_sets函数用于生成项集的所有子集,get_frequencies函数用于计算项集在数据集中的频率,apriori函数是Apriori算法的主函数,它通过不断扩展频繁项集的方式逐步搜索频繁项集。

在上述代码中,我们使用了一个简单的测试数据集,然后调用apriori函数来搜索频繁项集。这里设置了一个最小支持度的阈值为0.3,即只有在频繁项集的支持度不低于30%时才被认为是频繁项集。最后打印出发现的频繁项集。

除了Apriori算法,还有其他一些关联规则挖掘算法可供选择,如FPGrowth算法。FPGrowth算法的实现与Apriori算法类似,可以使用Python中的fp-growth库来进行实现。

在关联规则挖掘中,关联规则是由频繁项集生成的。对于上述示例中发现的频繁项集,我们可以根据关联规则的定义来生成相应的规则。一条关联规则的形式为X → Y,其中X和Y都是项集,并且X ∩ Y = ?。我们可以根据关联规则的置信度来评估规则的强度,其定义为support(X ∪ Y) / support(X)。

基于频繁项集,我们可以使用Python的mlxtend库来进行关联规则挖掘。该库提供了Apriori算法和其他一些关联规则挖掘算法的实现。下面是一个使用mlxtend库进行关联规则挖掘的示例:

from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
import pandas as pd

# 测试数据
data = [
    ['bread', 'milk', 'eggs'],
    ['milk', 'eggs', 'bacon'],
    ['bread', 'butter'],
    ['bread', 'milk', 'butter', 'bacon'],
    ['bread', 'butter', 'eggs'],
    ['bread', 'milk', 'butter']
]

# 转为one-hot编码
one_hot_data = pd.get_dummies(pd.DataFrame(data), prefix='', prefix_sep='')

# 使用Apriori算法搜索频繁项集
frequent_itemsets = apriori(one_hot_data, min_support=0.3, use_colnames=True)

# 根据频繁项集生成关联规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)

print(rules)

上述代码中,我们使用了一个测试数据集,然后通过将数据转为one-hot编码的形式,使用mlxtend库中的apriori函数来搜索频繁项集。接着,我们使用association_rules函数来根据频繁项集生成关联规则。最后,打印出生成的关联规则。

通过上述示例,我们可以看到如何使用Python进行数据关联分析和关联规则挖掘。根据具体的需求,我们可以选择适合的算法和库来进行分析。