當文科生遇見R語言,照樣玩得轉

當文科生遇見R語言,照樣玩得轉

歡迎關注天善智能,我們是專注於商業智能BI,人工智能AI,大數據分析與挖掘領域的垂直社區,學習,問答、求職一站式搞定!

對商業智能BI、大數據分析挖掘、機器學習,python,R等數據領域感興趣的同學加微信:tstoutiao,邀請你進入數據愛好者交流群,數據愛好者們都在這兒。

作者:林筱越 華東政法大學 社會學專業 R語言愛好者

前言

本文從一個自學者的視角並結合自身經歷來談一談自己作為一個文科生如何從零基礎開始學習R,並逐漸深入這一領域,可能存在不足之處,歡迎指正。

閱讀全文大約需要8~15分鐘,全文內容結構如下:

一、文科生學也可以學編程嗎?

二、從0到1

三、瘋狂輸出

3.1 寫作

3.2 解決實際問題

四、敢問路在何方?

後話

問我答

在開始之前,我先就自己以前經常探索或者是見到過的幾個關鍵問題談談我自己的一些想法:

Q1:文科生可以學數據分析,或者說可以學編程嗎?

A1:完全可以。隨著學習的深入,你的自學能力會越來越強;而且你可以發現,目前一些大熱的語言(如Python)門檻簡直不要太低。

Q2:應該如何開始系統學習或者入門?

A2:在我看來說無非就是以下三種方式:看書自學、看視頻教程、網課。其實這三種途徑互相都有重合的地方,但是這三種途徑在學習的過程中起到的作用卻有不同。

Q3:學習了一段時間,但是不會用

A3:“道理我都懂,可是我還是不會用”的體會想必大家都有。那應該怎麼辦?輸出與寫作。

Q4:能夠熟練運用了,該怎麼深入學習?

A4:探索與嘗試。當能夠熟練運用的時候,就說明學習已經是水到渠成了。但是這僅是冰山一角,還沒有一覽眾山小。

為什麼這麼說?本文就圍繞著這四個問題來說一說我的看法。

一、文科生也可以學編程嗎?

雖然說R語言並不算是完全意義上的編程語言,但是也是屬於編程範疇。那麼文科生想學習這些看似只有理科接觸的東西,是否可行?我覺得是完全可以學習的

可能你看過許多例子,這裡我以我個人為例講述我學習的經過。

本人是大四社會學本科生一枚,唯一與敲代碼有關係的必修課就是和《社會統計》相配套的《STATA統計軟件應用》(社科專業的朋友應該會知道)。最初對於這種敲命令的東西就是感到頭疼,所以基本只想求個及格分。但是後面來了興趣後,在寒假期間就照書重新自學了一遍,豁然頓悟。於是乎我為代碼的魅力所吸引,開始接觸了與之相關的東西從SPSS、SAS、Eviews再到R語言。當時R可能正處於和Python一樣火熱上升的趨勢,恰好圖書館裡有《R語言實戰》這本“聖經”,因此趁著興趣,大二暑假期間我就每天照著書一點點的學。

雖然磕磕絆絆煎熬地學了一個多月,但我在不知不覺中也漸入佳境,能夠通過R語言來的基本操作來進行做一些小練習。後來又瞭解到了ggplot2這一讓R語言充滿了生命力的工具包,在深入學習ggplot2中碰到繁雜的函數使得學習曲線變得陡峭,最後也因課業和學校事務而中斷。

大二下學期課程變少後,我又重新開始撿起ggplot2順便還重新溫習了一把之前學過的基礎知識,真正不間斷地把《ggplot2:數據分析與圖形藝術》本書從頭到尾的過了一遍,又學習了《R for data science》(中文版:《R數據科學》)和《R graphics cookbook》(中文版:《R數據可視化手冊》)兩本書之後我才掌握了ggplot2最核心的使用方法。

當然,在2017-2018年期間恰好學校有一位老師開設了有關R語言的選修課,雖然講授的內容比較基礎,但是憑藉我自己之前的自學,我有幸拿到了這大學生涯中為數不多的滿分,也在這時關注了R語言中文社區的公眾號。或許可能也正是從這一年開始,我就開始了自己應用R語言的道路,並時不時在R語言中文社區公眾號上發表了自己拙略的文章:

  • 2018-02-26 我的第一篇文章送給我的女票
  • 《使用ggplot2繪製心形》
  • 2018-04-05 我講我之前選修課上做的小論文作業重新通過R語言的方式呈現
  • 《定量論文:探究「健康水平、婚姻狀況」對幸福感的影響》
  • ,當然也受到了讀者朋友的指出的不足,很是感謝。
  • 2018-05-07 我萌生了對自己生活進行量化的想法,於是又有了第三篇文章,這裡又是對ggplot2的又一次深化
  • 《個人生活的量化分析(一):時間管理》
  • 2018-05-16 我的第四篇文章
  • 《個人生活的量化分析(二):Apple健康數據分析》
  • 2018-06-20 考研複習期間也是今年的最後一篇文章
  • 《個人生活的量化分析(三):考研英語初探》

儘管我的文章在質和量上並沒有比在R語言中文社區發文的其他R語言熱愛者高出多少,但是通過投稿我有幸收到天善智能送給我的一套數據小魔方創始人杜雨老師ggplot2商務圖表網課以及一本名為《R語言遊戲數據分析與挖掘》的書籍,這算是對我來說學習這麼久以來最大的鼓勵吧。

至此,我的故事就結束了。

雖然由於考研佔據了大量時間,數據分析學習的過程又中斷了,但是重新回顧與溫習並沒有花費我太多時間。仔細想一想,從零基礎學習R語言到底用了多少時間呢?我想,如果沒有中斷並且持續不斷的學習,1個月的時間從入門到基本運用是綽綽有餘。

那麼,對於“文科生可以學數據分析,或者說可以學編程嗎?”這一個問題,我想每一個零基礎的新手們心裡都會有一個答案。

二、從0到1

俗語云:“萬事開頭難”。對於R語言或者是其他編程語言完全不懂的人,到底怎麼樣入門才是正確姿勢?

在我看來,學習的途徑無非就是以下三種方式:看書自學、看視頻教程、網課

其實這三種途徑互相都有重合的地方,但是這三種途徑在學習的過程中起到的作用卻有不同:看書>看視頻≈網課

看書最大的意義在於這是一個自我思考、整理、吸收、消化知識的過程。因此在這一過程中會感覺到特別煎熬,因為沒有人可以幫你去理解建立完整的知識架構,這也是我在看《ggplot2:數據分析與圖形藝術》一度中斷的原因。在看《R數據科學》時並沒有中文版,憑藉著一點四六級的功底也硬是把英文版整本書看完了一遍;國外的教材並沒有想象中的那麼難或者無法理解,相反,反而有時候會比譯文更容易讓你理解。

當自己對於書中不解或者產生的問題得不到解決時,視頻教程或網課就很有必要了。因為有人已經躺過這個坑,那麼就大大節省了個人尋找答案的時間;或是因別人以通俗的語言解釋後,自己的困惑就得到了“豁然開朗”般的頓悟。但是對於正處於學習的個人來說,視頻或網課已經事先替你進行“思考”,已經幫你總結歸納了很多,因此總是讓人產生自己好像已經明白,但實際中往往會出現非常容易忘卻、不會使用的情況發生;可是一旦你自行先對書籍中的內容思考、吸收、消化之後,再看視頻和網課可能一定程度上也加快了你提高的腳步。

這裡我提一下杜雨老師的《R語言可視化和商務圖表實戰課程》這一套課程(這並不是在打廣告!)(小編:我證明),如果我當時自學一遍ggplot2後再看這一套視頻或許我精進的速度可能會更快。杜雨老師在視頻中做了許多鋪墊與精彩的總結(不過杜雨老師當時在錄製視頻時收音效果可能不太好,但是把耳機音量調大並不影響學習。)(小編:這個情況已處理,目前沒有這個問題了):

當時看到杜雨老師製作的PPT後我不禁感嘆確實用心,而且概括的也十分全面。

但話又說回來,如果自己未曾看過一遍書,手動實操一遍,直接看視頻的話,可能最後只會有“知其所以”卻不“知其所以然”的懵懂感。不過關於R語言的書籍也是多不勝數,這裡我只推薦以下幾本:

入門:《R語言實戰》

R語言實戰

當文科生遇見R語言,照樣玩得轉

備受推崇的《R語言實戰》真的值得如此好評嗎?

一文對這本書進行探討,也引發了大家的激烈討論,這裡我說一說我的看法。如果說對於一個完全沒有接觸過編程的新手或是小白而言這無疑是能迅速用R語言操作的最佳選擇。儘管說這本書中使用的一些方法或者是例子有些過時,但是對於入門R語言的人來說沒有比這更通俗易懂的了;同時這本書的中文譯本也有著電子版,就學習來說已經是十分方便。

中期:《ggplot2:數據分析與圖形藝術》、《R數據可視化手冊》、《R數據科學》

前兩本是學習ggplot2語法的必讀書目:

ggplot2:數據分析與圖形藝術

當文科生遇見R語言,照樣玩得轉

第一本讓你瞭解ggplot2的整個繪圖原理和作者繪圖的美學哲學,形成對ggplot2形成整體的認知框架

R數據可視化手冊

當文科生遇見R語言,照樣玩得轉

第二本是由 Winston Chang 所寫對於ggplot2細緻的展開,從繪圖到細節調整、再到其他進階圖形都有涉及,也正是這本書讓我真正理解第一本書並能夠開始熟練運用ggplot2,一定要看!!

R數據科學

當文科生遇見R語言,照樣玩得轉

網址:https://r4ds.had.co.nz/

(不用科學上網就能看哦)

第三本是由 Hadly Wickham 大神親自編寫的一本如何用R語言進行一套完整的數據分析流程的書籍。當中最重要的是Tidyverse包的運用,這一大包糅合了Tidyr、dplyr、ggplot2等許多高效的數據處理工具包,相信學完後個人處理數據的功力會更上一層。當時我看的時候還未曾有中文版,現今中文版已出版,但是翻譯質量如何我沒看過我就不作評述;但是英文版可以通過 Hadly Wickham 的個人主頁免費在線閱讀電子版

通過這幾本書,我相信入門R語言的朋友不僅已經是從0到1,而且已經向高級進階學習邁進了。

三、瘋狂輸出

“瘋狂輸出”一詞是在英雄聯盟S4全球聯盟總決賽時前IG戰隊輔助笑笑作為解說時隨口而成的一個梗。但從字面意思來理解應該是通俗易懂。

在學習過程中最痛苦的煩惱莫過於“自己學了的都忘了”以及“自己懂但是卻不知道怎麼用”。

但是不同於上學時學到的知識,編程語言的知識最大的特點在於,一旦你理解並能開始運用後,這些知識會比課本上學到的知識更容易被記住。或許這就和高中數學一般,只要你開始使用,那麼你就不需要去死記硬背,因為早已存在在你深深的腦海裡(不自覺就唱出來了)

輸入(學習)和輸出(應用)的過程其實就好比是我們與編程語言交互

的過程,我輸入一行代碼,電腦返回一個對應的結果;因此,對於學習R語言或者是其他語言的人來說,輸出的方式也有兩個:

  1. 寫作
  2. 用所學去解決實際遇上問題

3.1 寫作

很明顯,本文的寫作就是我輸出形式之一。我之前在R語言中文社區的投稿既是寫作,也是我用R來解決實際問題的實踐。

但在實際的寫作往往是一個“難產”的過程,因為這不僅是輸出,更是一種自我創作的過程。所以當中會暴露出各種小錯誤或是自己知識面上的不足。

對我來說,寫作帶來最珍貴的不是受到各種點贊或是各種誇獎。那是什麼呢?是別人在閱讀你的文章後指出的不足或者說是批評。

能讓一個人快速成長的方式是發現自己的不足,而發現不足最佳的途徑就是讓別人指出你的不足。

我明白,在這個“鍵盤俠”遍佈網絡的時代,每個人或多或少都見過不少語言暴力。但是從辯證法的角度來看,如果一件事情或者話題能夠被人們激烈的爭論、關注,那麼這件事情本身就具備一定的意義或價值。

在我第二篇文章

《定量論文:探究「健康水平、婚姻狀況」對幸福感的影響》

評論裡,有讀者對我文中的一些觀點表示不贊同,也指出了我的一些不足。確實,如果沒有這些批判的發聲,或許我也不可能會去發現我R語言知識面中的一些不足之處。

所以無論自己對於R語言或是其他編程語言的掌握如何,嘗試用已經學到的東西去寫作,這本身既是在複習,也是在不斷提高自己的過程。

當然,希望大家看到這也能多多嘗試去投稿(歡迎大家來本社區投稿哦,我們的口號是:你值得被關注),或者將自己的小經驗小心得在簡書、知乎等地方分享出來,說不定幫助到了別人,會收穫一點點讓自己成就感滿滿的“贊”。

那麼在寫作的時候推薦大家可以使用Markdown語法或者Rmarkdown來寫作,不僅能夠一定程度上避免後期排版問題,還可以輸出代碼塊;而且Markdown語法十分簡單,可能只需要短短的十分鐘就可以入門!

Markdown編輯器我常用的軟件是Typora(https://www.typora.io/),至少是目前我用過最為舒服的編輯器了。

(小編目前用的是這個:http://md.aclickall.com/ 不用下載,在線編輯)

3.2 解決實際問題

在學習R語言後給我帶來最大的感受就是,似乎生活總有許多地方可以量化,正如我三篇“量化生活”中所嘗試的一樣。如果敢於折騰,總能發現一些隱藏在量化生活背後有意思的東西。

可能有的人最開始學習R語言或者是Python等其他語言並非是出於一種想要探究的興趣,更多也可能是出於一種實際的需要或者是用來解決實際的問題。

比如說——“爬蟲”。

在程序員眼裡,能讓程序代碼重複去做的事絕不自己一個一個手動的去操作。

說實話,其實就是“懶”。

正是因為享受這種“偷懶”而帶來的便捷和滿足讓我第一次對編程語言充滿了興趣。當我看到別人能通過短短几十行代碼能將一個網站上每個資料的下載鏈接爬取下來,或是通過代碼獲得到鏈家網房價信息的數據時也是我第一次見識到“爬蟲”的威力。

那麼在我所學的知識裡,有能夠讓我也實現爬蟲的地方嗎?沒有。

於是便又嘗試開啟了新的學習過程,對於爬蟲的學習。等具備了基本的爬蟲技能後,可能又會遇到新的問題,但是對於一些容易獲取資料的網站來說,顯然我們已經解決了一個自己曾經想要解決的實際問題——獲得資料。

這實際就是輸出。

爬蟲當然只是其中的一個小小的例子,在實際中我們往往還會遇到很多,比如:

  • 希望對快速高效地數據進行清洗
  • 希望快速生成包含日期和項目來記錄自己的開銷
  • 希望能將Excel的圖片以更漂亮的方式呈現,而不用自己手動去調細節
  • 希望……

等等之類的問題,只有試著輸出自己所學的東西去解決實際的問題或者想要實現的效果,對於R語言運用這一“技能樹”才會更加龐大。

當你輸出得足夠多時,恭喜你,你可能在某方面已經水到渠成了!

四、敢問路在何方?

對於新手,其實前三部分已經足夠花一定的時間去探索、實踐了。而最後這一部分不僅是寫給各位觀看這篇文章的朋友,也寫給自己對未來學習的規劃。

學會用R來做基本的數據分析僅僅只是數據科學這一領域小小的一隅。如果想繼續深入這一領域,或許前面仍有許多路要走。

當文科生遇見R語言,照樣玩得轉

可應該走怎樣的方向?又何去何從?這是一個沒有現成答案的問題。雖然沒有現成的答案,但是有能夠獲取答案的途徑——多嘗試

編程語言都有共通之處,對某一種語言的熟悉可能有助於你快速掌握其他的語言。因此我開始了一些滿足自己求知慾的嘗試:

  • 我嘗試著去了解SQL
    的用法,通過MySQL來進行實踐,掌握了基本的SQL語
  • 我嘗試著去學習Python,希望通過與R語言對照來學習能更快的也熟悉Python(畢竟現在是世界最簡單而且也最熱門的語言)
  • 我嘗試著去了解Linux操作系統,畢竟與這是目前較多人使用的開源的操作系統之一
  • 我嘗試著去學習Vim,體驗一把丟棄鼠標只用鍵盤就能進行各種操作的酸爽
  • 我嘗試著去學習Git的使用,發現Git甚至還能作為輕量的資料存放倉庫來使用,這樣以後所寫的文章、代碼和數據就不會這麼輕易丟失了
  • 我嘗試憑藉著自己所學的一點蹩腳編程知識,終於開始把在iPad上一直不會玩Playgrouds一點點的在引導下編寫代碼,使遊戲漸漸通關,這也使得我對蘋果的Swift語言充滿了興趣
  • 在幫同學思考如何處理將文本數據分類時,我接觸到了
    NLP(Natural LanguageProcessing)自然語言處理領域最基本的分詞,經過幾個小時的嘗試作出了自己第一個用R實現的詞雲圖
  • ……

我還嘗試了許多許多,無論這是否有助於我以後的學習,但是這些體驗讓我保持著對這些與我專業毫不相關的東西的興趣,饒有興致地去折騰。

但是這也就意味著又是重新學習、重新輸入的過程,雖然可能僅是淺嘗輒止,但是如果當初我沒有也像這樣去嘗試R語言,那麼我又怎麼會開始一段學習的歷程呢?

趁年輕,多折騰。

這篇文章算是我對2017年-2019這兩年學習R語言的一個年度總結吧或許這個總結來的有些晚,但是希望能給那些正在學習R語言的新手們,或是和我一樣正在不斷探索、折騰的人一些啟發。同時也督促我抓緊這僅存的最後半年大學時光,去探索、去折騰。

當然,嶄新的一年Flag是不可能不立的,但還是希望自己多多輸出、多多寫作吧。

最後,也感謝天善智能和R語言中文社區為我R語言的學習之旅提供了一個學習、展示自我的平臺。

2019.01.22

林筱越

首先感謝林同學以及本社區的其他專欄作者的信賴,選擇R語言中文社區來投稿,也謝謝此時此刻正在看這篇文章的你,R語言中文社區的發展離不開你們的支持和鼓勵。藉此我們也誠邀更多作者加入我們這個社區。每個時代都會悄悄犒賞會學習的人,來與我們共同分享你與R語言相愛相殺的日子吧,期待你們的投稿哦。

當文科生遇見R語言,照樣玩得轉

回覆 爬蟲 爬蟲三大案例實戰

回覆 Python 1小時破冰入門

回覆 數據挖掘 R語言入門及數據挖掘

回覆 人工智能 三個月入門人工智能

回覆 數據分析師 數據分析師成長之路

回覆 機器學習 機器學習的商業應用

回覆 數據科學 數據科學實戰

回覆 常用算法 常用數據挖掘算法


分享到:


相關文章: