数据挖掘实战-前沿分析-Task03

任务:统计包含代码的论文

本次任务的主要内容就是利用正则表达式在comments或abstract字段中取出具体的代码链接。
任务重点:正则表达式的学习和使用。

数据挖掘实战-前沿分析-Task03

数据挖掘实战-前沿分析-Task03
数据挖掘实战-前沿分析-Task03

  • 准备工作,取出数据中的abstract, categories, comments 对应的内容。
import re
import json
import pandas as pd
import matplotlib.pyplot as plt

data = []
with open('arxiv-metadata-oai-snapshot.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)
data

数据挖掘实战-前沿分析-Task03

  • 统计论文页数,在comments字段中抽取出pages,
data['pages'] = data['comments'].apply(lambda x: re.findall("[0-9]+ pages", str(x)))
data

数据挖掘实战-前沿分析-Task03

  • 选出页数不为空的行。
data = data[data['pages'].apply(lambda x: len(x)>0) ]
data

数据挖掘实战-前沿分析-Task03

  • 修改数据中“页数”列的格式,将列表格式改为int数据。
data['pages'] = data['pages'].apply(lambda x: x[0].split(' ')[0])

数据挖掘实战-前沿分析-Task03

  • 选择论文的第一个类别作为主要类别。
data['categories'] = data['categories'].apply(lambda x: x.split(' ')[0]).apply(lambda x: x.split('.')[0])

数据挖掘实战-前沿分析-Task03

  • 计算每类论文的平均页数。
plt.figure(figsize=(12,6))
data.groupby(['categories'])['pages'].mean().plot(kind='bar')

报错DataError: No numeric types to aggregate
错误原因:很可能是因为你指定的列里不能执行所对应的聚合操作,即有可能是数据类型的错误(比如目前数字列的类型的object),也有可能是该列中除了数字真的存在其他类型的数据。
在本次的例子中,是第一种情况,所以解决办法为:

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

数据挖掘实战-前沿分析-Task03

上一篇:实训第四天


下一篇:博客评论多对多处理(基于JPA)