基于PySpark的高級數(shù)據(jù)分析
定 價:78 元
本書的主要內(nèi)容有:熟悉Spark的編程模型和生態(tài)系統(tǒng)。學(xué)習(xí)數(shù)據(jù)科學(xué)的一般方法。檢查分析大型公共數(shù)據(jù)集執(zhí)行步驟的完整性。發(fā)現(xiàn)哪些機器學(xué)習(xí)工具對特定問題有幫助。探索可適應(yīng)多種用途的代碼。
編輯推薦時至今日產(chǎn)生的數(shù)據(jù)量已經(jīng)達到令人驚人的地步,而且還在不斷增長。Apache Spark已經(jīng)成為分析大數(shù)據(jù)的實際工具,并且也是數(shù)據(jù)科學(xué)工具箱的關(guān)鍵部分。本書針對Spark最z新版本進行了更新,將Spark、統(tǒng)計方法和真實數(shù)據(jù)集結(jié)合在一起,教你如何運用 PySpark、Spark Python API和Spark編程中的其他最z佳實踐來解決分析問題。數(shù)據(jù)科學(xué)家Akash Tandon、Sandy Ryza、Uri Laserson、Sean Owen和Josh Wills介紹了Spark生態(tài)系統(tǒng),然后深入研究將常用技術(shù)(包括分類、聚類、協(xié)同過濾和異常檢測)應(yīng)用于以下的領(lǐng)域:基因組學(xué)、安全工作和金融。此更新版本還涵蓋圖像處理和Spark NLP庫。如果你對機器學(xué)習(xí)和統(tǒng)計學(xué)有基本的了解,并且能夠使用Python進行編程,那么本書將幫助你開始進行大規(guī)模的數(shù)據(jù)分析。
前言Apache Spark 從MPI(消息傳遞接口)到MapReduce 的過程源遠流長,使其可以寫出利用大量資源的同時分離出分布式系統(tǒng)基本細節(jié)的程序。盡管數(shù)據(jù)處理需求推動了這些框架的發(fā)展,但在某種程度上,大數(shù)據(jù)領(lǐng)域已經(jīng)與它們息息相關(guān),其范圍由這些框架可以處理的內(nèi)容定義。Spark 最初的承諾是讓這個過程更進一步,讓編寫分布式程序感覺就像編寫常規(guī)程序一樣。Spark 的普及與Python 數(shù)據(jù)(PyData)生態(tài)系統(tǒng)的日益風(fēng)行同步發(fā)展。因此,Spark 的Python API(PySpark)在過去幾年中的流行速度明顯增長是有道理的。盡管PyData 生態(tài)系統(tǒng)最近興起了一些分布式程序的選項,但Apache Spark 仍是處理跨行業(yè)領(lǐng)域的大型數(shù)據(jù)集最受歡迎的選擇之一。歸因于PySpark 其他PyData 工具的整合,該框架可以幫助數(shù)據(jù)科學(xué)從業(yè)者顯著提高生產(chǎn)力。我們一致認為教授數(shù)據(jù)科學(xué)的最佳方式是通過示例。為此,我們整理了一本關(guān)于應(yīng)用程序的書籍,涉及大規(guī)模數(shù)據(jù)分析中最常見的算法、數(shù)據(jù)集和設(shè)計模式之間的交互。這本書并不是要從頭到尾閱讀,它看起來只是像你極力需要完成的事情,或是為了激發(fā)你開始學(xué)習(xí)的興趣。為何寫這本書Apache Spark 在2020 年經(jīng)歷了一次主要版本的升級版本30。最大的改進之一是引入了Spark 自適應(yīng)執(zhí)行優(yōu)化系統(tǒng)。此功能消除了大部分調(diào)試和優(yōu)化的復(fù)雜性。因為它在 Spark 32 及更高版本中默認打開,所以我們在書中并未提及到它,你將自然而然的獲益。生態(tài)系統(tǒng)的變化,結(jié)合Spark 最新的主要版本,使這個版本成為一個與時俱進的版本。與以前選擇Scala 版本的Advanced Analytics with Spark 不同,我們將使用Python 作為主要工具。本書將包含與更廣泛的Python 數(shù)據(jù)科學(xué)生態(tài)系統(tǒng)相結(jié)合的最佳實踐。所有章節(jié)都已更新為使用最新版本的PySpark API,并增加了兩個新章節(jié)和對多個章節(jié)進行改寫,不會對Spark 的流處理和圖像處理庫進行介紹。隨著Spark 進入成熟和穩(wěn)定的新時代,我們希望這些變化將在未來幾年把本書作為有用的分析資料保存下來。本書的組織結(jié)構(gòu)第1 章把Spark 和PySpark 置于更廣泛的數(shù)據(jù)科學(xué)和大數(shù)據(jù)分析的背景下。之后,每章都將使用PySpark 對數(shù)據(jù)進行了獨立的分析。第2 章通過一個數(shù)據(jù)清洗實例介紹PySpark 和Python 中數(shù)據(jù)處理的基礎(chǔ)知識。接下來的幾章將深入探討如何使用Spark 進行機器學(xué)習(xí),并在經(jīng)典應(yīng)用中應(yīng)用一些最常用的算法。剩下的幾章則是一些零散的應(yīng)用,比如通過文本中的潛在語義關(guān)系查詢維基百科、分析基因組學(xué)數(shù)據(jù)、識別相似圖像等。本書不討論PySpark 的優(yōu)點和缺點以及一些其他內(nèi)容。本書介紹了Spark 編程模型和Spark 的Python API PySpark 的基礎(chǔ)知識。不過,本書并不打算成為Spark 的參考資料或提供全面的Spark 使用指南。本書不打算成為機器學(xué)習(xí)、統(tǒng)計學(xué)或線性代數(shù)的參考資料,盡管很多章節(jié)在使用這些內(nèi)容之前都會提供一些背景知識。相反,本書將通過涵蓋整個流程來幫助讀者感受使用PySpark 對大型數(shù)據(jù)集進行復(fù)雜分析的感覺,不僅是構(gòu)建和評估模型,還包括清洗、預(yù)處理和探索數(shù)據(jù),并注重將結(jié)果轉(zhuǎn)化為生產(chǎn)應(yīng)用程序的過程。我們相信,最好的教學(xué)方式是通過實踐。以下是本書要處理的一些任務(wù)示例:預(yù)測森林覆蓋我們使用決策樹,并利用位置和土壤類型等相關(guān)特征預(yù)測森林覆蓋類型(見第4 章)。查詢維基百科相似條目我們通過使用NLP(自然語言處理)技術(shù)識別條目之間的關(guān)系并查詢維基百科語料庫(見第6 章)。了解紐約出租車的使用情況我們通過執(zhí)行時間和地理空間分析,計算出租車的平均等待時間作為位置函數(shù)(見第7 章)。降低投資組合風(fēng)險我們使用蒙特卡羅模擬估計投資組合的財務(wù)風(fēng)險(見第9 章)。如果可能,我們不僅嘗試提供解決方案,還試圖展示完整的數(shù)據(jù)科學(xué)工作流程,包括所有的迭代(iterations)、終結(jié)點(dead ends)以及重新運行(restarts)。本書將有助于你更加熟悉Python、Spark、機器學(xué)習(xí)和數(shù)據(jù)分析。然而,這些都是為了一個更大的目標(biāo),我們希望本書的大部分內(nèi)容將教會你如何處理前面描述的任務(wù)。每章大約有幾十頁的篇幅,將盡可能地演示如何構(gòu)建一個數(shù)據(jù)應(yīng)用程序。排版約定本書采用以下排版約定。斜體(Italic)表示新術(shù)語、URL、電子郵件地址、文件名和文件擴展名。等寬字體(Constant Width)表示程序清單,在段落內(nèi)表示程序元素,例如變量、函數(shù)名稱、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關(guān)鍵字。粗體等寬字體(Constant width bold)表示應(yīng)由用戶原封不動輸入的命令或其他文本。斜體等寬字體(Constant width italic)表示應(yīng)該替換成用戶提供值的文本,或者由上下文決定的值。使用代碼示例補充材料(代碼示例、練習(xí)等)可以通過網(wǎng)址下載:https://githubcom/sryza/aas。與本書相關(guān)的技術(shù)問題,或者在使用代碼示例上有疑問,請發(fā)電子郵件到errata@oreillycomcn。本書的目的是幫助你完成工作。一般來說,本書提供的示例代碼,你可以在自己的程序或文檔中使用而無需聯(lián)系我們獲取許可,除非你需要復(fù)制大量代碼。例如,使用本書中的代碼片段編寫程序無需授權(quán)許可,但銷售或發(fā)行OReilly圖書中的示例則需要獲得許可。引用本書中的示例代碼回答問題無需獲得許可。但在產(chǎn)品文檔中本書中使用大量示例代碼則需要獲得許可。我們很希望但并不強制要求你在引用本書內(nèi)容時加上引用說明。引用說明一般包括書名、作者、出版社和ISBN,例如:Advanced Analytics with PySpark by Akash Tandon, Sandy Ryza, Uri Laserson, Sean Owen, and Josh Wills (OReilly) Copyright 2022 Akash Tandon, 978-1-098-10365-1。如果你覺得自己對示例代碼的使用超出了上述許可范圍, 請通過permissions@oreillycom 與我們聯(lián)系。OReilly 在線學(xué)習(xí)平臺(OReilly Online Learning)近40 年來,OReilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識和卓越見解,來幫助眾多公司取得成功。公司獨有的專家和改革創(chuàng)新者網(wǎng)絡(luò)通過OReilly 書籍、文章以及在線學(xué)習(xí)平臺,分享他們的專業(yè)知識和實踐經(jīng)驗。OReilly 在線學(xué)習(xí)平臺按照您的需要提供實時培訓(xùn)課程、深入學(xué)習(xí)渠道、交互式編程環(huán)境以及來自O(shè)Reilly 和其他200 多家出版商的大量書籍與視頻資料。更多信息,請訪問網(wǎng)站:https://wwworeillycom/。聯(lián)系我們?nèi)魏斡嘘P(guān)本書的意見或疑問,請按照以下地址聯(lián)系出版社。美國:OReilly Media, Inc1005 Gravenstein Highway NorthSebastopol, CA 95472中國:北京市西城區(qū)西直門南大街2 號成銘大廈C 座807 室(100035)奧萊利技術(shù)咨詢(北京)有限公司勘誤、示例和其他信息可訪問https://oreilly/adv-analytics-pyspark 獲取。對本書的評論或技術(shù)疑問,可以發(fā)電子郵件到errata@oreillycomcn。欲了解本社圖書和課程的新聞和信息,請訪問我們的網(wǎng)站http://oreillycom。我們的LinkedIn:https://linkedincom/company/oreilly-media。我們的Twitter:http://twittercom/oreillymedia。我們的YouTube:http://youtubecom/oreillymedia。致謝毫無疑問,如果沒有Apache Spark 和MLlib 的存在,就不會有本書。我們都應(yīng)該感謝構(gòu)建和它的開源團隊,以及為它添加內(nèi)容的數(shù)百名貢獻者。我們要感謝每一位花了大量時間并以專業(yè)角度審閱本書前幾版內(nèi)容的人:Michael Bernico、Adam Breindel、Ian Buss、Parviz Deyhim、Jeremy Freeman、Chris Fregly、Debashish Ghosh、Juliet Hougland、Jonathan Keebler、Nisha Muktewar、Frank Nothaft、Nick Pentreath、Kostas Sakellis、Tom White、Marcelo Vanzin 和Juliet Hougland。感謝大家! 這極大地改善了本書最終版本的結(jié)構(gòu)和質(zhì)量。Sandy 還要感謝Jordan Pinkus 和Richard Wang,感謝他們在風(fēng)險這一章的理論方面給予幫助。感謝Jeff Bleiel 和OReilly 為本書的出版提供了寶貴的經(jīng)驗和大力支持。
Akash Tandon是Looppanel的聯(lián)合創(chuàng)始人兼首席技術(shù)官。曾在Atlan擔(dān)任高級數(shù)據(jù)工程師。Sandy Ryza是Apache Spark的核心貢獻人,領(lǐng)導(dǎo)了Dagster項目的開發(fā)。Uri Laserson是Patch Biosciences 的創(chuàng)始人兼首席技術(shù)官。曾在Cloudera從事大數(shù)據(jù)和基因組學(xué)的研究。Sean Owen是Apache Spark的核心貢獻人和PMC(項目管理委員會)的成員,同時也是Databricks專注于機器學(xué)習(xí)和數(shù)據(jù)科學(xué)的首席解決方案架構(gòu)師。Josh Wills是WeaveGrid的軟件工程師,也是Slack的前數(shù)據(jù)工程主管。
目錄前言 1第1 章 大數(shù)據(jù)分析 711 使用大數(shù)據(jù) 812 Apache Spark 和PySpark10121 組件 10122 PySpark 12123 生態(tài)系統(tǒng) 1313 Spark 30 1414 PySpark 處理數(shù)據(jù)科學(xué)問題 1515 本章小結(jié)16第2 章 PySpark 數(shù)據(jù)分析簡介 1721 Spark 架構(gòu) 1922 安裝PySpark 2123 設(shè)置我們的數(shù)據(jù) 2424 使用DataFrame API 分析數(shù)據(jù) 3125 DataFrames 的快速匯總統(tǒng)計 3526 DataFrame 的透視和重塑 3727 關(guān)聯(lián)DataFrame 并選擇特征4028 評分和模型評估 4229 本章小結(jié)44第3 章 音樂推薦和音頻編碼器的數(shù)據(jù)集 4731 設(shè)置數(shù)據(jù)4832 我們對推薦系統(tǒng)的要求 5133 數(shù)據(jù)準(zhǔn)備5534 構(gòu)建第一個模型 5835 算法篩查推薦 6236 推薦質(zhì)量評估 6437 計算AUC 6638 選擇超參數(shù) 6839 給出推薦71310 本章小結(jié) 72第4 章 使用決策樹和決策森林進行預(yù)測 7541 決策樹和決策森林 7642 準(zhǔn)備數(shù)據(jù)7943 第一顆決策樹 8444 決策樹超參數(shù) 9245 調(diào)試決策樹 9446 重溫分類特征 9847 隨機森林10248 進行預(yù)測10549 本章小結(jié)105第5 章 異常檢測與K-means 聚類算法 10751 K-means 聚類 10852 識別異常網(wǎng)絡(luò)流量 10953 初次嘗試聚類 11254 選擇K 值 11455 利用SparkR 實現(xiàn)可視化 11856 特征歸一化 12357 分類變量12458 使用熵(Entropy)標(biāo)簽 12659 聚類實戰(zhàn)128510 本章小結(jié) 130第6 章 通過LDA、Spark NLP 了解維基百科 13361 隱含狄利克雷分布 13462 獲取數(shù)據(jù)13563 Spark NLP 13764 解析數(shù)據(jù)13965 使用Spark NLP 準(zhǔn)備數(shù)據(jù) 14166 TF-IDF 14667 計算TF-IDF 14768 創(chuàng)建LDA 模型 14869 本章小結(jié)151第7 章 基于出租車行程數(shù)據(jù)的時空序列數(shù)據(jù)分析 15371 數(shù)據(jù)準(zhǔn)備155711 將日期格式字符串轉(zhuǎn)換為時間戳 157712 處理無效記錄 15972 地理空間分析 161721 介紹GeoJSON 161722 GeoPandas 16373 PySpark 會話化 16674 本章小結(jié)170第8 章 金融風(fēng)險評估 17181 金融術(shù)語17282 VaR 的計算方法 173821 方差與協(xié)方差 173822 歷史模擬法 173823 蒙特卡羅模擬 17483 我們的模型 17484 獲取數(shù)據(jù)17585 準(zhǔn)備數(shù)據(jù)17786 決定因子權(quán)重 18087 抽樣 18488 試驗運行18789 可視化收益分布 191810 本章小結(jié) 192第9 章 分析基因組學(xué)數(shù)據(jù)和BDG 項目 19391 從建模中解耦存儲 19492 設(shè)置ADAM 19793 介紹如何使用ADAM 處理基因組數(shù)據(jù) 198931 使用ADAM CLI 進行文件格式轉(zhuǎn)換 199932 使用PySpark 和ADAM 采集基因組學(xué)數(shù)據(jù) 20094 預(yù)測轉(zhuǎn)錄因子結(jié)合位點 20695 本章小結(jié)212第10 章 基于深入學(xué)習(xí)和PySpark LSH 的圖像相似度檢測 215101 PyTorch 216102 準(zhǔn)備數(shù)據(jù) 217103 圖像矢量表示的深度學(xué)習(xí)模型 2191031 圖像嵌入 2191032 將圖像嵌入導(dǎo)入 PySpark 222104 使用PySpark LSH 進行圖像相似搜索 223105 本章小結(jié) 228第11 章 使用MLflow 管理機器學(xué)習(xí)生命周期 229111 機器學(xué)習(xí)生命周期 229112 MLflow 231113 實驗跟蹤 232114 管理和服務(wù)ML 模型 236115 創(chuàng)建并使用MLflow 項目 239116 本章小結(jié) 243