打破認知:程序設計 = 算法 + 數據結構?

打破認知:程序設計 = 算法 + 數據結構?

大家好,我是陳暘,也是極客時間《數據分析實戰 45 講》專欄作者。很榮幸接到極客時間的邀請,來到極客 Live 和大家分享關於“數據分析”的話題。這次分享會共分為五部分,來為大家答疑解惑。

我們為什麼要學數據分析?

學習新的數據結構和新的數據算法將會是新時代我們的使命。

很多寫程序的人都聽說過一個公式:程序設計 = 算法 + 數據結構,我也相信很多人認為算法是編程裡的基礎。

在我看來,這個公式應該過時了。從我 10 歲開始學編程時,我就被灌輸了這個認知。所以,那時候我們學二叉樹,學隊列,學一些數組的表達方式,包括一些快速排序、排序的方法等等。

而現在,很多的數據結構,包括我們排序的算法,都已經不需要我們去編寫代碼了。我們直接調用一行命令,通過封裝的方式,就可以拿來即用。

我再舉個簡單例子,在我很小的時候,有一門課叫彙編語言。它非常基礎,比如,把一個字母 A 打到這個顯示屏裡面分多少步?它分了 32 個步驟,是如何從計分器裡面讀出去,最後讓顯示器裡面顯示出來。這是一個很簡單的事,現在大家已經不需要關注到彙編語言的底層,很多的語言越來越高級,我們的知識已經封裝的越來越完善。

我覺得在新的時代裡面,如何去更新我們新的數據結構和新的數據算法,這是我們的使命。再給大家一個數據,我們近三年,所有互聯網數據的總和等於 4 萬年數據的總和。知識處於一個非常爆炸的過程,而且我們相信,在未來的三年,它整個的總和又是以前的雙倍。

在這個海量的數據時代裡面,它需要更加新型的存儲的方式,舉個例子,我們現在會接觸到矩陣的運算,包括這些大型矩陣之間的向量表達方式和特徵的抽取,包括以前我們可能會關注到一些快速排序等一系列的算法。我們現在最主要關心的是,如何從這些數據裡面找出關聯關係出來,如何進行分類,如何進行聚類?

這個是在新的一個時代裡面的算法的數據結構和基礎的能力,也是一個非常重要的核心,也是這個市場上一個新的需求。我專門做了一個關於“程序員薪資情況”的調查,我發現在招數據分析,尤其是算法數據挖掘工程師,他們的薪資普遍比其他的工程師薪資要高。

為什麼?一方面是企業及整個市場的需求都很大,以數據挖掘為例,三到五萬的月薪並不奇怪,甚至更高的月薪都會存在;另一方面市場缺口也很大,在 2020 年,就是一年之後,整個數據人才的需求量是現在的兩倍,而且它能創造出來更多的價值。

總結而言,我們是不是需要更新我們 20 年前的認知?那一陣學的算法和數據結構基礎,是否能讓我們更跟上時代的步伐?

這也是我開設《數據分析實戰 45 講》專欄的一個初衷,想讓大家通過這個專欄的學習,掌握到新的數據結構和新的算法的能力。

沒有編程基礎,也能學好數據分析

請,不要灰心。

有編程基礎和沒有編程基礎是相對的,就算你有編程基礎,但你未必有數據編程的能力。我想說的是,如果你沒有編程基礎,也不要灰心。因為數據分析是一個很新的領域,這幾年也是非常的火爆,而且出現了很多新的理論。可能在 5 年前,有些理論是之前沒有的。所以,無論是新人還是老人,起跑線都是很接近的。請,你不要灰心。

第二方面,我在這個專欄著重重強調的學習方法是 MAS 學習方法。

M-Multi-Dimension:想要掌握一個事物,就要從多個角度去認識它。也就是說要學習數據分析,你需要從不同的緯度跟人家去打交道,不管是知識概念的緯度,從工具的緯度,還是從實戰的緯度,你都需要與其建立起聯繫。

A-Ask:不懂就問,程序員大多都很羞澀,突破這一點,不懂就問最重要。以往如果我們沒有專欄可以一對一去互動,或者答疑解惑,你可能通過網上去找答案,但是網上的答案有的時候不一定是正確的,或者你不一定能找到答案,但是通過專欄留言、社群答疑,我可以幫你來去進行解答,這是非常好的方法。(進入數據分析社群,可加專欄運營 Monica 微信:imonica,瞭解入群規則。)

S-Sharing:最好的學習就是分享。用自己的語言講出來,是對知識的進一步梳理。我看到專欄裡的很多同學,現在逐漸養成分享的習慣。當你把這個內容分享給其它人的時候,這個內容才是你自己的,而不是老師的。我非常鼓勵大家去寫筆記,也有好多人把自己整理的內容放到幕布或者博客上面,這是非常好的方法。

打破認知:程序設計 = 算法 + 數據結構?


其中一個用戶總結的思維導圖,很贊!

我總結以下兩點:

1、如果你沒有編程的基礎,沒有關係,你可以跟上我的專欄,你跟大家的速度是一樣的,甚至你會比別人跑得更快;

2、另外,掌握好的學習方法真的非常重要,MAS 是個很不錯的學習方法。這也是我專欄想達到的一個目的,授人以魚不如授人以漁。

即使數學高考考 9 分,也不妨礙你學習數據分析

高考是封閉環境下的能力測試,考的是你的計算能力

哈哈,數學高考考 9 分也是非常了不起的一件事。我是這麼看的,高考的是計算能力。舉個例子,讓你去求一個排列組式。我們知道,在實際的工作中,我們做的不是閉卷答案,在開卷環境下,你是可以用計算器或者提問的方式去解決問題。就是說,你現在的工作環境和以前上學的考試是兩種完全不同的狀態。工作上,最重要的方法是:“不懂就問“,你求助於別人,這是最省時省力的解決問題的方法。

另一方面,有些人跟我說,他的計算能力、數學能力都比較差。其實,這是有解的。在我的專欄裡,我會讓你去了解一些概念,你知道該怎麼去用就好了,你完全沒有必要去做推導。你只需要知道,我要用哪個公式,或者說我要用哪個算法,這個算法可能抽樣出來就是一行代碼,如果是可視化工具,根本就不用代碼。

總而言之,即使你的數學基礎不好,不妨礙你去學這個專欄,掌握它的概念以及方法。

很多人會望而卻步,覺得中間是否需要一些數學的推導和運用。其實,大家應該從白話的角度去理解這個專欄,因為專欄裡會有很多案例、比喻等等,會讓大家更容易去理解概念,比如什麼叫數據挖掘,什麼叫分類,什麼叫聚類,什麼叫關聯分析。

打個比方,你同時認識了兩個漂亮女孩,你要追哪一個成功概率比較高?這就可以用到數據分析的一些原理,比如,你想知道這個漂亮女孩,她到底是御女還是蘿莉?這就會用到分類的算法;你認識女孩的渠道比較多,比說朋友會介紹,或者網上認識等等,就會要用數據集成的知識,因為不同的渠道你需要彙總到同一個渠道里面。不同朋友推薦同一個女孩,這時候就要做數據清洗了。

再舉個例子,假設你認識的女孩數量不只兩個,假設有五萬個,這時候決策該怎麼做?那你要把這些女孩進行分組,把五萬個人劃分成五個組,每個組採用相同的決策,這叫聚類。聚類的方式是把一個個緯度的目標換成一個緯度,由原來的五萬人變成了五個組,就大大提升了效率,採用一種降緯的思維。最後,這個數據它產生什麼樣的結果,你就需要採用數據可視化的方式幫你實現:我到底得出什麼樣的規律,或者我最後採用什麼樣的決策。

通過這個例子,我們可以看習數據挖掘對我們實際的幫助是很大的,它可以幫助你解決實際中遇到的一些問題,抽象出來,利用數據挖掘、清洗等方式去解決。

數據分析學到什麼程度,能找到工作?

我把它分成三個階段:初級,中級和高級。

初級:你需要了解基本的概念,會使用簡單的工具。比如說你要做數據採集的話,你不會 Python 沒有關係,我會教你八爪魚怎麼使。因為它是一個可視化的軟件,拿來即用。另外,我也會講解一些軟件的使用,如果你也能學會用一些軟件的話,也可以拿到很高的薪水。

中級:需要自己動手去寫一些代碼。在這個專欄裡,我會主推 Python 去做數據分析,比如分類的算法、聚類的算法、關聯分析的算法,包括數據預測。而一個算法需要一個好的語來實現言而,Python 是非常直接的語言,會讓你得到更多可視化的結果。

高級:熟練度,還有就是效率上的提升。我舉個例子,我之前做過深度學習,最開始是去調試一個圖像識別算法過程,需要兩到三週的時間。後來,我有了更多的經驗之後,我知道哪些參數該進行優化,且這個參數在什麼樣的情況下可以採用什麼樣的收斂模型,中間的層次該怎麼去調。之前需要花三週時間去完成的事情,就被縮短為三天,整個工作效率提升了 10 倍。

在我的專欄裡,我特意設置了一個專屬題庫。為什麼我要做題庫吶?因為,我覺得知識要被消化吸收最快的方法,就是練習,不斷地反覆練習。只有練習了,把知識點融會貫通,知識才會是你的。這些題庫,我也都做會講解。

我在專屬題庫裡列了十多個項目,都是非常實戰的項目。多練習、多實戰,你完全可以把這些項目寫到自己的簡歷裡,包括數據的描述及解題過程,最好用自己的話去做總結,並用博客的方式去呈現。這是非常棒的經歷。

Q&A

1、問:本人已經工作 7 年了,做運維開發也有 5 年之多,主流語言也是 Python,個人對大數據開發,數據分析,數據挖掘之類的工作也特別感興趣,所以毫不猶豫就買了老師的課程。之前空閒之餘也看過相關數據挖掘的知識,比如 svm xgboot 手寫體之類的。但找類似的工作突然發現沒有底氣,原因是沒有數據挖掘相關的工作經驗,我怕以後轉行越來越困難,再加上一旦轉行沒有我現在的工資高,想想又放棄了,又不甘心,我該如何抉擇?

答:首先這是一個先有雞,還是先有蛋的問題。

我想你是認可數據挖掘,也對數據分析很有興趣。最著急的是簡歷中沒有相關的經驗。

確實很多公司很看重背景,而且你工作 7 年,又不能從初級職位開始,即使你對數據分析很感興趣。

我建議你還是以豐富簡歷為目標,在簡歷中要想辦法增加 數據分析,數據挖掘的比例。

我的專欄裡會有 10+ 個項目,當然這些項目都不是太複雜。我建議你把它都做一遍,然後用自己的語言做項目總結,這些可以放到簡歷中。作為數據分析,數據挖掘的經驗

沒有其他的捷徑,如果你在這方面的簡歷不豐富 HR 很難給你一個滿意的薪水。所以你就需要在工作之外,自己來訓練,整理這些項目筆記。我專欄中的很多數據都來自於 Kaggle,這裡有很多實戰的項目,你如果完成了我的專欄,還想進一步豐富項目經驗,可以做更多 Kaggle 項目。同樣採用我的方式,把它作為項目背景,自己寫項目總結,作為項目經驗。

2、問:數據挖掘預測部分會有哪些內容?

答:數據挖掘,我列了 10 大算法,都是最經典的算法,包括:決策樹 C4.5,CART,樸素貝葉斯、SVM、KNN、K-means、EM 聚類、Apriori、PageRank、Adaboost。這些主要是分類、聚類、關聯分析、連接分析的算法。當然現在深度學習很火,後面如果大家有需求的話,可以在算法介紹完之後,加餐個深度學習。不過這裡最好要有 GPU 運行環境了,要不運行起來會有些吃力。

3、問:推薦一些數據分析的書

答:思維:《思維簡史:從叢林到宇宙》;

數據處理:《數據挖掘:概念與技術》;《Pentaho Kettle 解決方案》;《精益數據分析》;《Small Data》;《利用 Python 進行數據分析》

打破認知:程序設計 = 算法 + 數據結構?


相關推薦

推薦中...