大数据环境下数据科学的知识体系
數據科學概論
隨著互聯網的飛速發展,大數據(Big Data)的概念和技術成為當下流行的領域。 數據科學(Data Science)這一體系也隨著大數據的崛起成為討論熱點。在各大招聘網站上,“數據科學家”也漸漸成為一個熱門的工作職位。大專院校也紛紛開設大數據相關專業培養數據科學人才。哈佛商業評論說,數據科學家是二十一世紀最性感的職業。
數據科學是一個混合了數學、計算機科學以及相關行業知識的交叉學科,主要包括統計學、操作系統、程序設計、數據庫、機器學習、數據可視化等相關領域的知識。隨著數據量的爆發,大數據可以看做數據科學的一個分支。
操作系統
Windows
Microsoft Windows是美國微軟公司開發的一套操作系統,它問世于1985年,并逐漸成為家家戶戶人們最喜愛的操作系統。直至今天,Windows操作系統仍然是家用和辦公電腦操作系統的首選。由于病毒和漏洞的層出不窮,Windows的安全性和健壯性一直為人所詬病。
Mac OS X
Mac OS X是一套運行于蘋果Macintosh系列電腦上的操作系統。它基于Unix內核,以簡單易用和穩定可靠著稱。但曲高和寡,畢竟Mac OS X難以成為主流。
Linux
Linux是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟件、應用程序和[網絡協議。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統。
Linux最擅長的就是服務器系統。大數據平臺無論是Hadoop還是Spark,最好的搭配就是Linux。
Linux強大而豐富的文本工具如grep、sed、awk等可以在不動用編程工具的前提下完成基本的數據處理流程。
基于Linux內核的發行版本已經有很多了,比較流行的諸如Ubuntu、Redhat、CentOS、Debian等等,目前使用最廣泛的是Ubuntu。
架構
大數據的概念和技術流行之后,業界推出了很多基于大數據的軟件架構,其中最有名的就是Hadoop和Spark。
Hadoop
Hadoop是一款支持數據分布式存儲和數據分布式計算的軟件平臺,能夠在廉價硬件上構建大型集群。Hadoop是Yahoo公司根據谷歌公司發表的MapReduce和Google文件系統(GFS)的論文開源實現而成。
簡單來說,Hadoop架構包括兩部分,一是HDFS分布式文件系統,二是MapReduce編程模型。前者負責將數據分布式并容錯地存儲在集群的各個節點,后者負責對數據進行分布式的分發、計算和歸納。
Hadoop上的數據和應用程序被分區成許多小部分,而每個部分都能在集群中的任意節點上運行。
Hadoop一經推出,立刻風靡大數據領域并成為事實上的行業標準,圍繞Hadoop的技術生態圈迅速建立起來,主要包括下面幾項技術:
- HBase:Hadoop上的分布式非結構化數據庫(NoSQL)。
- Hive:構建于Hadoop之上的數據倉庫,通過一種類SQL語言HiveQL為用戶提供數據的歸納、查詢和分析等功能。
- Mahout:機器學習算法軟件包。
- Sqoop:結構化數據如關系數據庫與Hadoop之間的數據轉換工具。
- ZooKeeper:是一種為Hadoop設計的高可用、高性能且一致的開源協調服務,它提供了一項基本服務:分布式鎖服務。
Spark
Spark是一個開源的計算框架,可以用來替代Hadoop的MapReduce模型。Hadoop的MapReduce在運行過程中將中間數據存放到磁盤中,而Spark使用了內存運算技術,能在數據尚未寫入硬盤時即在內存內分析運算。所以Spark的運算速度比Hadoop MapReduce快近100倍,即便是運行程序于硬盤時,Spark也能快上10倍速度。
Spark目前本身不包含分布式文件系統,所以Spark經常借用Hadoop的HDFS來實現分布式存儲,而Spark本身負責分布式計算。
Spark的技術生態圈包含下列幾項:
- Spark核心和彈性分布式數據集(RDDs):
Spark核心是整個項目的基礎,提供了分布式任務分配、調度和基本的I/O功能。而其基礎的程序抽象則稱為彈性分布式數據集(RDDs)和作用其上的算子,RDDs是一個可以并行操作、有容錯機制的數據集合。應用程序操縱RDDs的方法類似于操縱本地端的數據集合。 - Spark SQL:Spark SQL 是一個用來處理結構化數據的Spark組件,可以看作是一個分布式的SQL查詢引擎。
- Spark Streaming:是Spark實時任務處理模塊。
- MLlib:MLlib是Spark上分布式機器學習框架。Spark分布式內存式的架構比Hadoop磁盤式的Mahout快很多倍,擴充性更好。
MLlib可使用許多常見的機器學習和統計算法,簡化大規模機器學習時間。 - GraphX:是Spark上的分布式圖形處理框架。
編程語言
Hadoop基于Java語言,而Spark基于Scala語言,同時Spark通過PySpark支持Python語言。無論是Hadoop還是Spark,在其生態圈中都少不了SQL的身影,如Hive中的類SQL語言HQL、Spark-SQL等,再加上在統計分析領域如日中天的R語言,構成了大數據環境下的編程語言生態圈。
Python
隨著大數據技術的不斷推進,Python已經成為當之無愧的大數據第一編程語言。Python的第三方庫numpy、scipy、matplotlib、pandas、keras等覆蓋了從科學計算到深度學習的全棧環境,構成了Python語言數據科學的生態圈。在IEEE發布的編程語言流行度排行榜上,Python語言高居第一。
R
R語言是統計學家發明的一種語言,也可以說是一種統計軟件,主要用于數據統計和數據可視化。R語言強大的第三方軟件包涵蓋了從統計分析、科學計算、機器學習、數據可視化等數據科學的各個領域,從而和Python一起成為大數據時代最流行的編程語言。
Java
Hadoop是基于Java語言的,所以在Hadoop下編程就必須學習和使用Java。Java語言是目前編程領域市場份額最多的語言,隨著Android的流行和Hadoop的崛起,Java又煥發出新的活力。
SQL
SQL,指結構化查詢語言,全稱是 Structured Query Language。SQL是訪問和處理關系型數據庫的標準計算機語言。所有的關系型數據庫如Oracle、SQL Server、MySQL等都是使用SQL語言進行數據庫的創建、查詢、修改等操作。數據科學離不開數據庫,關系型數據庫仍然是數據存儲的主要結構,所以SQL語言也是數據科學領域不可或缺的知識。
數據庫
據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。在數據庫發展的歷史上,經歷了層次型、網絡型到關系型的轉變過程。從上世紀七十年代到現在,關系型數據庫一統江湖。直到大數據時代,由于非結構化數據的大量涌現,才誕生了非關系型數據庫。
關系型數據庫
關系數據庫是建立在關系模型基礎上的數據庫,借助于集合代數等數學概念和方法來處理數據庫中的數據。關系模型是由埃IBM公司科學家Codd于1970年首先提出并發表論文,隨后大量的商業性的關系數據庫系統開始出現,例如,Oracle、DB2、SQL Server等。開源技術興起后,又出現了MySQL、PostgreSQL等開源關系數據庫系統。關系數據庫依賴SQL語言進行數據的管理和操縱。在大數據時代,傳統的關系型數據庫仍然占據數據存儲的相當部分份額。
非關系型數據庫
非關系型的數據庫,也稱為NoSQL(Not only SQL)。隨著互聯網技術的興起和飛速發展,傳統的關系數據庫在應付現代網站如Web 2.0網站,特別是超大規模和高并發的動態網站已經顯得力不從心,暴露了很多難以克服的問題。而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合以及多重數據種類帶來的挑戰,尤其是大數據環境下數據存儲的應用難題。目前流行的非關系型數據庫包括Hadoop中的基于列存儲的HBase、文檔類型的MogoDB等。深入學習一種非關系型數據庫在大數據時代是必不可少的。
數學基礎
在數據科學領域,要想站到更高的層次看問題,必要的數學基礎是不可少的。因為在數據分析中,幾乎所有的數據模型都可以用數學來描述。而其中最重要的就是線性代數和概率統計。
線性代數
很多的算法中,數據在數學中的表示就是向量或矩陣,對數據進行處理很多時候就是對矩陣進行運算。另外,數據分析中的各種回歸算法本身就是線性代數的問題。
概率與統計
在數據的統計與分析過程中,需要統計學的基礎知識,例如期望、方差、協方差、假設檢驗等。很多的數據模型最終轉化為一個概率問題,不一定要得到完全確定的結果,只要滿足一定的概率就可以了。概率論在數據科學中應用較多的有貝葉斯統計、隱馬爾可夫模型等。
凸優化
機器學習的算法之所以有效,是因為數據模型對數據的處理最終都會轉化為一系列的數學優化問題,而且主要是凸優化問題,例如梯度下降算法等。所以除了線性代數和概率統計之外,我們可能還需要一點微積分的知識。
數據分析
數據分析是指用適當的統計分析方法對收集來的大量數據進行分析,提取有用信息和形成結論而對數據加以詳細研究和概括總結的過程。數據分析從統計學的角度可分為描述性數據分析、驗證性數據分析和探索性數據分析,其中探索性數據分析側重于在數據中發現新的特征,這和機器學習、數據挖掘形成重疊。其實,統計學習本來就是機器學習的一個分支。
數據分析流程一般可分為數據獲取、數據清洗、數據建模、數據可視化等幾個主要步驟。
數據獲取
近年來流行的網絡爬蟲就是數據獲取的一個重要方式,Python是編寫爬蟲程序的最佳選擇。當然除了互聯網數據之外,物聯網下大量傳感器也是數據獲取的主要來源之一。
數據清洗
數據清洗主要對獲取的數據進行整理和加工,包括對錯誤數據的修正、對缺失數據的處理、異常值的檢測和處理以及數據標準化等等,最終形成可以應用數據模型的干凈有效的數據。
數據建模和模型評估
這是數據分析過程中最重要的一步。按照業務需求建立不同模型,例如客戶流失預警、欺詐檢測等等。其中會應用到機器學習的一些算法。最后,由業務專家進行業務解釋和結果評價并最終將模型推廣應用。
數據可視化
數據分析的結果最好的展示形式是圖表,特別是統計圖形,能事半功倍地說明數據分析結果的各個方面,正所謂一圖勝千言。Python中的matplotlib庫和R中的ggplot2軟件包是數據可視化編程領域的翹楚。
機器學習和數據挖掘
機器學習本身就是一門交叉學科,它匯集了統計學、線性代數、微積分、凸優化等數學知識以及數據庫、算法、編程等計算機知識。數據挖掘的概念在很多場合和機器學習并不加以區分。嚴格來說,機器學習注重的是算法,而數據挖掘是利用機器學習算法在數據庫的數據中發現有價值的信息。Python的sckit-learn、Hadoop的Mahout、Spark的MLlib都集成了流行的機器學習算法,可以直接使用。機器學習的算法主要包括回歸、分類、聚類、關聯分析、支持向量機、神經網絡等等。
行業知識
一個好的數據分析師需要一定的行業知識。例如,如果做電商的銷售數據分析,就必須對銷售指標的意義了如指掌;如果做銀行的信用卡客戶分析,就必須對銀行基本的業務有所了解。如果無法理解數據中的業務,也就無法更好地利用數據,也無法解讀數據分析最后的結論。
結論
綜上所述,作為大數據環境下數據科學的從業者、大專院校大數據相關專業的學生,需要學習的知識包括以線性代數、概率統計為主的數學知識,打下良好的理論基礎。進而學習大數據架構平臺Hadoop和Spark,事實上業界兩大Hadoop發行公司Cloudera和Hortonworks都在其Hadoop發行版本中內置了Spark。作為大數據的基礎,學習一種關系型數據庫如MySQL和一種非關系型數據庫如HBase或MogoDB是必不可少的。而對于編程人員和數據分析師來說,學習Python和R語言能專注于數據分析的邏輯,達到事半功倍的效果。最后,作為進階,學習和掌握機器學習以及深度學習的各種流行算法,以達到數據科學的高層境界。
總結
以上是生活随笔為你收集整理的大数据环境下数据科学的知识体系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统学习机器学习之监督学习
- 下一篇: 史上最全,100+大数据开源处理工具汇总