標籤:

猴子數據分析第四關 複雜數據分析

學習數據分析你需要持續地實踐才能等幸福的那一個時刻,因為學習技能是一個長期的過程,而不是你看一篇文章你就能學會的。

課程內容列表:

1、如何編寫函數

2、數據處理:dpylr,ggplot2

3、如何編寫業務模塊

4、代碼如何調試

很多人害怕編程就放棄了,這是不對的,很多有價值的事情與它的難易程度是成正比的,學習門檻越高,那它能幫你賺錢的能力就越高

以插座為例,了解「功能」、「輸入"、」輸出「為例

一般一個函數的構成也是由這三個部分組成: 具備某個功能方便某個使用他的人實現某些事情;有輸入端用於接收調用函數的某些人給他發出的指令,就是我們常說的函數的一些參數;輸出端,用於處理完的事情結果返回給它。

在大部分時候我們都是調用R語言里的函數或者包里的函數處理數據,但是在處理一些複雜情況的時候我們也要自己編寫函數來處理某些事情。

什麼情況下需要使用函數:

在我們之前處理的2015年醫藥銷售數據的各種指標數據,如果再給你2016年、2017年的數據你的代碼是否直接能夠運行處結果呢?我們知道之前的代碼對於2015年、2016年、2017年的數據只有輸入的數據內容不一樣,其他業務方面的邏輯和演算法都是一樣的,這時候就可以自己來定義一個函數來計算某個指標,將重複的工作放在某個函數里去完成,不用每次都重複的工作,這也是發明函數的目的,就是將重複的工作放到函數里去完成,下次直接調用。

也就是我們常說的」套路「和」模塊「

在商業裡面可能叫做解決方案,而在程序裡面就叫函數。

1.名稱:功能 2.輸入

add <- function(x,y){

z <- x+y

return (z) 3、輸出

}

編寫函數的模板

1.名稱:功能 2.輸入

my_fun <- function(arg1,arg2){body

return(data)

3、輸出

一般取名字的時候最好能表示出這個函數的功能。

編寫函數說白了就是一個套路

函數編寫好了必須通過編譯才能使用,編譯函數很簡單用滑鼠選中你整個代碼然後在鍵盤上按下ctrl+enter鍵

編譯好函數就可以使用函數了

函數和演算法就是套路,當你將經常重複使用的任務抽象到一個函數裡面,你已經是在寫演算法了。

深入學習」控制語句「 循環語句和條件語句

正常情況下R語言中的語句是從上到下運行的,但是有的時候你會期望重複執行某種語句,然後有的時候你會在滿足某種條件下的去執行某些語句。

舉個例子:

你每天重複做的事情就是吃飯,偶爾沒錢了你要到銀行取錢吃飯

for循環模板

要循環的數據

for(i in data){

body#對取出來的每一個數據i進行業務處理

}

看看另外一種循環語句:while循環語句

模板

while(condition){

body

}

例子

while循環重複的執行一個語句直到括弧裡面的條件「condition」不為正的時候才會停止,寫循環語句一定要寫出循環結束的條件,不然循環會一直循環下去。

條件語句

模板

if(condition){

body

}else{

body

}

案例:業務需求

王思聰飯卡1000元

每天三頓飯,每頓飯花掉5元

飯卡餘額<5元,提示。

周星馳飯卡1000元,

每天吃兩頓飯,每頓花掉5元

飯卡餘額<5元,提示。

不要擔心記不下來,記得大概就可以,課後把代碼下載下來進一步實踐,就會了,因為一切都是套路。

1.如何編寫函數

2.數據處理:dplyr,ggplot2

3.如何編寫業務模塊

4.代碼如何調試

dplyr包是數據處理包,幫助我們方便的處理數據。

ggplot2包是一個圖形化包,可以幫助我們數據分析處理後的結果用圖形的方式顯示出來。

回顧一下數據分析的步驟:

1.理解數據------要了解自己的數據

2.數據導入-------已經學過excel中的數據如何導入r語言

3.數據預處理

4.數據計算

5.數據顯示

不要擔心學不會,一切都是套路,你學會了套路以後就非常簡單,只要你再去實踐,你就一定能學會。

數據預處理,使用dplyr包對數據預處理:

1.選擇子集

2:列名重命名

3:刪除缺失數據

4:處理日期

5:數據類型轉換

6:數據排序

預處理基本上也是一個套路模板,把上面六步做完,基本上數據的預處理就完成了

第一步:上面的數據有19個變數,我們不可能對每一個變數都感興趣,像我們今天的問題我們只對航班的距離和航行的時間感興趣,所以我們選擇其中一部分數據出來就可以了。

第二步,我們對列名重命名

第三步:,刪除缺失數據,有些數據他就沒有值,沒有任何意義

第四步:處理日期,有些日期格式比較特殊,首先你要把它轉換成日期格式。

第五步:數據類型的轉換,比如字元串轉化成整型,各個類型之間轉化

第六步:

我們這次主要分析的目標是航班航行距離與延誤時間之間的關係,要時刻把這個目標記在自己的腦海里。

選擇子集

所以我們只要關係這五個變數:

欄位名 含義

year 航班日期-年

month 航班日期-月

day 航班日期-日

dep_delay 起飛延遲時間(分)

arr_delay 到達延遲時間(分)

distance 航行里程(英里)

dest 目的地

??????????????為什麼改列名沒有成功

用filter函數來查找數據:

< 小於

<= 小於或等於

>= 大於等於

== 嚴格等於

!= 不等於

!x 非x

x y x或y

x y x和y

isTRUE(x) 測試x是否為TRUE

filter中給定列名和它的值就可以查找出對應的數據來

利用我們之前學過的是個邏輯運算符,我們可以查找到任何我們想要查找的數據

例子1,假如我們想要去美國過個聖誕節,可以指定對應地列名12月25日飛行的航班的時間

例子2,我們查找航班延誤時間大於兩個小時的信息,由於起飛延誤和到達延誤都算航班延誤,所以我們用邏輯運算符 | (或)來為條件。

dplyr包中默認是用arrange函數來排序,默認是升序如果想要降序排序,在排序的列名前面加入「desc」的,desc也是英文中降序單詞的縮寫。

看一下我們之前做了哪些工作:

1.理解數據

2.數據導入

3.數據預處理

4.數據計算 &

5.數據顯示

如何使用dplyr包來進行數據計算

split只是對數據按屬性進行分組,每一組數據都有相同的屬性

Apply是對每組的數據進行分析分析計算

Combine是把分組計算的結果合併在一起

舉一個例子:

分析目標:航班航行的距離與到達延誤時間的關係

是航行距離越長飛機越容易耽誤呢?還是距離越短更容易耽誤呢?在進一步講飛行的距離與延誤的時間是線性關係,還是非線性關係呢?這裡我們關注兩個變數「飛行距離」、與「航行時間」,在進一步想同一目的地的航班飛行距離就是一樣的

目的地 到達延誤時間 距離

destination arr_delay diatance

北京 200 4000

上海 100 5000

北京 300 4000

北京 100 4000

上海 400 5000

對同一距離的數據進行分組

split(數據分組)

目的地 到達延誤時間 距離

北京 200 4000

北京 300 4020

北京 100 4070

目的地 到達延誤時間 距離

上海 100 5040

上海 400 5060

APPLY(應用函數)

目的地 平均延誤時間 平均距離

北京 200 4030

目的地 平均延誤時間 平均距離

上海 250 5050

Combine(組合結果)

目的地 平均延誤距離 平均距離

北京 200 4030

上海 250 5050

數據處理模式 split-Apply-Combine

split

(數據分組) group_by()

Apply

(應用函數)↘

↓ summarise()

Combine ↗

聽起來高達上數據分析模式看起來也很簡單,它就分為三步

在做統計分析時, 我們一般會移除樣本數據量比較少的數據,因為一般數據量比較少的情況下得出的結論很有可能是不正確的

什麼是管道呢?管道就是將上一個函數運行的結果作為下一個函數額輸入

ggplot(data = delay) 這個函數的作用是為畫圖準備一個空的畫板,為後面的繪圖做出準備

geom_point根據函數名稱我們就可以看出來它的作用是在畫板上繪出點的,我們詳細看下這個函數

第一部分是mapping輸入參數名

第二部分是aes是aesthetic(美學的)縮寫 ,說白了geom_point是在在控制面板上加了一個圖層,geom_point包就是用+號把每一個圖層一層一層的加到控制面板上去的。

ggplot2:繪圖模板

1.創建畫板

ggplot(data = <DATA>) + 尖括弧裡面的內容代表繪圖所需要的數據框

<GEOM_FUNCTION>(mapping = aes(<MAPPINGS>)) 尖括弧裡面GEOM_FUNCTION代表不同的ggplot的繪圖函數可以像是之前的散點圖函數或者是柱狀圖的函數。

2.添加圖層

下一步學習如何編寫業務模塊

項目:模塊化 ,很像衣櫃,把衣服按四季來分類等

項目中一般代碼模塊化的套路:

視圖模塊(view)

業務邏輯模塊(service)

數據層模塊(db)

在代碼的世界裡能複製就複製別自己去寫

把所有源代碼下下來跟著敲一遍,保證自己會看懂的!!!!!!!!!!!!!

代碼搜索,代碼調試比較難,沒聽懂也不要緊,課後把源代碼考下來,模仿一遍就會知道的

你遇到的問題,別擔心,任何事情都是套路

1.在代碼中是區分大小寫的,記住一點在任何編程語言里是區分大小寫的,在編程行業里有一個原則就是能複製粘貼的就複製粘貼

2.使用英文逗號

3.自動識別錯誤

4.如果控制台出現+,按esc鍵退出

5.遇到錯誤如何獲取幫助,在函數前面使用一個詳細的英文問號

?function_name,google,大數據社群內部討論

文章《如何使用谷歌解決遇到的問題》,在微信公眾號:猴子聊人物,回復谷歌可以好好學習下。

計算機技術是一門強調實踐的技術,聽的再多都不如自己去敲代碼理解一遍更好,遇到不懂的地方我們就谷歌查找答案,對於個人成長,提高個人學習能力非常的重要

實踐練習:

1.研究dplyr包的作者,翻譯他寫的一片數據分析的文章

2.在最大的數據網站kaggle上找數據做個分析案例

參考網站:

http://hadley.nz

2.www.kaggle.com/


推薦閱讀:

ggplot2 函數學習
Apache kylin的基礎運維
無人機數據收集、存儲以及深度挖掘

TAG:大数据分析 |