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