BI轉數據挖掘,我的脫產學習路

為了避免文章被誤讀,強調以下幾點:

不贊成裸辭,並建議不到萬不得已不要裸辭,我在另外一個回答說的比較清楚Shawn:22歲非計算機專業工科妹子裸辭轉行程序員,已自學Python兩個月準備開始OJ,給自己一年時間可行嗎?

真不是打廣告的。。。誤解我打廣告的同學請認真讀一遍文章

每個人的基礎和興趣不一樣,學習計劃應該因人而異,我的學習計劃比較亂,請根據自身情況合理制定計劃

18年1月16日 更


? 辭職

簡要交待下背景:本科偏商科專業,研究生(一年項目)入坑IT,畢業後 一年全棧開發+1年BI開發(Business Intelligence,商務智能)工作經驗,無統計背景編程渣(面向對象不熟練,不懂數據結構和演算法)。因為對數據科學的熱愛,2017年6月底辭職,10月收穫數據挖掘/開發offer。

辭職前任職新加坡某地產開發公司BI開發人員,用BI軟體+資料庫,幫助公司建立智能數據平台,其實這份工作蠻有意義的,以前幾周才能搞定Excel報表,利用BI軟體分分鐘推送到boss們的郵箱,不要太方便(但仍舊有領導堅持用Excel複製粘貼。。)。調取數據,簡單的商業數據分析也很方便。但我做的很不開心,傳統公司缺乏創新基因,除了我以外團隊其他同事都是做IT維護的。我渴望精進自己的技能,終極目標是成為一名數據科學家,用數據為公司創造價值。嘗試過一段時間邊工作邊自學後,我發現效率很低,當時的工作太消耗時間和精力。下定決心,我瞞著家裡人裸辭了。

當時我估計自己的積蓄夠撐四五個月,計劃在三到四個月的時間內完成數據科學的學習並找到一份相關工作(後來意識到,當時低估了數據科學的入門門檻,同時對就業市場過於樂觀)。

? 計劃

數據科學是一個大坑,且深不可測,什麼都要懂,什麼都要會。參考知乎跟Quora的相關問答,同時結合The Data Science Venn Diagram,我了解到一個合格的數據科學家需要具備以下五方面的核心能力:

  • 數學和統計(基石)
  • 編程(工具)
  • 機器學習(黑魔法)
  • 行業知識(實際應用)
  • 溝通技巧(知識傳遞)

THE DATA SCIENCE VENN DIAGRAM

同時,為了記錄學習進度,我把要學習的知識點整理歸納做成了技能樹,每完成一個知識點的學習就點亮一片葉子。

數據科學技能樹

? 自學

for month in range(July, November): work_hard()

?? 七月

[關鍵詞] Python編程,線性代數基礎,概率統計基礎,機器學習基礎

1. Python學習

R和Python就好比數據科學裡的倚天劍和屠龍刀,幾乎所有的招聘單位都要求求職者掌握其中至少一門語言。我在研究生時期有R的使用經驗,但非常受不了其怪異的語法風格。反之,Python作為一門通用的編程語言,其簡明規範的語法加上豐富的第三方庫,很早就吸引了我。Python分為2和3兩個版本,如果你像我一樣剛入門學Python,不要猶豫,直接學Python3吧,Python核心團隊已經宣布將在2020年停止支持Python 2。

>>>> 用Anaconda管理Python編程環境

Anaconda 是一種Python語言的免費增值開源發行版,用於進行大規模數據處理, 預測分析, 和科學計算, 致力於簡化包的管理和部署。 Anaconda使用軟體包管理系統Conda進行包管理,通過Anaconda我們可以很方便的對不同項目的Python編程環境進行管理。

>>>> 編輯器選擇

推薦兩個工具:

Pycharm: 非常強大的一款Python IDE,商業版本收費(對學校學生和教職人員免費),社區版本免費

Jupyter Notebook: 相當於R裡面的RStudio,非常適合用來做探索性分析和繪製可視化圖形

>>>> 熟悉Python語法

@廖雪峰 的 Python3編程教程是入門的絕佳選擇,教程後面部分難度跳動略大,別擔心,裝飾器等較難的部分可以先跳過去。認真擼幾遍教程,手動敲幾遍教程代碼後,你已經掌握了Python的基礎語法,可以開始學習更高級的Python編程了。

>>>> 了解pandas的使用

pandas是用Python進行科學計算和數據處理的一個非常強大的API,它提供的DataFrame數據結構以及圍繞它的一系列數據索引函數,統計函數和繪圖函數,讓數據的提取,清潔,讀寫,可視化變得更簡單。

課程鏈接: Introduction to Data Science in Python

此門課程不需要你有太多統計學基礎,高中數學知識夠用了。

課程證書

>>>> 利用Python繪製可視化圖形

無論是初級階段的數據探索分析,還是最終的分析結果呈現,抑或是模型調參,數據可視化都發揮了非常重要的作用。matplotlib, seaborn,bokeh是最常用的幾個可視化庫。

課程鏈接: Applied Plotting, Charting & Data Representation in Python

課程證書

PS: 這門課程可以跳過,以後通過項目中練慣用Python繪製圖形也一樣。

2. 線性代數知識的複習

之前知乎有答主推薦Youtube上一個特別棒的線性代數視頻教程,已經有人搬到了B站,戳:3Blue1Brown

認真看了一遍,就算完成線性代數複習了。。

3. 概率和統計學知識複習

統計學知識是數據科學的基礎,不懂統計很容易陷入知其然不知其所以然的困境,更無法對模型結果給出具有統計意義的解釋。

為了重拾概率統計學知識,我首先快速過了一遍《head first data analysis》,建立對數據分析最基本的認識。接著又閱讀了《head first statistics》,書本結合現實中的例子講解了基本的統計學概念和常見概率分布,這本書值得好好讀一讀。

緊接著上了Udacity的免費課程 Intro to Inferential Statistics,課後練習題幫助我鞏固了之前書上學到的知識點。

4. 機器學習入門

課程鏈接: Andrew Ng Machine Learning

雖然碩士階段上過機器學習的課程,但長時間不用都已經還給老師了。我特別推薦Andrew Ng的這門課程,是斯坦福機器學習課程C229的簡化版。課程內容深入淺出,對數學基礎的要求也不高,你能做簡單的求導和矩陣運算就夠了。課程對傳統機器學習方法的原理和適用場景都作了講解。

區別於其他的機器學習課程,這門課程要求我們用Matlab或Octave動手實現演算法,大部分代碼都給了模板,所以你不用擔心不會Matlab或者Octave。通過動手實現演算法,我們能對演算法的原理有更深入了解,所以千萬別偷懶,作業要認真對待。

?? 八月

[關鍵詞] Udacity機器學習工程師納米學位

1. Udacity 機器學習工程師納米學位

想報名 @優達學城(Udacity)的機器學習納米學位課程不是一天兩天了。前期在Quora等網站上做了不少調研,覺得值得一試,恰好8月份的時候他們有促銷活動,前兩個月只要100美元/月,於是我決定要在兩個月內完成所有課程(事實證明這完全是可行的),這樣總共只需花費200美元。

很多人抱怨Udacity收費過高,尤其是相比Udemy和Coursera等其他網課平台。我個人認為Udacity的課程物超所值,它提供了其他網課平台沒有的服務,比如作業打分,代碼審閱,簡歷修改,甚至還有一對一面試指導等服務。200美金/月就能享受到行業大牛指導,我真心覺得沒有比這更划算的學習投資了。

授課採用小段視頻課程(1~15分鐘)+ 課後練習 + 項目的形式,大部分機器學習知識點都有涉及,而且沒有太難的數學推導,很適合初學者。如果有同學上這個課,一定要重視課後的習題和項目,從我的體驗看,做項目的學習效果要好於看視頻,項目提交後會有專人評閱作業,並提出改進建議。

2. 完善簡歷,Linkedin,Github

我一直提醒自己,不能等覺得自己準備好了才開始找工作,因為學習是無窮無盡的。因此我從第二個月就開始了為接下來找工作做準備。

Udacity的納米學位除了機器學習課程外,還提供職業指導服務,我就是這段時間在他們的幫助下反覆修改和完善了簡歷,Linkedin以及GitHub (老師真的很耐心),這些都為我日後順利找到工作做出了很大貢hian。簡歷是你找工作的名片,記得多花時間修改。

3. 閱讀《Python for Data Analysis》

這本書是pandas的作者寫的,裡面對numpy和pandas的使用做了詳細講解,值得花時間讀讀。但不要企圖把裡面的知識點和API都背下來,最好的學習方法是快速過一遍全書重要章節,以後編程時碰到具體問題再回頭翻書。

到8月底我的納米學位只剩一個深度學習的項目,和最後的大項目沒有完成。所以根據我的經驗,如果每天能保證至少3個半小時的有效學習時間,2個月是完全可以完成納米學位的。

PS: 七,八月這兩個月的學習狀態還不錯,心態也穩。但到了8月末的時候,我變得很焦躁,並因此中斷學習,並買了回國的機票。

?? 九月

[關鍵詞] SQL,資料庫,增長,國內求職

八月底回國後,我先帶著爸爸飛重慶,成都玩了一個禮拜。旅行結束後只在家呆了三天便馬不停蹄飛往北京,這一呆就是二十天。在北京期間一直發燒生病,見了大學畢業後就一直沒見面的幾個好兄弟,也面了幾家互聯網公司,暫且不表。

九月的學習效率非常差,只零零散散的根據國內面試時遇到的問題突擊了部分知識點:

  • 增長黑客方面的知識
  • AB test 及其在業界的應用
  • 閱讀《誰說菜鳥不會數據分析》,熟悉運營分析的基本術語

資料庫知識:

  • 建立資料庫模型的三大範式
  • 數據表索引的創建
  • SQL練習 (Leetcode SQL,The SQL Tutorial for Data Analysis)

?? 十月

[關鍵詞] 演算法/數據結構,新加坡求職

九月底回的新加坡,那個時候開始耐不住性子,甚至心想有人給一個offer就去,不管做什麼。。。

先後拿到了一些面試,包括諮詢公司,互聯網創業公司,石油交易公司,國有企業,大學大數據研究中心。新加坡公司的面試流程不比國內,節奏較慢,整個十月我都是一邊學習,一邊投簡歷,面試的狀態。

1. 演算法和數據結構

我意識到,就算是搞機器學習,數據結構/演算法也非常重要,使用不同的數據結構,效率真的可以千差萬別。但我那個時候已經沒有時間從頭開始啃演算法了,我採取的學習策略是先把最基本的知識點啃下來。

  • 熟悉常見排序演算法原理和運算複雜度
  • 熟悉Python基本數據結構(LIST, SET, DICTIONARY, TUPLE)的索引,插入,刪除,排序等的運算複雜度
  • 熟悉二叉樹,遞歸演算法,隊列,堆棧等

2. Python多線程和多進程的區別及應用

在面試時被問到了,因此花了些時間了解了Multi-Threads和Multi-Processes的區別,以及在Python中如何運用它們加快計算。

3. leetcode簡單題的練習

做了一些簡單的演算法題

4. 個人博客的改版

在面試時我有給面試官看過我博客上寫的幾個項目

5. 鞏固統計學的知識

複習了z統計,t值,f值,anova分析等知識點

6. Kaggle項目

做了兩個簡單的Kaggle項目

7. 一個簡單的爬蟲,自然語言處理項目

用Python爬了新加坡某求職網站數據分析方師的相關崗位,並做了簡單的數據求職市場分析。

?? 十一月

[關鍵詞] 深度學習,Python爬蟲

11月初的時候終於等來了offer!求職期間我一共面了五家公司,最終拿到3個offer(數據挖掘研發工程師,BI開發,數據分析師),另外兩家也進到了最後一輪面試,結果還算不錯。最終選擇了研發工程師的職位,因為新公司文化不錯,並且工作內容是用數據做很有意思的事情。

拿到工作offer後心理壓力小了很多,但學習不能止步。

1. Udacity 深度學習項目

通過這個項目學習了用keras和tensorflow構建深度學習模型來進行簡單的圖像識別。

PS: 到此時我的Udacity機器學習工程師納米學位只剩最後的大項目

2. Python爬蟲

考慮到新工作可能需要寫爬蟲收集數據(入職後發現不需要),準備趁著剩餘不多的自由學習時間加強爬蟲方面的能力。因為以前用R寫過一些簡單的爬蟲腳本,加上有一年的全棧開發經驗,學習Python爬蟲進度還算快。

>>>> Youtube上的爬蟲教程

Youtube上有很多非常不錯的教程資源,入門Python爬蟲我看的Youtube上的 Python Web Crawler Tutorial。講解的特別好,雖然視頻不長,但爬蟲基本知識點都講到了,還示範了如何實現多線程爬蟲。這個教程我是慢慢慢慢啃完來的,直到能在不看源碼的情況下自己複製實現一遍程序。

已經有熱情的同學將視頻搬運到B站了,可惜沒有字幕。。 B站鏈接

如果想直接參考源代碼,戳 Github

>>>> 閱讀《Web Scraping With Python》

內容非常全面,看起來也不難,如果想對用Python爬蟲有更全面的了解,推薦抽時間看看這本書。

>>>> Udemy課程 Scrapy: Powerful Web Scraping & Crawling with Python

從常用的庫Requests, Beautiful Soup 框架Scrapy都有介紹 (Scrapy真的很快)

>>>> 準備udacity的最後一個項目

計劃做自然語言處理方面的項目

? Q&A

? 我不喜歡現在的工作,要不要裸辭自學?

裸辭有風險,辭職需謹慎,請參考我 另一個問題下的答案 。

? Udacity的項目怎麼樣,是不是完成項目就能找到工作了?

不要期望完成一個網上學習項目就能找到工作,Udacity的項目很好,但是離工作要求還有距離,也許有人完成Udacity的項目後就順利找到了工作,但每個人的基礎不一樣,而且人家除了Udacity的內容可能還付出了其他的努力。但如果你問Udacity的課程內容好不好,我會說非常好。

Build up your portfolio to get hired!

? 我應該學習Python還是R

Python和R都是很好的數據科學編程語言。我推薦,如果你是搞統計或者經濟金融,沒有編程背景,也不想往工程方向走,那就學R。反之,假如你已有一定編程基礎,喜愛編程,那我建議你學習Python。當然,時間充足且好學的你兩樣都學吧,你在職場上的競爭優勢將更加明顯。

? 學習到什麼程度可以開始找工作?

我的建議是,從開始自學的那一刻開始,你就應該為找工作做準備了。關注招聘信息,修改簡歷,開始動手做小項目。為什麼呢?因為數據科學這個坑太深了,你永遠感覺有東西要學,永遠覺得自己還不夠強,不要等待,fail fast is better than fail late.

? 我需要投入多少時間才能完成學習?

那我自己舉例,我不是一個自控力強的人,為了創造良好的學習環境,我很少呆家裡學。好在新加坡到處有公共圖書館,免費Wi-Fi的速度也還不錯。我的常規學習時間是從早上10點圖書館開門,一直學到下午六,七點,中間的這八個多鐘頭,我都採用番茄工作法進行記錄,每學習半個鐘頭短休息6分鐘,每學習一個半小時長休息18分鐘。其實,我們每個人的學習效率並沒有自己想像的那麼高。像我自己,一天下來能累積有效學習四個半小時就挺滿意,如果能累積學習6小時我會覺得很有成就感。有效學習時間是純學習時間,不玩手機,不刷社交網路,甚至不起身上廁所。

番茄時鐘記錄表


推薦閱讀:

YARN 分散式資源調度
人工智慧和機器學習會逐漸取代金融和數據分析師嗎?
女生適合做數據分析師嘛?

TAG:数据科学家 | 自学编程 | 数据分析师 |