前言
為什麼要寫這本書?
隨著5G 時代的來臨、企業資訊化系統的不斷增強以及物聯網的興起,資料的收集、傳輸、儲存不再是問題,資料的品質和數量都呈爆發式增長。巨量資料開發的焦點逐漸從資料收集統計向採擷新功能、節省成本、創造價值的方向轉變,進一步催生出大量的應用,並且開始在各個垂直領域開花結果。
人工智慧和巨量資料技術是一種互相的學科,不僅需要電腦領域的知識和演算法技術,而且還需要應用領域的相關知識和技巧才能定義和解決問題。可以說,巨量資料不僅是一種技術,而且是一種思維。機器從資料中學習知識、總結經驗,並不斷自我進化,整個企業將迎來從資訊化向智慧化蓬勃發展的時期。
從業者也將面臨前所未有的挑戰:如何定義問題、選擇資料、架構系統、評估工作量、完成工作需要哪些技能⋯⋯這些問題也隨著企業的變化而逐步演進。對於從業者的技術要求越來越高,同時也產生了極大的人才缺口。
在此時代背景下,大量學生和有經驗的程式設計師都希望能向人工智慧和巨量資料的方向發展,而該領域又涉及系統整合、資料倉儲、網路資料取得、統計學、數學基礎、機器學習建模以及結果的展示等方面,使得該企業「門檻」比較高。對於日新月異的新興企業,技術更新反覆運算速度非常快,目前學校和教育訓練機構開設的課程有限,且水平良莠不齊。在校招時,筆者就發現大學生常常很難達到演算法工程師的要求。
那麼,如何培養資料工程師並使其在有限的時間內了解整個系統的執行方式,同時出色地完成本身的工作,對學校和企業來說都是必須面對的問題。
目前,市場上的巨量資料書籍和教學基本分為兩種:一種偏重演算法概念,實用性較差,讀者的學習過程比較艱難枯燥,學習之後也很難與實際工作相結合;另一種偏重說明語言和工具的用法,實例相對簡單,與真實應用場景差別較大。
在本書的撰寫過程中,筆者遵循全面、實戰、目標導向的原則,以在實際工作中巨量資料工程師需要掌握的技術為目標,系統地說明了資料工程師的必備技能;由程式設計師轉行的資料工程師也可以從這本書中學習演算法和統計學原理,在使用工具時不僅可以知其然,還可以知其所以然。在結構上,本書並沒有為保持完整性而用相同篇幅說明所有功能,而是根據實作經驗整理出常用的問題和場景,讓讀者用最短的時間,掌握最核心的知識,避免陷入細枝末節中。
本書有何特色?
1. 從系統角度出發
本書有關巨量資料工程的各方面,從問題的定義、資料評估,到實作方式,如數據取得(爬蟲)、資料儲存(資料庫、資料倉儲)、特徵工程、資料展示、統計分析、建立模型以及簡單的前端展示。其中,還有關資料叢集的架設(Linux、Docker)。本書可以讓讀者了解資料工作的全貌,學習整個資料系統的運作和相關技能,具有全域思維,而不只是熟悉小範圍內的實際工作。企業也可以將本書作為從事與巨量資料相關工作人員的教育訓練資料。
2. 理論與實際結合
本書自始至終都本著理論和實際相結合的原則,在原理章節(第7 至10 章)中闡釋原理、推導公式的同時,列出程式並討論該方法常見的使用場景;在實戰章節(第11 至16 章)中除了展示前端演算法的使用方法,還介紹了相關概念、公式推導以及原始程式碼。本書把學和用聯繫起來,既能在學習時了解使用場景,又能在使用時了解其背後的原理和演算法演進過程。
3. 主次分明
本書並不是某一實際領域方法的羅列和知識的歸納,並不為了保持其完整性使用同等篇幅介紹所有功能。本書更多地著眼於基礎知識、常見的需求和方法,儘量將它們組織起來,以解決實際問題的方式偏重關鍵點,簡略說明次要部分。在學習時間和學習難度兩方面降低讀者的學習成本。
4. 前端技術
目前,在很多偏重原理的演算法書中主要說明的都是20 世紀八九十年代流行的演算法,這些基礎演算法都是複雜演算法的基礎,機器學習從業人員必須了解,但在實用方面,它們早已被目前的主流演算法所取代。
本書也使用了一定篇幅說明基礎演算法和統計學方法,同時在實戰章節中引用近幾年的前端技術,如NLP 領域的BERT 演算法、影像分割的Mask R-CNN演算法、機器學習XGBoost 的原理推導以及原始程式的說明。
5. 典型範例
本書後半部分以實例為主,每個實例針對一種典型的問題,包含決策問題、自然語言處理、時間序列、影像處理等,其中大部分程式函數可以直接用在類似的場景中。同時,也在各個章節中加入了範例程式,對於常見問題,讀者可快速找到其解決方法並且直接使用其程式。
6. 通俗容易
本書的語言通俗容易,並在相對生澀的演算法原理章節中加入了大量舉例和相關基礎知識,儘量讓讀者在閱讀過程中無須查閱其他有關基礎知識的書籍,以加強學習效率。
本書內容及知識系統
第1 章 Python 程式設計
本章介紹作為巨量資料工程師需要掌握的基本技術,讓讀者對資料分析的知識系統有一個整體的認知,然後說明各種Python 開發和執行環境的架設,以及Python 的基本資料結構和語法、偵錯技術和常見問題。不熟悉Python 程式設計的開發者可透過學習本章掌握Python 語言的特點和使用方法。
第2 ∼ 4 章 Python 資料分析工具
本部分詳細介紹資料處理使用的科學計算函數庫Numpy、資料操作函數庫Pandas、資料視覺化工具Matplotlib 和Seaborn,以及互動作圖工具PyEcharts的資料處理邏輯和常用方法範例,為後續的資料處理奠定基礎。
第5 ∼ 10 章 Python 資料處理與機器學習演算法
本部分有關資料獲取、資料儲存、特徵工程、統計分析,建立機器學習模型的基本概念、原理、具體實作方式、統計方法和模型的選擇,以及在實現機器學習演算法過程中常用的工具和技巧。其將理論、舉例和Python 程式有機地結合在一起,分別說明資料處理的每一個子模組。
第11 ∼ 16 章 Python 實戰
本部分介紹決策問題、遷移學習、影像分割、時序分析、自然語言處理,以及定義問題的方法等幾種典型的機器學習問題,兼顧使用場景分析、原理、程式解析等層面,和讀者一起探討在實戰中解決問題的想法和方法。
適合閱讀本書的讀者
■ 向人工智慧和巨量資料方向發展的工程師。
■ 學習 Python 演算法和資料分析的工程師。
■ 希望了解巨量資料工作全流程的企業從業者。
■ 希望將資料演算法應用於傳統企業的從業者(金融、醫療、經濟等)。
■ 有一定的巨量資料理論基礎,但沒有實戰經驗的研究人員。
■ 巨量資料和人工智慧方向的創業者。
■ 巨量資料企業的專案經理、產品經理、客戶經理、產品設計師。
■ 希望了解人工智慧和巨量資料開發的學生、教師、專業教育訓練機構的學員。
閱讀本書的建議
■ 對於沒有 Python 程式設計基礎的讀者,建議從第 1 章開始閱讀並演練每一個實例。
■ 對於有經驗的程式設計師,建議先通讀本書,對巨量資料相關問題建立整體認知。對於實際的語法以及函數庫的使用方法,不用一次掌握,只需要了解其可實現的功能,在遇到問題時能從書中速查即可。
■ 演算法章節難度相對較大,但原理非常重要,放平心態認真閱讀,絕大部分都能掌握,有些公式推導未必能一次了解,讀不懂的部分可先保留。
■ 本書後半部分的實例章節,強烈建議讀者在閱讀的過程中程式設計實現和偵錯,並加入自己的改進方案,因為偵錯程式的效果要遠遠大於僅閱讀程式的效果。