官术网_书友最值得收藏!

第1章 寫在前面

1.1 數據工程和編程語言

數據工程和編程語言

近年來大數據(BigData)的概念火得不行,之前流行的互聯網+,換成大數據+后又成就了一大批創業公司。政府部門對大數據戰略部署同樣重視,各種大數據產業園和科技區如雨后春筍般火熱發展。很多不同行業的人言必稱大數據,時常把大數據時代的4個V和3種思維參見《大數據時代》, [英]維克托·邁爾-舍恩伯格·肯尼思·庫克耶◎著,盛楊燕周濤◎譯掛在嘴邊,但他們心里所說的和實際所做的,大多只是大數據領域上層應用中的一個子集,即基于數據做一些統計、分析和展示,甚至很多時候數據并不滿足“大”的特征。

當然,這本書的目的并不是探討大數據的知識體系和技術架構,而是從個人角度出發,介紹如何在時間有限(可能你并不是大數據領域的專業從事人員)和資源有限(可能你只有一臺筆記本電腦可以運行程序)的條件下,實現一些個人能力足以完成的、簡單而有趣的數據工程和數據應用。這本書的讀者可能已經具備一定的編程基礎,也有可能之前未曾接觸過任何代碼,在經過恰當的學習和足夠的練習之后,都可以拿出自己的筆記本電腦,獨立實現讓人驚艷的數據成果和作品。

1.1.1 如何玩轉數據

在進行一項數據工程之前,首先需要考慮并解決一些問題,想清楚這些問題的答案比直接擼起袖子寫代碼更為重要。

1.獲取

我們的數據從何而來?巧婦難為無米之炊,如果希望做出有價值、有意義的成果,所用數據的數量和質量都應得到保證。理想情況下自然是別人準備好數據提供給我們,但現實情況往往是需要我們自己去獲取。如果不具備大規模部署傳感器和海量用戶上傳數據等采集數據的能力,那么通過爬蟲從已有網站上獲取結構化數據則是唯一的解決途徑。因此需要考慮并解決的問題包括以下幾點,我需要哪方面的數據?哪些網站已經具備了這些數據?我需要從這些網站分別采集哪些數據?多大的數據量才能滿足我的需求?數據是一次獲取即可,還是需要持續更新?如果需要持續更新,應當達到怎樣的更新頻率?

2.存儲

我們需要把獲取的數據存儲下來,以便進一步使用。不同的數據量和數據類型,可能適合于不同的存儲方案。對于數據量較少、后續處理較簡單的情況,可以將數據存儲到靜態文件中,如txt、csv、json等格式文件。這種方法讀寫都十分方便,并且易于數據的復制和共享。對于數據量較大、后續處理較復雜的情況,可以將數據存儲到一些通用而且成熟的開源數據庫中,如MySQL、PostgreSQL等關系型數據庫,以及MongoDB、Neo4j等非關系型數據庫(NoSQL)。這種方法更為穩定且易于維護,支持數據的Create、Update、Read、Delete等后續操作。如果有部署Web網站應用的需求,那么將數據庫作為后端數據存儲則是更好的選擇。因此需要考慮并解決的問題包括:我有多大數據量需要存儲?后續處理是否復雜?數據是否會持續更新?我應該選擇哪種數據存儲方案?

3.分析

在經過必要的清洗工作之后,我們希望從數據中挖掘出感興趣的價值和結論。一方面可以進行一些簡單的計算匯總工作,從不同維度聚合出對應的結果;另一方面也可以從統計學或機器學習的角度出發,分析數據不同字段之間的關聯,同時訓練一些分類或聚類分類和聚類的概念參見第10章機器學習的模型,用以解決實際應用問題。不同類型的數據,如文本、數值和類別值等,所涉及的數據分析方法可能完全不同。因此需要考慮并解決的問題包括:我的數據屬于何種類型?我希望從數據中挖掘出哪些價值?我希望通過數據完成哪些任務?我應當選擇哪些分析技術和算法模型?

4.可視化

用數據可視化的方法表達和展示所得結論。正所謂一圖勝千言,枯燥的數據和蒼白的語言也許并不足以承載數據的價值,而借助圖形、色彩、布局等視覺元素則能更生動、更豐富、更全面地詮釋數據的靈魂。我們既可以使用散點圖、折線圖、柱狀圖等經典圖形,也可以大開腦洞去嘗試一些天馬行空的表達形式,充分探索組織圖形、色彩和布局等內容的可能性。因此需要考慮并解決的問題包括:我需要展示哪些數據和結論?哪種圖形和表現形式最能滿足我的需求?可視化是選擇靜態圖片、交互網站,還是動態視頻?

如果以上4個步驟的問題都已經想清楚,那么恭喜你,可以按照你的想法開始玩轉數據了。通過獲取、存儲、分析和可視化,將原始數據逐步提升為信息、知識和價值,這便是玩轉數據最大的魅力和樂趣所在。

1.1.2 關于編程語言

哪種編程語言最好,最適合做數據工程?如果真要討論起來,這將是一個永遠沒有結論的哲學問題。既然無法給這個問題一個合適的答案,不如將單選題變為多選題,畢竟只學習一門語言可能遠遠不夠。以全棧數據工程師為目標,我們應當各方面內容都有所涉足,同時具備自己最為擅長和習慣使用的一至兩門語言。

C++和Java這兩門語言最好熟悉其一,從而了解編程語法的基本內容和面向對象的編程思想。熟悉的要求是指不用完全掌握和精通,在需要用到的時候查一查,能夠快速回想起相關內容即可。很多人會發現,掌握一門語言之后,再去學其他語言便能很快上手,因為不同語言之間的編程思想都是基本相通的。

Python是一門簡單好用而且功能強大的語言,也是筆者使用最多、最為熟悉的一門語言。Python的強大之處在于其具備極為豐富的功能包,從前端到后端,從軟件到硬件,從機器學習到自然語言理解,幾乎無所不包、全棧通吃。同時對語法的約束和限制也沒有C++、Java那樣嚴格,因此非常適合新手學習。有一句經典的玩笑話,“Python大法好,除了炒菜別的都可以干”。

R是一門統計分析語言,和Python類似,具有數量眾多且功能強大的包,以及龐大而活躍的用戶社區。近年來R的學習門檻和成本都在不斷降低,可以用于進行專業的統計分析和圖形繪制,極力推薦同時掌握Python和R。

除此之外,還有和Web網站開發相關的一些語言,如前端的HTML、CSS和JavaScript,后端的PHP、NodeJS等。在這些語言的基礎上還衍生出了豐富的封裝和框架如果將原始語言理解成木材,那么封裝和框架便是造好的輪子,可以大大節省開發時間,便于用戶更快、更好地進行開發。就像Python的功能包難以全部掌握一樣,和Web網站開發相關的封裝和框架更是難以全部熟悉。

筆者個人習慣于使用Python獲取數據并寫入文件或數據庫中,結合Python和R進行數據分析和挖掘。至于數據可視化部分,則使用R繪制靜態圖形,基于Web網站實現動態交互可視化。

本書的后續章節將以Python為主,完整地介紹如何進行數據的獲取、存儲、分析和可視化,以個人能力獨立完成一些有趣的事情。

主站蜘蛛池模板: 乐至县| 贡嘎县| 富顺县| 阿尔山市| 淳化县| 金坛市| 惠州市| 河间市| 合山市| 弋阳县| 濮阳市| 巨鹿县| 长子县| 永善县| 兴化市| 读书| 黔江区| 萍乡市| 息烽县| 高要市| 广河县| 曲阜市| 红原县| 当雄县| 嘉义县| 神农架林区| 鹤峰县| 大悟县| 兴业县| 商城县| 彭阳县| 朝阳县| 长寿区| 稻城县| 雷州市| 沛县| 长子县| 田阳县| 鄂尔多斯市| 睢宁县| 江陵县|