Data 📊你喜歡的會有幾個?…資料科學眼中的量化世界

Sobi
程式猿吃香蕉
Published in
13 min readNov 16, 2022

筆者 Sobi 任職知名外商,摸過各式各樣大資料小數據,喜歡聽故事,也喜歡說故事,《程式猿吃香蕉🍌》客座專欄作家

資料科學家眼中的世界是什麼樣?是用一個個酷炫的人工智慧模型生出世界的樣貌?還是分佈在空間向量中的的滿天資料,像星空一樣浪漫閃爍?

都不是!其實答案很簡單,而且既不酷炫也不浪漫。資料科學家眼裡的世界也跟你我一樣,只是在他們的腦袋裡多做了一件事:

努力把看到的事物量化

為什麼要這麼做呢?因為現實世界看似分散而毫無關聯的各種現象,都得透過這個過程整理成資料,才能夠使用統計、機器學習、AI等工具進行分析處理,進而找出問題跟解答,用來改善這個世界。

資料建模 (Data Modeling):串接現實世界與資料科學的橋樑

什麼是資料建模呢?簡單的說就是:

把現實世界的現象,用建立模型的方式變得抽象化,然後就可以使用一組整合的邏輯觀念,透過對抽象資料的分析來瞭解現實世界。

這就我們玩模型的道理一樣。設計模型時,製作者挑選了真實世界事物的特徵,放進模型中。也因此,我們可以透過對模型的觀察,瞭解真實世界事物的特徵為何。再舉個例子,建設公司為了促銷自己的房屋專案,都會打造樣品屋,作為接近真正房屋的「實體上」 的參考,客戶便可藉由此模型和房仲的介紹,瞭解預售屋的實際狀況,來決定是否為自己理想中的房屋。

資料建模,就是在資料科學世界打造你要的模型,確定資料可以還原在真實世界的模樣,以便日後可以做各種資料呈現與應用。

熱血的各位!先不急著問入行到底要學哪種程式語言最好?還是哪種機器學習模型最厲害?聽到這裡,你們應該能夠了解,資料建模,其實是資料科學最重要的基礎啊!不管應用是商業智慧 BI (Business Intelligence) 還是人工智慧 AI (Artificial Intelligence),都需要透過嚴謹的資料建模,確保資料能夠精確描述待解決的現實問題,才是能產出品質良好的資料,套用各種工具分析應用。

資料品質不好的話,會發生什麼事情呢?有句名言:「 garbage in garbage out」(垃圾進,就垃圾出啊),也就是說,你把垃圾丟進任何系統,就算是再厲害的人工智慧大神,產出的也只會是垃圾,不會變成黃金的!

資料科學家:優秀的翻譯官

資料建模,我更偏好說這是一套翻譯的方法:

資料科學家在這個過程中扮演的就是翻譯。

將現實世界的問題量化之後,翻譯成電腦懂的格式,存起來!

真實世界裡存在的各種生物,在資料科學的量化世界會是怎麼樣呢?如下圖所示。

(資料科學家翻譯真實世界)

在進入資料建模之前,請先收下處理量化資料的重要概念,再用生活化的例子來說明資料建模的概念和怎麼實作,讓大家看看資料科學家日常的奮戰是怎麼一回事!

▍處理量化資料之兩大重點

儲存空間:RDB

現今最常使用的是關聯式資料庫 Relational Database(簡稱RDB,當說出RDB,大家會認為你是專家👍🏻),什麼是資料庫呢?顧名思義,是資料的儲存庫。那,什麼是關聯式呢?簡單的說,不同的資料放在各自的存取空間(資料表)裡面,然後有一連串的邏輯,用來定義跟管理這些資料之間的關係。這樣的話拿到一筆資料,還可以輕鬆取得其他相關的資料,是不是很簡單好用呢?

運算語法:SQL

有了資料庫,我們要怎麼查詢裡面的資料?關聯性資料庫提供了一套專門的指令集,讓使用者可以利用資料庫的各種功能,對存在裡面的資料進行運算跟查詢,這套語法稱為「結構化查詢語言」(Structured Query Language,簡稱為 SQL)。這個字看起來沒有母音,乍看也不知道怎麼發音,但是對資料科學家來說,可是入行的必備武器呢!不信的話,打開 Linkedin,只要跟資料相關的工作,一定都會把 SQL 列進必備技能,請準備入行的熱血青年們務必熟練喔。

關於上述兩大重點,如果你想更了解技術細節,網路上早就有海量文章在討論,不在此贅述。我這邊就來換個切入點,來帶著大家一步一步學習怎麼把看似一團糨糊的實體世界現象,整理出頭緒,變成整齊量化的資料,才能存在關聯式資料庫裡,利用神奇的SQL語法,把現實生活的各種煩惱疑問分門別類,找到線索解決問題。

按照往常,說個故事先!讓我們來看看某個宅宅工程師的(真實)煩惱吧!

▍對日常事物做量化:你喜歡的會有幾個?

⊙ 場景:辦公室閒聊

🤦‍♂️ 宅宅:「煩死了,昨天我女朋友又問我喜歡他哪裡?我就說喜歡你可愛啊,結果女生居然生氣耶!這樣也要氣?」

👨🏽 同事A:「我猜你女朋友會說:『那那個誰誰誰也是可愛,你也喜歡她囉?』」

👨 宅宅:「ㄟ!你怎麼知道?她氣噗噗耶!」

👨🏽 同事A:「我知道,因為我也被問過,然後她就變成我前女友了….」

👨 宅宅:「(安靜兩秒)好吧!節哀順變。結果我女友氣得要命,沒辦法,我只好說『沒有啦,你不只可愛,還聰明又漂亮啊!』」

💁🏻‍♂️ 同事C:「照這個邏輯,你女友也可以說『那那個誰誰誰也是可愛又聰明漂亮,所以,你也喜歡她囉?』」

👨 宅宅:「哇靠!你怎麼猜到的啊?結果我就想啊,不然再加一個年輕好了。「沒有啦,你不止可愛又聰明漂亮,而且還很年輕啦~』」

👨🏽同事A:「我來猜猜,結果她是不是問你:『那那個誰誰誰別人跟我同年,所以你也一樣愛她?』」

💁🏻‍♂️ 同事C:「還是女生說了『如果我不再年輕了,你還會愛我嗎?』?」

👨 宅宅:(無言點頭)

🤦‍♂️🤦🏽‍♂️🤦🏻‍♂️眾人:(眼神死)

👨 宅宅:「哎,她最後放話說:『你給我好好想清楚,怎麼證明你只愛我一個!』」

終於,在最後的最後!

🦸‍♂️(一邊路過的)老司機同事J:

答案很簡單!你應該跟她說:『我就愛你的身分證字號啊!』

一陣雄壯的笑聲在安靜的午後爆開,阿宅工程弟兄拍腿大叫:

對啦對啦,因為身分證是唯一值,獨一無二,絕對不重複!!

偉哉資料科學部門,只有被資料長期荼毒的工程師阿宅們,才想得出來為了要表現只愛你一個的專一,連身分證字號都拿出來了…

🐧🐧🐧••••••••• 當年在旁邊參與這場對話的我,居然地聽懂了阿宅之間的冷笑話,然後也不爭氣地笑噴。

各位,先別急著關心「到底誰會買單『表達唯一的愛,只能愛上身分證字號」這個爛答案啦?」只是拿來當個引子,正好接著看看資料科學家怎麼運用量化的概念,解決各種世界上的問題。(雖然不知道那位宅宅工程師這麼說完,問題到底解決了沒有…)

萬事萬物都必須要被量化的描述

(圖片來源:https://www.prosci.com)

資料科學世界中,一首歌,一部電影,一個人,一幅畫,一筆訂單,一次點擊行為,都必須變成一筆一筆的資料,以結構化格式存進電腦裡。

那麼,要怎麼開始建立量化資料呢?第一步,我們需要以結構化的方式對物件進行描述。簡單說來,就是要幫物件建立格式化的特徵,才能給電腦運算。舉例來說,我們可以說一個人「身高很高」但是要存進資料庫的時候,問題就來了:身高高,是跟誰比?高跟矮之間的差別是多少?兩個人都標示「很高」,那誰比較高呢?所以要放進資料庫的資料裡面,我們會定義「身高 = 180cm」這樣的紀錄來表現客觀的身高高度,而不是使用「很高」這種文字描述

記得兩個重點:

什麼形式儲存?

現今資料科學分析最常使用的是關聯表格,非技術背景的讀者可以先用試算表(例如Excel)資料表一行一行的格式來想像一下。

儲存什麼資訊?

就是俗稱的欄位,用試算表來類比的話,就是每一行紀錄的不同格子,裡面會隨著我們的資料分析需要,放入不同的資料(例如第一格放身分證字號,第二格放名字,接著是身高體重…)。

就以上述工程師對話來做個練習吧!

如何儲存「可愛聰明又漂亮,還很年輕的女生」?

首先,我們可以在資料庫開立一個新的關聯式資料表,來記錄身邊的朋友們,就先把名字叫做 「Friends」吧!再將這些描述人的特質,變成一個一個欄位,以符合結構化資料的標準。

「可愛聰明又漂亮,還很年輕的女生」可以用以下五個欄位來形容:性別、個性、年齡、外表、智商。

  • ✔️ 女生對應到性別欄位
  • ✔️ 可愛對應到個性欄位
  • ✔️ 年輕對應到年齡欄位
  • ✔️ 聰明對應到智商欄位
  • ✔️ 漂亮對應到外表欄位

接下來,再套入其他朋友的敘述,檢視是否可以完整記錄這些人的樣貌。比方說:「聰明又帥,身高180的暖男」

  • ✔️ 男生對應到性別欄位
  • ✔️ 對應個性欄位
  • ✔️ 對應到外表欄位
  • ✔️ 聰明對應到智商欄位
  • 身高180對應到…

我們就會知道還少了一個欄位:身高,再加入新欄位即可。

最後,反覆將腦海中所知道的朋友特質輸入關聯式資料表。呈現結果如下圖:

資料表:Friends

完整記錄所有朋友的特質之後,我們就有了一張資料表:Friends,作為日後查詢運算資料的依據啦!

運算量化資料:SQL

量化資料之後妥妥地存在資料表裡了,要回答的是女孩兒的各種反問:可愛的女生?可愛又年輕的女孩?符合這些條件的女生都不只有一個啊!首先,先來計算可愛的女孩有幾個好了。

資料科學家如何接招呢?在資料科學的世界裡,最常使用的程式語言之一:SQL,閃亮登場!!!

(SQL怎麼唸呢?我都念「SQL~」….不是啦~)

可以拆開來唸 S!Q!L!或者念/ˈsiːkwəl/ 西闊~

好的,回到主題。

怎麼使用SQL查詢資料表,回答可愛的女生有幾個?

對於人腦來說,這樣的搜索常常跟靈感有關,今天問跟明天問答案不盡相同,但是對於電腦來說就不是這樣子的,因為我們都已經結構化資料存起來啦。程式語言就是這樣一板一眼的,只有符合格式,電腦才會聽你的話給出正確答案喔。

請各位務必注意以下三點:

❶ 哪一個表格可以回答的你的問題?

資料表 Friends(朋友的資料都放在這個資料表裡,別的資料表裡找不到)

❷ 顯示的答案是什麼?

某幾個欄位?還是一個欄位的統計數據:計算個數?加總?平均?還是最大值?SQL語言有提供一組內建函數,可以幫我們做以上列出的各種統計運算。在這個例子中,我們要計算的是個數,對應到的SQL函數是COUNT(*)(有支援哪些函數呢?可以上網自己查看看喔)

❸查詢條件:可愛的女生

這種時候要注意的是,不同的欄位放的資料性質是各自獨立的,例如如果你要找女生,這個資料只會放在「性別」欄位,而不會放到「個性」欄位裡,弄錯的話就查不到資料了!

所以,問句轉換成SQL語法,會是:

來看看語法結構與問句的對應會更加清楚。

(SQL 語法概念結構)

掌握了這個概念之後,就算女孩兒不斷地舉一反三各種特例:可愛又聰明漂亮可愛漂亮 …… 我們也可以透過調整查詢條件來回答,比方說:

  • 可愛漂亮➡️ WHERE 個性= ‘可愛’ and 外表= ‘漂亮’
  • 可愛又聰明漂亮➡️ WHERE 個性= ‘可愛’ and 外表= ‘漂亮’ and 智商= ‘聰明’

手把手教學到這裡,先暫停一下工程思考,請個性耿直的各位多想一下:女孩為何不厭其煩地問呢?

🤔🤔🤔🤔

很久很久以前,我很小很小的時候,紅透半邊天的周華健這樣唱著:

(歌名:你喜歡的會有幾個。 主唱:周華健)

這首歌真的很好聽,哀怨地自問自答,尤其這句貫穿整首歌曲:你喜歡的會有幾個?聽了心都揪成一團,問世間情為何物,這真的是好揪心呀!

不過,回到本文正題,其實女孩想要聽到的唯一正解就是:

「我愛的只有妳一個!」

啊~~怎麼辦?方才建立的Friends 資料表,不管怎麼修改查詢條件,都不能保證只有一個啊!!!方才我們一一鍵入的欄位都有可能重複:

所以目標就是找到不會重複的資訊,而身分證字號是不會重複。

所以要好好的回答女朋友的問題:「你喜歡怎麼樣的人?」找出那個最重要的「唯一解」在資料科學的量化世界裡,就可以簡單用這招啦!

唯一解
當在儲存結構化資料時候,為了要確保資料不會重複輸入,要加入一個欄位,每一筆資料都會有一個獨一無二的值,稱為主要鍵值(Primary key,簡稱PK,通常會在產生資料表的時候加上設定,以流水號的方式自動產生)拿剛剛提到的宅宅實際案例來說,要記錄人的最適合主要鍵值,那就是身分證字號了,因為每個人的身分證字號都獨一無二,最適合拿來當作PK囉!

總結一下,兩個步驟!

Step 1. 量化資料

將各式各樣的朋友建立為關聯式資料表Table: Friends

資料表:Friends

Step 2. 查詢資料

確認問題並撰寫查詢條件:答案只能有女朋友一個,故使用身分證字號(唯一值)。

w
回答只愛你一個的 SQL語法

現在回頭看上述案例,是否恍然大悟!!

資料建模,是技術💻,也是藝術🎨

😱😱😱 OMG,為了讓大家了解資料科學家怎麼處理現實世界的問題,我居然連同事的秘密都出賣了。

但不得不說,將真實世界翻譯成結構化資料,其實是很有趣的作業!遙想當年我還在人文科系,接觸到資料科學的入門作業就是撰寫描述資料的資料 ( Metadata ),聽起來很拗口,其實就是練習怎麼描述一首歌,一本書的欄位練習,紀錄歌曲和書本我們都已經相當熟練,但真實世界的物件如此多元豐富,怎麼描述茶葉,蝴蝶,圖片...,當年那堂課的確像是敲門磚,讓我決心要踏進了這迷人的行業,就從人文的角度來看資料科學怎麼解決問題!

進入實務的工程領域之後,當年覺得好玩的作業根本沒有派上用場!因為初學者只能乖乖使用別人定義好的結構化資料 ,比方說:訂單資料。

熬了若干年,寫了很多程式,終於有機會幹一番大事,比方說:新 App 上市之前,老闆交付你做出推薦系統。所有一切就從如何翻譯現實世界開始:從前端需求訪談到後端的資料建模。我終於有機會回到當年那個想要橫跨人文與科技橋樑的初心。

關於資料建模的技術和藝術又是另外一個篇章,值得好好聊聊!

資料科學小教室,我們下次見喔!

若是喜歡我分享的內容,歡迎幫我按個拍手,可拍 50下,給我一點鼓勵,或是加入我的粉絲團《程式猿吃香蕉🍌,一起分享軟體知識與心得!

--

--

Sobi
程式猿吃香蕉

唸過幾年文學院,寫過幾年程式,摸過各式各樣大資料小數據,存在雲端還是在本地端的都處理過。喜歡聽故事,也喜歡說故事,經歷成功的資料科學故事也許不多,但有很多成長的故事可以說:)