2017年9月24日 星期日

2017.9.23 學習了一個月的python歷程

2017.9.23 學習了一個月的python歷程

在八月中,參加歡送朋友的聚會,會後歸程,我向友人提出想要學習大數據的想法。之後處理完宿舍後,回到家,JN就開始尋找大數據的相關資訊。透過Google第一個找到的,「Weka」(官方網站)。

在簡單使用Weka過後,JN明白Weka是一套分析數據的軟體。這套軟體能夠找出各數據間的相關性,近而找出影響結果成敗的因素。但是!如果手上沒有資料,那就無法進行數據分析了。為了要取得一套可供分析的資料,於是JN找到了Python,想藉Python抓取到一份資料,裡面至少有上千筆的記錄,完成一輪無法透過人力逐一蒐集資料(如果人力允許,就用excel即可應付),必須得透過程式才能完成的數據分析。




在大四的時候,JN跟系上導師聊天,導師那時就跟我提過Python,雖然系上都用R跟SAS作數據分析,不過系上教的R實在是有夠無趣而不令人想學習。Python也有一套數據分析的套件。根據這一個月體驗過後,JN覺得Python是很棒的語言,當然也有很多使用Python進行開發,像是Google、FB等。

Python的優點是甚麼?更簡單更人性化的編寫方式。JN接觸過這其他幾種程式語言:C++、C#、Java、Javascript,JN發現越新的語言,在函式跟變數的定義上越簡單。JN接觸到了Python,變數不用先宣告,函式也不用指定輸入的變數類型,每句結束不用;(分號),而是用縮排,這也使得程式碼看起來整齊多。當然還有很多不一樣的地方,不一一敘述。

JN的開發環境是Visual Studio 2017,並安裝了Anaconda,然後在Visual Studio的python環境使用Anaconda去編寫。JN認為,程式語言得按教科書按部就班學習是很無聊的,光是一個變數加減就能寫三頁,然後一本書有上千頁,也不知道讀了那麼多指令能用在哪裡。

任務導向式的學習,對於解決問題有很大的幫助。因為要完成任務,所以必須要學會相關的指令,不然無法達成目標。於是JN先不急著抓下一份上千筆的資料,而是先依序慢慢學習抓資料。以下是JN的Python任務:

抓ptt表特版→抓ptt西斯版→抓dcard西斯版→抓食譜網的食譜→抓股市即時資料

這流程的任務的困難度是逐漸增加的。不過一開始,JN也不熟悉Python真正強大的地方,沒有看過任何Python書籍,對於完成任務要怎麼寫是毫無頭緒的。其實啟發JN能寫出網路爬蟲的,是看了這一個Youtube頻道(大數軟體有限公司),裡面有很多關於python爬蟲的影片,影片不長,內容精要,照著做就能順利抓下資料,是一個很好的範例去參考。看這影片教學,你不會學到其他沒有用到的東西,從影片學到的東西都是直取目的會用到的。

很快地,就能碰到爬蟲所要使用的指令與套件。對於JN這種沒有資歷的人,花上了好幾天的學習,才弄懂程式碼的運作方式,像是BeautifulSoup(BS)套件是能夠剖析HTML(HyperText Markup Language)。HTML編寫是用標籤< >為架構,瞭解HTML的架構的特性,用BS就能取出要的部分。

這篇網誌也不是Python教學,所以想學Python還是去看看影片或是書會比較能瞭解Python要如何使用。

到了現在,JN只有看了幾本書,不過都不是python的。對於初學者來說,以JN這種任務導向型的人,蠻推薦o'reilly的head first系列去看,因為書中每一章節的例子都是要解決問題,而且書中的程式碼難度不高,是很平易近人的。初學者不會一開始就被教材難度的門檻撞死,才能學到東西並繼續延伸,之後若有興趣就再去讀其他講說更深入的書籍。

我的Python學習歷程(補充)

1.在「抓ptt表特版」時,學到了BeautifulSoup套件、Request套件、Shutil套件(儲存圖片)、re套件(過濾字串)。

2.在「抓ptt西斯版」時,學到了Request中的session、post,os套件(創立資料夾與切換工作目錄)。

3.在「抓dcard西斯版」時,把之前所學到的精良化,節省程式碼,更瞭解網頁的運作模式,回傳資料的類型。

4.在「抓食譜網的食譜」時,學到了Pyodbc(把資料寫進資料庫)、SQL指令、以及資料類型。

5.精良化「抓ptt表特版」,學到了多線抓取,python不再按部就班的一篇篇文章進去抓取、退出再換下一篇。提高的抓取效率。

6.在「抓股市即時資料」時,學到了Selenium,它能模擬瀏覽器做動作。GTTS套件(使用google語音)、Pygame套件(播放聲音)。