請用正確的姿勢維護新手的熱情和自信----學慣用R操作資料庫MySQL以及項目模塊化的應用

請耐心看完,文末有總結!!!

1、用R操作資料庫

可以單獨使用MySQL進行數據分析,也可以將R和MySQL結合起來使用。

RMySQL包提供了R中操作MySQL的各種方法。

基本需要4步就可完成:1)導入RMySQL包;

2)連接資料庫;

3)SQL查詢:獲取數據;

4)關閉資料庫連接。

接下來依次詳細講解每一步。

1) 導入RMySQL

在Rstudio中安裝RMySQL包

Install.packages(「RMySQL」)

再導入該包

Library(RMySQL)

當安裝該包的時候,出現「InternetOpenUrlfailed」錯誤。心頭一緊,

先在Google上搜索「Warning in install.packages : InternetOpenUrl failed:」看看吧,

對該問題作者提供了三個解決辦法,有點不明所以。緊接著下面,看到有回復提到感謝作者,好像最後一個選擇解決了問題。」did the trick」是啥意思呢?一查有「達到目的」、「將困難工作做好」的意思。

添加該語句後果然成功安裝,感覺挺爽的。解決問題的同時學到了一句地道的did the trick。

2) 連接資料庫

語句如下:

con <-dbConnect(MySQL(),

host="127.0.0.1",

user="root",

password="######",

dbname="world")

其中,host是資料庫伺服器地址(上述127.0.0.1是指本地資料庫);user和password 分別是登陸資料庫的用戶名和密碼(你的密碼可不是"######"哦,請正確輸入);dbname是資料庫名稱,這裡鏈接了mysql中的world資料庫。

3) SQL查詢:獲取數據

連接好資料庫就可以從資料庫中查詢數據了,接下來使用RMySQL包中的dbGetQuery函數來查詢數據。

city <-dbGetQuery(con, "select * from city")

其中,傳入的第1個參數con 就是剛才建立資料庫的連接變數,第2個參數就是一條SQL語句。

具體結果如下:

執行該語句後,可看到查詢結果保存在數據框(Data)中,點擊Data中的city可以查看到其中的數據。

4) 關閉資料庫連接

資料庫使用完後,需要關閉資料庫連接。

dbDisconnect(con)

上述過程的完整代碼如下:

options(download.file.method="libcurl")

install.packages("RMySQL")

library(RMySQL)

con <- dbConnect(MySQL(),

host="127.0.0.1",

user="root",

password="mydarling050627",

dbname="world")

city <- dbGetQuery(con, "select *from city")

dbDisconnect(con)

2、實踐案例及項目模塊建立

明白了R中操作資料庫獲取數據後,在接下來完整項目的案例再次應用,並結合之前學過的零散內容,通過項目模塊的方式,建立一個數據獲取、數據分析和數據展示的完整項目流程

在上一節分析過一個航班飛行距離與延時的案例,而該案例的數據來源於數據包,但現實中更多的數據來源於資料庫。

2.1) 導入資料庫數據

在沒有資料庫的情況下,需要先建立資料庫。

1) 建立資料庫,在MySQLWorkbench中按下圖建立資料庫flightsinfo用於存放航班數據。

2) 在MySQLWorkbench中按下圖操作即可導入將航班數據導入本地資料庫中

3) 航班數據導入MySQL中,並能看到表flights,如下圖所示:

2.2) 重構項目代碼

數據準備好後,需要重構航班飛行距離與延時分析案例的項目代碼。

1) util文件夾加入安裝包管理代碼文件packageManage.R

打開util 文件夾中的packageMange.R,在該R腳本中的最上面添加如下代碼:

packages <- c("RMySQL")

if (length(setdiff(packages,rownames(installed.packages()))) > 0) {

install.packages(setdiff(packages, rownames(installed.packages())))

}

此段代碼的目的是,每次項目運行時都會判斷RMySQL是否安裝過;如果安裝過,則不會重新安裝該包;如果沒安裝,則會安裝該包。

同理,管理安裝包的文件需要判斷項目需要的其他安裝包。如下:

2) 數據層模塊(db)加入代碼文件db.R

模塊db(文件夾)中主要用於存放資料庫操作相關的功能,在db文件夾下新建db.R腳本。

上述代碼主要是從航班資料庫(flightsinfo)中查詢航班表(flights)到R中,與文章第1部分R操作資料庫方法相同。只是為了方便其他模塊調用該功能,將資料庫查詢代碼封裝到方法findFlighs中。

2.3)業務邏輯模塊(service) 內flight.R文件代碼的修改

之前數據是從包中獲取的,代碼如下:

install.packages("dplyr")

library(dplyr)

#for data

install.packages("nycflights13")

library(nycflights13)

flights

修改後的代碼如下:

library(dplyr)

#路徑不是getwd(),一時不清楚怎麼用函數得到,就直接輸入路徑了

projectPath <-"E:/R/0521practice"

#db.R路徑

dbPath <- str_c(projectPath,

"db",

"db.R",

sep = "/")

#編譯db.R文件

source(dbPath)

#獲取數據

myFlights <- findFlights()

代碼解釋:1)需要將db模塊中的db.R引入數據,用於service模塊中的flight.R航班數據分析。此時數據包nycflights13就不需要了,因此刪除掉。2)引入db.R後,就可以在flight.R中使用db.R的方法獲取航班數據了。3)將業務邏輯部分繼續封裝到新的方法disDelay中,便於後續view模塊中的文件使用。

flight.R完整代碼如下圖所示:

2.4 視圖模塊(view)中建立文件flightView.R

代碼如下:

library(ggplot2)

library(stringr)

#路徑指向業務邏輯模塊下的文件flight.R

projectPath <-"E:/R/0521practice"

servicePath <- str_c(projectPath,

"service",

"flight.R",

sep = "/")

source(servicePath)

#調用flight.R中的disDelay方法

delay <- disDelay()

#繪圖語句

view <- ggplot(data = delay) +

geom_point(mapping = aes(x = dist, y = delay)) +

geom_smooth(mapping = aes(x = dist, y = delay))

#建立輸出路徑結果保存

outputpath <-str_c(projectPath,"output","delayFlight.jpg",sep ="/")

ggsave(filename = outputpath, plot = view)

代碼解釋:順序與業務邏輯模塊相同。在導入需求包(如ggplot2、stringr)的前提下,建立業務邏輯模塊(如service)下的路徑並編譯相關文件(如servicePath),然後便可直接調用該部分的方法(如disDelay)。再繼續寫入該模塊下的代碼(如上述繪圖語句),最後建立輸出路徑並保存結果。

2.5)運行代碼

如下圖所示:先點開view模塊下的flightView.R文件,然後點擊Source運行代碼。

運行後可在output模塊下看到delayFlight.jpg圖片。如下所示:

至此,學習了一個數據獲取、數據分析和數據展示的完整項目流程

學習總結:

1、熟悉並學習了用R操作資料庫的步驟,如導入RMySQL包、連接資料庫、用SQL語句獲取數據、斷開資料庫連接。

2、經過第二部分的操作,對項目模塊化的概念以及各個模塊的功能有了清晰的認識,並學會了在模塊中使用不同模塊建立的方法。例如:數據層模塊負責導入數據的語句且相關語句會封裝成方法,業務邏輯層模塊負責業務處理語句,相關語句也會封裝成方法,而視圖層模塊負責結果展示的語句;並且業務邏輯層模塊會調用數據層模塊建立的方法,而視圖層模塊則會調用業務邏輯層模塊建立的方法。

3、核心總結為一句:「先模仿後發揮,先整體後局部」。一開始最重要的是跟隨高手模仿,此處的模仿就是根據猴子老師設計的課程(事後反思,該課程循序漸進,為數據分析新手設計的足夠用心,簡直太棒啦,此處你也可以認為是打廣告!)一步一步完全相同的敲代碼。先別發揮自己的想法,僅僅做讓大多數人為之鄙視的「照抄」動作甚至投機取巧的「複製、粘貼」即可。實現整個過程後,這種做法會在內心中產生極大地甚至盲目地自信和愉悅感,這對一個新手來說太重要、太重要、太重要啦!初步模仿成功後,反思並總結整個分析的過程,將會建立一個整體的框架和脈絡;然後發揮自己的主觀能動性,著重解決局部的問題,即琢磨某個不懂的語句,為什麼這麼寫代碼,這樣做的邏輯是什麼等等。


推薦閱讀:

R語言分析NBA球員數據
我為什麼開始學習數據分析
Learn R | GBDT of Data Mining(四)
精選 | 2017年10月份R新包

TAG:R编程语言 | MySQL | 数据分析 |