天天看點

《Scala機器學習》一一第1章 探索資料分析

在本書深入研究複雜的資料分析方法之前,先來關注一些基本的資料探索任務,這些任務幾乎會占據資料科學家80%~90%的工作時間。據估計,每年僅僅是資料準備、清洗、轉換和資料聚合就有440億美元的産值(data preparation in the big data era by federico castanedo; best practices for data integration, o?reilly media, 2015)。即便如此,人們最近才開始把更多的時間花費在如何科學地開發最佳實踐,以及為整個資料準備過程建立文檔、教學材料的良好習慣上,這是一件令人驚訝的事情(beautiful data: the stories behind elegant data solutions, edited by toby segaran and jeff hammerbacher, o?reilly media, 2009;advanced analytics with spark: patterns for learning from data at scale by sandy ryza et al., o?reilly media, 2015)。

很少有資料科學家會對資料分析的具體工具和技術看法一緻,因為有多種方式可進行資料分析,從unix指令行到使用非常流行的開源包,或商業的etl和可視化工具等。本章重點介紹在筆記本電腦上如何通過scala進行函數式程式設計。後面的章節會讨論如何利用這些技術在分布式架構hadoop/spark下進行資料分析。

那函數式程式設計有什麼用呢?spark用scala開發是有原因的。函數式程式設計的很多基本原則(比如惰性求值、不變性、無副作用、清單推導式和單子(monad)),在分布式環境下做資料處理都表現得很好,特别是在大資料集上做資料準備和轉換等任務時更是如此。也可在pc或筆記本上使用這些技術。通過筆記本電腦連接配接到分布式存儲/處理叢集就可處理多達數十tb的超級資料集。可以一次隻涉及一個主題或關注一個領域,但通常進行資料采樣或過濾時,不必考慮分區是否合适。本書使用scala作為基本工具,必要時也會采用其他工具。

從某種意義上講,scala能實作其他語言所能實作的一切功能。scala從根本上講是一種進階語言,甚至可稱其為腳本語言。scala有自己的容器,并且實作了一些基本的算法,這些功能已經通過大量的應用程式(比如java或c++)和時間的測試,程式員不必關心資料結構和算法實作的底層細節。本章也隻會關注如何用scala/spark來實作進階任務。

本章會涉及如下主題:

安裝scala

學習簡單的資料挖掘技術

學習如何下采樣(downsample)原始資料集來提高效率

探讨在scala上實作基本的資料轉換和聚合

熟悉大資料處理工具,比如spark和spark notebook

通過程式設計實作對資料集的簡單可視化