Task3:論文代碼統(tǒng)計(jì)

3.1 任務(wù)說(shuō)明

首先我們來(lái)統(tǒng)計(jì)論文頁(yè)數(shù),也就是在comments字段中抽取pages和figures和個(gè)數(shù),首先完成字段讀取。

任務(wù)主題:論文代碼統(tǒng)計(jì),統(tǒng)計(jì)所有論文出現(xiàn)代碼的相關(guān)統(tǒng)計(jì);

任務(wù)內(nèi)容:使用正則表達(dá)式統(tǒng)計(jì)代碼連接、頁(yè)數(shù)和圖表數(shù)據(jù);

任務(wù)成果:學(xué)習(xí)正則表達(dá)式統(tǒng)計(jì);

3.2 數(shù)據(jù)處理步驟

在原始arxiv數(shù)據(jù)集中作者經(jīng)常會(huì)在論文的comments或abstract字段中給出具體的代碼鏈接,所以我們需要從這些字段里面找出代碼的鏈接。

確定數(shù)據(jù)出現(xiàn)的位置;

使用正則表達(dá)式完成匹配;

完成相關(guān)的統(tǒng)計(jì);

首先我們來(lái)統(tǒng)計(jì)論文頁(yè)數(shù),也就是在comments字段中抽取pages和figures和個(gè)數(shù),首先完成字段讀取。

data=[]#初始化#使用with語(yǔ)句優(yōu)勢(shì):1.自動(dòng)關(guān)閉文件句柄;2.自動(dòng)顯示(處理)文件讀取數(shù)據(jù)異常withopen("arxiv-metadata-oai-snapshot.json",'r')asf:foridx,lineinenumerate(f):d=json.loads(line)d={'abstract':d['abstract'],'categories':d['categories'],'comments':d['comments']}data.append(d)data=pd.DataFrame(data)#將list變?yōu)閐ataframe格式,方便使用pandas進(jìn)行分析

對(duì)pages進(jìn)行抽取:

# 使用正則表達(dá)式匹配,XX pagesdata['pages']=data['comments'].apply(lambdax:re.findall('[1-9][0-9]* pages',str(x)))# 篩選出有pages的論文data=data[data['pages'].apply(len)>0]# 由于匹配得到的是一個(gè)list,如['19 pages'],需要進(jìn)行轉(zhuǎn)換data['pages']=data['pages'].apply(lambdax:float(x[0].replace(' pages','')))

對(duì)pages進(jìn)行統(tǒng)計(jì):

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

統(tǒng)計(jì)結(jié)果如下:論文平均的頁(yè)數(shù)為17頁(yè),75%的論文在22頁(yè)以內(nèi),最長(zhǎng)的論文有11232頁(yè)。

count1089180mean17std22min125%850%1375%22max11232Name:pages,dtype:int64

接下來(lái)按照分類統(tǒng)計(jì)論文頁(yè)數(shù),選取了論文的第一個(gè)類別的主要類別:

# 選擇主要類別data['categories']=data['categories'].apply(lambdax:x.split(' ')[0])data['categories']=data['categories'].apply(lambdax:x.split('.')[0])# 每類論文的平均頁(yè)數(shù)plt.figure(figsize=(12,6))data.groupby(['categories'])['pages'].mean().plot(kind='bar')

接下來(lái)對(duì)論文圖表個(gè)數(shù)進(jìn)行抽?。?/p>

data['figures']=data['comments'].apply(lambdax:re.findall('[1-9][0-9]* figures',str(x)))data=data[data['figures'].apply(len)>0]data['figures']=data['figures'].apply(lambdax:float(x[0].replace(' figures','')))

最后我們對(duì)論文的代碼鏈接進(jìn)行提取,為了簡(jiǎn)化任務(wù)我們只抽取github鏈接:

# 篩選包含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('')# 使用正則表達(dá)式匹配論文pattern='[a-zA-z]+://github[^\s]*'data_with_code['code_flag']=data_with_code['text'].str.findall(pattern).apply(len)

并對(duì)論文按照類別進(jìn)行繪圖:

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')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容