Task1 論文數(shù)據(jù)統(tǒng)計

統(tǒng)計2019年全年計算機(jī)各個方向論文數(shù)量

數(shù)據(jù)預(yù)處理

data["categories"].describe()

data describe

通過describe函數(shù)可以看出數(shù)據(jù)的總體情況

判斷本數(shù)據(jù)集中共出現(xiàn)多少次的獨立數(shù)據(jù)集,使用set實現(xiàn)

unique_categories = set([i for l in [x.split(' ') for x in data["categories"]] for i in l])
len(unique_categories)
unique_categories

這里使用的是列表推導(dǎo)式,嵌套了多層循環(huán),最外層的for是外層循環(huán)

將時間轉(zhuǎn)換成pandas的時間序列格式Timestamp,使用pd.to_datetime完成,并通過時間篩選出2019以后的paper

data["year"] = pd.to_datetime(data["update_date"]).dt.year #將update_date從例如2019-02-20的str變?yōu)閐atetime格式,并提取處year
del data["update_date"] #刪除 update_date特征,其使命已完成
data = data[data["year"] >= 2019] #找出 year 中2019年以后的數(shù)據(jù),并將其他數(shù)據(jù)刪除

# data.groupby(['categories','year']) #以 categories 進(jìn)行排序,如果同一個categories 相同則使用 year 特征進(jìn)行排序
data.reset_index(drop=True, inplace=True) #重新編號
data #查看結(jié)果
result

挑選出計算機(jī)領(lǐng)域內(nèi)的所有文章

#爬取所有的類別
website_url = requests.get('https://arxiv.org/category_taxonomy').text #獲取網(wǎng)頁的文本數(shù)據(jù)
soup = BeautifulSoup(website_url,'lxml') #爬取數(shù)據(jù),這里使用lxml的解析器,加速
root = soup.find('div',{'id':'category_taxonomy_list'}) #找出 BeautifulSoup 對應(yīng)的標(biāo)簽入口
tags = root.find_all(["h2","h3","h4","p"], recursive=True) #讀取 tags

#初始化 str 和 list 變量
level_1_name = ""
level_2_name = ""
level_2_code = ""
level_1_names = []
level_2_codes = []
level_2_names = []
level_3_codes = []
level_3_names = []
level_3_notes = []

#進(jìn)行
for t in tags:
    if t.name == "h2":
        level_1_name = t.text    
        level_2_code = t.text
        level_2_name = t.text
    elif t.name == "h3":
        raw = t.text
        level_2_code = re.sub(r"(.*)\((.*)\)",r"\2",raw) #正則表達(dá)式:模式字符串:(.*)\((.*)\);被替換字符串"\2";被處理字符串:raw
        level_2_name = re.sub(r"(.*)\((.*)\)",r"\1",raw)
    elif t.name == "h4":
        raw = t.text
        level_3_code = re.sub(r"(.*) \((.*)\)",r"\1",raw)
        level_3_name = re.sub(r"(.*) \((.*)\)",r"\2",raw)
    elif t.name == "p":
        notes = t.text
        level_1_names.append(level_1_name)
        level_2_names.append(level_2_name)
        level_2_codes.append(level_2_code)
        level_3_names.append(level_3_name)
        level_3_codes.append(level_3_code)
        level_3_notes.append(notes)

#根據(jù)以上信息生成dataframe格式的數(shù)據(jù)
df_taxonomy = pd.DataFrame({
    'group_name' : level_1_names,
    'archive_name' : level_2_names,
    'archive_id' : level_2_codes,
    'category_name' : level_3_names,
    'categories' : level_3_codes,
    'category_description': level_3_notes
    
})

#按照 "group_name" 進(jìn)行分組,在組內(nèi)使用 "archive_name" 進(jìn)行排序
df_taxonomy.groupby(["group_name","archive_name"])
df_taxonomy
result

數(shù)據(jù)分析及可視化

_df = data.merge(df_taxonomy, on="categories", how="left").drop_duplicates(["id","group_name"]).groupby("group_name").agg({"id":"count"}).sort_values(by="id",ascending=False).reset_index()

_df

data

使用餅圖對結(jié)果進(jìn)行可視化

fig = plt.figure(figsize=(15,12))
explode = (0, 0, 0, 0.2, 0.3, 0.3, 0.2, 0.1) 
plt.pie(_df["id"],  labels=_df["group_name"], autopct='%1.2f%%', startangle=160, explode=explode)
plt.tight_layout()
plt.show()
result
group_name="Computer Science"
cats = data.merge(df_taxonomy, on="categories").query("group_name == @group_name")
cats.groupby(["year","category_name"]).count().reset_index().pivot(index="category_name", columns="year",values="id") 

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

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

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