以卖香蕉为例,从4个方面了解SQL的数据汇总
導讀:面對一個新數據集時,人們往往會關心數據中的異常值、數據的分布形式、行列之間的關系等。SQL是一種專為數據計算設計的語言,其中已經內置了許多數據匯總函數,也支持用戶編寫SQL命令實現更為復雜的匯總需求。
作者:Matt DeLand,Wagon聯合創始人與數據科學家
來源:Datartisan數據工匠(ID:shujugongjiang)
許多電腦使用Excel在面對上千行數據時已力不從心,而R較難部署在集群上運行,人眼顯然不可能直接從大量數據中總結出規律。如何才能快速理解你的數據集?SQL可以幫助你! 對數據進行統計匯總是能最快了解數據的方法。面對一個新數據集時,人們往往會關心數據中的異常值、數據的分布形式、行列之間的關系等。SQL是一種專為數據計算設計的語言,其中已經內置了許多數據匯總函數,也支持用戶編寫SQL命令實現更為復雜的匯總需求。本文以香蕉銷售相關數據為例,從4個方面介紹如何用SQL進行數據匯總。?
01 基礎匯總
我們可以通過一段很短的SQL命令實現如計算個數(count)、去重(distinct)、求和(sum)、求平均(average)、求方差(variance)等匯總需求。假設我們有一個關于香蕉交易的數據表格,需要計算每天的顧客總數(num_customers)、去重顧客數(distinct_customers)、香蕉銷量(total_bananas)、總收入(total_revenue)和每筆平均收入(revenue_per_sale),可以通過以下命令實現:
得到的結果如下:
僅通過一次命令請求,我們就可以在非常大的數據集上計算出這些重要的匯總結果。如果再加上where或join命令,我們還可以高效地對數據進行切分。當然,有些需求并不能完全由一般的SQL函數實現。
02 計算分位數
如果數據的分布存在較大的偏斜,平均值并不能告訴我們平均等待時間的分布情況。因此我們往往需要知道數據的25%、50%、75%分位數是多少。
許多數據庫已經內建了分位數函數(包括Postgres 9.4、Redshift、SQL Server)。下面的例子使用percentile_cont函數計算等待時間的分位數。該函數是一個窗口函數,可以按天進行分組計算。
計算結果如下:
其他窗口函數的結構和percentile_cont函數類似,我們可以指定對數據如何排序、如何分組。如果我們想要增加更多分組維度(如具體時間段),只需要將它們添加到partition和group by子句中。對于不支持percentile_cont的數據庫,命令會更復雜一些,但仍然可以實現。主要問題是如何將每天的訂單各自按等待時間遞增的順序排序,然后取出其中位數值。在MySQL中我們可以使用局部變量來跟蹤訂單,在Postgres中,我們可以使用row_number函數:
計算結果如下:
03 直方圖
直方圖是大致了解數據分布的好方法。我們可以用以下命令來計算每筆交易收入的分布:
由于每個不同的收入都會占用一行,以上命令的結果行數將會非常多。我們需要將收入值分組以方便我們得到數據分布的大致印象,比如分為$0-$5、$5-$10等組。如何分組并沒有一個標準的做法,需要我們自己根據需要,進行實驗來選擇。組別過多和過少都不合理,一般使用20個左右的組即可,也可以指定分組的寬度,分組越寬,分組數就越少。以下是指定分組寬度的例子:
計算結果如下:
這個命令將每個收入數據值向下取整到5的倍數并以此分組,即分組寬度為5。這種方法有個缺點,當某個區間內沒有記錄(比如在55-60美元之間沒有人購買),那么結果中將不會有這個組別,這也可以通過編寫更復雜的SQL語句來解決。如果我們想要自行選擇區間的大小,首先需要計算數據的最大值和最小值,以便我們了解需要設定多少個區間。我們還可以用以下命令來使得每個區間有一個好看的標簽:
得到的結果如下:
04 聯合分布
比較兩個不同的指標也是總結數據時的重要步驟。比如我們可能關心等待時間太久的人,最終是否會花費較少的錢。為了得到等待時間和收入之間的大致關系,我們可以使用以下命令:
得到的結果如下:
我們可能也關心諸如協方差、方差這類統計指標。大多數SQL實現已經內建了這些統計函數,比如在Postgres或Redshift中我們可以使用以下命令:
Postgres中內建了諸多匯總函數,甚至包括線性回歸。
原文:http://blog.yhat.com/posts/summarizing-data-in-SQL.html
推薦閱讀
全球100款大數據工具匯總(前50款)
大數據時代的10個重大變革
日本老爺爺堅持17年用Excel作畫,我可能用了假的Excel···
為什么要學數學?因為這是一場戰略性的投資
Q:?好了,現在你的香蕉賣出去了嗎?
歡迎留言與大家分享
覺得不錯,請把這篇文章分享給你的朋友
轉載 / 投稿請聯系:baiyu@hzbook.com
更多精彩文章,請在公眾號后臺點擊“歷史文章”查看
總結
以上是生活随笔為你收集整理的以卖香蕉为例,从4个方面了解SQL的数据汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FreeRTOS源码获取
- 下一篇: android 键盘点击事件监听事件,A