本書共分九章:用SQL來(lái)做數(shù)據(jù)分析、為數(shù)據(jù)分析做準(zhǔn)備、時(shí)間序列分析、同期群分析、文本分析、異常檢測(cè)、實(shí)驗(yàn)分析、創(chuàng)建用于分析的復(fù)雜數(shù)據(jù)集、結(jié)論。主要內(nèi)容包括:什么是數(shù)據(jù)分析;為什么用SQL等。
本書介紹了運(yùn)用SQL進(jìn)行各類數(shù)據(jù)分析的方法。
編輯推薦
隨著數(shù)據(jù)、算力和云數(shù)據(jù)倉(cāng)庫(kù)的激增,對(duì)于有經(jīng)驗(yàn)的分析師或數(shù)據(jù)科學(xué)家來(lái)說(shuō),SQL已經(jīng)成為一個(gè)更加不可或缺的工具。本書展示了提高SQL技能、解決問(wèn)題,以及在工作流程中充分利用SQL新的和隱藏的方法。
你將學(xué)習(xí)如何以創(chuàng)新的方式使用常用的和特殊的SQL函數(shù)(如連接、窗口函數(shù)、子查詢和正則表達(dá)式),以及如何用可理解的代碼,通過(guò)組合SQL技術(shù)更快地完成目標(biāo)。如果你在平常工作中也會(huì)用到SQL數(shù)據(jù)庫(kù),本書會(huì)是必b備的參考資料。
專家推薦
“雖然我已經(jīng)在數(shù)據(jù)分析領(lǐng)域工作超過(guò)20年,也對(duì)不同的SQL環(huán)境無(wú)比熟悉,在閱讀本書的過(guò)程中仍有無(wú)數(shù)個(gè)令我驚喜的‘啊哈’時(shí)刻。我會(huì)將此書買給我當(dāng)前以及未來(lái)團(tuán)隊(duì)中的每一位成員!
——Stuart Kim-Brown PhD,
B2C和SaaS產(chǎn)品分析專家
“終于有一本專門為想從事數(shù)據(jù)分析相關(guān)工作的人所寫的介紹SQL的書籍出版了。任何一位熱愛數(shù)據(jù)的分析師或數(shù)據(jù)科學(xué)家都會(huì)從中受益,學(xué)會(huì)運(yùn)用SQL進(jìn)行各類數(shù)據(jù)分析的方法。詳細(xì)的示例和代碼也幫助讀者更快地學(xué)習(xí)運(yùn)用SQL進(jìn)行數(shù)據(jù)分析!
——Dan Voorhies,
Zillow數(shù)據(jù)分析部總監(jiān)
前言在過(guò)去的20 年里,我主要在科技公司工作,涵蓋了各類消費(fèi)者和B2B( 即企業(yè)對(duì)企業(yè)) 行業(yè),而這些日子中我大部分的工作時(shí)間都在用SQL 來(lái)處理和分析數(shù)據(jù)。在那段時(shí)間里,數(shù)據(jù)量急劇增加,我所使用的技術(shù)也有了突飛猛進(jìn)的進(jìn)步。數(shù)據(jù)庫(kù)比以往任何時(shí)候都快,用于傳達(dá)數(shù)據(jù)含義的報(bào)告和可視化工具也比以往都更強(qiáng)大。然而,有一件事一直保持不變,那就是SQL 是我常用的數(shù)據(jù)分析工具箱的關(guān)鍵部分。我還清楚地記得剛開始接觸和學(xué)習(xí)SQL 時(shí)候的場(chǎng)景。我的職業(yè)生涯始于金融業(yè),那時(shí)候電子表格占據(jù)了行業(yè)的主導(dǎo)地位,我在寫公式和記住所有鍵盤快捷鍵方面都已經(jīng)非常熟練了。有一天,我發(fā)瘋似的按住Ctrl 和Alt 鍵并單擊了鍵盤上的每一個(gè)鍵,只想看看究竟會(huì)發(fā)生什么(然后為我的同事創(chuàng)建了一個(gè)速查表)。這既帶給我樂(lè)趣也是為了更好地工作:我處理電子表格的速度越快,就越有可能在午夜前完成工作,這樣就可以回家睡覺了。精通電子表格讓我進(jìn)入了下一個(gè)崗位,這是我第一次接觸數(shù)據(jù)庫(kù)和SQL 的初創(chuàng)公司。我的一部分工作職責(zé)是處理電子表格中的庫(kù)存數(shù)據(jù),由于早期的互聯(lián)網(wǎng)規(guī)模,數(shù)據(jù)集有時(shí)有上萬(wàn)行。這在當(dāng)時(shí)是一個(gè)“大數(shù)據(jù)”,至少對(duì)我來(lái)說(shuō)是這樣。我養(yǎng)成了在電腦CPU 忙于運(yùn)行它的vlookup 魔法時(shí)去喝杯咖啡或吃午飯的習(xí)慣。有一天,我的經(jīng)理去度假,讓我?guī)兔芾硭肁ccess 在筆記本電腦上建立的數(shù)據(jù)倉(cāng)庫(kù)。刷新數(shù)據(jù)需要一系列步驟:在門戶中運(yùn)行SQL 查詢,將生成的csv 文件加載到數(shù)據(jù)庫(kù)中,然后刷新電子表格報(bào)告。第一次成功加載后,我開始修訂,試圖了解它是如何工作的,并纏著工程師向我展示如何修改SQL 查詢。我被深深的迷住了,甚至當(dāng)我認(rèn)為我可能會(huì)改變職業(yè)方向時(shí),我還是不斷地回歸到數(shù)據(jù)上來(lái)。操縱數(shù)據(jù)、回答問(wèn)題、幫助我的同事更好、更聰明地工作,以及通過(guò)數(shù)據(jù)集了解企業(yè)和世界,我從未停止享受其中帶給我的樂(lè)趣并為此感到興奮不已。當(dāng)我剛開始使用SQL 時(shí),還沒有太多的學(xué)習(xí)資源。我買了一本關(guān)于基本語(yǔ)法的書,花了一晚上就看完了,從那之后大部分的知識(shí)都是通過(guò)反復(fù)試驗(yàn)來(lái)學(xué)習(xí)的。在我還在學(xué)習(xí)的階段,我就直接查詢生產(chǎn)數(shù)據(jù)庫(kù),并用我過(guò)于雄心勃勃(或者更可能只是寫得不好)的SQL 不止一次地使網(wǎng)站崩潰。幸運(yùn)的是,我的技能有所提高,這些年來(lái)我學(xué)會(huì)了從表中的數(shù)據(jù)向前工作,從所需的輸出向后工作,解決技術(shù)和邏輯的各種挑戰(zhàn)和難題,以編寫返回正確數(shù)據(jù)的查詢。我最終設(shè)計(jì)并構(gòu)建了數(shù)據(jù)倉(cāng)庫(kù),以從不同來(lái)源收集數(shù)據(jù),并避免破壞關(guān)鍵的生產(chǎn)數(shù)據(jù)庫(kù)。在編寫SQL 查詢之前,我學(xué)到了很多關(guān)于應(yīng)該何時(shí)以及如何聚合數(shù)據(jù)的知識(shí),還有什么時(shí)候應(yīng)該以更原始的形式保留數(shù)據(jù)。我將筆記與差不多同一時(shí)間進(jìn)入數(shù)據(jù)領(lǐng)域行業(yè)的其他人進(jìn)行了比較,很明顯,我們主要是以有針對(duì)性的方式來(lái)學(xué)習(xí)的。我們中那些幸運(yùn)的人有同齡人與他們分享技術(shù)。大多數(shù)SQL 文本要么是介紹性的,要么是基礎(chǔ)性的(肯定有這些。┗蛘呤轻槍(duì)數(shù)據(jù)庫(kù)開發(fā)人員的。對(duì)于專注于分析工作的高級(jí)SQL 用戶來(lái)說(shuō),資源很少。知識(shí)往往被困在個(gè)人或小團(tuán)隊(duì)中,而不是被廣泛地交流與分享。本書的一個(gè)目標(biāo)是改變這一點(diǎn),為從業(yè)者提供如何使用SQL 解決常見分析問(wèn)題的參考,并且我希望使用你可能從未見過(guò)的技術(shù),激發(fā)對(duì)數(shù)據(jù)的新探索。O’Reilly 在線學(xué)習(xí)平臺(tái)(O’Reilly Online Learning)近40 年來(lái),O’Reilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見解,來(lái)幫助眾多公司取得成功。我們擁有獨(dú)一無(wú)二的專家和革新者組成的龐大網(wǎng)絡(luò),他們通過(guò)圖書、文章、會(huì)議和我們的在線學(xué)習(xí)平臺(tái)分享他們的知識(shí)和經(jīng)驗(yàn)。O’Reilly 的在線學(xué)習(xí)平臺(tái)允許你按需訪問(wèn)現(xiàn)場(chǎng)培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及O’Reilly 和200 多家其他出版商提供的大量文本和視頻資源。有關(guān)的更多信息,請(qǐng)?jiān)L問(wèn)http://oreilly.com。聯(lián)系我們?nèi)魏斡嘘P(guān)本書的意見或疑問(wèn),請(qǐng)按照以下地址聯(lián)系出版社。美國(guó):O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國(guó):北京市西城區(qū)西直門南大街2號(hào)成銘大廈C座807室(100035)奧萊利技術(shù)咨詢(北京)有限公司本書有專門的網(wǎng)頁(yè),其中列出了勘誤表、示例和任何其他信息。 你可以訪問(wèn)此頁(yè)面https://oreil.ly/sql-data-analysis。對(duì)本書的評(píng)論或技術(shù)疑問(wèn),可以發(fā)電子郵件到errata@oreilly.com.cn。欲了解本社圖書和課程的新聞和信息,請(qǐng)?jiān)L問(wèn)我們的網(wǎng)站http://oreilly.com。我們的Facebook:http://facebook.com/oreilly。我們的Twitter:http://twitter.com/oreillymedia。我們的YouTube:http://www.youtube.com/oreillymedia。致謝如果沒有O’Reilly 的許多人的努力,這本書是不可能完成和出版的。感謝Andy Kwan 最開始招募我參與這個(gè)項(xiàng)目;Amelia Blevins 和Shira Evans 指導(dǎo)我完成了整個(gè)過(guò)程,并在過(guò)程中提供了有益的反饋;Kristen Brown 指導(dǎo)了這本書的制作過(guò)程;Arthur Johnson 提高了文本的質(zhì)量和清晰度,無(wú)意中也讓我對(duì)SQL 有了更深入的思考。多年來(lái),許多同事在我的SQL 之旅中發(fā)揮了重要作用,感謝他們的指導(dǎo)、技巧和共享代碼,以及多年來(lái)花時(shí)間集思廣益解決分析問(wèn)題的方法。Sharon Lin 讓我對(duì)正則表達(dá)式大開眼界。Elyse Gordon 給了我很多寫書的建議。Dave Hoch 和我們關(guān)于實(shí)驗(yàn)分析的對(duì)話啟發(fā)了我寫下第7 章。來(lái)自Star Chamber 的Dan、Jim 和Stu 一直以來(lái)都是我最喜歡一起交流探討的學(xué)者們。我也很感謝這些年來(lái)所有提出尖銳問(wèn)題的同事不斷給我啟發(fā),一旦這些問(wèn)題得到回答,他們又會(huì)提出更有挑戰(zhàn)的問(wèn)題。我要感謝我的丈夫Rick、兒子Shea、女兒Lily 和Fiona,以及媽媽Janet,感謝他們的愛和鼓勵(lì),最重要的是,感謝他們給我時(shí)間來(lái)寫這本書。Amy、Halle、Jessi 和the Den of Slack 在長(zhǎng)達(dá)數(shù)月的寫作和疫情封鎖期間讓我身心保持良好的狀態(tài)和帶給我歡笑。
Cathy Tanimura有在不同行業(yè)領(lǐng)域超過(guò)20年的數(shù)據(jù)分析相關(guān)經(jīng)驗(yàn),從金融到B2B軟件再到客戶服務(wù)。Cathy帶著用數(shù)據(jù)將人們與企業(yè)更緊密地連接起來(lái)的信念和熱情,幫助多個(gè)頭部科技公司搭建了數(shù)據(jù)基礎(chǔ)架構(gòu)并管理數(shù)據(jù)團(tuán)隊(duì)。她對(duì)用SQL在主流的開源數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)分析有著豐富的經(jīng)驗(yàn)。
前言 .1
第1 章 用SQL 來(lái)做數(shù)據(jù)分析 7
1.1 什么是數(shù)據(jù)分析 . 7
1.2 為什么用SQL 10
1.2.1 SQL 是什么 10
1.2.2 SQL 的優(yōu)勢(shì) 13
1.2.3 SQL 與R 和Python 的對(duì)比 14
1.2.4 SQL 作為數(shù)據(jù)分析流程中的一部分 . 16
1.3 數(shù)據(jù)庫(kù)類型以及如何使用 19
1.3.1 行存儲(chǔ)數(shù)據(jù) 20
1.3.2 列存儲(chǔ)數(shù)據(jù) 22
1.3.3 其他的數(shù)據(jù)結(jié)構(gòu)類型 23
1.4 總結(jié) 25
第2 章 為數(shù)據(jù)分析做準(zhǔn)備 26
2.1 數(shù)據(jù)類型 27
2.1.1 數(shù)據(jù)庫(kù)的數(shù)據(jù)類型 . 27
2.1.2 結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù) 29
2.1.3 定量和定性數(shù)據(jù) . 30
2.1.4 第一方、第二方和第三方數(shù)據(jù) 31
2.1.5 稀疏數(shù)據(jù). 32
2.2 SQL 查詢結(jié)構(gòu) 33
2.3 數(shù)據(jù)剖析:分布 36
2.3.1 直方圖和頻率 37
2.3.2 分箱 40
2.3.3 n-Tiles 43
2.4 數(shù)據(jù)剖析:數(shù)據(jù)質(zhì)量 . 46
2.4.1 檢測(cè)重復(fù)數(shù)據(jù) 47
2.4.2 用GROUP BY 和DISTINCT 來(lái)處理重復(fù)數(shù)據(jù) 49
2.5 準(zhǔn)備:數(shù)據(jù)清理 50
2.5.1 通過(guò)CASE 轉(zhuǎn)換來(lái)清理數(shù)據(jù) 51
2.5.2 數(shù)據(jù)類型轉(zhuǎn)換 54
2.5.3 處理空值:coalesce, nulliff, nvl 函數(shù) 57
2.5.4 缺失的數(shù)據(jù) 61
2.6 準(zhǔn)備:數(shù)據(jù)構(gòu)形 66
2.6.1 你需要怎樣的輸出:BI,可視化,統(tǒng)計(jì),機(jī)器學(xué)習(xí) 67
2.6.2 用CASE 語(yǔ)句進(jìn)行數(shù)據(jù)透視 68
2.6.3 用UNION 語(yǔ)句來(lái)取消數(shù)據(jù)透視 70
2.6.4 pivot(透視)和unpivot(取消透視)函數(shù) 73
2.7 總結(jié) 75
第3 章 時(shí)間序列分析 .76
3.1 日期、日期時(shí)間和時(shí)間操作 77
3.1.1 時(shí)區(qū)轉(zhuǎn)換. 78
3.1.2 日期和時(shí)間戳的格式轉(zhuǎn)換 . 80
3.1.3 日期相關(guān)的計(jì)算 . 85
3.1.4 時(shí)間相關(guān)的計(jì)算 . 88
3.1.5 連接不同來(lái)源的數(shù)據(jù) 90
3.2 零售銷售數(shù)據(jù)集 91
3.3 對(duì)數(shù)據(jù)進(jìn)行趨勢(shì)分析 . 92
3.3.1 簡(jiǎn)單的趨勢(shì) 93
3.3.2 比較時(shí)間序列的組成部分 . 95
3.3.3 計(jì)算占總數(shù)的百分比 . 104
3.3.4 運(yùn)用索引以查看隨時(shí)間變化的百分比 108
3.4 滾動(dòng)時(shí)間窗口 . 113
3.4.1 計(jì)算滾動(dòng)時(shí)間窗口 115
3.4.2 稀疏數(shù)據(jù)的滾動(dòng)時(shí)間窗口 121
3.4.3 計(jì)算累計(jì)值 . 124
3.5 季節(jié)性分析 127
3.5.1 同期比較:YoY 和MoM . 129
3.5.2 同期比較:與去年的同月進(jìn)行對(duì)比 132
3.5.3 與多個(gè)以前的周期做對(duì)比 137
3.6 總結(jié) . 140
第 4 章 同期群分析 141
4.1 同期群:一種有用的分析框架 142
4.2 立法者數(shù)據(jù)集 . 145
4.3 留存 . 146
4.3.1 基本留存曲線的 SQL 148
4.3.2 調(diào)整時(shí)間序列以提高留存率的準(zhǔn)確性 152
4.3.3 從時(shí)間序列數(shù)據(jù)構(gòu)建同期群 158
4.3.4 從單獨(dú)的表構(gòu)建同期群 164
4.3.5 處理稀疏同期群 168
4.3.6 用除第一個(gè)日期以外的其他日期定義同期群 173
4.4 相關(guān)同期群分析 176
4.4.1 生存 177
4.4.2 返回或重復(fù)購(gòu)買行為 . 181
4.4.3 累積計(jì)算 187
4.5 透過(guò)同期群看橫斷面分析 . 191
4.6 總結(jié) . 200
第 5 章 文本分析 201
5.1 為什么使用 SQL 進(jìn)行文本分析 . 201
5.1.1 什么是文本分析 202
5.1.2 為什么 SQL 是文本分析的好選擇 202
5.1.3 什么情況下 SQL 不是一個(gè)好的選擇 . 204
5.2 UFO 目擊數(shù)據(jù)集 205
5.3 文本特征 206
5.4 解析文本 208
5.5 文本轉(zhuǎn)換 214
5.6 在較大的文本塊中查找元素 223
5.6.1 通配符匹配:LIKE,ILIKE 223
5.6.2 精確匹配:IN,NOT IN . 229
5.6.3 正則表達(dá)式 . 232
5.7 構(gòu)建與重塑文本 250
5.7.1 拼接 250
5.7.2 重塑文本 254
5.8 總結(jié) . 258
第6 章 異常檢測(cè) 259
6.1 SQL 異常檢測(cè)的能力和限制 260
6.2 數(shù)據(jù)集 261
6.3 檢測(cè)異常值 262
6.3.1 通過(guò)排序查找異常 263
6.3.2 通過(guò)計(jì)算百分比和標(biāo)準(zhǔn)偏差發(fā)現(xiàn)異常 266
6.3.3 通過(guò)作圖可視化查找異常 274
6.4 異常的形式 283
6.4.1 異常值 283
6.4.2 異常的計(jì)數(shù)或頻率 287
6.4.3 數(shù)據(jù)缺失引起的異常 . 292
6.5 處理異常 294
6.5.1 探查 294
6.5.2 刪除 295
6.5.3 替代值替換 . 297
6.5.4 縮放 299
6.6 總結(jié) . 301
第 7 章 實(shí)驗(yàn)分析 302
7.1 用 SQL 進(jìn)行實(shí)驗(yàn)分析的優(yōu)勢(shì)與局限性 . 303
7.2 數(shù)據(jù)集 305
7.3 實(shí)驗(yàn)的類型 307
7.3.1 二元結(jié)果實(shí)驗(yàn):卡方檢驗(yàn) 307
7.3.2 具有連續(xù)結(jié)果的實(shí)驗(yàn):t 檢驗(yàn) 310
7.4 實(shí)驗(yàn)的挑戰(zhàn)和拯救有缺陷的實(shí)驗(yàn)的方法 312
7.4.1 變體分配 312
7.4.2 異常值 314
7.4.3 時(shí)間盒 315
7.4.4 重復(fù)暴露實(shí)驗(yàn) 317
7.5 當(dāng)無(wú)法進(jìn)行控制實(shí)驗(yàn)時(shí):替代分析 . 318
7.5.1 前/ 后分析 319
7.5.2 自然實(shí)驗(yàn)分析 321
7.5.3 閾值附近的群體分析 . 322
7.6 總結(jié) . 323
第8 章 創(chuàng)建用于分析的復(fù)雜數(shù)據(jù)集 324
8.1 何時(shí)對(duì)復(fù)雜數(shù)據(jù)集使用 SQL 324
8.1.1 使用 SQL 的優(yōu)點(diǎn) . 325
8.1.2 什么時(shí)候構(gòu)建ETL . 326
8.1.3 何時(shí)將邏輯放入其他工具中 328
8.2 代碼組織 329
8.2.1 注釋 330
8.2.2 大寫,縮進(jìn),括號(hào)和其他格式技巧 331
8.2.3 存儲(chǔ)代碼 334
8.3 組織計(jì)算 335
8.3.1 理解SQL 子句的計(jì)算順序 . 335
8.3.2 子查詢 339
8.3.3 臨時(shí)表 341
8.3.4 公共表表達(dá)式 343
8.3.5 grouping sets 344
8.4 管理數(shù)據(jù)集大小和隱私問(wèn)題 349
8.4.1 使用 % 、mod 進(jìn)行抽樣 . 349
8.4.2 降低維數(shù) 351
8.4.3 PII 和數(shù)據(jù)隱私 . 355
8.5 總結(jié) . 357
第9 章 結(jié)論 358
9.1 漏斗分析 358
9.2 流失、中止和其他離開的定義 360
9.3 購(gòu)物籃分析 365
9.4 資源 . 367
9.4.1 書籍和博客 . 368
9.4.2 數(shù)據(jù)集 369
9.5 最終的想法 370