Crawler

資料處理 Data Integration (1)

基本介紹

教學目標

初步了解資料整合 (Data Integration,DI) 的概念。

重點概念

資料整合主要可以分為企業應用與互聯網應用,有很多的原因會導致企業資料分散在多個不同的資料庫中,例如: 企業併購、部門合併,特定需求的專案、…等,因此在企業進行內部重組時,應該適時的進行調整與對應。此外互聯網中有成千上萬的網站提供特定主題領域的資訊,例如: 影劇、音樂、美食、旅遊、新聞、…等,此時面臨最大的困難為大規模資料庫的整合,資料會由不同的人用不同的語言建立,質次提取資料相當困難,因此會藉由爬蟲的功能擷取出有意義的資訊,當然資料不一定正確且適用,因此需要透過不同的方法針對資料進行組合和排序。所以以資料整合為基礎建立的系統就是為了自行治理和差異結構的資料來特提供統一的存取入口,其中包括查詢處理、差異結構性、自行治理和資料來源的數量等重點處理應用。

接著資料整合目前面臨三個挑戰分別為系統原因、邏輯原因和管理原因,其中系統原因主要為不同的關聯式資料庫系統雖然已經支援 SQL 標準和 ODBC/JDBC 連線,但不同供應商的實作方式還是會有些差異,因此在整合過程中,這些差異就需要進行協調,再著如何有效地針對分散式資料庫和不同效能資料庫執行查詢更是一大挑戰。接著邏輯原因主要為在面對完全相同的資料庫應用需求時,不同人會計計出非常不同的資料庫模型,因此資料來自於多個資料來源時就會產生差異,並且資料的表達格式也有可能不同,例如: 貨幣單化為多國單位、語言為多國語系、…等,因此若把多個不同資料來源進行整合,必須解決彼此之間的語義差異結構的問題。再來管理問題主要為資料存取的共享和匿名等問題,所以資料整合應用是個很難的問題 永遠不會被徹底解決,因此實務上最重要的是設置適當的預期,此外越精確的資料花費的時間越多,但若能讓使用者以較小的時間代價從資料整合系統中獲得更精確的結果,將會是資料整合的目標。

然而資料整合的架構主要為資料倉儲與中介平台<->包裝器<->不同資料來源,在企業中會將多個獨立資料來源的資料載入至資料倉儲中,然後使用者就能以這些資料為基礎進行查詢操作,其中資料主要是透過 ETL 工具定期進行擷取、轉換和載入。然而資料倉儲開發之初並不是以資料整合為目的,而是進行更深入的分析而開發的工具,例如: 將交易系統中的資料經由 ETL 工具進行清理和匯整,並且載入至資料倉儲中以利決策支援查詢之應用。中間平台則是資料仍然儲存於原本的資料來源中,只有在需要查詢時才被存取,其關鍵在於語義對應,主要是將資料來源與中間平台進行關聯,此時資料整合系統就能讓使用者透過中間平台進行查詢之應用。此外資料整合系統的查詢與資料庫的查詢主要有兩個差別,第一為查詢需要從中介平台重寫成對應於資料來源的格式,第二為查詢執行需要根據不同的突發事件自動適應不同的查詢優化與執行。

總結資料整合主要分為企業應用和互聯網應用,企業應用也就是資料倉儲相關應用,例如: 銀行業針對核心系統的資料匯整至資料倉儲中,以利解決跨部門整合查詢分析的問題,重點在於專業領域的知識。互聯網應用也就是網站爬蟲相關應用,例如: 藉由爬蟲處理將互聯網中所有影劇連結和相關資訊匯整至看劇 App 中,重點在網路駭客的技術。以利解決人們看劇的龐大需求,然而未來最有趣的應用則是社交媒體的資料整合應用,不僅僅資料龐大且又要能即時進行分析將會是一大挑戰,例如: 應用社群網站的 API 存取每個人的社交資料進行分析,以利解決個人隱私、趨勢話題、…等問題,重點在於數學理論的應用。

相關資源

2014Q1 工作心得 (1)

2014 年 Mary Meeker 的網際網路趨勢報告中說明了巨量資料趨勢,其中針對 Data-Generating Consumers 會需要提供最好的使用者界面幫助他們更容易的使用資料,在面對非結構化的資料,我們會透過寫程式的方式將其轉換成結構化的資料,這樣的過程也就是「爬蟲」,不論是影片和音樂的資料,皆有一個共通性那就是原始影音檔的連結網址散佈在網際網路各大影音網站平台之中,例如 Youtube 和 Dailymotion ,此時我們會需要透過程式將網站平台中的相關資料擷取至資料庫之中,技術方面主要是透過 Node.js 搭配 cheerio 套件解釋 HTML 網頁內容中的資料轉換成實用的資訊,接著儲存至 Amazon 架設的後台資料庫之中,最後再以 Node.js 搭配 expressjs 套件透過 API 提供結構化的 JSON 資料給 iPhone 或 Android 等行動裝置直接應用,呈現最好的使用者界面給 Data-Generating Consumers。

可是在此過程中並非想像中的簡單,一開始進行爬蟲時會遭遇編碼的問題,基本上若是英文資料,此時只要需要透過 ASCII 編碼就能夠進行解析,可是若是中文資料,此時就會需要透過 UNICODE 編碼方式進行解析,除此之外還是存在許多編碼的方式需要進行解決,像是簡體中文的網站可能就會需要 GB2312 或 GBK 編碼進行解析。等待編碼問題處理完成,接著需要花些時間觀察所需的資料要如何從網頁結構中取出,此時若發現所需的資料無法按照網頁結構取出,就必需以常用的正規表示式 (Regular Expression) 的方式解析最原始的網頁資料。

當上述問題解決之後接著就需要找出清單列表,根據清單列表中的資訊撰寫排程程式進行資料的擷取,此時若請求網頁內容的次數太頻繁,某些網站就會開始進行阻擋,以致於無法很順利的按照排程時間的規劃進行,就必需針對不同網站進行客製化的調整。當我們將大量資料擷取下來之後,常常會發現部份擷取下來的資料還是需要透過人工編輯的方式進行資料校正,此時就必提供管理平台讓編輯者能更方便的進行資料校正與確保品質。

最後還需要考慮自動更新的問題,就必需針對爬蟲程式進行排程時間的規劃,看似已經能上線正常運作之後,此時會發現某些網頁內容改變真頻繁,以致於剛剛完成的爬蟲程式立即又要根據網頁內容進行改版,總而言之,爬蟲看似簡單的工作,卻是巨量資料分析重要的第一步,且往往會有許多細節要注意。