[英]finding frequent patterns with pyfpgrowth
我正在嘗試使用pyfpgrowth庫和pandas 查找頻繁的模式 ,首先我創建了一個具有一列的數據框 ,每一行都是一個事務,這里是代碼:
import pyfpgrowth
import pandas as pd
import numpy as np
data = pd.read_csv("itemsets1.csv")
data = pd.DataFrame(data)
data.columns = ['itemsets']
data
輸出:
patterns = pyfpgrowth.find_frequent_patterns(data['itemsets'],6)
patterns
輸出:
{(' ',): 6, (' ', '1'): 8, ('1',): 9, ('1', '8'): 6, ('8',): 6}
實際上我這里有兩個問題,第一個是算法將空間作為錯誤的項目,第二個是在項目的頻率中,例如項目“ 1”僅出現一次,但是在輸出中它顯示9也錯誤,請需要幫助
注意 :我對您的數據集做了一些更改
第一個問題的答案:該算法將一個列表作為輸入。 在您的情況下,算法已將每個字符分成一個單獨的列表值,即[5,1,,2,8,,2,7]
對第二個問題的答案:您說的是1出現一次是正確的,但是如您從上述示例中看到的,由於錯誤的拆分,1出現了很多次。
現在以正確的方式進行操作:
首先,您需要將項目集中的每個字符串分成一個列表:
data['itemsets'] = data.itemsets.apply(lambda x: x.split(' '))
輸出:
接下來,“ find_frequent_patterns ”中的第二個參數是支持級別。 這意味着一個項目(或一組項目)在所有合並的交易中應出現的最小次數。 您已輸入6。在數據集中,沒有項目出現6次。 讓我們選擇2。
patterns = pyfpgrowth.find_frequent_patterns(data['itemsets'],2)
輸出:
{('10',):4,('10','8'):2,('51',):2,('8','81'):2,('81',): 4}
在上面的輸出中, ('10','8'):2表示10和8在整個數據集中一起出現兩次。
向前邁進,我們可以使用“ generate_association_rules”生成基於截止值的規則。 例如:
rules = pyfpgrowth.generate_association_rules(patterns, .5)
輸出:
{('10',):(('8',),0.5),('81',):(('8',),0.5)}
這意味着10和8在整個數據集中10的所有事務的50%中同時出現(即4)
您沒有正確准備數據。
由於在Python中,字符串是字符列表,因此您會發現頻繁的字符集。
例如,“ 51”包含字符“ 1”。
正確准備數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.