想要學習大數據編程,一定不能錯遺漏的六大要點!

最近也到了這個高考填志願的時候啦,有不少小夥伴們填報了計算機專業,即將走向程序員的道路,但是呢,對於這個學習上也是有非常多的困惑,我要學哪些課程?我為什麼要學習如高數、離散數學、線性代數、概率論等課程?

覺得文章對你真有的幫助的話,也可以關注小編,私信【學習】還領取一整套的大數據學習資料哦

想要學習大數據編程,一定不能錯遺漏的六大要點!

這個問題也是之前困擾了我很久的問題。不過我現在想通了,對於【高數、離散、線性代數、概率論】等課程,很好解釋,做算法的同學肯定知道為啥要學習這些課程。機器學習中會大量用到上述提到的課程,所以會比較好理解。對在校生而言,學校開設的很多課程我們不知道為什麼要學,我們很疑惑,不知道學它有什麼用,這個時候我們就會很糾結,還會產生牴觸情緒。這很正常,因為我們學習得不夠深入,自然不能理解它們的用處。

在我看來,大學本科課程更多的是面向“面”的教學,即什麼課程都教給你一些,但是又講得不那麼深入;而工作或者讀研,更多的則是面向“點”的學習,用到的知識更專。本科時,學校也不知道你以後是去搞算法、還是搞架構、還是搞服務器開發,甚至去搞硬件,所以學校需要你學很多課程,至少有個瞭解。對學生來說,一方面可以從中選擇自己感興趣的點;一方面也可以對未來的就業方向有些啟發。所以即使像數電、模電等課程,雖然之後可能用不著,但是你也要學,並且會花費大量的時間。雖然你最後不一定去搞硬件,但是這些課程也會讓你更容易去理解一些知識,比如cpu中的邏輯器件。

如果你在大一的時候就有一個明確的定位,知道自己今後想從事哪方面的工作,課程與課程之間是可以調一下優先級的。不過像大學物理,這種課程確實是對編程沒有幫助,但是像我前面所說的,大學教育更注重廣度,大物等課程可能就是為了給你普及生活常識吧。

其實,大學教育的問題是普遍存在的,我認為我們學習一項技能的時候,應該採取的是項目驅動式學習,即需要用到什麼東西時不會了再去學,而不是先填鴨式的都填進腦子,並且在學習的過程中我們還不知道它這是幹嘛用的,等之後用到了,甚至不記得自己學過,反而查資料才會想起:哦,原來我之前學的xx科目是這個用處啊,可是我當時並沒有好好學。很多時候學生時間的浪費可能還是要怪老師、怪學校,他們一開始沒給我們做好充分的課程介紹。所以,在經過比較多的編程和項目實踐後,我認為一個比較好的學習方式是,改良版的項目驅動學習法。即:

理論與實踐相結合

學習一段時間,做個小項目,將做項目遇到的問題記下來,針對性地學習相關知識,然後再實踐,再學一段時間理論,讓知識成網狀發射狀地變大。當然,項目驅動式學習有一個弊端,就是每次學習的知識都是項目所需要的,很零碎、不成體系,所以需要改良,即在採取項目驅動學習法的時候每天抽一段時間去完整地讀一本書,或者一個相關問題的完整介紹,這樣就很容易把一些知識成體系地串起來。這樣一段時間下來,慢慢的,你就知道我們為什麼要學那麼多科目,學這些科目能幹什麼。

為了表達地更加形象,我就舉一個小例子,我個人對python、數據分析,以及機器學習等內容比較感興趣,就從數據獲取開始,我講講我這兩個月做了什麼東西。

覺得文章對你真有的幫助的話,也可以關注小編,私信【學習】還領取一整套的大數據學習資料哦

談到數據獲取,可能最容易想到的是爬蟲,爬蟲是一個在知乎上被說爛了的話題,所以我不想多說它是什麼。很多時候有人覺得爬蟲簡單,為什麼呢,因為有現成的框架,所以獲取少量的數據就比較容易。但是當你需要爬取的數據很大的時候(比如我之前抓取了知乎500萬用戶的數據,在下班的時間、用自己家裡普通的pc,計算機性能並不是那麼好,比不上服務器,又要在不被封IP的情況下抓到這麼大量的數據,然後對數據進行清洗,最後還要可視化展示),使用現成的爬蟲框架就並不是那麼容易實現了。況且,我需要抓很多數據源,並不是一錘子買賣。所以我選擇去開發一個系統,即在現有的框架下進行二次開發,搭建一個屬於自己的爬蟲系統,並植入一些算法。我在系統中添加了很多中間件,直到現在,它還可以在10分鐘內就部署一個能抓取大量數據的爬蟲應用。當然,這個過程也遇到了不少麻煩,我就簡單講講,怎麼去攻克一個個問題。

下面先給出一個樹形圖,從上往下每一個圈都代表了學習過程中遇到的難點,如果你現在看不懂,沒關係,我想告訴你的是一種梳理知識的方法:

想要學習大數據編程,一定不能錯遺漏的六大要點!

如上圖所示,就是一個項目驅動式學習的例子,我們的目的是為了獲取數據,所以選擇了爬蟲:

00001. 爬蟲可以理解為一個簡單的過程:發送request,獲取response,然後提取數據。這個過程會涉及到網絡,是發送http還是https請求;目標網站是否需要登錄,是post請求還是get請求,從這條線,衍生出了一條對網絡進行學習的路徑。獲取到網頁之後,如果不是結構化的數據,可能返回的是一個html源代碼,那麼可能就需要了解dom,或者html頁面解析的知識,甚至需要了解一下前端開發。在抓取的過程中,經常會遇到數據中途不能被爬取的情況,一般是IP被封禁了,那麼可能又要用上代理,代理是什麼呢?http,https代理能不能混用呢?如何構建一個代理池呢?這裡又有很多要學習的東西。還有可能遇到的情況是,抓下來的數據是加密的,需要通過js解密,這時候就要了解一下js,如何用爬蟲模擬瀏覽器進行抓取。除此之外,如果抓取的頻率不對,很多數據源會給你假數據,這就是一些經驗問題了,本文不是技術文,所以就不多討論。當解決了上述問題後,我們好像可以拿到一些數據了,但是當數據大起來,問題又複雜了,你可能需要使用分佈式抓取了,這時候你可能需要了解一下redis,當request產生的速度大於其消費的速度之後,你的任務隊列可能爆炸,所以這裡又涉及到算法和數據結構的應用了。數據量上去之後,把數據寫在文件裡面是不靠譜的,這時候又涉及到存儲了,到底是使用關係型數據庫還是非關係型數據庫呢,有什麼區別呢?存進去的數據怎麼去重呢?為什麼insert操作越來越卡了呢?電腦怎麼越來越熱了呢?索引是什麼,什麼時候該建立索引呢?這裡又牽扯到數據庫原理相關的知識。遇到一些比較難處理的網站,比如有驗證碼識別該怎麼辦呢?其實對於很多純數字和字母的驗證碼都很好解決,自己用深度學習訓練即可。在TensorFlow的Demo中就要生成驗證碼自己訓練的教程,然後制定箇中間件放在爬蟲系統中,這個問題就解決了。可是什麼是深度學習呢?這裡又引出一條對深度學習進行探索的例子,而我自己也是之前在學校的時候自學了小半年機器學習,有了一定的基礎後,才能比較容易地上手TensorFlow框架。再往下就比較深了。

想要學習大數據編程,一定不能錯遺漏的六大要點!

上述六點簡單講了講項目驅動式學習的介紹,其實,你看到的每一個小圓圈,深挖下去都大有文章。我們現在看到的只是冰山一角,任何一條學習路徑學習下去都深無止境,我們不可能完全學會,可是項目驅動式學習最大的好處是讓你知道你應該去學習什麼,而不是先學一大堆知識,再去做一個項目。嚴格來說,項目驅動式學習的可視化路徑是一張網,而不是一棵樹,這裡畫成樹狀只是為了便於大家理解。

除了獲得數據,還有清洗數據、分析數據,甚至挖掘數據,最後可視化數據並且展示數據,這裡我就不一一介紹了。可以參見下面這張圖,如果大家想看我做的一些成品,可以看看我的其他文章。

想要學習大數據編程,一定不能錯遺漏的六大要點!


分享到:


相關文章: