為何想當資料工程師(Data Engineer)與如何學習Python

前言
本篇文章記錄我想當資料工程師的原因與如何學習python這個程式語言。
我從大學四年級就開始接觸網頁設計,當初學習HTML、CSS、JQUERY、PHP、MYSQL,退伍之後也在網站設計的接案公司上班,不知道從何時開始,心中就一直有著人工智慧這個東西,覺得人工智慧可以讓電腦模擬人腦來思考做事情是一件非常帥的事情,再加上電腦的高效率絕對優於人力,但是礙於平時公司的繁忙與當時主要都在研究網站,所以就把人工智慧繼續放在心裡最深處。
直到我看到一位Youtuber HackBear 泰瑞他發布了一部影片叫做我拒絕了年薪1700萬台幣的工作|60萬美金,他介紹了一家叫C3.AI的公司,這是一家在人工智能領域比較成熟的公司,應用人工智能的領域 非常廣,例如: 製造、金融、零售..等等,特別是聽到非常吸引人的年薪之後再次燃起了我學習人工智慧的小宇宙。

我對人工智慧的想法
我對於電腦為何可以模擬人腦來思考這件事情是完全不知道的,只有在巨匠電腦學習過一節人臉辨識的課,是使用微軟的Azure,只要把照片丟過去給Azure的人臉辨識api即可取得這張照片的相關資料(年紀、性別、有無戴眼鏡...),但是對於如何自己寫出一個可以判斷事物的程式是完全沒有概念。
於是我開始上網找資料與請教別人,某天主管傳了一篇文章給我,文章標題為:做機器學習,數據和模型哪個重要?吳恩達的「二八定律」告訴你真相,原來在做人工智慧、機器學習時「數據」是很重要的:機器學習模型成效不好,應該先處理「數據」, 一個機器學習團隊 80% 的工作應該放在數據準備上,確保數據質量,提供高質量數據讓模型去訓練是最重要的工作。

數據是最重要的,我想先當資料工程師(Data Engineer)
在我知道做人工智慧前最重要的是數據之後我開始上網google相關的工作有那些,有次在輸入關鍵字:數據工程 數據分析 後碰巧發現有一種職位叫「資料工程師 或叫 數據工程師」,這是一個在處理資料的職位,因此我覺得在進入人工智慧前我應該可以先去試試大數據的處理
資料工程師主要是透過程式 自動化 抽取、轉置、載入 資料,也就是所謂的Data Pipeline(資料水管)ETL,其中轉置我覺得可能是最重要與費時的,舉個例子:假如今天去讀取各公司的薪資想統計平均月薪時,可能有些人是開時薪、月薪、年薪.. 當有這麼多種條件都混合時是無法一起統計的,因此我們需要將收集到的資料進行資料清洗,確保資料的完整與一置性,這樣才能讓之後要分析或機器學習的資料正確。

目前我的學習過程
經過我的研究之後,我發現Python這個程式語言對於大數據或是人工智慧都是不錯的一個程式語言,因為有需多相關的庫都是用Python這個程式語言寫的,也非常多公司使用,這邊介紹一下目前為止我的學習過程以及之後想學什麼。
1. python基礎入門
對於已經學過php的人來說要轉來寫python其實不難,而且我覺得寫起來更簡單,基本上我就是買一本入門的書來學習基本語法:
  • 判斷式(if else)
  • 迴圈
  • 變數 (覺得list跟dict挺重要的)
  • 函數與模組
  • 簡單的爬蟲 (requests與BeautifulSoup的應用)
  • Pandas (我覺得這是之後做數據分析很重要的套件,這本書會先介紹一些)
  • 數據圖表matplotlib (把分析的結果視覺化也很重要)
我是購買這本Python初學特訓班學習的,可以在蝦皮買得到 https://shp.ee/h7m6cxq,目前已經看完這本了,看完這本之後對於基本的python語法應該就可以了解了。
2. python大數據特訓班
學習完第一本python基礎入門之後我又買了一本專門針對大數據教學的書,一樣都是同個出版社,這本就沒有基本的python語法介紹,更注重於爬蟲與數據分析:
  • 爬蟲 (除了原本的requests與BeautifulSoup,另外介紹了一個Selenium套件,我覺得Selenium應該是適合用來爬一些畫面是js渲染的原始碼)
  • 正規化 (使用re套件,有些字串可能需挑出某種條件的值,正規化語法我常常參考的網站,測試寫出來的正規化語法可以使用pythex)
  • Numpy (這應該也是數據統計分析很重要的套件之一,對於用來計算平均數、中位數...等等的都很容易)
  • Pandas (現階段的我覺得這是對於數據清洗與分析最重要的套件,我覺得之後工作應該會很常用這個)
  • 接下來後面幾個章節會學習很多的實戰練習,從某個地方爬蟲資料後進行分析,例如從人力銀行爬蟲後計算薪資水平
python大數據特訓班的書我也是在蝦皮買的 https://shp.ee/x4k6nak,目前已經看到後面的實戰練習,看完之後對於Pandas與Numpy的應用更熟悉了。
目前有寫了一個小小的side project,去爬蟲1111跟104的python職缺,分析: 區域職缺分布、學歷分布、薪資分布
3. 透過youtube學習python
除了看書之外我也會透過Youtube學習python,比較常看的有以下幾位Youtuber:
4. 學習Airflow的使用
我已經知道資料工程師需要做的工作為 自動化 抽取、轉置、載入 資料,也就是所謂的Data Pipeline(資料水管)與ETL,其中自動化應該是一件很重要的事情,需要定期排程去執行一些已經寫好的程式,例如每個禮拜去爬蟲資料,這種排程工作除了用原本Linux的Crontab之外,我又找到了Airflow這個更好的工具。
Airflow比Crontab更好去管理工作排程,也支援UI介面,另外Airflow也是configuration as code(基礎設施即代碼),可以把要執行的排程時間寫在程式碼內,不需要另外於Linux主機設定,只要把寫好的Airflow(python語法)程式全部丟到主機上即可,這對於方便性來說是挺不錯的。
目前寫了兩支簡單的程式,一個是普通的排程工作,另一個是有Branch條件的工作,之後值得繼續學下去。

接下來的學習目標
1. Mysql
雖然平常寫網頁也經常使用Mysql的CRUD操作,但是大數據的資料量肯定是比網頁還要大上好幾倍的,對於怎樣優化與更進階的操作需要再進修。
2. Nosql
看完Mysql之後可能會再研究一下Nosql (Not only SQL),應該是會學mongodb
3. Spark
Hadoop跟Spark這兩個名詞在我開始了解資料工程師之後就會時不時看到,這應該是大數據分散式運算很重要的東西
4. Google Cloud Tool
看過非常多公司在應徵大數據相關工作的內容都需要有雲端工具的使用經驗,像是GCP或是AWS,個人可能會先研究GCP平台的雲端工具
可以在 Google線上研討會平台 看到很多雲端工具的介紹,之前看了幾集後看到了下面兩張圖片重點所以紀錄一下:
特別紀錄一下: Google Cloud SQL 是有支援Mysql的,所以好好的學習Mysql應該是沒錯的

結尾
最後還是以成為資料工程師繼續努力學習,第一步先做跟大數據相關的工作。
勉勵自己: 想看到什麼樣的風景就要自己到達那個地方 ; 當非常幸運的時後也要相對努力才行。
其他更多精彩的分享

生活攻略站長

我是 Hank!,我是網站工程師,也是一位生活玩家,這是我的部落格,分享 生活知識、旅遊紀錄、開箱心得、網站架設筆記


My name is Hank, this blog shares Knowledge of life, Travel records and Website setup notes, hope you will like it