利用 SQL 進行數據分析初學者教程 - ep1
由 Tomi Mester 寫於2017年5月9日
本文轉載自SQL for Data Analysis - Tutorial for Beginners - ep1如果你想成數據分析師或是數據科學家,那麼 SQL 是必須的。在過去的幾年中,我已經與許多公司有線業務合作 - 從 5 人創業公司到 5000 多名員工跨國公司,並沒有看到一家不會以某種方式使用SQL進行數據分析(以及更多的事情)的公司。
SQL簡單並且容易理解。因而,不只是工程師、開發者、數據分析師或數據科學家可以使用它,而是任何願意花費幾天來學習和練習它的人。
我已經創建了這個 SQL 系列,成為有志的數據分析師和數據科學家的最實用和多動手的 SQL 教程。如果你從沒有接觸過編碼、編程、查詢,它將從頭開始,這並不會是一個問題!
讓我們開始吧!
注意:因為這是一個實用教程,我鼓勵你和我一起編碼。如果你這樣做,你將需要一個數據伺服器來練習。所以我建議你先通過閱讀這篇文章。
利用SQL進行數據分析?這是什麼?為什麼好呢?
SQL代表『結構化查詢語言』。 但是我喜歡描述它為「加強版的 Excel」。下面是同一份數據在 Excel 和 SQL:
如你所見,SQL 和 Excel 十分相似。它們用具有行和列的二維列表展示數據。兩者都非常結構化,非常透明。
不過也有差異。作為初學者,你應該知道兩件關於 SQL 的重要事情:
1.第一是性能。雖然 Excel 在小數據集中表現很棒,但是當你使用不同的公式處理 100 k+ 行的文件,它變得十分緩慢和低效。在 SQL 中,甚至超過 10 M+ 行的文件可以很快的處理。(例如,在接下來的利用 SQL進行數據分析文章中,我們將使用一個 7 M+ 行的數據集。)
2.第二是怎樣訪問你的數據。Excel 主要是圖形用戶界面(也成為 GUI)。你可以滾動、敲入公式、用游標選擇你的範圍等等,非常方便。在 SQL 中,你沒有這樣的界面,你必須使用稱為『SQL 查詢』來代替。看下面的gif:
因為第一次看到這個,可能感覺到麻煩。但是相信我,一旦你了解 SQL 基礎知識,你會發現它比 Excel 更加清晰、更有效率。只提兩個有點:在 SQL 中,連接表比 Excel 更簡單。同樣,使用 SQL 自動化和重複使用腳本也將會變得更加方便。
當你使用 SQL 進行數據分析,你將會使用它(最有可能)進行簡單任務:聚合事情、連接數據集、使用簡單的統計和數學方法。但是,你可以比以前更有效率執行這些任務和更大的數據集。
Python,R 和 bash怎麼樣?
如果你已經完成了我之前的 bash 教程 或者你已經參加一些我的在線直播,你可能會問:SQL 比 Python,R 或者 bash 好還是壞?答案是...好吧,這個問題沒有明確答案!
一旦你開始在實際生活的數據項目中應用這些語言,你將看到 Python 和 R 在某些方面是表現好的,而 SQL 在其他方面表現好。主要是語法、功能、性能不同...但是,我現在不想進入該主題,因為:
a)我承諾一個使用教程,其主題有點理論(甚至有點哲學)。
b)它還有點先進的東西。 c)在這個水平上,你完全不需要擔心它的性能,並且你有可能得到資深數據科學家或者數據工程師的幫助。注意:如果你真的很好奇,我給你~1小時在這裡比較 Python,R,SQL 和 bash。
但是現在,讓我們試試吧!
STEP 0 - 安裝你自己的 SQL 環境來練習!
注意:如果你已經有自己的 SQL 環境,你可以跳到STEP-獲得數據!
首先,請仔細閱讀這篇文章。它是關於如何一步一步設置你自己的數據服務和安裝 bash,Python,R 和 SQL 的教程。
注意:在我的『利用 SQL 進行數據分析』文章中,我將使用 postgreSQL!還有其他類型的 SQL 語言(例如,另一個眾所周知的開源語言 mySQL)。好消息是,所有的 SQL 語言都非常相似 -- 如果你學習 postgreSQL,則需要幾個小時(甚至幾分鐘)才能適應另一個。我選擇了 postgreSQL,因為它很受歡迎(許多在線企業都在使用它),同時它被稱為最先進的開源 SQL 語言。
如果你通過上述鏈接的文章,請仔細檢查,如果你有以下3件事情:
1.具有終端(或 iTerm)訪問許可權的數據伺服器。
2.PostgreSQL 安裝在你的數據伺服器上。 3.你的計算機上的Pgadmin4(或SQL Workbench)。如果缺少某些內容,請再次閱讀:安裝 bash,Python,R 和 SQL!
注意:作為一個 SQL 查詢工具,相比於 pgadmin4,我更喜歡 SQL Workbench,但這是一種品味的問題。在我的利用 SQL 進行數據分析教程中,我將使用 SQL Workbench(以下是有關如何在計算機上安裝它的教程),但你可以隨意使用 pgadmin4。這不會有什麼區別!
STEP 1 – 通過命令行登錄你的 SQL 資料庫!
太好了!你將在一分鐘內編寫你的第一個 SQL 查詢!首先從命令行訪問你的 SQL 資料庫!你已經做了一次,我們將重複這個過程:
1.打開終端(或 iTerm)。
2.ssh到你的數據伺服器 在我的環境下,我輸入: ssh tomi@[myipadress] 3.一旦我登錄伺服器,我想訪問我的 postgreSQL 資料庫。因為我已經訪問了我的用戶,我只需要鍵入這個命令:psql -U tomi -d postgres- ? psql是命令本身以及 -U 指定你的用戶名(我的為「tomi」),以及 -d 指定你的資料庫的名稱(我的是 postgres 同樣適用於你)。你的提示應改為:postgres=> 完成!你可以完全訪問你的 SQL 資料庫! 4.作為測試,鍵入:dt 這會列出你所有的數據表。到目前為止,你只有一個數據表,但是這將會馬上改變!再次提醒!如果缺少某些東西或者不能運行,請再次閱讀:安裝 bash,Python,R 和 SQL!
STEP 2 - 獲得數據!
在本教程中,我們將使用一個非常小的數據集,稱為 zoo。
您可以從這裡以原始 .tsv 格式下載,你可以在 Excel 中操作它。如果您已經完成了bash 教程,或者在bash /command line。但是,繼續使用SQL:
1)創建一個表,我們可以向表中載入數據。在我的後續教程中,我將詳細解釋這裡發生了什麼,但現在,你只需將這幾行代碼複製粘貼到終端中:CREATE TABLE zoo ( animal varchar(10), uniq_id integer PRIMARY KEY, water_need integer );
再次說明:我稍後會解釋,但是現在,只是複製粘貼這個 SQL 查詢:
INSERT INTO zoo (animal,uniq_id,water_need) VALUES ("elephant",1001,500), ("elephant",1002,600), ("elephant",1003,550), ("tiger",1004,300), ("tiger",1005,320), ("tiger",1006,330), ("tiger",1007,290), ("tiger",1008,310), ("zebra",1009,200), ("zebra",1010,220), ("zebra",1011,240), ("zebra",1012,230), ("zebra",1013,220), ("zebra",1014,100), ("zebra",1015,80), ("lion",1016,420), ("lion",1017,600), ("lion",1018,500), ("lion",1019,390), ("kangaroo",1020,410), ("kangaroo",1021,430), ("kangaroo",1022,410);
如果一切正常,你會得到這條提醒:
INSERT 0 22最重要的 SQL 語句:SELECT
是時候學習最基本的 SQL 語句。這是:
SELECT * FROM table_name;
每當你在數據上使用讀取,過濾,轉換,聚合或執行任何操作,你將會使用 SELECT。在這系列教程中,90%的內容將會顯示出來,以某種方式修改單一查詢。作為開始,我們從 zoo 數據表中 SELECT 任意內容。SELECT * FROM zoo;
我已經得到完整的可讀格式的表。(如果要從這個視角中退出,請在鍵盤上按Q鍵。)
SELECT * FROM zoo;
我想它甚至不需要一個解釋 -- 因為語法本身非常接近英語 - 但是為了以防萬一:SELECT 是主語句,它告訴 SQL 我們想從我們的數據表中讀取一些東西。* 通常是指「一切」 -- 在這種情況下,這意味著我們想選擇每一列。FROM 告訴 SQL,我們要從指定的表中讀取數據。zoo 是表的名稱。如果你有更多的表,您可以將其替換為任何其他表名。; 這是一個 SQL 特定的語法。每個查詢都應該用分號關閉。如果您不小心錯過了,SQL 將期望您繼續查詢,不會在屏幕上返回任何內容。從現在起,你將會使用這種語法。
SELECT columns
你可以用實際的列名替換 * 字元。嘗試這個查詢:
SELECT animal, water_need FROM zoo;(如果要從此視圖中退出,請在鍵盤上按Q鍵。)
確切地說,你所期望的是:你的屏幕上列出了「animal」和「waterneed」列,而不是「uniqid」。
這樣可以 SELECT 任何列。你只需要用逗號分隔指定的列名。你也可以這樣做:
SELECT animal, animal, animal FROM zoo;你會看到同一列多次...但是,因為這是沒有意義的,我建議只是根本不這樣做。
顯示數據的前幾行 -- LIMIT 從句
現在我們正在使用 22 行的數據表。在「利用 SQL 進行數據分析」系列的下一集中,我們將使用一個 7 M+ 行數據文件。這是一個很大的變化,在這種情況下,每次都在屏幕上列印所有數據是不合理的,而是獲取前幾行的小樣本。為此,使用 LIMIT 從句 - 這是之前介紹的「基礎查詢」頂部的一個小「擴展」:
SELECT * FROM zoo LIMIT 10;
這將僅列印前10行。(記住它是如何在 bash 中完成的?這是 head -10 命令。)
當然,你可以決定要列印多少行,並在 LIMIT 之後指定!
過濾指定行 -- WHERE從句
基於數值,你可以用 WHERE 從句選擇特定的行。例如:
SELECT * FROM zoo WHERE animal = "elephant";
SELECT * FROM zoo-?這是「基礎查詢」 WHERE-? 這告訴 SQL 你想過濾一些東西animal = "elephant"-? animal 是你正在尋找給定值的列名。而 elephant 是值本身。在 SQL 中,你必須添加列名,尋找值。
; -? 永遠不要忘記分號!在利用 SQL 進行數據分析系列的下一集中,我將詳細介紹如何充分利用 WHERE!現在,如果你知道這是為了過濾行,便足夠了。
自我測試#1
這是一個介紹性的文章,所以這第一個任務也將是相當容易的:
從 zoo 表中選擇前 3 個 zebra!該解或多或少是本文的總結!. . . 準備?這是我的解決方案:SELECT * FROM zoo WHERE animal = "zebra" LIMIT 3;SQL 很容易,對吧?
還有一件事:語法...
稍後,我將向你展示一些最佳實踐,以及如何保持 SQL 查詢的清潔和高效,但在第一篇文章中,我僅強調兩件事情:
- 所有的查詢都應以分號(;)結尾。如果你不小心錯過了,SQL 將期望您繼續查詢,不會在屏幕上返回任何內容。例如:postgres=> SELECT * FROM zoopostgres->這不是很好...這樣更好:postgres=> SELECT * FROM zoo;
- 當談到SQL關鍵字(SELECT,WHERE,LIMIT等),SQL 並不區分大小寫。例如:SELECT * FROM zoo;工作原理如下:select * from zoo;表名,列名和值的區分大小寫是你設置的問題。在我們當前的設置(使用postgreSQL)中,表名和列名不區分大小寫,但是欄位值是。例如。SELECT * FROM zoo WHERE animal = "elephant";–? WORKSSELECT * FROM ZOO WHERE ANIMAL = "elephant";–? WORKSSELECT * FROM ZOO WHERE ANIMAL = "ELEPHANT";–? DOES NOT WORK
請注意,按照慣例上大多數人使用大寫 SQL 關鍵字(SELECT,WHERE,LIMIT等)。它有助於閱讀你的代碼。
結論
相當不錯的學習和使用 SQL 進行數據分析!恭喜!現在你可以寫你的第一個非常基本的 SQL 查詢...但這只是開始!讓我們繼續下一集,並學習如何使用 WHERE 從句從數據集中過濾東西。
如果你不想錯過下一集,並且也想獲得有關即將到來的網路研討會的信息,請訂閱我的每周通訊
推薦閱讀:
※如何可視化城市的交通便捷性
※使用 TensorFlow 做文本情感分析
※理論上說,什麼是數據工程師,什麼是數據科學家
TAG:数据科学家 |