Datawhale 資料分析 Task3
阿新 • • 發佈:2021-01-21
前言:今上午本來想一口氣做完這三個Task(說是自己做好像有點誇張,就像是再看他人的AV程式碼題解一樣),但由於期末出了成績考的有點離譜,81分,打電話和老師聊了聊,老師和我說了很多話使我收穫很大,我們從智慧小車聊到人與人之間的信任,數電老師身體有恙的情況下還堅持帶病上課,住院改卷子,這真的很打動我。只能說一分耕耘一分收穫吧。今天凌晨七點多起床趕這兩個Task,邊看邊學,但是Apply還是沒有弄懂,這個先放到之後。下午兩點要和老師說一說上次的論文(我不知道怎麼說,orz),現在先搞完Task3.
Step 1 匯入包、讀入
# 匯入所需的package import seaborn as sns #用於畫圖 from bs4 import BeautifulSoup #用於爬取arxiv的資料 import re #用於正則表示式,匹配字串的模式 import requests #用於網路連線,傳送網路請求,使用域名獲取對應資訊 import json #讀取資料,我們的資料為json格式的 import pandas as pd #資料處理,資料分析 import matplotlib.pyplot as plt #畫圖工具
data = [] #初始化 #使用with語句優勢:1.自動關閉檔案控制代碼;2.自動顯示(處理)檔案讀取資料異常 with open(r path, '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) #將list變為dataframe格式,方便使用pandas進行分析 這是挺關鍵的一步的
Step 2 正則表示式匹配及統計
#使用正則表示式匹配,XX pages data['pages'] = data['comments'].apply(lambda x: re.findall('[1-9][0-9]* pages', str(x))) # 篩選出有pages的論文 data = data[data['pages'].apply(len) > 0] # 由於匹配得到的是一個list,如['19 pages'],需要進行轉換 data['pages'] = data['pages'].apply(lambda x: float(x[0].replace(' pages', '')))
統計頁數(對pages進行統計,統計結果如下:論文平均的頁數為17頁,75%的論文在22頁以內,最長的論文有11232頁。)
data['pages'].describe().astype(int)
選取了論文的第一個類別的主要類別
# 選擇主要類別 data['categories'] = data['categories'].apply(lambda x: x.split(' ')[0]) 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['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的論文
# 篩選包含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]*' data_with_code['code_flag'] = data_with_code['text'].str.findall(pattern).apply(len)
並對論文按照類別進行繪圖:
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')
就先寫到這,很多內容沒有展開。
等之後再回頭補充。
orz