筆者 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:
答案很簡單!你應該跟她說:『我就愛你的身分證字號啊!』
一陣雄壯的笑聲在安靜的午後爆開,阿宅工程弟兄拍腿大叫:
對啦對啦,因為身分證是唯一值,獨一無二,絕對不重複!!
偉哉資料科學部門,只有被資料長期荼毒的工程師阿宅們,才想得出來為了要表現只愛你一個的專一,連身分證字號都拿出來了…
🐧🐧🐧••••••••• 當年在旁邊參與這場對話的我,居然地聽懂了阿宅之間的冷笑話,然後也不爭氣地笑噴。
各位,先別急著關心「到底誰會買單『表達唯一的愛,只能愛上身分證字號」這個爛答案啦?」只是拿來當個引子,正好接著看看資料科學家怎麼運用量化的概念,解決各種世界上的問題。(雖然不知道那位宅宅工程師這麼說完,問題到底解決了沒有…)
▍萬事萬物都必須要被量化的描述
資料科學世界中,一首歌,一部電影,一個人,一幅畫,一筆訂單,一次點擊行為,都必須變成一筆一筆的資料,以結構化格式存進電腦裡。
那麼,要怎麼開始建立量化資料呢?第一步,我們需要以結構化的方式對物件進行描述。簡單說來,就是要幫物件建立格式化的特徵,才能給電腦運算。舉例來說,我們可以說一個人「身高很高」但是要存進資料庫的時候,問題就來了:身高高,是跟誰比?高跟矮之間的差別是多少?兩個人都標示「很高」,那誰比較高呢?所以要放進資料庫的資料裡面,我們會定義「身高 = 180cm」這樣的紀錄來表現客觀的身高高度,而不是使用「很高」這種文字描述。
記得兩個重點:
❶ 什麼形式儲存?
現今資料科學分析最常使用的是關聯表格,非技術背景的讀者可以先用試算表(例如Excel)資料表一行一行的格式來想像一下。
❷ 儲存什麼資訊?
就是俗稱的欄位,用試算表來類比的話,就是每一行紀錄的不同格子,裡面會隨著我們的資料分析需要,放入不同的資料(例如第一格放身分證字號,第二格放名字,接著是身高體重…)。
就以上述工程師對話來做個練習吧!
如何儲存「可愛聰明又漂亮,還很年輕的女生」?
首先,我們可以在資料庫開立一個新的關聯式資料表,來記錄身邊的朋友們,就先把名字叫做 「Friends」吧!再將這些描述人的特質,變成一個一個欄位,以符合結構化資料的標準。
「可愛聰明又漂亮,還很年輕的女生」可以用以下五個欄位來形容:性別、個性、年齡、外表、智商。
- ✔️ 女生對應到性別欄位
- ✔️ 可愛對應到個性欄位
- ✔️ 年輕對應到年齡欄位
- ✔️ 聰明對應到智商欄位
- ✔️ 漂亮對應到外表欄位
接下來,再套入其他朋友的敘述,檢視是否可以完整記錄這些人的樣貌。比方說:「聰明又帥,身高180的暖男」
- ✔️ 男生對應到性別欄位
- ✔️ 暖對應個性欄位
- ✔️ 帥對應到外表欄位
- ✔️ 聰明對應到智商欄位
- ❓ 身高180對應到…
我們就會知道還少了一個欄位:身高,再加入新欄位即可。
最後,反覆將腦海中所知道的朋友特質輸入關聯式資料表。呈現結果如下圖:
完整記錄所有朋友的特質之後,我們就有了一張資料表:Friends,作為日後查詢運算資料的依據啦!
▍運算量化資料:SQL
量化資料之後妥妥地存在資料表裡了,要回答的是女孩兒的各種反問:可愛的女生?可愛又年輕的女孩?符合這些條件的女生都不只有一個啊!首先,先來計算可愛的女孩有幾個好了。
資料科學家如何接招呢?在資料科學的世界裡,最常使用的程式語言之一:SQL,閃亮登場!!!
(SQL怎麼唸呢?我都念「SQL~」….不是啦~)
可以拆開來唸 S!Q!L!或者念/ˈsiːkwəl/ 西闊~
好的,回到主題。
怎麼使用SQL查詢資料表,回答可愛的女生有幾個?
對於人腦來說,這樣的搜索常常跟靈感有關,今天問跟明天問答案不盡相同,但是對於電腦來說就不是這樣子的,因為我們都已經結構化資料存起來啦。程式語言就是這樣一板一眼的,只有符合格式,電腦才會聽你的話給出正確答案喔。
請各位務必注意以下三點:
❶ 哪一個表格可以回答的你的問題?
資料表 Friends(朋友的資料都放在這個資料表裡,別的資料表裡找不到)
❷ 顯示的答案是什麼?
某幾個欄位?還是一個欄位的統計數據:計算個數?加總?平均?還是最大值?SQL語言有提供一組內建函數,可以幫我們做以上列出的各種統計運算。在這個例子中,我們要計算的是個數,對應到的SQL函數是COUNT(*)(有支援哪些函數呢?可以上網自己查看看喔)
❸查詢條件:可愛的女生
這種時候要注意的是,不同的欄位放的資料性質是各自獨立的,例如如果你要找女生,這個資料只會放在「性別」欄位,而不會放到「個性」欄位裡,弄錯的話就查不到資料了!
所以,問句轉換成SQL語法,會是:
來看看語法結構與問句的對應會更加清楚。
掌握了這個概念之後,就算女孩兒不斷地舉一反三各種特例:可愛又聰明漂亮
,可愛漂亮
…… 我們也可以透過調整查詢條件來回答,比方說:
- ⭕
可愛漂亮
➡️ WHERE 個性= ‘可愛’ and 外表= ‘漂亮’ - ⭕
可愛又聰明漂亮
➡️ WHERE 個性= ‘可愛’ and 外表= ‘漂亮’ and 智商= ‘聰明’
手把手教學到這裡,先暫停一下工程思考,請個性耿直的各位多想一下:女孩為何不厭其煩地問呢?
🤔🤔🤔🤔
很久很久以前,我很小很小的時候,紅透半邊天的周華健這樣唱著:
這首歌真的很好聽,哀怨地自問自答,尤其這句貫穿整首歌曲:你喜歡的會有幾個?聽了心都揪成一團,問世間情為何物,這真的是好揪心呀!
不過,回到本文正題,其實女孩想要聽到的唯一正解就是:
「我愛的只有妳一個!」
啊~~怎麼辦?方才建立的Friends 資料表,不管怎麼修改查詢條件,都不能保證只有一個啊!!!方才我們一一鍵入的欄位都有可能重複:
所以目標就是找到不會重複的資訊,而身分證字號是不會重複。
所以要好好的回答女朋友的問題:「你喜歡怎麼樣的人?」找出那個最重要的「唯一解」在資料科學的量化世界裡,就可以簡單用這招啦!
唯一解:
當在儲存結構化資料時候,為了要確保資料不會重複輸入,要加入一個欄位,每一筆資料都會有一個獨一無二的值,稱為主要鍵值(Primary key,簡稱PK,通常會在產生資料表的時候加上設定,以流水號的方式自動產生)拿剛剛提到的宅宅實際案例來說,要記錄人的最適合主要鍵值,那就是身分證字號了,因為每個人的身分證字號都獨一無二,最適合拿來當作PK囉!
總結一下,兩個步驟!
Step 1. 量化資料
將各式各樣的朋友建立為關聯式資料表Table: Friends
Step 2. 查詢資料
確認問題並撰寫查詢條件:答案只能有女朋友一個,故使用身分證字號(唯一值)。
現在回頭看上述案例,是否恍然大悟!!
▍資料建模,是技術💻,也是藝術🎨
😱😱😱 OMG,為了讓大家了解資料科學家怎麼處理現實世界的問題,我居然連同事的秘密都出賣了。
但不得不說,將真實世界翻譯成結構化資料,其實是很有趣的作業!遙想當年我還在人文科系,接觸到資料科學的入門作業就是撰寫描述資料的資料 ( Metadata ),聽起來很拗口,其實就是練習怎麼描述一首歌,一本書的欄位練習,紀錄歌曲和書本我們都已經相當熟練,但真實世界的物件如此多元豐富,怎麼描述茶葉,蝴蝶,圖片...,當年那堂課的確像是敲門磚,讓我決心要踏進了這迷人的行業,就從人文的角度來看資料科學怎麼解決問題!
進入實務的工程領域之後,當年覺得好玩的作業根本沒有派上用場!因為初學者只能乖乖使用別人定義好的結構化資料 ,比方說:訂單資料。
熬了若干年,寫了很多程式,終於有機會幹一番大事,比方說:新 App 上市之前,老闆交付你做出推薦系統。所有一切就從如何翻譯現實世界開始:從前端需求訪談到後端的資料建模。我終於有機會回到當年那個想要橫跨人文與科技橋樑的初心。
關於資料建模的技術和藝術又是另外一個篇章,值得好好聊聊!
資料科學小教室,我們下次見喔!
若是喜歡我分享的內容,歡迎幫我按個拍手,可拍 50下,給我一點鼓勵,或是加入我的粉絲團《程式猿吃香蕉🍌》,一起分享軟體知識與心得!