如何不寫 SQL ,探索和分析數(shù)據(jù)庫?

數(shù)據(jù)分析的門檻在降低,希望你能及時意識到。

image

需求

今天是本學(xué)期《數(shù)據(jù)庫系統(tǒng)原理》的最后一課。學(xué)生們完成了數(shù)據(jù)分析項目,依次上臺做展示。

image

看到連計算機掃盲課都沒有上過的文科生,經(jīng)過一個學(xué)期的學(xué)習(xí),能夠自己從網(wǎng)上找數(shù)據(jù),導(dǎo)入關(guān)系型數(shù)據(jù)庫,用 SQL 來做查詢,直到以數(shù)據(jù)來回答自己感興趣的問題,我覺得很開心。

在這個大數(shù)據(jù)時代,我們每個人的工作,都或多或少要跟數(shù)據(jù)打交道。小到記錄自己的賬本,大到用數(shù)據(jù)輔助企業(yè)戰(zhàn)略決策。用好數(shù)據(jù),可以幫助你所在的團隊,和你個人增值。

有價值的數(shù)據(jù),許多都存儲在了各種數(shù)據(jù)庫里面。想要使用好它們,只會用 Excel 或者 Access 是不夠的。一般來說,查詢它們的最好方式,是學(xué)會各種查詢語言。最常見的,就是 SQL。

在著名的 Python 課程 Programming for Everybody 里面,主講教授密歇根大學(xué)的 Chuck (Dr. Charles Severance) 認為,SQL 語言是編程語言中最簡單的一種。

image

但是,我們還是現(xiàn)實一點。

許多時候,你有分析數(shù)據(jù)的沖動,然而并非人人都有時間和意愿去學(xué)一門 SQL 課程,來完成日常工作中的數(shù)據(jù)查詢、分析和可視化工作。

工具

好在,技術(shù)的發(fā)展,總是把很多原先專業(yè)人士才能做的事兒,變成大眾都能做的。

例如自動擋汽車,例如手機上的相機應(yīng)用,再例如我今天要給你介紹的 Metabase 。

Metabase 的 Slogan ,是這個樣子的。

image

翻譯過來,重點就是:

  • 所有人都能用
  • 可以容易表達你的問題
  • 使你能從數(shù)據(jù)中學(xué)習(xí)

安裝

我們來嘗試一下。

Metabase 這款工具,完全可以適用于團隊協(xié)作,因為它提供了 Docker 鏡像、AWS 和 Heroku 等方便的云端使用方式。

image

為了介紹的簡單與方便,這里我只給你介紹一下單機版的安裝。其余的應(yīng)用形式,你可以學(xué)習(xí)本文之后,自己繼續(xù)挖掘。

因為我自己使用的是 macOS ,所以這里選擇 Mac 下面編譯好的安裝文件就行。

image

如果你使用的是其他系統(tǒng),例如 Linux 或者 Windows ,安裝也不麻煩。只需要點擊“其他平臺”按鈕,下載一個 jar 類型文件。只要你在系統(tǒng)里面安裝好 Java 運行環(huán)境,就可以直接雙擊該文件運行了。

image

這里以我電腦上的 macOS 系統(tǒng)為例。打開下載的 dmg 文件后,把可執(zhí)行文件拖入到“應(yīng)用”文件夾,就可以了。

image

第一次運行的時候,可能需要一些時間初始化。

image

當出現(xiàn)以下界面的時候,就意味著準備就緒了。

image

請你點擊上圖里面的藍色按鈕,開始設(shè)置。

我們需要輸入一些基本注冊信息。

image

之后,選擇我們需要連接的數(shù)據(jù)庫。


image

注意,這里有很多選項可以選擇。這些選項,基本上涵蓋了市面上常見的主流數(shù)據(jù)庫類型。

image

為了方便起見,這里我們使用“麻雀雖小五臟俱全”的 SQLite 數(shù)據(jù)庫。其他類型的數(shù)據(jù)庫,你可以稍后自己嘗試。

我用的樣例,是 Stanford 數(shù)據(jù)庫開放課程使用的 colleges.db 。我自己上課的時候,一直用它作為基礎(chǔ)樣例演示給學(xué)生。

image

設(shè)置完畢之后,下面需要注意,有個數(shù)據(jù)統(tǒng)計選項。 Metabase 是在詢問你,是否允許把你的使用行為統(tǒng)計信息發(fā)給它,幫助改進。

image

如果你樂于分享,可以保持原先設(shè)定。若對自己的隱私比較注重,不用糾結(jié)了,可以關(guān)閉該選項。

image

到這里,安裝和設(shè)置就算完成了。

瀏覽

下面我們看看有哪些數(shù)據(jù)表可以查看。

這個數(shù)據(jù)庫里面包含了3張表格,分別是:

  • Student 學(xué)生信息
  • Apply 申請信息
  • College 招生學(xué)校信息
image

我們選擇其中的學(xué)生表格。

image

Metabase 默認給了我們一些基本的描述性統(tǒng)計結(jié)果。

例如最重要的,是一張表格到底有多少行。這里樣例 Student 表里,一共有12個學(xué)生的記錄。

還沒完,往下翻, Metabase 還為我們自動生成了一些其他統(tǒng)計結(jié)果。

首先是學(xué)生的學(xué)號分布。

image

當然,由于學(xué)號無非是個獨特數(shù)字而已,所以這個統(tǒng)計沒有什么用處。

但下面這張,就不一樣了。

image

這是學(xué)生的 GPA 分布,可見,大部分學(xué)生的成績高于 3.6 分。數(shù)據(jù)集不是個均勻或者正態(tài)分布。

image

上面這張圖,反映了學(xué)生來自的高中學(xué)校大小。看得出來,大部分學(xué)生還是來自于學(xué)生人數(shù)較多的學(xué)校。來自小而精的高中學(xué)生人數(shù),相對較少。

image

后面這張圖,統(tǒng)計了學(xué)生姓名。有意思的是,你可以清楚看到,有重名的學(xué)生。

如果你不滿足于只看這些統(tǒng)計信息,而希望查看原始數(shù)據(jù)。那么可以點擊“Browse Data” 按鈕,選擇 college 數(shù)據(jù)庫。

image

然后選擇其中的 Student 表格,就能看到全部學(xué)生記錄信息。

image

分析

如果我們只關(guān)注其中一部分學(xué)生的情況,可以選擇上方紫色的“Filter”(過濾)按鈕。

image

這里,所有的條件,都可以通過選擇和輸入數(shù)值來完成,不需要編程。我們選擇過濾結(jié)果只保留 GPA 大于 3.5 的學(xué)生。

image

上圖左側(cè)就是我們想看的結(jié)果了。

但是我們會覺得,“一幅圖勝似千言萬語”。

怎么辦呢?我們選擇右下方,以 GPA 作為分組依據(jù),然后點擊左下方的 Visualization (可視化)按鈕。

image

可見,在成績大于3.5的學(xué)生里面,有4個是3.9分的成績。這部分學(xué)生里面,學(xué)霸占的比例不小啊。

image

我們還可以換一種分組方式,這里我們使用高中學(xué)校人數(shù)作為分組依據(jù)。然后再次進行可視化。

image

于是你可以看到,GPA 3.5 分以上的學(xué)生,來自于人數(shù)規(guī)模1000的高中最多。

點擊可視化按鈕,我們可以選擇不同的圖形來表示。

這里我們選擇餅圖。


image

你覺得在這個問題里,柱狀圖和餅圖,哪個更適合描述咱們的過濾分析結(jié)果呢?

地圖

下面我們來看看,如何對數(shù)據(jù)進行地理信息可視化。也就是,畫個地圖出來。

這里,我們選用的,是其中 College 這張表格。

這張表格里面,包含以下信息。

image

我們打算看看,不同州大學(xué)的錄取人數(shù)。做法很簡單。還是點擊 Visualization 。

image

選擇圖形選項最右下方的“地圖”(Map)。

image

修改 Metric field 為 Enrollment 。然后 Region Field 為 State (州)。

于是你就能看見下面這樣的地圖了。

image

有意思的是,Metabase 對于州的簡寫方式也能正確識別,并且把它們標記在地圖上。而且根據(jù)匯總招生人數(shù)的多寡,還自動選擇了不同深淺的顏色。

關(guān)聯(lián)

下面我們來看看更實用的分析手段——關(guān)聯(lián)查詢。

從一張表里,我們已經(jīng)可以分析出不少東西了。但是更多情況下,我們希望采用多張表格聯(lián)合在一起,從而能從中挖掘出洞見(Insights)。

例如這里我給你提一個問題:

不同大學(xué)錄取最低 GPA 是多少?

這個問題,你若是只用一張表,是無非回答的。

因為 Apply 表里面雖然有錄取決策信息,但是不包含 GPA;

Student 表里面雖然包括了 GPA,但你不知道學(xué)生報了哪所學(xué)校,以及是否被錄取了。

讓我們點擊上方菜單欄里面的“問問題”(Ask a question)按鈕,然后從下圖中選擇“定制問題”(Custom Question)。

image

然后,你需要選擇數(shù)據(jù)庫。

image

還得選擇一個初始的表格。

image

我們選擇 Student 表。


image

然后選擇 Join data (關(guān)聯(lián)數(shù)據(jù))。


image

這里我們需要選擇 Apply 表格。


image

然后會讓我們選擇用哪個列進行關(guān)聯(lián)。畢竟,如果我們把張三的學(xué)生信息關(guān)聯(lián)到李四的錄取信息記錄上,是沒有意義的。


image

我們觀察一下,發(fā)現(xiàn)在 Student 和 Apply 中,都出現(xiàn)了學(xué)生的 ID (sID),這是學(xué)生的唯一標識。就用它好了。
image

下面我們設(shè)置一下過濾條件。顯然,既然考慮錄取分數(shù),那么就得找出那些被錄取的人。

于是我們在 Filter 一欄里面點擊。

image

選擇 Apply 表格。

image

然后從中選擇 Decision (錄取決策)。

image

因為這里只有兩種取值選擇。所以我們可以選擇 Y (錄取)。

image

然后我們就可以根據(jù)學(xué)校來查看最低錄取分數(shù)了。

這里我們填寫綠色的 Summarize 。

image

我們感興趣的是最低錄取分數(shù),所以可以從中選擇 Minimum of 。

image

然后選擇 GPA 作為最小值選擇列。

image

還沒完。因為我們是需要按照學(xué)校來分別計算的。所以在 by 后面選擇 cName 。

image

通過簡單的點選,你現(xiàn)在已經(jīng)有了所有需要設(shè)置的信息。

image

好,我們執(zhí)行吧。選擇 Visualize 。

image

從這張圖里,我們可以看到,Berkeley 錄取學(xué)生的 GPA 線最高。 Cornell 和 Stanford 并列最低。

由此看來,名??粗氐?,絕不僅僅是 GPA 成績啊。

是嗎?

這個作為思考題,歡迎你把自己的答案寫在留言區(qū)里面和大家交流。

小結(jié)

本文我?guī)阌靡粋€極簡的數(shù)據(jù)庫樣例,嘗試了不寫任何一句 SQL 代碼,對數(shù)據(jù)庫進行過濾、分析、統(tǒng)計、可視化,以及表間關(guān)聯(lián)查詢。

你可能會覺得,這么簡單的數(shù)據(jù),我拿眼看心算,都比你這方法快!

沒錯,但是想象一下,如果你的每張表里面,數(shù)據(jù)量都多上1000倍呢?

我們要學(xué)東西,就需要掌握這種能規(guī)?;瘧?yīng)用的技能。雖然初始學(xué)習(xí)的時候覺得有些繁瑣,但是真正幫你應(yīng)對大規(guī)模數(shù)據(jù)結(jié)果的時候,你就能嘗到掌握它的甜頭了。

祝數(shù)據(jù)分析愉快!

讀過本文,如果覺得有收獲,請點贊。

要讀更多的文章,微信關(guān)注我的公眾號“玉樹芝蘭”(nkwangshuyi)。別忘了加星標,以免錯過新推送提示。

如果本文對你身邊的親友有幫助,也歡迎你把本文通過微博或朋友圈分享給他們。

延伸閱讀

你可能也會對以下話題感興趣。點擊鏈接就可以查看。

題圖:Photo by National Cancer Institute on Unsplash

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容