我正在使用 Python Pandas 完成一些關聯規則挖掘的一些結果。我將 mlxtnd 與關聯規則和頻繁項一起使用。我能夠成功地挖掘規則,但是現在我正在嘗試使結果變得可讀。
給定一個已經創建的字典:
{
66: "Course Name 1",
72: 'Course Name 2',
83: 'Course Name 3',
84: 'Course Name Etc'
}
我的目標是能夠獲取itemsets回傳表單挖掘結果的列:
support itemsets
38 0.020280 (66,72)
39 0.016900 (72,83)
40 0.014969 (72,84)
41 0.013037 (83,84)
42 0.013037 (66,83,84)
可以從:
df = pd.DataFrame({'support': {38: 0.02028, 39: 0.0169, 40: 0.014969, 41: 0.013037, 42: 0.013037},
'itemsets': {38: (66, 72), 39: (72, 83), 40: (72, 84), 41: (83, 84), 42: (66, 83, 84)}})
并通過它們映射添加與字典中的鍵匹配的對應名稱的第三列。預期輸出:
support itemsets fullcoursenames
38 0.020280 (66,67) 'Course Name 1', 'Course Name 2'
39 0.016900 (72,83) 'Course Name 2', 'Course Name 3'
40 0.014969 (72,84) 'Course Name 2', 'Course Name etc'
41 0.013037 (83,84) 'Course Name 3', 'Course Name etc'
42 0.013037 (66,83,84) 'Course Name 1', 'Course Name 2','Course Name etc'
不知道我是否需要創建新的函式定義或嘗試使用 lambda。而且,不知道遍歷itemsets行中每個串列項的語法。
uj5u.com熱心網友回復:
給定映射器字典:
mapper = {66: 'Course Name 1', 72: 'Course Name 2', 83: 'Course Name 3', 84: 'Course Name Etc'}
您可以應用從字典中獲取值的函式mapper到'itemsets'列:
df['fullcoursenames'] = df['itemsets'].apply(lambda tpl: [mapper.get(x) for x in tpl])
您也可以使用迭代以下值的串列推導來完成相同的作業df['itemsets']:
df['fullcoursenames'] = [[mapper.get(x) for x in tpl] for tpl in df['itemsets']]
輸出:
support itemsets fullcoursenames
38 0.020280 (66, 72) [Course Name 1, Course Name 2]
39 0.016900 (72, 83) [Course Name 2, Course Name 3]
40 0.014969 (72, 84) [Course Name 2, Course Name Etc]
41 0.013037 (83, 84) [Course Name 3, Course Name Etc]
42 0.013037 (66, 83, 84) [Course Name 1, Course Name 3, Course Name Etc]
如果你想加入完整的課程名稱,你也可以join在上面的 lambda 中使用方法(盡管我認為這不是你想要的):
df['fullcoursenames'] = df['itemsets'].apply(lambda tpl: ', '.join(mapper.get(x) for x in tpl))
輸出:
support itemsets fullcoursenames
38 0.020280 (66, 72) Course Name 1, Course Name 2
39 0.016900 (72, 83) Course Name 2, Course Name 3
40 0.014969 (72, 84) Course Name 2, Course Name Etc
41 0.013037 (83, 84) Course Name 3, Course Name Etc
42 0.013037 (66, 83, 84) Course Name 1, Course Name 3, Course Name Etc
uj5u.com熱心網友回復:
假設您的映射dict存盤為course_name_mapping:
df = df.explode("itemsets")
df["fullcoursename"] = df["itemsets"].map(course_name_mapping)
df = df.groupby(level=0, as_index=False).agg(list)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408913.html
標籤:
