一種無須編程的數據搜集、分析流程
# 一種無須編程的數據搜集、分析流程
## 前言
這是一個信息爆炸的時代,信息產生的速度已經遠遠找過了我們閱讀和理解信息的速度。但是,現在層出不窮的海量信息中真正有用的卻是少數,如果全部依賴人工來查找、搜集和分析這些海量的信息,效率將會非常低下。雖然大數據技術已經火爆了幾年了,但是如何將這些技術真正應用到日常工作中仍然是一個難題,因為並不是所有人都會編程,都有經歷去針對一些簡單的需求搭建複雜的工具。所以這裡我嘗試探討一種無須編程的工作方式來實現信息的高效率搜集和處理。目標是用最簡單的工具來滿足最現實需求。
## 工具
這個工作流程主要由兩部分組成,一是通過網路爬蟲軟體批量搜集信息,這一部分主要是通過八爪魚搜集器來實現;另一部分是數據的處理、分析和展示,這一部分主要是通過KNIME分析軟體來實現。這兩個軟體是筆者經過很多嘗試以後的選擇,下面筆者簡單解釋一下為什麼選擇這兩個軟體。
八爪魚搜集器是一個國產的商業爬蟲工具。爬蟲工具有很多,開源和免費的也不少,為什麼選擇這一款商業軟體呢?主要是基於以下考慮:一是這個軟體操作足夠簡單、功能足夠強大。爬蟲看起來是一個簡單的需求,但是其中的坑非常多,對於非程序員來說,想要快速實現自己的需求還是需要依賴一些成熟的工具。這一點上,這個軟體能夠滿足需求,它既提供功能強大的自定義模式,也提供傻瓜化的自動模式。二是,雖然它是商業軟體,但是對於一般用戶來說,使用免費單機版就夠了,初始積分足夠採集數萬條數據。當然如果你有其他的比較熟悉的工具也完全可以替代這個軟體。
KNIME是一個較為知名的開源數據分析平台,Java語言編寫,基於Eclipse平台構建。它是一個相對比較完善的大數據分析平台,提供了豐富的擴展。它的主要優點有下面幾點:一是開源、免費。二是圖形化操作方式,只需要通過拖動各個模塊,然後連接起來就可以實現各種分析功能。三是KNIME中的工作流程可以分部執行,便於初學者及時發現錯誤。四是強大的擴展能力,我們可以在工作流中插入R、Python、Java和JavaScript代碼片段,實現各種強大功能。在我們這個工作流中,KNIME是後期處理的核心。當然,它還是有一定的學習難度的,它的所有界面、文檔都是英文的,工具也非常多,熟悉起來需要花費一定的時間。
## 任務
我嘗試通過兩個例子來說明這一流程的工作方式。
第一個例子是在科學網上自動查找各高校和科研機構的招聘信息,提取出其中的關鍵內容,並且將招聘信息按照地理位置進行分類,便於找工作的時候根據自己的偏好瀏覽最值得關注的信息。科學網上常年有很多的招聘信息,但是這些信息往往篇幅很長,我們在瀏覽這些信息之前往往有一些自己的求職意向,比如希望招聘單位限定在某個地區,或者單位待遇如何。對大量此類信息的自動處理能夠讓我們將主要精力集中在符合我們需求的信息上,大大節省我們的時間。同樣,篇幅所限,這裡我們展示的具體任務過程是,從科學網上獲取100條招聘信息,提取出招聘信息中的招聘單位名稱,通過調用百度地圖的API自動獲得這些招聘單位的地址,並且在地圖上展示出來。
第二個例子是在Web of Science網站上搜索特定關鍵詞相關的文獻,自動獲取文獻的相關信息,然後分析文獻摘要中的關鍵信息和文獻所在期刊的影響因子。這個例子對應的是研究生日常工作中非常常見的一個任務:文獻的調研。Web of Science作為查找文獻最權威的收費資料庫,是我們日常獲取文獻信息的主要來源,如果能夠實現其中信息的自動獲取分析,能夠大大提高我們平時的工作效率。篇幅所限,本文將展示如何完成下面這個具體的任務:從Web of Science上獲取20篇關於「Graphene」的文獻信息,分析每篇文獻中通信作者的單位地址,並將其在地圖中展示出來。
## 案例一,招聘信息的自動獲取和分析
### 1. 第一部分,從網上下載信息
1. 打開八爪魚採集器,選擇自定義採集。因為科學網的網頁結構較為簡單,也可以使用嚮導模式。
2. 輸入我們要採集的網址:[科學網-人才- 高校高層次人才專區](科學網-人才- 高校高層次人才專區)。點擊頁面中的招聘條目,根據右側的操作提示,點選同類型的鏈接。
3. 添加一個循環點擊每個鏈接的動作,然後打開一條鏈接,選擇頁面中的對應元素,做好標註。如果想採集所有頁面上的信息,可以添加翻頁動作。
4. 定義好規則以後我們保存任務,然後選擇單機運行。
5. 軟體會如果定義的規則沒有問題,軟體將自動採集這個版塊的所有照片信息。
6. 這裡我們採集了這個頁面中的100條信息作為示例,每條信息分別包括標題、內容和發布時間、地點。
7. 導出我們的數據至Excel文件。這樣我們就完成了工作流程的第一部分,獲得了100條招聘信息。只要我們主要軟體的使用提示,一般能夠很快上手。
### 2. 第二部分,清理與展示信息
1. 打開KNIME軟體。KNIME軟體是在Eclipse的基礎上編寫的,原始界面有很多子窗口,我們可以把暫時用不到的窗口關掉或者最小化,只保留最重要的工作區,節點庫窗口和節點說明窗口。
2. KNIME的工作方式是從左側節點庫中拖動節點至中間工作區,當我們點擊節點的時候,右側的節點說明窗口會顯示當前節點的主要信息。一個節點圖標主要由三部分組成,上方是該節點的功能說明,中間是節點圖標,圖標下方三個點像紅綠燈一樣,如果紅點亮,表明該節點配置不正確或者運行錯誤,黃燈亮表示還未設置或者運行過,綠燈亮表明運行正常。在設置某些節點的時候,我們需要實現將它的輸入端連接起來,否則無法進行配置。詳細的說明可以參考軟體的幫助文檔。
3. 這裡我們首先新建一個空白Workflow文件,從節點庫中依次選擇「IO-Read-Excel Reader」節點,將其拖動到工作區。
4. 雙擊該節點圖標,會出現配置窗口。如果我們初次看到這個窗口,可能會被複雜的設置選項嚇到,其實這些選擇並不複雜。我們只需要關心第一個Tab「XLS Reader Settings」就行了。配置完成後我們可以點擊工具欄上的運行按鈕先運行該節點,在節點圖標上右鍵可以在菜單中找到查看輸出結果的選項。這種分布執行,每一步都可以查看結果的操作方式有利於初學者及時發現問題所在。
5. 在導入了數據之後就是對數據的處理了,對於我們獲得招聘單位地理位置分布這個目標來說,我們這裡清洗數據的目的是獲得標題中的招聘單位。我們可以先使用Column Filter過濾出我們需要的列,然後使用Regex Split正則表達式工具提取出其中的單位名稱。正則表達式的使用是一個較為複雜的部分,讀者可能需要自行查閱資料了解。需要注意的是,KNIME使用的是Java的正則表達式語法,在這個節點中,我們將單元格中的內容用幾個括弧包裹的正則表達式表示出來,而每個括弧中匹配到的內容會作為單獨的列提取出來。我們通過「大學、學院、所」等名稱來匹配單位名。
6. 由於部分招聘信息的單位比較特殊,匹配不到,所以節點中會出現一個黃色感嘆號,這部分數據我們也可以通過右鍵菜單查看到,這裡我們主要關注能夠匹配到的數據。通過添加一個Row Filter行過濾節點來去掉沒有匹配到的數據。
7. 如果獲得單位所在地理坐標呢?如果是英文地址的話,有現成的節點可以使用(詳見案例二)。中文地址的話我們需要調用百度地圖的Web API來進行地理編碼Geocoding。這一部分主要通過Get Request節點實現。使用之前我們需要生成一個帶有查詢URL地址的列來供這個節點調用。這一部分的具體信息我們需要查閱百度地圖API的使用文檔。簡單來說,就是註冊賬號,然後先獲取一個Key,然後將單位名稱加到帶有Key的查詢地址中。這一步操作我們需要用到String Manipulation節點,在該節點中通過Join函數將對應的列數據加到基本查詢地址中。
8. 執行查詢後,我們先用Binary Objects to Strings節點將返回的信息編程字元串,然後通過Regex Split正則表達式工具將其中的經緯度提取出來,然後用String to Number節點轉換為數字格式,這樣我們就獲得了每條招聘信息所對應的招聘單位地理坐標。當然,由於同一個單位可以由不同的分部,僅從標題獲取的地址未必準確。
9. 下面我們要做的就是把這些地理坐標在地圖上標註出來了。在這之前我們需要安裝Palladian節點工具包,安裝方法很簡單,依次打開「File」-「Install Knime Extensions」,然後在搜索框里輸入Palladian,打個勾,點下一步,同意一下協議,就能自動下載安裝了。
10. 安裝好以後,我們先使用該工具包中的LatitudeLongitudeToCoordinate節點將經緯度坐標組合起來,然後再與MapView節點連接就可以了,運行之後我們就能看到這些單位的地理分布了,放大地圖還可以進一步查看細節。
## 案例二,文獻信息的自動獲取和分析
### 1. 第一部分,獲取信息
獲取信息的部分和案例一中的過程很類似,這裡不再贅述,讀者稍加嘗試應該都可以完成。這裡我以「Graphene」為關鍵詞,並且按照被引頻次從高到低排序,在「Web of Science」上爬取了20條文獻信息作為示例。
### 2.第二部分,清理和展示信息
數據在Knime中的導入和提取與案例一類似,需要注意的是,筆者提取出的文獻通信作者單位信息有好幾行,只有第一行是我們需要的詳細地址。這裡我們可以使用Cell Splitter工具,以換行符作為區分,將每一個單元格分解到三列中去,在過濾出第一列。為了獲得這些英文地址對應的GPS坐標,我們可以使用案例一中下載的Palladian工具包中的MapzenGeocoder節點,需要注意的是,在使用之前我們需要打開「FIle」-「Preferences」-「Palladian Geocoder」,從網上註冊賬號獲取Mapzen的API Key,然後填寫進去。MapzenGeocoder可以直接和Mapview連接,就可以將地理坐標在地圖中展示出來了。
## 總結
八爪魚的優點在於簡單易用,而Knime在於開源強大。Knime的功能遠不止上面討論的這些,需要讀者自己去探索。總的來說,這樣一條工具鏈具有很大的想像空間,而這一空間主要體現在Knime中。Knime中提供的API查詢工具,讓我們可以使用網路上豐富的API工具,比如翻譯、自然語言處理等等,將State of the Art的Machine Learning結合進來。事實上,Knime中已經有了專門的化學分子查詢和藥物篩選的工具包,只是對於大多人來說,沒有這樣的需求罷了。
和傳統的編程實現方式相比,這樣一種操作方式最大的優點到還不在它的簡便與否,而在於它的模塊化。我們在使用Knime的時候自然會將任務進行分解,讓我們自己理清楚我們需要做哪些事情,而每個節點的獨立設置、執行和結果查詢,讓我們可以以步步為營的方式不斷推進我們的工作。一旦我們實現了一個可行的工作流,就可以將它重複利用,在其中修修補補調整功能也變得很容易。
當然,缺點也是不可避免的,中文學習資源的匱乏需要我們有一顆不斷折騰的心。即使其功能再強大,如果我們並沒有什麼改變現行工作方式的迫切衝動,那也是無濟於事的。不過,如果你都看到了這裡,我想你應該有這種衝動。
推薦閱讀:
※IF:3-4分文章和5分文章的差距
※人工智慧時代的科學研究
※公開評審與發表後評審
※【科研必備】免費下載任何文獻的網站
※Zotero,一款愛不釋手的文獻管理軟體