挖掘DBLP作者合作关系,FP-Growth算法实践(5):挖掘研究者合作关系

本文介绍了如何使用FP-Growth算法来挖掘DBLP数据库中研究者的合作关系。首先,通过创建headerTable存储作者信息。接着,构建FP-Tree并详细描述了其数据结构。接着,通过递归方式从最小支持度的单项集开始,挖掘频繁项集,形成多项集的频繁模式。整个过程旨在揭示作者间的合作网络。



就是频繁项集挖掘,FP-Growth算法。


先产生headerTable:

数据结构(其实也是调了好几次代码才确定的,因为一开始总有想不到的东西):entry: entry: {authorName: frequence, firstChildPointer, startYear, endYear}

def CreateHeaderTable(tranDB, minSupport=1):
    headerTable={} #entry: entry: {authorName: frequence, firstChildPointer, startYear, endYear}
    authorDB={} #entry: {frozenset(authorListSet): frequence}
    for i, (conf, year, authorList) in enumerate(tranDB):
        authorListSet=set([])
        print "trans", i, "=="*20
        if conf is np.nan or year is np.nan or authorList is np.nan:
            continue #for tranDB[2426,:]
        for author in authorList.split("|"):
            authorListSet.add(author)
            if headerTable.has_key(author):
                headerTable[author][0]+=1
                if year<headerTable[author][2]:
                    headerTable[author][2]=year
                elif year>headerTable[author][3]:
                    headerTable[author][3]=year
            else:
                headerTable[author]=[1, None, year, year]
        if authorDB.has_key(frozenset(authorListSet)):
            authorDB[frozenset(authorListSet)]+=1
        else:
            authorDB[frozenset(authorListSet)]=1
    for author in headerTable.keys():
        if headerTable[author][0]<minSupport:
            del headerTable[author]
    return headerTable, authorDB



再构建FP-Tree:

每个treeNode又五元组来描述:

class TREE_NODE:
    def __init__(self, authorName, frequence, parentPointer):
        self.authorName=authorName
        self.frequence=frequence
     
【资源说明】 基于关联规则挖掘DBLP学者关系python源码+实验报告(数据挖掘作业).zip 基本思路 解析 DBLP 的 xml 文件,以 attention 和 transformer 为关键词,只取 2017 年以后的文章。 把人名编码成数字。 一年一年来处理,认为有效的学者关系满足两点: 一年内发表论文数量大于 5【支持率】。 关系内任意一人记为 a,除他之外其他人记为 A,要满足 A → A+a 的【置信率】大于 0.5;注意是任意一人。 定义 人数=2 的关系为【合著者】,人数>2 的关系为【团队】。 定义学者关系的【活跃程度】:α \* 这一堆人发表文章数量 + β / 人数 \* 求和{一堆人发表文章数量 / 每个人发表文章数量}。取 α=1,β=10。注意发表数量都是一年内的。 主要结论 研究 attention transformer 的人越来越多。 貌似没人能一直研究 attention transformer 超过一年,大家的研究方向变得很快。 好多活跃的人都是重复的,比如出现 “一个固定导师+一个可变学生” “两个固定导师+一个可变学生” “AB BC AC 都活跃” 这种 pattern,三五好友 / 整个实验室一起研究 transformer。 合著者发文数量上,2018年有一个激增;团队发文数量上,2019年和2021年都有激增。 文件列表 py: `getAuthors.py`:从 DBLP 的 xml 文件,解析得到 `authors.txt`。 `encodeAuthors.py`:把 `authors.txt` 编码成 `authors_encode.txt` + `author_index.txt`。 `fpgrowth.py`:调用 `mlxtend` 的关联规则挖掘,以及学者关系分析。 txt: `authors.txt`:年份 + title + 学者名字。 `authors_encode.txt`:年份 + title + 学者编码(数字)。 `author_index.txt`:学者编码 + 学者名字 + 这个人(一年内)总共发表数量。 csv: `result_co_authors_5_0.5.csv`:合著者的分析结果,年份 + 学者名字(tuple)+ 学者一年内发文数量 + 活跃程度。 `result_teams_5_0.5.csv`:团队的分析结果,格式同上。 pdf: 课程报告。 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载使用体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈!
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值