基于Python爬虫+nodejs+spring boot+Spark+Hadoop的CS领域论文文献数据分析

CS领域论文数据分析
目录
CS领域论文数据分析 1
Streaming 1
I. Streaming应用场景 1
 某个领域的热门程度和该领域在特定时间段内产出的论文数量相关 1

  1. 统计特定时间段内热度靠前的领域并比较各领域热度 1
    II. Streaming数据获取 2

go to next page 5

III. 流计算总体架构 7
IV. 业务需求实现 15
GraphX 21
I. GraphX应用场景 21
2. 统计特定时间段内和某领域交叉程度较高的领域 21
II. GraphX数据获取 21
III. 图计算总体架构 22

  1. 领域的共同论文构成的图 22
  2. 作者的共同论文构成的图 22
    IV. 业务需求实现 28

Streaming
I. Streaming应用场景
计算机领域也有多个子领域,每个子领域获得的投入和关注度也是不同的,随着时间的变化,研究热潮也在发生改变,对于我们而言,这几年感受最深的就是 AI 相关领域的崛起,直到现在还保持着极高的热度。那么其他的子领域的热度是怎么样的,某个领域内部不同作者的热门程度是什么样的?我们希望对其进行一番探究,从而能够对计算机领域的发展形势有一定的了解。
首先我们进行了以下的这些假设:
某个领域的热门程度和该领域在特定时间段内产出的论文数量相关
某个作者的热门程度和该作者的论文被引用数量相关
从而可以得到具体的业务问题:
1.统计特定时间段内热度靠前的领域并比较各领域热度
2.统计特定时间段内某领域的论文发表数量变化趋势
3.统计特定时间段内某领域的热门论文和作者
4.分析特定时间段内各领域的热度变化趋势
5.分析特定时间段内每年的最热门领域
II. Streaming数据获取
2.1 数据来源
Arxiv、 ACM 两个影响力较大的论文数据库网站,这些网站保存的数据基本上涵盖了CS领域有影响力的会议和期刊,可以较好地反应高水平CS研究的变化趋势,我们选择爬取它们从 2000 年到现在为止的 CS 领域的论文数据,了解近20年来CS领域的发展。
各个网站的数据规模大致为:ACM大致15万条,Arxiv大约30万条。此外,由于ACM是正式的论文数据库,而arxiv则是论文预印本网站,各个网站之间可能存在数据重复,我们会进行去重处理。去重后,再经过一些预处理,比如处理包含空值的数据等,最终的数据规模大约为45万条。
每一篇论文的信息包括:论文题目,作者,发表月份,发表年份,论文所属领域分类,引用数量。论文的多维度信息允许我们从领域、时间、作者等多个角度入手,基于Streaming和GraphX挖掘潜在的有用信息,帮助我们加深对于CS各个领域发展趋势的认识。

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html

from twisted.enterprise import adbapi
import pymysql


class MysqlPipeline:
    """
    把爬到的数据异步插入MySQL。要求spider拥有str类型的实例成员'db_table_name',用以指定数据表名。
    """
    insert_sql = """
                 insert into {db_table_name}(title, authors, `month`, `year`, subjects, abstract, citation) 
                 VALUES (%s,%s,%s,%s,%s,%s,%s)
                 """

    def __init__(self, db_pool):
        self.db_pool = db_pool

    @classmethod
    def from_settings(cls, settings):  # 函数名固定,会被scrapy调用,直接可用settings的值
        """
        数据库建立连接
        :param settings: 配置参数
        :return: 实例化参数
        """
        adb_params = dict(
            host=settings['MYSQL_HOST'],
            db=settings['MYSQL_DBNAME'],
            user=settings['MYSQL_USER'],
            password=settings['MYSQL_PASSWORD'],
            cursorclass=pymysql.cursors.DictCursor  # 指定cursor类型
        )
        # 连接数据池ConnectionPool,使用pymysql连接
        db_pool = adbapi.ConnectionPool('pymysql', **adb_params)
        # 返回实例化参数
        return cls(db_pool)

    def open_spider(self, spider):
        """通过spider.db_table_name设置数据表名"""
        db_table_name = spider.db_table_name or 'paper_info'
        self.insert_sql = MysqlPipeline.insert_sql.format(db_table_name=db_table_name)

    def process_item(self, item, spider):
        """
        使用twisted将MySQL插入变成异步执行。通过连接池执行具体的sql操作,返回一个对象
        """
        query = self.db_pool.runInteraction(self.do_insert, item)  # 指定操作方法和操作数据
        # 添加异常处理
        query.addCallback(self.handle_error)  # 处理异常

    def do_insert(self, cursor, item):
        """对数据库进行插入操作,并不需要commit,twisted会自动commit"""
        cursor.execute(self.insert_sql, (item['title'], ','.join(item['authors']), item['month'], item['year'],
                                         ','.join(item['subjects']), item['abstract'], item['citation']))

    @staticmethod
    def handle_error(failure):
        """打印错误信息"""
        if failure:
            print('Error: ' + failure)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值