本書共分九章:用SQL來做數(shù)據(jù)分析、為數(shù)據(jù)分析做準(zhǔn)備、時(shí)間序列分析、同期群分析、文本分析、異常檢測、實(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ù)倉庫的激增,對于有經(jīng)驗(yàn)的分析師或數(shù)據(jù)科學(xué)家來說,SQL已經(jīng)成為一個(gè)更加不可或缺的工具。本書展示了提高SQL技能、解決問題,以及在工作流程中充分利用SQL新的和隱藏的方法。
你將學(xué)習(xí)如何以創(chuàng)新的方式使用常用的和特殊的SQL函數(shù)(如連接、窗口函數(shù)、子查詢和正則表達(dá)式),以及如何用可理解的代碼,通過組合SQL技術(shù)更快地完成目標(biāo)。如果你在平常工作中也會用到SQL數(shù)據(jù)庫,本書會是必b備的參考資料。
專家推薦
“雖然我已經(jīng)在數(shù)據(jù)分析領(lǐng)域工作超過20年,也對不同的SQL環(huán)境無比熟悉,在閱讀本書的過程中仍有無數(shù)個(gè)令我驚喜的‘啊哈’時(shí)刻。我會將此書買給我當(dāng)前以及未來團(tuán)隊(duì)中的每一位成員!
——Stuart Kim-Brown PhD,
B2C和SaaS產(chǎn)品分析專家
“終于有一本專門為想從事數(shù)據(jù)分析相關(guān)工作的人所寫的介紹SQL的書籍出版了。任何一位熱愛數(shù)據(jù)的分析師或數(shù)據(jù)科學(xué)家都會從中受益,學(xué)會運(yùn)用SQL進(jìn)行各類數(shù)據(jù)分析的方法。詳細(xì)的示例和代碼也幫助讀者更快地學(xué)習(xí)運(yùn)用SQL進(jìn)行數(shù)據(jù)分析。”
——Dan Voorhies,
Zillow數(shù)據(jù)分析部總監(jiān)
前言在過去的20 年里,我主要在科技公司工作,涵蓋了各類消費(fèi)者和B2B( 即企業(yè)對企業(yè)) 行業(yè),而這些日子中我大部分的工作時(shí)間都在用SQL 來處理和分析數(shù)據(jù)。在那段時(shí)間里,數(shù)據(jù)量急劇增加,我所使用的技術(shù)也有了突飛猛進(jìn)的進(jìn)步。數(shù)據(jù)庫比以往任何時(shí)候都快,用于傳達(dá)數(shù)據(jù)含義的報(bào)告和可視化工具也比以往都更強(qiáng)大。然而,有一件事一直保持不變,那就是SQL 是我常用的數(shù)據(jù)分析工具箱的關(guān)鍵部分。我還清楚地記得剛開始接觸和學(xué)習(xí)SQL 時(shí)候的場景。我的職業(yè)生涯始于金融業(yè),那時(shí)候電子表格占據(jù)了行業(yè)的主導(dǎo)地位,我在寫公式和記住所有鍵盤快捷鍵方面都已經(jīng)非常熟練了。有一天,我發(fā)瘋似的按住Ctrl 和Alt 鍵并單擊了鍵盤上的每一個(gè)鍵,只想看看究竟會發(fā)生什么(然后為我的同事創(chuàng)建了一個(gè)速查表)。這既帶給我樂趣也是為了更好地工作:我處理電子表格的速度越快,就越有可能在午夜前完成工作,這樣就可以回家睡覺了。精通電子表格讓我進(jìn)入了下一個(gè)崗位,這是我第一次接觸數(shù)據(jù)庫和SQL 的初創(chuàng)公司。我的一部分工作職責(zé)是處理電子表格中的庫存數(shù)據(jù),由于早期的互聯(lián)網(wǎng)規(guī)模,數(shù)據(jù)集有時(shí)有上萬行。這在當(dāng)時(shí)是一個(gè)“大數(shù)據(jù)”,至少對我來說是這樣。我養(yǎng)成了在電腦CPU 忙于運(yùn)行它的vlookup 魔法時(shí)去喝杯咖啡或吃午飯的習(xí)慣。有一天,我的經(jīng)理去度假,讓我?guī)兔芾硭肁ccess 在筆記本電腦上建立的數(shù)據(jù)倉庫。刷新數(shù)據(jù)需要一系列步驟:在門戶中運(yùn)行SQL 查詢,將生成的csv 文件加載到數(shù)據(jù)庫中,然后刷新電子表格報(bào)告。第一次成功加載后,我開始修訂,試圖了解它是如何工作的,并纏著工程師向我展示如何修改SQL 查詢。我被深深的迷住了,甚至當(dāng)我認(rèn)為我可能會改變職業(yè)方向時(shí),我還是不斷地回歸到數(shù)據(jù)上來。操縱數(shù)據(jù)、回答問題、幫助我的同事更好、更聰明地工作,以及通過數(shù)據(jù)集了解企業(yè)和世界,我從未停止享受其中帶給我的樂趣并為此感到興奮不已。當(dāng)我剛開始使用SQL 時(shí),還沒有太多的學(xué)習(xí)資源。我買了一本關(guān)于基本語法的書,花了一晚上就看完了,從那之后大部分的知識都是通過反復(fù)試驗(yàn)來學(xué)習(xí)的。在我還在學(xué)習(xí)的階段,我就直接查詢生產(chǎn)數(shù)據(jù)庫,并用我過于雄心勃勃(或者更可能只是寫得不好)的SQL 不止一次地使網(wǎng)站崩潰。幸運(yùn)的是,我的技能有所提高,這些年來我學(xué)會了從表中的數(shù)據(jù)向前工作,從所需的輸出向后工作,解決技術(shù)和邏輯的各種挑戰(zhàn)和難題,以編寫返回正確數(shù)據(jù)的查詢。我最終設(shè)計(jì)并構(gòu)建了數(shù)據(jù)倉庫,以從不同來源收集數(shù)據(jù),并避免破壞關(guān)鍵的生產(chǎn)數(shù)據(jù)庫。在編寫SQL 查詢之前,我學(xué)到了很多關(guān)于應(yīng)該何時(shí)以及如何聚合數(shù)據(jù)的知識,還有什么時(shí)候應(yīng)該以更原始的形式保留數(shù)據(jù)。我將筆記與差不多同一時(shí)間進(jìn)入數(shù)據(jù)領(lǐng)域行業(yè)的其他人進(jìn)行了比較,很明顯,我們主要是以有針對性的方式來學(xué)習(xí)的。我們中那些幸運(yùn)的人有同齡人與他們分享技術(shù)。大多數(shù)SQL 文本要么是介紹性的,要么是基礎(chǔ)性的(肯定有這些。┗蛘呤轻槍(shù)據(jù)庫開發(fā)人員的。對于專注于分析工作的高級SQL 用戶來說,資源很少。知識往往被困在個(gè)人或小團(tuán)隊(duì)中,而不是被廣泛地交流與分享。本書的一個(gè)目標(biāo)是改變這一點(diǎn),為從業(yè)者提供如何使用SQL 解決常見分析問題的參考,并且我希望使用你可能從未見過的技術(shù),激發(fā)對數(shù)據(jù)的新探索。O’Reilly 在線學(xué)習(xí)平臺(O’Reilly Online Learning)近40 年來,O’Reilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識和卓越見解,來幫助眾多公司取得成功。我們擁有獨(dú)一無二的專家和革新者組成的龐大網(wǎng)絡(luò),他們通過圖書、文章、會議和我們的在線學(xué)習(xí)平臺分享他們的知識和經(jīng)驗(yàn)。O’Reilly 的在線學(xué)習(xí)平臺允許你按需訪問現(xiàn)場培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及O’Reilly 和200 多家其他出版商提供的大量文本和視頻資源。有關(guān)的更多信息,請?jiān)L問http://oreilly.com。聯(lián)系我們?nèi)魏斡嘘P(guān)本書的意見或疑問,請按照以下地址聯(lián)系出版社。美國:O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國:北京市西城區(qū)西直門南大街2號成銘大廈C座807室(100035)奧萊利技術(shù)咨詢(北京)有限公司本書有專門的網(wǎng)頁,其中列出了勘誤表、示例和任何其他信息。 你可以訪問此頁面https://oreil.ly/sql-data-analysis。對本書的評論或技術(shù)疑問,可以發(fā)電子郵件到errata@oreilly.com.cn。欲了解本社圖書和課程的新聞和信息,請?jiān)L問我們的網(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è)過程,并在過程中提供了有益的反饋;Kristen Brown 指導(dǎo)了這本書的制作過程;Arthur Johnson 提高了文本的質(zhì)量和清晰度,無意中也讓我對SQL 有了更深入的思考。多年來,許多同事在我的SQL 之旅中發(fā)揮了重要作用,感謝他們的指導(dǎo)、技巧和共享代碼,以及多年來花時(shí)間集思廣益解決分析問題的方法。Sharon Lin 讓我對正則表達(dá)式大開眼界。Elyse Gordon 給了我很多寫書的建議。Dave Hoch 和我們關(guān)于實(shí)驗(yàn)分析的對話啟發(fā)了我寫下第7 章。來自Star Chamber 的Dan、Jim 和Stu 一直以來都是我最喜歡一起交流探討的學(xué)者們。我也很感謝這些年來所有提出尖銳問題的同事不斷給我啟發(fā),一旦這些問題得到回答,他們又會提出更有挑戰(zhàn)的問題。我要感謝我的丈夫Rick、兒子Shea、女兒Lily 和Fiona,以及媽媽Janet,感謝他們的愛和鼓勵(lì),最重要的是,感謝他們給我時(shí)間來寫這本書。Amy、Halle、Jessi 和the Den of Slack 在長達(dá)數(shù)月的寫作和疫情封鎖期間讓我身心保持良好的狀態(tài)和帶給我歡笑。
Cathy Tanimura有在不同行業(yè)領(lǐng)域超過20年的數(shù)據(jù)分析相關(guān)經(jīng)驗(yàn),從金融到B2B軟件再到客戶服務(wù)。Cathy帶著用數(shù)據(jù)將人們與企業(yè)更緊密地連接起來的信念和熱情,幫助多個(gè)頭部科技公司搭建了數(shù)據(jù)基礎(chǔ)架構(gòu)并管理數(shù)據(jù)團(tuán)隊(duì)。她對用SQL在主流的開源數(shù)據(jù)庫進(jìn)行數(shù)據(jù)分析有著豐富的經(jīng)驗(yàn)。
前言 .1
第1 章 用SQL 來做數(shù)據(jù)分析 7
1.1 什么是數(shù)據(jù)分析 . 7
1.2 為什么用SQL 10
1.2.1 SQL 是什么 10
1.2.2 SQL 的優(yōu)勢 13
1.2.3 SQL 與R 和Python 的對比 14
1.2.4 SQL 作為數(shù)據(jù)分析流程中的一部分 . 16
1.3 數(shù)據(jù)庫類型以及如何使用 19
1.3.1 行存儲數(shù)據(jù) 20
1.3.2 列存儲數(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ù)庫的數(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 檢測重復(fù)數(shù)據(jù) 47
2.4.2 用GROUP BY 和DISTINCT 來處理重復(fù)數(shù)據(jù) 49
2.5 準(zhǔn)備:數(shù)據(jù)清理 50
2.5.1 通過CASE 轉(zhuǎn)換來清理數(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 語句進(jìn)行數(shù)據(jù)透視 68
2.6.3 用UNION 語句來取消數(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 連接不同來源的數(shù)據(jù) 90
3.2 零售銷售數(shù)據(jù)集 91
3.3 對數(shù)據(jù)進(jìn)行趨勢分析 . 92
3.3.1 簡單的趨勢 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)行對比 132
3.5.3 與多個(gè)以前的周期做對比 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ù)購買行為 . 181
4.4.3 累積計(jì)算 187
4.5 透過同期群看橫斷面分析 . 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 章 異常檢測 259
6.1 SQL 異常檢測的能力和限制 260
6.2 數(shù)據(jù)集 261
6.3 檢測異常值 262
6.3.1 通過排序查找異常 263
6.3.2 通過計(jì)算百分比和標(biāo)準(zhǔn)偏差發(fā)現(xiàn)異常 266
6.3.3 通過作圖可視化查找異常 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)勢與局限性 . 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)無法進(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í)對復(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),括號和其他格式技巧 331
8.2.3 存儲代碼 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ù)集大小和隱私問題 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 購物籃分析 365
9.4 資源 . 367
9.4.1 書籍和博客 . 368
9.4.2 數(shù)據(jù)集 369
9.5 最終的想法 370