1. 程式人生 > >R or Python,為了處理資料到底該學哪個?

R or Python,為了處理資料到底該學哪個?

     本文從個人的經歷出發,談談對R和Python的認識,因本人剛剛畢業小學僧一枚工作資歷尚淺,且R和Python基本上都是自學的只能算馬馬虎虎入門級別,所以文中所述僅僅小蛙井底之言。

     小僧最早接觸的處理資料的工具是Excel,再後來依次是SPSS和Stata。Excel是大一計算機基礎課學的。因本人不喜歡上課學習,所以課堂上基本上沒學到什麼,但自己喜歡倒騰電腦,因此業餘還是掌握了不少技巧。小僧的第一份實習工作和正式工作(實習轉正)最主要的工具就是Excel,這是第一個給我飯碗的強大工具,利用Excel公式和巨集其實已經可以實現各種常規和非常規的資料處理需求。但總感覺逼格不高,Office軟體在天朝給人的印象就是一種大眾化的東西。這裡插一件本人的軼事,在第一份實習時本人接到大阿里的電話面試,面試官問我現在工作中使用的開發工具是什麼,我就回答是Excel,面試官一臉驚愕說沒聽清讓我再回答一遍,我就重複說Excel,然後面試官說沒有什麼要問我了,然後就沒有然後了。SPSS是大二學的,因為基本上沒去上過課,因此對它的記憶僅僅停留在大二開過這門課,後來回過頭研究過相關教程,但工作的時候也從來沒用過就徹底壓箱底了。接觸的第三個處理資料的工具是Stata,沒錯,大三的課程!這個時候小僧已經迷途知返從不翹課,因此Stata是我在學校認真學過的一門工具,但最終命運跟SPSS一樣,工作中沒用過。

     扯了這麼多,終於要等到主角之一R語言出場了。R語言是我讀研階段接觸的,因為導師很推崇它,還有這門課。本科最後階段衝刺了一下讀了研,讀研後又回到解放前,課堂上沒怎麼好好學,但基礎還是掌握的。後來上文提到的第一份工作除了Excel另一個工具就是R了。早期就是R結合Excel做一些資料的簡單處理,包括做做統計計算和畫畫圖,小僧的論文也是藉助R這個工具做了一個模型完成的。後來是通過R連線Hive從Hadoop裡面提取資料,做一些簡單的ETL之後儲存到自用的MySQL資料倉庫裡出一些報表。在這個工程中我的R能力也得到了長足進步,這歸功於度娘和各種部落格論壇。當然,當時的老大也是比較喜歡使用R和研究R的,我的一本R參考書基本上是他拿過去放到他的桌子上的,還在上面畫了各種道道。因為第一個飯碗工作並不是主要偏向於技術,小僧也想找一個能繼續成長提高的地方,就在轉正後最終決定離職。

     離職後小僧就開始接觸本文的另一個主角Python了。小僧離職前就參加過同公司另一個部門的面試,當時面試官對我其他方面感覺還是不錯的,但最後問到我會不會Python,我說沒接觸過,然後就沒有結果了。離職後小僧在家休息了大概一個半月才到的現在的公司。這一個半月,小僧一邊投簡歷一邊在家韜光養晦。在這個過程中又堅定了小僧學Python的決心。小僧投的另一個很想去的職位和對方電面了大概一個小時,最後還是在Python上歇菜了。於是我就在家研究Python,也在自己的簡歷上偷偷的塞上了Python,不久又撈到一個很好的面試機會。面試時面試官提了一個很簡單的邏輯處理的題,讓我用Python寫,但因為當時畢竟對Python是是而非,而且本能地一看到題目就想到了用R處理的方法。於是我嘗試用R笨拙地處理了一下,當時緊張了一下,結果也是跪了。其間翻招聘網站再投了一些R相關的招聘崗位,但一方面這種崗位本來就少,另一方面我對工作地域有限定,基本上都石沉大海了。再後來小僧經同學內推進入某軟體公司,在某專案組做運維,維護資料庫和做報表開發。入職後小僧本來想繼續使用R語言,但瞭解後才發現我是他們招的第一個會R的,而且他們未來估計也不會再招用R的。按照PM的說法,R是一個小語種,可遷移性和替換性太小,如果我走了我的工作其他人無法交接。最終,在他的要求下,我開始真正在工作中使用Python。當然,我這個崗位的“前任”留給我的“遺產”也是若干Python指令碼。至此開始,我一有空就繼續自學Python,慢慢地Python也取代了R在我心中的位置。

     寫到這裡,應該做一下對R和Python的介紹。雖然如果大家接觸和使用其一或者其二的話,當然比小僧更熟悉。“R是一個用於統計計算和製圖的免費軟體環境”,這來自小僧對R官網首頁(https://www.r-project.org/)定義的拙劣自譯。“Python是一個讓你的工作快捷,整合系統更加有效的程式語言”,同樣來自小僧對Python官網首頁(https://www.python.org/)定義的拙劣自譯。對比之下就非常明確了,R擅長的是統計分析,純粹和侷限;Python就是程式語言。實際使用中,R有它自己的優勢,那就是各種強大且數不勝數的統計包,可以實現包括經典統計和現代機器學習在內的各種資料分析需求,因為它的open source,程式能得到很好地維護和擴充套件,另外,它的繪圖能力也不容小覷。Python也是開源的,實現數理統計主要是藉助一些第三方包,例如pandas、scikit-learn、statsmodels和matplotlib等。這些包基本上囊括了常用的統計模型,如果要做資料分析,簡單地去看看官方文件熟悉一下它們的API,也基本上能很快掌握。因此,就涉及到一個二者哪個好學一點的問題。就我而言覺得Python更好學一點。也許是因為Python學的晚起點好一點已經有一定的基礎,而且是在工作中學以致用用中而學,前面講過學R是在課堂上心猿意馬的環境下。當然,另外一個原因其實就是兩種語言各自的特點,Python語言一個很大的特點就是程式碼簡潔而又格式嚴格,可讀性很強。

     最後,回到文章的正題上,為了處理資料到底該學哪門語言。這個其實要因人而異了,而且小僧也不能妄下結論。當你在用最前沿的技術大費周折做完對資料的處理卻沒有得到老闆想要的東西的時候,也許真正的大神已經用Excel完成了資料探勘。所以,工作中哪種工具方便快捷又能很好地實現需求,就學它用它。就個人經歷而言,Python畢竟是一門程式語言,它既能是R又能是Python;相反地,R只能是R而不能是Python。所以,如果是一個計算機專業的學生或者以程式猿為人生理想,當然學Python了。如果是其他行業,而且工作性質更偏向於資料分析,有R就足夠了。