博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据分析任务3:论文代码统计
阅读量:3949 次
发布时间:2019-05-24

本文共 2271 字,大约阅读时间需要 7 分钟。

数据分析任务3:论文代码统计

涉及知识点:

  • 正则表达式
  • 数据框中各列处理apply函数和lambda的联合使用data[‘categories’] = data[‘categories’].apply(lambda x: x.split(’ ')[0])

1.数据处理步骤

在原始arxiv数据集中作者经常会在论文的comments或abstract字段中给出具体的代码链接,所以我们需要从这些字段里面找出代码的链接。

  1. 确定数据出现的位置;
  2. 使用正则表达式完成匹配;
  3. 完成相关的统计;

2.正则表达式

普通字符:大写和小写字母、所有数字、所有标点符号和一些其他符号

普通字符:大写和小写字母、所有数字、所有标点符号和一些其他符号
特殊字符:有特殊含义的字符
在这里插入图片描述
限定符
在这里插入图片描述

3.代码实现

import json #读取数据import re #正则表达式import pandas as pd

读取数据

data = []with open("E:/datawhale数据分析/arxiv-metadata-oai-2019.json",'r') as f:    for idx,line in enumerate(f):        d = json.loads(line)        d = {
'abstract':d['abstract'],'categories':d['categories'],'comments':d['comments']} data.append(d)data = pd.DataFrame(data)

抽取页数pages

data['pages'] = data['comments'].apply(lambda x:re.findall('[1-9][0-9]* pages',str(x)))data = data[data['pages'].apply(len) > 0]#抽取出页码存在的论文data['pages'][1][0]#27 pages#去除pages  留下数字作为pages项data['pages'] = data['pages'].apply(lambda x: float(x[0].replace('pages','')))

对pages进行统计

data['pages'].describe().astype(int)

按照分类统计论文页数,选取了论文的第一个类别的主要类别

import matplotlib.pyplot as plt#选择主要类别data['categories'] = data['categories'].apply(lambda x: x.split(' ')[0])#每类论文的平均页数plt.figure(figsize=(12,6))data.groupby(['categories'])['pages'].mean().plot(kind = 'bar')

在这里插入图片描述

对论文图表个数进行抽取并设为data[“figures”]:

data = data.copy()#删掉copy会报错??data['figures'] = data['comments'].apply(lambda x: re.findall('[1-9][0-9]* figures',str(x)))data = data[data['figures'].apply(len) >0]data['figures'] = data['figures'].apply(lambda x: float(x[0].replace('figures','')))

对论文的代码链接进行提取,为了简化任务只抽取github链接

data = data.copy()# 筛选包含github的论文data_with_code = data[    (data.comments.str.contains('github')==True)|                      (data.abstract.str.contains('github')==True)]data_with_code['text'] = data_with_code['abstract'].fillna('') + data_with_code['comments'].fillna('')# 使用正则表达式匹配论文pattern = '[a-zA-z]+://github[^\s]*'#所有大小写字母出现一次或多次://github任意非空字符出现0次或多次data_with_code['code_flag'] = data_with_code['text'].str.findall(pattern).apply(len)#finall函数的返回类型依其正则表达式中()的个数不同而不同#https://www.cnblogs.com/springionic/p/11327187.htmldata_with_code['code_flag']

按照类别对引用github链接的论文数量进行绘图

data_with_code = data_with_code[data_with_code['code_flag'] == 1]plt.figure(figsize=(12, 6))data_with_code.groupby(['categories'])['code_flag'].count().plot(kind='bar')

在这里插入图片描述

你可能感兴趣的文章
Android LOG机制流程图
查看>>
如何在JNI中抛异常
查看>>
Android应用程序的完全退出
查看>>
Task和Activity相关的一些属性
查看>>
JAVA系统属性之user.home
查看>>
Android代码截屏
查看>>
Android中打印代码的调用层次
查看>>
成功者十三个价值连城的习惯
查看>>
特别成功的人会做6件事
查看>>
Android: 用jni 获取MAC地址
查看>>
字符串列表的C语言实现:c_strlist
查看>>
客户沟通的方式:礼貌待客沟通方式,技巧推广沟通方式,个性服务沟通方式
查看>>
用弹性工作制留住员工
查看>>
知识=经验×反思2
查看>>
领导者如何发现关键问题
查看>>
学习无为领导力
查看>>
卓越领导看过程
查看>>
领导力与各种循环挑战
查看>>
达成谈判协议 - 避免操之过急
查看>>
销售人说话“十大忌”
查看>>