這篇文章要和大家分享的,是我在上 Coursera 的數據分析課程所整理的筆記,如果想看更完整的課程準備、心得和筆記的話,歡迎點擊這個 Google Data Analytics Professional Certificated 連結,我有用 #Google Data Analytics 將近期撰寫的系列文章整理起來,歡迎大家參考!
來到第五週,要和大家分享的是第五單元:Analyze Data to Answer Question 的重點整理和個人心得分享!這單元的課程比較多放在 SQL 和 Spreadsheet 的分析語法,算是第四單元的進階,所以在內容的呈現上,我會分別整理兩者較為重要的概念,讓大家做個總覽,最後再附上我的修課心得~
Spreadsheet 重要分析公式一覽
在這個單元,教案提供了許多關於 Spreadsheet 的函數或公式,來讓我們更好的整理與分析資料,我在這裡簡單條列一些我認為相當值得學習的作法,並簡單說明其用法:
排序與篩選
雖然因為我的工作本來就經常會用到 Spreadsheet 或 Excel,所以對這個功能早就已經熟到不能再熟,但考量到之前和其他團隊共事時,仍然有成員對其一知半解,因此我還是簡單介紹一下這個易上手卻有不可或缺的功能。
排序
當我們拿到一大筆資料的時候,如果想迅速讓它呈現的較有條理,排序便會是一個很好的功能,我在下方有提供一個試算表的連結,大家可以實際操作一次,稍後的篩選也是同一筆資料。
連結:
點進連結之後,我們選取檔案下的建立副本,將內容移到自己的檔案中以免動到原檔。
之後我們點選 A 欄,並在「資料」底下選取「排序工作表 – 依欄 A 排序工作表(從 A 到 Z)」,點下去之後你會發現我們成功依照 Title 的不同去做了排序與分類,在分析上會更容易進行比較。當然,我們不一定每次都要從第一欄開始排序,也可以依照你想分析的數據,去選取欄位調整。
篩選
這個是我個人最常用的功能,它可以幫助我們將當下用不到的數據給隱藏起來,讓我們專注在關鍵的資料上。我們一樣用剛剛的那張表格:
首先,點擊上方的標題列(點選旁邊的數字 1),並且選擇右上方的篩選 icon,你便可以迅速建立所有欄位的篩選器。如果只想建立某個欄位的話,也可以點擊該欄並點擊 icon ,也會有一樣的效果。
建立完篩選器之後,我們針對想要篩選的欄位,點擊旁邊那個看起來像 WIFI 訊號的圖標,會出現一個可以讓我們設定條件的 Dashboard,這時,我們可以依據想篩選的名稱、數值或日期等指標去做調整,這部分就讓大家自行嘗試~
我個人最常用的是篩選特定的名稱,在下方的勾選欄位中,只選取我想要看的資料,選擇完後再點擊確定,就可以迅速篩出我要的內容!
VLOOKUP 垂直查找
第二個要和大家分享的重要功能是 VLOOKUP,想必對於 Excel 有點概念的人都聽過這個函數,沒錯,他也可以在 Spreadsheet 上使用,語法相同、操作流程也相差無幾,因此我認為相當值得大家去了解一下(雖然我個人工作上目前是沒用過拉
VLOOKUP 核心觀念
VLOOKUP 又稱為 Vertical Lookup,意即垂直查找,讓我們可以在查詢的範圍當中,由上到下的進行資料的查詢。這能讓我們不用針對資料進行細部的篩選,而是僅透過公式便可以迅速調出我們要找的值,堪稱省時利器。
可以想像一個場景,當我們今天要從 1000 多人的員工名單中,調出其中 5 人的績效表現,比起一個一個慢慢找,透過 VLOOKUP,我們可以迅速找出這五個人相對應的資料,這,就是他的作用。
VLOOKUP 公式
中文版:=VLOOKUP(要查詢的值, 查找範圍, 在第幾欄, True or False)
- 要查詢的值
這個部分要填入的便是我們要查詢的目標,可以直接點選相對應的格子,或透過 “ ” 來進行填入。
- 查找範圍
也就是我們要查找的資料範圍,通常除了名稱這欄,還要包含對應的值的欄位。
- 在第幾欄
這個我想會是大家比較常搞混的點,VLOOKUP 是幫助我們找出「特定條件」下的「對應值」,所以我們最終要找的,是「要查詢的值」這列,相對應的資料(例如:王小明的薪水,王小明是「要查詢的值」,而他的「薪水」則是我們真正要找的)
而這個我們真正要找的值,在整個查找範圍的「第幾欄」?這部分要填入數字,第二欄就寫 2 ,以此類推。
- True or False
最後一個位置則需要填 True 或 False。當我們要找「完全符合」要查訓的值的時候,就必須寫 False,才會出現完全準確的內容;而如果只需「大約符合」,則填入 True。我們通常都會寫 False 以確保資料的正確性,提供給大家參考!
- 補充
VLOOKUP 還有一個很重要的原則,那就是我們只能「往右查詢」。也就是當我們選擇「要查找的值」後,只能以其為中心,向右進行查找範圍的建立和搜尋,這點請大家務必留意!
實作環節
這裡先提供給大家教案中給的練習檔案:VLOOKUP Practice Worksheet
點進去之後,我們來試著找出姓名為 Ali, Dana 這個人在 1/3 的花費。這時我們可以先參考上方的 VLOOKUP 公式,在下方找個空格開始進行撰寫。
在寫完 = VLOOKUP() 之後,我們首先要看這個「要查詢的值」:Ali, Dana 處在表格中的哪個位置,並將它的值 B3 寫入公式內的第一格(或者用 “Ali, Dana” 來表示也可以);接著,我們選擇要查找的範圍:B2:H6,這時我們可以看到表格上會出現框起來的虛線。
記得,要在每個值得後面加上 , 隔開。範圍找好之後,我們接著來看 1/3 的值,在這個查找範圍中是在第幾欄?結果是第四欄,因此,我們在這格要填入的值即為 4;最後,我們在最後的 True or False,要填入「完全符合」的 False,填好後按下 enter,就會出現我們要找的值了!
Pivot Table 樞紐分析
最後要和大家分享的是在職場上相當有名的「樞紐分析」,我現在的實習也經常會用到這個工具,剛好教案也花了蠻大的篇幅在介紹這個觀念,我也在這裡將重點和大家做分享~
樞紐分析的核心觀念
樞紐分析最適合用來處理指標較多、較為複雜的資料,透過交叉比對來迅速找出數據之間的關聯,並從不同的視角去分析問題,讓使用者能用更全面的角度去解讀它。做完簡單的樞紐分析後,還可以迅速地拉出圖表,進行初步的視覺化呈現,能節省許多時間,並讓大家迅速了解數據的脈絡。
如何使用樞紐分析?
和 VLOOKUP 不同,樞紐分析並非函數,而是內建在 Spreadsheet 和 Excel 中的功能,我在這邊直接提供教案的檔案作為操作的依據,大家可以點擊下方連結一起進行操作!
點進連結並建立好副本之後,我們直接點選「插入」下方的「資料透視表」,我也不知道為啥這樣翻譯,在 Excel 中還是叫樞紐分析,但在 Speadsheet 上就變成了資料透視表…
Whatever 我們先點下去,會出現一個「建立資料透視表」的小視窗,我們選擇「新的工作表」並點選建立,便可以在新的工作表中出現下方畫面,這就代表我們初步建立好了樞紐分析表
你有看到右邊的多個指標嗎?這些就是樞紐分析表的精隨,我們可以透過將這些指標放入欄或列中進行比較,迅速得出我們要的洞見。
例如:我們想知道不同種類的電影,平均成本和營收約為多少?並藉此算出獲利。我們便可以在「列」的地方點擊「新增」,選取 Gnere(1),並在下方的「值」點擊「新增」,選擇 Budget 和 Box Office Revenue,並將這兩個值的「彙總依據」改成 AVERAGE,做完之後你會跑出下方的樣子
一目了然對吧!這就是樞紐分析厲害的地方,迅速得出相對應的值,而不需要我們在原數據中進行過多的計算或操作。最後,再給大家看一個我個人覺得也不錯用的功能:
在「值」點選「新增」,選取最上方的「計算結果欄位」,這能讓我們客製化去進行欄位計算。在下方的公式中填入 AVERAGE(‘Box Office Revenue ($)’)-AVERAGE(‘Budget ($)’),便可以成功將這個欄位製作成前兩者相減的結果,得出各種類電影的淨利!
樞紐分析其實還有很多可以變化和探索的地方,這裡礙於篇幅,以及我本身對其的研究並沒有到特別深,因此就簡單和大家分享一下概念與初步操作!如果有任何問題也都歡迎提出來和我交流喔~
進階 SQL 語法
第二個大段落要和大家分享的是 SQL 的進階語法,但與其說是語法,不如說是更為複雜的架構。當我們實際做數據分析時,那些簡單的 SQL 指令很難完全滿足我們的需求,因此會需要更複雜的寫法去做資料的撈取和呈現。
在 SQL 中做運算
和 Excel 一樣,我們也可以在 SQL 中進行運算並得出結果。先前比較多在講如何從資料庫撈取資料,在第五單元,教案比較多著重在實務上的操作,運算也是其中之一。
四則運算
其實講到計算,就鐵定繞不開我們熟悉的四則運算:加減乘除。在 SQL 中也是一樣,而我們要在哪個部分進行計算呢?答案是在 SELECT 之後。
這裡一樣提供大家教案中的指南,我們首先進入 BigQuery 頁面,並在編輯區寫下:
SELECT * FROM bigquery-public-data.new_york_subway.subway_ridership_2013_present
在跑出結果之後,點選「儲存結果」下的 BigQuery 資料表,將其命名並放到專案底下的某個資料集下,以便我們待會進行操作。
都做好之後,我們點選上方的加號,開啟新的查詢頁面,開始練習如何在 SQL 中進行四則運算。在 SQL 上,四則運算的符號如下:
- + 加
- – 減
- * 乘
- / 除
計算的時候其實和平常的寫法沒啥不同,只需要在乘除的時候留意一下是否須加上 () 即可,這邊也給大家一段語法,讓大家以此為基礎,去嘗試不同的計算方式:
SELECT
station_name,
ridership_2013,
ridership_2014,
ridership_2015,
ridership_2016,
(ridership_2013 + ridership_2014 + ridership_2015 + ridership_2016) / 4 AS Average
FROM
bigquery-public-data.new_york_subway.subway_ridership_2013_present
執行後會跑出下列結果,可以看到除了原本的欄位之外,我們也在最右邊建立了一個 Average 的欄位,計算的是 2013~2016 的平均值。如果想做其他的運算,也可以按照這個邏輯去寫我們的公式。
Subquery 子查詢
接下來要講一個比較複雜的 SQL 撰寫架構:SubQuery。這屬於比較進階、但基本上有在使用 SQL 的數據分析師都要掌握的技能。簡單來說就是在一個 Query 裡面再多包一層 Query 進去,形成雙重查詢,一次就做完兩次查詢的工作,可謂節省時間的一大利器。
鳥巢式撰寫架構
這部分因為比較複雜,我僅會簡單介紹一下它的寫法,關於實務上的操作,我目前也還沒厲害到可以直接寫出一個架構清楚的 SubQuery 去解決問題,因此這個段落會著重在觀念的介紹。
SELECT [Name]
FROM Production.Product
WHERE ListPrice =
(SELECT ListPrice
FROM Production.Product
WHERE [Name] = 'Chainring Bolts' );
我們可以看到這段程式碼在 WHERE 的部分使用了 Subquery 的架構,原先在 WHERE 中僅會寫表格原有的值去做篩選,但在加入了 Subquery 語法之後,我們便可以一次寫出多個客製化的篩選條件,短短幾行便搞定原先要寫好久的查詢。
不過說實話,我其實到現在都還沒有很適應 Subquery 的撰寫邏輯,讓我在看別人的程式碼時會需要花不少時間理解,更別提自己動手寫了。這部分我還需要多加練習,熟能生巧,Subquery 也是如此。
Temporary Table 暫存表
這是 SQL 在實務上的另一個重要概念。簡單來說,就是我們可以透過建立一個暫時性的資料庫,讓我們在查詢和做分析的時候使用,等查詢完畢、結束連結資料庫的連結後便會被伺服器自動刪除。
這樣做的好處是有利於優化記憶體的效能,使其獲得提升,讓程式運行的速度提升;同時也可以在操作複雜數據時,透過建立臨時表來找出最關鍵的資料後,再將其統整到最終表中,以降低失誤率和複雜度。
實際操作
一樣,這觀念若單純紙上談兵實在有些難懂,這裡一樣提供大家一個可以在 BigQuery 上操作的指引給大家。首先,在 BigQuery 上輸入下方程式碼:
SELECT * FROM bigquery-public-data.austin_bikeshare.bikeshare_trips
之後依照上述提及的方式,將這筆資料另存於自己專案底下資料集,在命名上以自己看得懂為主。
接著,大家可以試著在 BigQuery 輸入下方程式碼,並且試著讀懂其中的含意。雖然因為篇幅,我沒有在這篇文章中告訴大家 JOIN 語法的功用,之後有機會再專門出 SQL 的教學來補足,大家先試著看我在下方寫的程式碼:
--用 WITH 名稱 AS()的方式來進行建立
WITH longest_used_bikes AS(
SELECT
bikeid,
SUM(duration_minutes) AS trip_duration
FROM
bigquery-public-data.austin_bikeshare.bikeshare_trips
GROUP BY
bikeid
ORDER BY
trip_duration DESC
LIMIT 1
)
--上方的程式碼便成功建立了一個名為 longest_used_bikes 的暫存表,我們在下方便可用 SELECT 去使用裡面的資料
SELECT
trips.start_station_id,
COUNT(*) AS trip_ct
FROM
longest_used_bikes AS longest
INNER JOIN
bigquery-public-data.austin_bikeshare.bikeshare_trips AS trips
ON
longest.bikeid = trips.bikeid
GROUP BY
trips.start_station_id
ORDER BY
trip_ct DESC
LIMIT 1
可以看到,我在最開始的時候,使用 WITH … AS() 的方式去建立了一個「暫存表」,在之後的查詢中,我便不需再做一次篩選,而是可以透過直接取用暫存表中的資料來進行查詢,這個動作能讓我們在處理複雜且大量的資料時,省下許多時間,和 JS 的 Function 我覺得有異曲同工之妙。
其他建立方式
除了 WITH… AS 的方法之外,還有像是 CREATE TABLE, SELECT INTO 等作法,這部分我就不多加補充,因為除了細節上有些許不同以外,底層的大方向都是一樣的,都是為了提升記憶體效能、工作效率和簡化語法。
但說實話,這東西真的難…我幾個月前在學 SQL 的時候也被這觀念卡了很久,現在也不敢說完全熟悉。如果沒有教案的指引,我十之八九寫不出一個好的暫存表架構,多加練習吧!路還長的呢~
個人修課心得
進到第五週(我個人是正在第六週),身心感覺都有點疲勞,隨著強度的提升,我也越來越感到吃力。尤其這週在兩個工具上都教了比較進階的概念,讓我沒辦法像先前一樣,僅是看過一眼就能理解,而是經常需要跟著教案去做練習,這也讓我花了不少時間。
時間規劃
老樣子,每天大約 1.5 小時。然後建議大家把重心多放在 Hands-On Activity 上,裡面提供的資料庫、操作指南和實作流程都是很棒的學習機會。比起重複看影片,實際做過一次會讓你對這些東西更有概念、更有學習的感覺。
我這週一路上到禮拜天早上才完成所有的課程,總時長大約 12~15 小時,而且大多都是在高專注力的情況下上課。我覺得如果你在上這部份時工作或其他事情比較忙碌的話,不妨多給自己一點時間,兩個禮拜內修完會是個比較人性化的安排。畢竟,不是每個人都和我一樣,每天有這麼多時間可以學習。
須注意的章節
這單元除了第一週的內容可以較為隨意的帶過之外,剩下三週都有其重點。我個人推薦在第二週的「格式化設定」、第三週的「VLOOKUP」、「SQL – JOIN 語法」與「Subquery」以及第四週的「樞紐分析」與「SQL – 暫存表」這幾 Part 多花心思。
對,真的很多。不過你也可以從中學到很多紮實的觀念,哪怕你現在用不到 SQL 的進階操作,但 Spreadsheet 的一些設定,我還真的是在學完之後立刻用在工作上。這個單元很妙的地方在於,實用跟進階教學兼具,雖然學的很辛苦,但成長也是顯而易見的。
總結
學到現在,這單元算是目前資訊量最大的,也著實消耗我不少心力。不過轉念一想,都撐到現在了,在努力一下,真的可以在年底把這門課上完,現在我正努力上第六單元的資料視覺化,下週再來和大家分享。
總結來說,修這門課真的蠻吃力的。如果一邊還要上班,一邊上這個課,我可能要快半年的時間才上的完。因此建議如果你想修這門課,剛好近期有頗閒的話,趕緊把握機會進修,不然之後一忙起來,真的會有心無力…