【Google Data Analytics Certificate】筆記:SQL 與 SpreadSheet 操作

這篇文章要和大家分享的,是我在上 Coursera 的數據分析課程所整理的筆記,如果想看更完整的課程準備、心得和筆記的話,歡迎點擊這個 Google Data Analytics Professional Certificate 連結,我有用 # 將近期撰寫的系列文章整理起來,歡迎大家參考!

回到正題,這週的內容是課程第四單元:Process Data from Dirty to Clean 的學習筆記。從名稱就可以看出,這個單元講述的是數據分析的第三步:Process,也就是清洗和整理手上的數據,讓我們可以更方便的去做分析,同時避免錯誤的數據誤導我們的分析結果。

我挑了兩個大重點和大家分享,分別是「當數據出現問題時該如何處理?」「Spreadsheet & SQL 清洗與整理數據的方法教學」,最後我會附上我個人在上這單元的進度安排與心得,希望能讓大家對此更加理解~

數據出現問題了,怎麼辦?

雖說我們現在練習或是做學校作業的時候,都會有事先建立好的「完整」資料庫,裡面的數據大多都是整理過的,可以直接進行分析,讓我們嘗試不同 function 的功能。

但,現實世界並非如此,當我們在一間公司擔任數據分析師時,很難每次都能獲取數量足夠、品質夠好的數據進行分析。因此,我們也必須知道幾件事:

第一,什麼是不合格的數據?我們要能夠判斷手上的數據是否符合統計學裡的標準?這些數據是我們解決問題所必須的嗎?

第二,數據的格式、型態是否正確?如果搞錯單位或資料型態,抑或是有重複的資料出現,都會讓我們的數據出現偏誤,造成結果失準的後果。

接下來我會針對這些錯誤,去做更詳細的解釋,以及透過教案的內容和大家分享,我們可以如何解決這些問題。

從統計學看數據

想必大家都知道,當我們在企業做分析的時候,很多時候必須針對目標受眾的回饋、想法去找出趨勢。但要蒐集所有消費者的資料實在太過費時,成本也過於昂貴,因此,抽樣分析就會是我們常用的方法。

抽樣分析指的是我們從這些鎖定的消費者(通常會有一個範圍)中挑選一批「足以代表」這個群體消費習慣的樣本來進行調查,蒐集他們的回覆後去做分析,便可以得出「近似」於這批目標受眾的結果,進而規畫下一步行動。

而關於這個樣本數要取多少?我們如何確保取樣的這批人能最接近我們想蒐集的目標群體?這就得靠統計學的力量,去找出我們需要的數據。

當我們要計算這個樣本數的時候,會需要知道以下這些名詞,並有相關的數據去做推算。

信賴區間

這個詞簡單來說就是我們這批數據顯示出來的成果,可涵蓋多少 % 的實際值。我們有多少 % 的信心可以確定,這個數據的結果足以代表我們的目標群體。

誤差範圍

這就相當直觀,乃是我們這批抽樣數據和實際群體之間會有的誤差,通常會 +- 這個誤差值,去算出數據的準確範圍。

母體

整個目標族群的數量,知道這個數據才能去計算需要抽樣的範本數為何。

樣本數

根據母體數、誤差範圍和係賴區間去算出的最小樣本數量,要超過這個數量,我們才有足夠的信心和準確度去看整個母體代表的結果。

調查回覆比率

這個是比較實際面的名詞,代表的是我們發出的這些調查中,預估會有多少人填寫,去評估我們所需要發放的數量。這個比率愈高,我們需要發放的數量越少。

而至於該如何利用這些數據去得出我們要的樣本數,當然有相關的統計學公式,這個大家稍微搜尋一下就會知道,我這篇分享教案提供的網路計算器給大家,只要輸入相關的數字,他就會跑出相對應的樣本數,相當好用!

【網路計算器連結】Sample size calculator

數據量不夠,怎麼辦?

前面也提到,我們在業界其實很難拿到真正完整且符合分析需求的資料,難免還是會碰到樣本數不夠、數據過時等問題,那麼,難道我們就放棄了嗎?

教案有提供幾個 Scenario,像是想預測新車上市的銷量,但我們並沒有過往的數據,這時,我們可以利用性能相近、價格相當的車款在過往剛上市時的走勢和銷量如何?結合幾個變數,像是總體經濟環境、近期是否有其他品牌推新車等等,去試著分析出可信賴的結果。

再來是如果手上的樣本數不夠,教案建議我們可以和專案的利害關係人討論延長專案時程,讓團隊有更多時間去蒐集足夠的數據,同時一邊著手準備分析,讓最後的成果是符合統計學原理且值得信賴。

總結來說,我們要解決問題。除了上述的這兩種情境以外,我相信工作上還是會碰到很多突如其來的挑戰,身為數據分析師,我們要發揮自己的能力,去試著找出合理且準確的替代方案,去回答利害關係人們的問題。

課程中也有透過影片、教學文章的方式詳細敘述統計學和數據有誤的情境解析,我個人覺得這段相當重要,如果有想上課的朋友,記得要認真聽喔!

圖片來源:Pixabay

Spreadsheet & SQL 清洗與整理數據的方法教學

接著我們進到比較硬技能的方面,關於 Spreadsheet 和 SQL 的一些公式和操作的教學。前面有提到,我們不太可能拿到一開始就是正確無誤、經過整理的數據,在資料中經常會出現重複、拼字錯誤、型態錯誤,甚至是多了一個空格等小問題,但這都會導致我們的數據失準,如果誤把其中錯誤的資料納進來分析,會引發結果錯誤的後果。

因此,我們要先利用工具將這些錯誤給找出並清理,確認資料無誤後,再進到下一個步驟。而 Spreadsheet SQL 則是現階段業界常用的資料清洗工具(Excel 也不錯)。

大筆資料處理:SQL

雖然兩個工具都可以達到資料清洗的功能,不過在使用上,如果今天專案牽涉的數據量較大,或是需要從多個來源匯入資料來共同處理時,教案建議我們可以用 SQL 來進行操作。

而其實 SQL 只是一個資料庫的查詢語言,真正被用來操作的,是資料庫的平台,像是 SQLite、BigQuery、MYSQL 等等,會因企業內部採用系統不同,而使用不同的平台去進行操作,不過在 SQL 語法上,基本都大同小異,所以只要掌握了 SQL 的關鍵語法,我們便可以在業界獲得一席之地。

在這門課,教案以 Google 自家推出的 BigQuery 作為操作的主要平台,如果也想跟著一起試試看的話,建議可以先看我的上一篇文章:認識 Kaggle 和 BigQuery,裡面有對其進行較完整的介紹和教學。

操作練習

我這邊以教案提供的資料和指引來簡單和大家分享在 BigQuery 上操作 SQL 語法的練習,相當建議大家可以跟著一起在上面操作喔!

  • 首先,先將資料下載起來:Link to data: automobile_data
  • 接著打開 BigQuery 介面,進到你的專案當中(建議用剛註冊完建立的 first-project),
  • 點擊專案旁邊的三個小點,點選建立資料集。
  • 接著替資料集命名,點選下方建立資料集,會發現他出現在專案下方,此時,再點選資料集旁邊的三個小點,選擇「建立資料表」。
  • 進入到頁面之後,在來源處選擇「上傳」,並在下方的「選取檔案」中選取剛剛下載的 csv 檔案,並且在下方的「資料表」替其命名,最後再勾選下方的「結構定義-自動偵測」,最終按下建立資料表即完成第一步準備。
  • 這時,點選新建立的資料表,並選擇「預覽」,你便可以看到整個數據,之後我們便會針對其中的資料來練習。
  • 由於後續的操作對於不會 SQL 的朋友來說可能太過困難,因此我僅會簡單列出幾行程式碼,稍微解釋一下處理的過程,讓大家可以實際在 BigQuery 上操作,詳細的 SQL 教學還是要請大家自行學習喔!(我之後有空也會出 SQL 的教學文 哈)
--選出資料中的空值
--FROM 後面的檔名會依照個人命名不同而有所調整
SELECT
  *
FROM
  `New_data.automobile` 
WHERE 
  num_of_doors IS NULL;

可以看到旁邊出現了一部分空值,如果不處理就會使得結果出現偏頗,因此,我們接著用 UPDATE 語法來進行調整。

UPDATE
  `New_data.automobile` 
SET
  num_of_doors = "four"
WHERE
  make = "dodge"
  AND fuel_type = "gas"
  AND body_style = "sedan";

實際運行之後,我們會發現下方顯示已經修改,這時就代表我們成功完成資料修正。為了確保無誤,我們再使用最初的找尋空值程式碼來驗證。

這時我們發現,還是有一筆 mazda 的數據有出現空值,這時,我們可以稍微調整第二步的程式碼,針對這筆資料去做調整,之後也是依此往下調整。這,就是最初步的資料清洗和修正!

小筆資料處理:SpreadSheet

當我們今天要處理的資料較為單純,數量比較少的時候,SpreadSheet 就會是比較好的選擇。這裡我一樣分享與摘要教案提供的範例,讓大家可以跟著操作,由於 Google SpreadSheet 算是許多人都有用過的工具,我會比較快速的帶過這部分~

  • 接著點選右上角的使用範本,就可以直接進到操作的環節。
  • 處理資料的第一步是移除空值,我們可以透過對整個表建立篩選器,並選出其值為空白的選項,再將其刪除,以確保欄位內皆有數據。
  • 整理完後再透過轉置功能,將表格換個方向呈現,方便我們做資料的閱讀
  • 最後再依照需求,去將表格進行整理和優化,這部分我就不多做示範,讓大家自行摸索~

小結

因為我個人已經蠻熟悉 Google SpreadSheet 的操作,因此對於教案裡提到的函數、功能和標準化設定我都還算熟悉。所以我更有感覺的是在 BigQuery 上操作 SQL 的經驗,從一開始要跟著教案一步步導入資料,到後來已經能順利的上手,把數據快速導入平台並開始分析,這對我來說是個蠻大的進步。

而且根據教案提供的數據量大小不同,我也深刻感受到了不同規模的專案應該要用不同工具這句話。在 SpreadSheet 上,雖然很多功能相當直觀,該有的也都有給,在處理小範圍的數據真的相當好用;不過,一旦資料變成幾千、幾萬筆時,我就發現 SpreadSheet 已經沒有辦法負荷這樣的數據量,需要靠 SQL 來完成分析。

這時我才知道,原來 SQL 和 SpreadSheet 各有各的施展舞台,我們要在對的時候使用對的工具,才能讓我們的工作效率最大化。日後還會學到一樣是用來分析數據的 R,隨著工具箱的種類愈發豐富,我便越有把握去解決不同的問題!

進度規劃與課程心得

進到第四單元,很明顯感受到課程強度往上提升,多了許多操作的環節。不過,由於我對 SpreadSheet 較熟悉,因此很多部份我是只有速速帶過,在 SQL 上花比較多功夫。這也讓我能維持一天大約 1.5 小時的進度安排,花上 5~6 天將這單元的課程完成。

進度規劃建議

這個單元一共有 6 週的進度,不過我私心覺得僅有前四週的課程會需要花比較多心力,後兩周在講的是如何規畫你的履歷,去展示你身為一個 Jounior Data Analyst,具備什麼樣的能力、有什麼相關經歷等等…

這部分我認為還稍嫌過早,而且西方那邊的求職法則不見得適用在台灣,因此我建議看看就好。

我大約花 2 小時的時間就將最後兩週的課程上完,其他時間較多花在第二、第三週的實際操作,去熟悉 BigQuery 和 SpreadSheet 我之前較少接觸的功能。

我會建議,如果你和我一樣講求進度和效率,可以把重心放在前四週,特別是二和三的語法&操作練習,你會從這部分感受到較為明顯的成長。

整體時長我會建議預留 12 小時給這堂課,當你在操作上卡關、想多練習時,就停下來多寫個幾次,去熟悉這些工具的操作,這對未來想成為數據分析師的我們,可以說是不可忽視的基本功養成。

課程心得

我覺得課程到這邊算是一個小分水嶺,前面比較多是基礎觀念養成,從第三章開始才多講了一些關於實務上操作的教學,而第四章則是更深入去使用 SQL & SpreadSheet 這兩個數據分析工具。

我個人比較喜歡這樣的實作課程,因為比起虛無飄渺的觀念,這會讓我更有自己在成長的感覺。不過上到這裡,我已經連續四個禮拜花大量時間投入在這門課上,說實話,有點心累。隨著強度拉高,但我的心態已經有點疲勞,這可不是個好現象…

我會試著在接下的時間逐步調整我的步調,應該會逐漸縮短每天上課的時間。有看我前幾篇文章的朋友應該知道,我最初是以每天兩小時的進度在走,一週 7 天不間斷,但我現在已經降到每天 1.5 小時,然後偶爾會休息。

配速,是學習很重要的一環。我也會試著透過配速來調節一下我的學習動力與效率,試著在之後的時間把進度稍微放緩,但依舊維持高效率、高產出的學習!這裡也建議想修這門課的朋友要做好長期抗戰的心理準備,愈到後面會愈難熬,不過,堅持下去,成果就會是我們的。

我在寫這篇文章的同時,也大約完成了第五單元三分之一的課程,收穫很多,但同時消耗也不小,希望我能繼續堅持下去囉!也希望大家有機會也可以在上完課後和我交流修課心得!

收到更多巫師札記的內容

總算在今年做出新嘗試啦!目前還是試營運版本的電子報!每個月我至少會寄出一篇關於我當月文章的摘要與重點整理,你可以針對有興趣的主題來閱讀!除此之外,我也會不定期的寫信分享近期的學習點和心得,也希望透過電子報來和大家有更緊密的互動!

只要訂閱巫師札記電子報,我就會免費寄出一份關於「如何提升閱讀效率」的電子書,幫助大家更有系統的吸收與學習書上的知識。日後也會持續分享有意義的內容,請大家多多支持!