
用SQL思考VS用Python思考
多年來,我已經(jīng)使用過各種語言和工具來分析數(shù)據(jù),當(dāng)我回想起我使用每一個(gè)工具的時(shí)候,我逐漸意識到為了解決分析問題,每一個(gè)工具鼓勵(lì)使用不同的思路框架。意識到這些框架對性能的提升和掌握一門新的語言或工具的技術(shù)特征同樣重要。
我第一次接觸到數(shù)據(jù)分析大約十年前作為一名大學(xué)生(盡管我的時(shí)間都花在了研究棒球票的背面)在學(xué)校里,以及后來作為一個(gè)經(jīng)濟(jì)學(xué)研究員,我曾幾乎只用兩個(gè)工具,Excel和R就能良好運(yùn)行來自政府?dāng)?shù)據(jù)門戶或?qū)W術(shù)來源下載的CSV或Excel文件。
但我開始專注于商業(yè)分析的新工作時(shí),我被扔到一個(gè)全新的世界。我需要的絕大多數(shù)數(shù)據(jù)存儲在數(shù)據(jù)庫中。SQL成了一個(gè)必要的接入點(diǎn)。
首先,采用了新的工具,是具有挑戰(zhàn)性的。不僅有一個(gè)學(xué)習(xí)曲線要與之抗衡,也覺得SQL有限制。我習(xí)慣了R的簡便統(tǒng)計(jì)測試,可訪問的繪圖庫和靈活的數(shù)據(jù)結(jié)構(gòu)。在SQL中,即便是畫一個(gè)柱狀圖這樣簡單的事,也需要一個(gè)完整的博客帖子來學(xué)習(xí)。
有一段時(shí)間,我通過修補(bǔ)工具保持這種靈活,并把查詢結(jié)果導(dǎo)入RStudio。
從我SQL客戶端跳轉(zhuǎn)到R客戶端,使得所有工作整合到一起變得困難。下載查詢結(jié)果,并將其重新導(dǎo)入到R的痛苦使我的工作變成線性的-從SQL轉(zhuǎn)換為R, 并且不會再轉(zhuǎn)化回來。如果我想添加一個(gè)分析,我第一想法通常是,“也許我能找到一種方法處理而且僅僅依賴我已經(jīng)有的數(shù)據(jù)。”知道這是從前在R中我的感受,我會在一個(gè)查詢中加入很多我一開始不需要的數(shù)據(jù)。我找到答案很慢,而且往往留下未發(fā)掘的有問題的行。
隨著時(shí)間的推移,當(dāng)我對SQL越熟練 ,我開始體會到它的好處。它的嚴(yán)格有力推動(dòng)一致性,這對標(biāo)準(zhǔn)化的業(yè)務(wù)指標(biāo)是有價(jià)值的。計(jì)數(shù)和簡單的聚合,是SQL所擅長的,影響商業(yè)決策往往是足夠了。最后,我發(fā)現(xiàn)自己在我的工作流程中放棄了R??紤]到SQL到-R的工作流程是如何支離破碎的,R的靈活性是抵消不了SQL到R的轉(zhuǎn)換代價(jià)。而當(dāng)我真的錯(cuò)過了一些東西在R,我經(jīng)常會找到一個(gè)繁瑣的解決方法,通常能使任務(wù)完成。
當(dāng)模式團(tuán)隊(duì)開始工作整合Python Notebooks和我們的SQL編輯器時(shí),我被拉回使用腳本語言來分析。不過這一次,切換工具的痛苦得到減輕—操作情況是把SQL結(jié)果傳遞給Python沒有任何導(dǎo)入或輸出。突然感覺就像另一個(gè)世界再次打開。
但隨之而來的,仍然是另一種思考方法和一種新的思維框架要學(xué)習(xí)。而這個(gè)新的工作流程的好處是,這在很大程度上為我SQL至R工作流程轉(zhuǎn)換提供了沒有代價(jià)的好處,使這種轉(zhuǎn)換顯然是值得的,還有我以前知道的一些事會變得容易得多。
不用知道SQL所有的知識是可以的
SQL是一個(gè)相當(dāng)有限的語言。查詢幾乎只使用一些組合聯(lián)接,聚合函數(shù),子查詢和窗口功能。
這就像建造的東西需要一組基本的積木塊。我可以創(chuàng)造驚人的,復(fù)雜的,和原創(chuàng)的東西,但我很少發(fā)現(xiàn)有些積木塊, 我有, 但是我我從來不知道。
Python,相比之下,就像是一個(gè)專門的積木塊組的集合。每個(gè)庫都有自己定制的塊為建設(shè)某事非常專門化:Seaborn負(fù)責(zé)視覺效果,pandas進(jìn)行分析,scikit-learn用于機(jī)器學(xué)習(xí),等等。
這些庫添加了非常多的功能。幾十行的SQL(或者一點(diǎn)都不能),現(xiàn)在只需要一個(gè)Python的方法。但是,這個(gè)方法做了什么我就不完全清楚了。通過SQL,如果我沿某種路徑操作失靈,我可能發(fā)現(xiàn)一個(gè)更好的方式來重新安排我正在做的。在Python,相比于修改我調(diào)用的方法, 我更可能是去尋找一個(gè)新的方法.
去谷歌上查詢
“ Python社區(qū) ”,是一個(gè)龐大而蓬勃發(fā)展的群體, 這個(gè)群體產(chǎn)生了這些專門的塊。而“ SQL社區(qū)”是......微軟和甲骨文的SEO素材。造成這種情況的原因尚有爭議,但效果是明顯的,在網(wǎng)上找到真正支持Python的資源相對更容易。
或許更重要的是,Python中的結(jié)構(gòu)適合在該SQL斗爭方式發(fā)現(xiàn)答案。因?yàn)镻ython有更多的塊,從它工作的數(shù)據(jù)來看,它傾向于更抽象。人們可以輕松地共享庫和腳本塊。有人分享了如何創(chuàng)建一個(gè)箱線圖例子并可以提供的代碼,并說:“在這里傳入你的數(shù)據(jù)?!蔽铱梢杂蔑w行數(shù)據(jù)集,應(yīng)用pandas.boxplot()方法去學(xué)習(xí)如何創(chuàng)建箱線圖,然后轉(zhuǎn)身使用.boxplot()為其他應(yīng)用程序的用戶數(shù)據(jù)畫箱線圖。
SQL查詢,在另一方面,緊密與數(shù)據(jù)聯(lián)系在一起。我必須知道表和列名稱對查詢可以產(chǎn)生任何意義。這往往會使共享例子更難。向一個(gè)人展示如何做一個(gè)箱線圖用SQL需要共享數(shù)據(jù)才會有意義,這有可能使人們更不愿意分享自己的工作。
包容黑盒子
給我足夠的時(shí)間,我可以理解一個(gè)SQL查詢在做什么。因?yàn)樗械膲K通常是熟悉的,因?yàn)椴樵兪亲园膶?shí)體不能把工作外包給外部庫,我可以把全范圍查詢最終拼湊在一起和“獲取”它。
創(chuàng)建或查看一個(gè)Python notebook的時(shí)候,有時(shí)我必須承認(rèn),我永遠(yuǎn)也不會完全知道發(fā)生了什么。要了解一個(gè)SciPy的功能,例如,我必須仔細(xì)查閱一大堆文件或多層源代碼。實(shí)際上,我根本不會這樣做。相反,我更經(jīng)常發(fā)現(xiàn)操作像試一試,插入,看看他們返回結(jié)果是否符合我的要求。
不足之處是有如此大量的社區(qū)資源和庫。對Python沒有什么必然不妥的(并且它不像任何人,真正的,充分理解地球上分組依據(jù)什么),但對Python,我常常發(fā)現(xiàn)自己更傾向于相信結(jié)果是對的,尤其是在技術(shù)文檔比代碼本身更難理解的情況下。
創(chuàng)建分析網(wǎng)
在SQL工作時(shí),查詢常常呈線性發(fā)展。我主要使用SQL從大型數(shù)據(jù)集進(jìn)行數(shù)據(jù)的聚合和聯(lián)接設(shè)置這樣一個(gè)流程:
1.把一堆表格聯(lián)接一起。
2.把數(shù)據(jù)聚合成更小。
3.加入更多的表。
4.再次聚合。
5.依此類推,直到我能得到一個(gè)產(chǎn)生12行數(shù)據(jù)的巨型查詢。
雖然這些查詢可能會很長,他們往往在心里并不難模仿—數(shù)據(jù)通過子查詢線性移動(dòng)。數(shù)據(jù)就像一個(gè)雪球往下坡滾,隨著它的運(yùn)行,它運(yùn)行收集和壓縮更多的表,它一直滾動(dòng),直到它轉(zhuǎn)變成成一個(gè)完美的雪球(或產(chǎn)生災(zāi)難性的雪崩)。
Python進(jìn)展更加流暢。我經(jīng)常采用一個(gè)初始數(shù)據(jù)集,并將其分解成許多較小的數(shù)據(jù)集,并且每個(gè)成為分析的線程。我可以把這些線程結(jié)合一起,并且以不同的方式將它們拆開。
這要求我在心里模仿我的分析像一個(gè)分析網(wǎng)一樣,這是很難的事情。我不能再想,“我最左邊表格是什么?我該怎么聯(lián)接它?“相反,我不得不思考,”什么是分割成許多視圖的最好表?我怎樣才能把這些視圖融合到有用的某事中?“與Python的“塊”的例子相對應(yīng),“網(wǎng)”的思考方式提供比SQL更寬松的框架,它可能讓習(xí)慣了嚴(yán)格思維的人感到一點(diǎn)不適。
急速改變
SQL的線性性質(zhì)意味著,如果我想將一些透視圖添加到我的分析,最好在一開始引進(jìn),不然我不得不備份我的查詢,然后總是放棄傳遞的結(jié)果。這是麻煩的,即使它是通過幾層子查詢來添加列一樣簡單。
在其他情況下,從一個(gè)基礎(chǔ)的查詢出發(fā)計(jì)算多個(gè)目標(biāo)時(shí), 需要?jiǎng)?chuàng)建一個(gè)多個(gè)目標(biāo)的核心查詢。這些獨(dú)立的查詢以后會變得難以合并,這使得一些通用的修改我必須盡早進(jìn)行,否則后期我就要在每一個(gè)查詢中都修改一遍。
Python的Web-based的工作流的好處是,我可以更輕松地快速改變,迭代更快。東西在不同點(diǎn)可以添加和刪除,當(dāng)它們出現(xiàn)在相同的工作流程,能讓我去探究問題。由于每個(gè)分析探索可以指向相同的核心,它更自然地在不同的分析點(diǎn)之間移動(dòng)。
此外,通常情況下,它只是運(yùn)算速度更快。沒有什么事比只寫一個(gè)長時(shí)間運(yùn)行的SQL查詢僅僅為了找到我想要把一個(gè)附加列添加到最外面的查詢更令人沮喪了。Python允許我直接把這個(gè)改變應(yīng)用到最后一步,而不必通過每次重新運(yùn)行整個(gè)操作。
歡迎改變
最終,我在此過渡期間面臨的最大障礙是慣性。SQL是我的安全默認(rèn)值。即使SQL查詢比同等的Python腳本慢十倍,我已經(jīng)理解的方式,感覺更容易做到這一點(diǎn)。學(xué)習(xí)是比打字困難。
但是堅(jiān)持你知道什么是小事精明,大事糊涂。學(xué)習(xí)一門新的語言,不僅提供了新的工具,同時(shí)也開辟了在精神上來思考數(shù)據(jù)和分析模型新穎的方式。這可能會導(dǎo)致你提出和回答你從來沒有考慮過的問題。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03