如何高效入門數據科學?
來自專欄 玉樹芝蘭
鏈接散落的教程文章,做個詳細的導讀,助你更高效入門數據科學。
問題
2017年6月以來,我陸續在自己的簡書專欄《玉樹芝蘭》里,寫了一系列數據科學教程。
這源於一次研究生課編程工作坊嘗試。受閻教練的創新思維訓練營啟發,我在課後把詞雲製作流程詳細記錄轉述,分享給了大家。
沒想到,這篇《如何用Python做詞雲?》受到了讀者們非常熱烈的歡迎。
此後,一發不可收拾。
應讀者的要求,結合我自己的學習、科研和教學實踐,我陸續分享了更多與數據科學相關的文章。
讀者越來越多,我收到的問題也愈發五花八門。
許多讀者的問題,我其實都已經在其他的文章裡面講解過了,因此有時用「請參考我的另一篇文章《……》,鏈接為……」來答覆,也幫助讀者解決了問題。
在建構同理心(empathy)之前,估計我會問出這樣的問題:
他們為什麼不翻翻我的其他文章呢?
但現在,我能感受到他們的疑惑:
我哪裡知道你寫過另一篇文章?
散落在各處的文章,不容易系統學習和檢索。於是我在2017年11月,把寫過的數據科學系列教程彙集到了一起,做了個索引貼。
我把這個索引貼鏈接置於每篇新教程的末尾,並不斷更新維護。
然而,這樣簡單的標題索引,依然無法滿足許多讀者的需求。
有的讀者跟著教程做完了詞雲,發現如果對中文文本做分析,就會出現亂碼:
這時候,你該怎麼辦呢?
更進一步,如果你希望把詞雲的外邊框變成指定的形狀,又該如何操作?
光看標題,你可能不容易發現哪一篇文章會幫助自己解決這些問題,甚至可能會選擇放棄。
我決定做這個導讀。
這篇文章,不再是從任務出發,簡單羅列文章標題和鏈接;而是從先易後難的認知習慣,重新組織文章順序,簡要介紹內容,提示可能遇到的問題。
希望對你的學習能有幫助。
基礎環境
大部分的教程,都是在 Python 運行環境 Jupyter Notebook 下運行和演示。
安裝這個運行環境,最簡單的方法,就是安裝 Anaconda 集成套件。
請先收看這個視頻教程《如何安裝Python運行環境Anaconda?(視頻教程)》,自己嘗試安裝Anaconda,運行起第一個Jupyter Notebook,輸出一個「Hello world!」出來。
有了這個基礎,你就可以嘗試不同的數據科學任務了。
我的建議是先做詞雲。
因為簡單,而且有成就感。
詞雲
跟著圖文教程《如何用Python做詞雲?》一步步執行。用幾行Python代碼,你就可以做出這樣的詞雲來。
我還專門把它升級做成了視頻教程《如何用Python做詞雲?(基礎篇視頻教程)》,供你觀看。
參看這篇文章《如何用Python做中文分詞?》,你就能做出這樣的中文詞雲。
如果你希望改變詞雲邊框外觀,就參考這篇文章《Python編程遇問題,文科生怎麼辦?》的最後部分。
到這裡,你已掌握Python運行環境安裝、文本文件讀取、常見軟體包調用、可視化分析與結果呈現和中文分詞等基本功夫了。
回頭望去,是不是成就感爆棚呢?
虛擬環境
細心的你,可能已經發現,圖文教程和視頻內容並不完全一致。
視頻教程目前全系列採用Python 3.6版本,未來得及重新整理的詞雲圖文教程,展示的確實2.7版本Python。
為什麼呢?
因為隨著技術的發展,Python已經逐步要過渡到3.X版本了。
許多第三方軟體包都已經宣布了時間表,儘快支持3.X,放棄2.X版本的支持。
才半年,你就可以感受到技術、社群和環境的變化之快。
可是目前某些軟體包,依然只能支持2.X版本Python。雖然這樣的軟體包越來越少了。
你需要暫時做個「兩棲動物」,千萬不要束縛自己,因為「立場原因」固執著不肯用低版本Python。這樣吃虧的是自己。
怎樣才能做個「兩棲動物」呢?
辦法之一,就是使用Anaconda的虛擬環境。可以參考《如何在Jupyter Notebook中使用Python虛擬環境?》。
你初始安裝版本針對Python 2.7的Anaconda,並不妨礙你快速建立一個3.6版本Python的虛擬環境。
有了這個秘籍,你就可以在不同版本的Python之間左右逢源,遊刃有餘了。
自然語言處理
下一步,我們來嘗試自然語言處理(Natural Language Processing, NLP)。
情感分析,是NLP在許多社會科學領域熱門的應用之一。
《如何用Python做情感分析?》這篇文章,分別從英文和中文兩個案例,分別採用不同的軟體包,針對性地解決應用需求。
你只需要幾行代碼,就能讓Python告訴你情感的取向。是不是很厲害?
有了情感分析做基礎,你可以嘗試增加維度,對更大體量的數據做分析。
增加時間維度,就可以持續分析變化的輿情。
《如何用Python做輿情時間序列可視化?》這篇文章,一步步指引你在時間刻度上可視化情感分析結果:
這圖難看了一些。
不過我們需要容忍自己起步時的笨拙,不斷迭代與精進。
希望一出手就滿分,對極少數天才,確實無非是日常。
但對大多數人,是拖延症的開始。
你可能迫不及待,嘗試換自己的數據做時間序列可視化分析。
不過日期數據如果與樣例有出入,可能會出現問題。
這時候,不要慌,請參考《Python編程遇問題,文科生怎麼辦?》的第二部分,其中有詳細的錯誤原因分析與對策展示。
看過後,分析結果圖也會迭代成這個樣子:
到這裡,你對情感分析有點兒感覺了吧?
如果你不打算使用第三方提供的情感分類演算法,打算自己動手訓練一個更為精確的情感分類模型,可以參考《如何用Python和機器學習訓練中文文本情感分類模型?》一文。
剛剛這些情感分析,其實只是極性分析(正面vs負面)。但是我們都知道,人的情感其實是多方面共同構成的。
如何從文本中,分解出多維度的情感特徵變化呢?
《如何用Python和R對《權力的遊戲》故事情節做情緒分析?》一文分析了《權力的遊戲》中某一集劇本,你會獲得這樣的結果:
如果你是《權力的遊戲》劇迷,請告訴我,這張圖描繪的是哪一集?
先猜猜看,然後再打開文章,跟結尾做對比。
這篇文章的可視化分析部分,用的是R。
R也是數據科學領域一個非常受歡迎的開源工具。它的通用性和熱度可能不如Python(畢竟Python除了數據科學,還能幹許多其他的事兒),但是因為有統計學界諸多科學家的擁護和添磚加瓦,因此有非常好的一套生態系統。
如果你希望對單一長文本提取若干重要關鍵詞,該怎麼辦呢?
請你閱讀《如何用Python提取中文關鍵詞?》一文。它採用辭彙向量化、TextRank等成熟的關鍵詞提取演算法來解決問題。
課間答疑
隨著知識、技能和經驗的積累,你的疑問可能也逐漸增多了吧?
有的同學對這種教學方式有疑問——案例挺有意思,也很簡單易學,但是怎麼把它用到我自己的學習、工作和科研中呢?
我為你寫了一篇答疑說明,叫做《文科生如何高效學數據科學?》。文中提到了以下幾個方面:
- 如何指定目標?
- 如何確定深度?
- 如何加強協作?
提到協作,就不能不說Github這個全球最大的開源代碼託管倉庫了。
在咱們的教程里,也多次使用Github來存儲代碼和數據,以便你能夠重複運行教程中的結果。
《如何高效入門Github?》一文提供了文檔和視頻教程資源,希望能對你掌握這個數據富礦提供幫助。
不少讀者在這個階段常提出這個問題:老師,想學Python,推薦本書唄。
看來,你已經明白了Python的好處了,對吧?
《如何高效學Python?》幫助你給自己的學習特性做出了分類。根據分類的結果,你可以選擇更適合自己的學習路徑。
推薦的教材,不僅包括書籍,還包括MOOC。希望這種充滿互動的教學方式,對你入門數據科學有幫助。
機器學習
你可以嘗試做更進一步的分析了。
例如機器學習(Machine Learning)。
機器學習的妙用,就是在那些你(其實是人類)無法準確描述解決步驟的問題上,讓機器通過大量案例(數據)的觀察、試錯,構建一個相對有用的模型,來自動化處理問題,或者為人類的決策提供輔助依據。
大體上,機器學習主要分為3類:
- 監督學習(Supervised Learning)
- 非監督學習(Unsupervised Learning)
- 強化學習(Reinforcement Learning)
目前本專欄介紹了前兩類的一些例子。
監督學習與非監督學習最大的差別,在於數據。
數據已有標註(一般是人工賦予標籤),一般用監督學習;
數據沒有標註,一般只能用非監督學習。
監督學習部分,我們舉了分類(classification)任務的例子。
《貸還是不貸:如何用Python和機器學習幫你決策?》中的案例,選擇了貸款審批輔助決策。
具體的機器學習演算法,是決策樹(decision tree)。
有同學表示,繪製這棵決策樹的時候,遇到了問題。
這主要是因為運行環境的差異和依賴工具的安裝沒有正確完成。
《Python編程遇問題,文科生怎麼辦?》的第一部分,對這些問題做了詳細的闡述,請根據列出的步驟嘗試解決。
不僅如此,這篇文章展示給你了一種任務導向的學習方式,期望它可以提升你Python語言和數據科學學習效率。
非監督學習部分,我們講述了《如何用Python從海量文本抽取主題?》。
文中用一種叫做LDA的聚類(clustering)方法,幫你從可能感興趣的浩如煙海文檔中,提取出可能的類別,對應的主要關鍵詞,並且做可視化處理。
文中提及了停用詞(stopwords)的處理,但是沒有給出中文停用詞的具體應用方法。
《如何用Python和機器學習訓練中文文本情感分類模型?》一文中,我不僅對停用詞處理方式進行了詳細的介紹,而且把監督學習Naive Bayes模型應用於情感分析,手把手教你如何訓練自己的情感分類模型。
深度學習
深度學習,指用深度神經網路(Deep Neural Network)進行機器學習。
相對於傳統機器學習方法,它使用的模型結構更為複雜,需要更多的數據支持,並且訓練起來要消耗更多的計算資源和時間。
常見的深度學習應用,包括語音識別、計算機視覺和機器翻譯等。
當然,新聞裡面最愛提的,是下圍棋這個事兒:
我們提供的案例,沒有那麼挑戰人類智能極限,而是跟日常工作和生活更加相關。
《如何用Python和深度神經網路發現即將流失的客戶?》為你介紹了深度神經網路的基本結構。
這篇文章通過客戶流失預警的例子,講述了使用前饋神經網路進行監督式學習的基本樣例。
實際操作部分,我們採用Tensorflow作為後端,tflearn作為前段,構造你自己的第一個深度神經網路。
《如何用Python和深度神經網路發現即將流失的客戶?》一文末尾還為你提供了進一步掌握深度學習的相關資源。
如果你需要安裝Tensorflow深度學習框架(Google出品哦),歡迎先閱讀這篇《Tensorflow執行pip升級安裝的坑》。
有了深度神經網路的基礎知識,我們折騰計算機視覺。
《如何用Python和深度神經網路識別圖像?》一文,舉例分類哆啦a夢和瓦力這兩個機器人的各種花式圖像集合。
卷積神經網路(Convolutional Neural Network, CNN)這時就大放異彩了。
這篇文章,幫你分析了卷積神經網路中,不同層次(Layer)的作用。
我們盡量避免用公式,而是用圖像、動圖和平實簡潔的語言描述來為你解釋概念。
我們使用的深度學習框架,是蘋果的TuriCreate。你會調用一個非常深層次的卷積神經網路,幫我們遷(tou)移(ji)學(qu)習(qiao),用很少的訓練數據,獲得非常高的分類準確率。
有的讀者自己嘗試,測試集準確率居然達到100%(視運行環境不同,有差異),大呼過癮。可同時又覺得不可思議。
為了解釋這種「奇蹟」,同時解答讀者「如何在私有數據集上以圖搜圖」的疑問,我寫了《如何用Python和深度神經網路尋找近似圖片?》。
希望讀過此文,你對遷移學習(Transfer Learning)有了更深入的認識。
如果這兩篇文章學完,你對卷積神經網路的基礎知識依然不是很清晰,也沒關係,因為我的研究生們遭遇了同樣的問題。
為此,我專門錄製了一段講解答疑視頻。
這段視頻里,我主要談及了以下幾個方面:
- 深度神經網路的基本結構;
- 神經元的計算功能實現;
- 如何對深度神經網路做訓練;
- 如何選擇最優的模型(超參數調整);
- 卷積神經網路基本原理;
- 遷移學習的實現;
- 疑問解答。
希望看過之後,你再從論文里讀到計算機視覺的神經網路模型,就可以遊刃有餘了。
另一批作者又來發問了:
老師,我用Windows,死活就是裝不上TuriCreate,可怎麼辦?
我替他們著急的時候,恰好找到了一個寶貝。於是寫了《如何免費雲端運行Python深度學習框架?》。
免費使用GPU,用極為簡易的操作,就可以在Google雲端Linux主機上部署和執行蘋果深度學習框架……
聽著是不是像做夢啊?
感謝Google這家為人類知識積累做出貢獻的企業。
數據獲取
學完深度學習之後,你會發現自己變成了「數據饑渴」症患者。
因為如果沒有大量的數據,就無法支撐你的深度神經網路。
如何獲取數據呢?
我們先要區分數據的來源。
數據來源很多。但是對於研究者來說,網路數據和文獻數據比較常用。
目前主流(合法)的網路數據方法,主要分為3類:
- 開放數據集下載;
- API讀取;
- 爬蟲爬取(Crawling)。
《如何用Python讀取開放數據?》一文中,我為你講解了如何把開放數據集下載並且在Python中使用。
這篇文章介紹了常見的CSV/Excel, JSON和XML等開放數據文件格式的讀取、初步處理和可視化方法與流程。
如果沒有開放數據集整理好供你下載,網站只提供API介面,你該怎麼辦呢?
《如何用R和API免費獲取Web數據?》一文,我們使用R讀取維基百科API,獲得指定條目的訪問數量記錄,並且做了可視化。
如果沒有人為你整理好數據,網站也沒有開放API給你,那你就得「直接上大鎚」了。
《如何用Python爬數據?(一)網頁抓取》一文為你介紹了非常人性化、易用的網頁抓取軟體包 requests_html
,你可以嘗試抓取網頁內的指定類型鏈接。
文獻數據可能存儲為各種格式,但其中pdf格式較為常見。
應諸多讀者的要求,我寫了《如何用Python批量提取PDF文本內容?》。
你可以批量提取pdf文檔的文本內容,並且進行各種分析。
文中的分析相對簡單,我們只是統計了文檔字元數量。
但是發揮想像力,你可能會做出非常有價值的分析結果。
希望這些文章可以幫助你高效獲得優質數據,支撐起你自己的機器學習模型。
小結
本文把《玉樹芝蘭》專欄目前的數據科學類文章進行了梳理和歸類,建立了鏈接,以幫你看清它們之間的邏輯依賴關係。
專欄中,數據科學類文章主要圍繞以下方面展開:
- 環境搭建;
- 基礎入門;
- 自然語言處理;
- 機器學習;
- 深度學習;
- 數據獲取;
- 答疑。
你可能早已發現,我們還有很多話題,沒有來得及涉及。
別著急。
本專欄會持續添加新的內容。這篇導讀也會不定期更新。歡迎關注。
討論
本專欄數據科學類的文章里,你更喜歡哪個方面的主題?除此以外,你還希望讀到哪些內容?歡迎留言,把你的經驗和思考分享給大家,我們一起交流討論。
如果你對我的文章感興趣,歡迎點贊,並且微信關注和置頂我的公眾號「玉樹芝蘭」(nkwangshuyi)。
如果本文可能對你身邊的親友有幫助,也歡迎你把本文通過微博或朋友圈分享給他們。讓他們一起參與到我們的討論中來。
推薦閱讀:
※numpy.random.seed和Sklearn中RandomState的解析
※用Cython來提高Python代碼速度 [一]
※哪個機器學習演算法能在百年後繼續被使用?-你猜?
※年薪超70萬,為什麼數據科學家們還都忙著找新工作?
※Python 中的科學計算工具:Jupyter Notebook