一直以來,小編都對數學有一種執念,似乎覺得只要數學好,就能走上人生巔峰。
N年後,看到數據科學發展得風生水起,並且跟數學息息相關,我暗自發誓:錯過的青春和數學我都要補回來!於是勾搭了一位數學科學家,想找他開開光。他噗嗤一笑,用飽含同情的目光看著我,鄭重地將《基本數學和數學科學統計教程》交到我手上。看了兩頁後,小編卒……
沒想到,除了數學之外,想要入門數據科學,統計學也是一座必須翻過去的大山。
正如喬西·威爾斯(Josh Wills)所說:
數據學家比任何程式設計師都更擅長統計,也比任何統計學家都更擅長編程。
一. 統計學簡介
統計學是一門與數據收集、分析、解釋和描述有關的數學科學。
數據學家和分析師能夠在運用統計學處理現實生活中的複雜問題時,採用多種統計函數、統計原理和算法對原始數據進行分析,建立統計模型,並對結果進行推斷和預測。
簡單地說,統計學可以通過對數據進行數學計算,從數據中獲得有意義的預測。
統計學對生活的各個領域都有影響,例如股票市場、生命科學、氣象、零售、保險和教育等領域。
二. 統計學中的基本術語
在學習數據科學中的統計學時,應該了解一些關鍵術語:
總體:一系列數據的集合。樣本:總體的子集。變量:任意可測量或計算的特徵、數目、數量。也可稱為數據項。統計參數或總體參數:表明一個概率分布的數量值,也稱為統計模型。例如,總體的平均值、中位數等。
三. 分析方法分類
任何事件均可以通過以下兩種方法之一來完成分析。
定量分析:定量分析(統計分析)是用數字和圖表收集和解釋數據以識別模式和趨勢的科學。定性分析:定性分析(非統計分析)的目的則是提供通用信息,並使用文字、聲音和其他形式的媒體來進行預測等行為。
例如,在星巴克點咖啡時,他們可以提供中杯、大杯和超大杯,這個信息就是定性分析的實例。但是如果收集到的信息是某個商店每周賣出70杯中杯咖啡,這就是定量分析,因為每周賣出的咖啡量有數據表示。
儘管兩種分析方法的目的都是為了得出結果,但是定量分析能夠以一目了然的方式呈現分析結果,所以它在分析學中至關重要。
四. 統計學分類
統計學中有兩大類,它們分別是:
1. 描述性統計
2. 推斷性統計
4.1 描述性統計
描述性統計指通過數值計算、圖表、表格得出的數據描述總體特徵。
描述性統計有利於整理數據,並關注提供參數的數據特徵。
設想一下,你想要調查某個班的學生的平均身高,描述性統計要求你記錄班中所有學生的身高,然後找出其中的最大值、最小值以及平均值。
4.2 推斷性統計
推斷性統計指根據所研究總體的數據樣本對總體特徵進行推斷和預測。推斷性統計使總體的某個大數據集一般化,並應用概率學相關知識推導結論。這類統計方法允許基於樣例統計信息推斷總體參數,並在此基礎上構建模型。
因此,如果用推斷性統計考慮「調查班級平均身高」這一相同問題,則需要先從整個班級中抽取若干樣本組成一個樣本集,然後將該樣本集中的學生分為高個、中等和矮個後大致形成一個統計模型,最後將它擴展至整個總體,即整個班級。
接著讓我們集中精力看看如何利用描述性統計解決分析問題。
五. 了解描述性分析
以圖表的形式表示數據時(例如直方圖、折線圖等),數據是基於某種集中趨勢來呈現的。集中趨勢度量(平均值、中位數)和離散趨勢度量可用於統計分析。為了更好地理解統計,我們通過例子來認識統計中的不同度量。
以下是含有變量的汽車樣本數據集:
1. 汽車
2. 每加侖行駛的英裡數(mpg)
3. 汽缸規格(cyl)
4. 位移數值(disp)
5. 馬力(hp)
6. 實際軸比(drat)
進行下一步前,我們先定義主要的中心度量或集中趨勢度量。
5.1 集中趨勢度量
1. 平均數:測量樣本中所有值的平均值。
2. 中位數:測量樣本集的中心值。
3. 眾數:數據集中出現頻率最多的數字。
你可以利用描述性方法分析樣本數據集中每個變量的平均值、標準差、最小值和最大值。
· 如果想要知道全部汽車的馬力平均值,要計算所有值的平均值。在這個例子中,我們要用所有輛車的馬力之和,除以總的汽車數量。
平均值 = (110+110+93+96+90+110+110+110)/8 = 103.625
· 如果想在全部汽車總體中找到mpg的中值,需將mpg值按升序或降序排列後再取其中間值。在本例中,由於這裡有八個值,即為偶數項。因此,我們應當取兩個中間值的平均值。
八輛車的mpg(排序後):21、21、21.3、22.8、23、23、23、23中位數 = (22.8+23 )/2 = 22.9
· 如果想找出汽車總體中最常見的氣缸類型,要統計重複次數最多的氣缸值。本例中有兩個汽缸值,即4和6。觀察一下數據集,發現重複出現次數最多的氣缸值是6,因此6是眾數。
5.2 離散趨勢度量
除了集中趨勢度量,還有離散趨勢度量。
1.值域:即數據集中各值之間距離的尺度。
2.四分位間距(又稱四分差,簡稱IQR):基於數據集分為四等份的變量測量尺度。
3.方差:描述隨機變量和預期值之間的差異,由偏差的平方計算所得。
4.偏差:各數值與均值之間的差異。
5.總方差:偏差平方的均值。
6.樣本方差: 樣本單位變量值與其算術平均數的離差的平方的平均數。
7.標準差:計量數據集與平均值的離差程度。
了解了描述分析法背後的統計與數學之後,現在試著在R程序中運用剛剛學到的知識。
5.3 統計學在R軟體中的應用
使用R軟體的人越來越多的原因有許多:
· R軟體是開放原始碼軟體,並且可以免費獲得。與SAS或Matlab不同,用戶可以免費安裝、使用、升級、複製、修改、再開發及轉售。
· R軟體可實現跨平臺兼容。Windows、Mac OS X和Linux系統都可使用,還可以從Microsoft Excel、Microsoft Access、MySQL、SQLite、Oracle等程序中導入數據。
· R語言是一種強大的腳本語言,可以處理大型複雜的數據集。
· R語言具有高度靈活性和進化性。統計學的許多新發展是以R語言為載體首發。
現在我們進一步學習如何利用R語言實現描述統計。
5.4 描述性統計在R軟體中的應用
理解一個概念最好的方法是在實際中應用概念。本節中,將通過一個小演示展示如何計算平均值、中位數、眾數、方值、標準差,以及如何通過繪製直方圖研究變量。這是一個相當簡單的演示,但它構成了機器學習算法的基礎。
步驟一:導入計算數據
>set.seed(1)
#Generate random numbers and store it in a variable called data
>data = runif(20,1,10)
步驟二:計算數據的平均值
#Calculate Mean
>mean = mean(data)
>print(mean) [1] 5.996504
步驟三:計算數據的中位數
#Calculate Median
>median = median(data)
>print(median) [1] 6.408853
步驟四:計算數據的眾數
#Create a function for calculating Mode
>mode <- function(x) { >ux <- unique(x) >ux[which.max(tabulate(match(x, ux)))]
}
>result <- mode(data) >print(data) [1] 3.389578 4.349115 6.155680 9.173870 2.815137 9.085507 9.502077 6.947180 6.662026
[10] 1.556076 2.853771 2.589011 7.183206 4.456933 7.928573 5.479293 7.458567 9.927155
[19] 4.420317 7.997007 >cat("mode= {}", result) mode= {} 3.389578
步驟五:計算數據的方差&標準差
#Calculate Variance and std Deviation
>variance = var(data)
>standardDeviation = sqrt(var(data))
>print(standardDeviation) [1] 2.575061
步驟六:繪製直方圖
#Plot Histogram
>hist(data, bins=10, range= c(0,10), edgecolor='black')
直方圖用於表示數據點的頻數:
學習了描述性統計之後,現在一起來談談推斷性統計。
六. 了解推斷性統計
統計學家利用假設檢驗,對此假設應該被拒絕還是接受作出推斷。假設檢驗是一種基本的統計推斷形式,用來確定抽樣研究中是否有足夠的證據推斷某一特定條件對總體適用。
為了研究一般總體特徵,我們採取隨機抽取樣本並分析其樣本屬性。我們檢驗其已知的結論是否準確反映總體特徵,最後解釋得出的結果。是否接受假設取決於假設的發生概率。
為了更好地闡述這些,我們來看一個例子。
假設有四個男孩逃課了被抓住了,他們分別是尼克、約翰、鮑勃、哈利。因此,他們被要求留校打掃教室衛生以示懲罰。
所以,約翰決定他們四個輪流打掃教室。他想出了一個計劃,即把每個人的名字寫在紙條上,然後把紙條放在一個碗裡。每天他們必須從碗裡取一個名字,而抽出的那個人必須打掃教室。
現在發現3天過後,除了約翰沒有被抽中,其他幾個的名字都被抽中了。假設這個事件完全隨機且沒有偏見,那麼約翰不作弊的概率是多少?
先計算一下一天中約翰不被抽中的概率:
P(每天約翰不被抽到) = 3/4 = 75%
概率是75%,一個相當高的概率。但是如果是三天內約翰連續不被抽中的概率降至42%。
P(3天約翰都不被抽到) = 3/4 ×3/4× 3/4 = 0.42 (保留兩位小數)
現在,假設這樣一個情景:約翰連續12天不被抽中。概率降至了3.2%,因此,這種情況下約翰作弊的概率就相當高了。
P(連續12天約翰都不被抽到) = (3/4) ^12 = 0.032 <0.05
統計學家為了得出結論,他們提出了閾值。考慮上面的情景,如果閾值設定為5%,這表明,如果概率低於5%,那麼表明約翰為了不留校而作弊了,但是如果概率高於5%,那麼約翰只是幸運地沒有被抽中而已。
這個概率和假設檢驗引出了兩個重要的概念,分別是:
· 零假設:結果與假設無異。
· 對立假設:結果證明假設是虛假的。
因此,在這個例子中,如果一個事件擇發生的概率小於5%,那麼它就是一個有偏事件,即它接受了對立假設。
6.1 推斷性統計在R中的應用
在下述的演示中,我們將使用gapminder數據集進行假設檢驗。gapminder數據集包含了142個國家從1952年到2007年,每隔五年的人均預期壽命、人均GDP和人口數的相關數據。
首先,下載gapminder數據包,然後將其導入R語言環境。
#Install and Load gapminder package
install.packages("gapminder")
library(gapminder)
data("gapminder")
現在,利用View()函數在R中查看數據集。
#Display gapminder dataset
View(gapminder)
快速瀏覽該數據集:
接下來,加載R提供的臭名昭著的dplyr安裝包。我們希望在dplyr包中使用管道(%>%)操作符。對於不知道管道操作符的人,只需要知道它能夠將數據從左側導入到管道右側的數據中。
#Install and Load dplyr package
install.packages("dplyr")
library(dplyr)
下一步,就是比較兩個地區(愛爾蘭和南非)的平均預期壽命,並進行t檢驗(t-text),以檢查比較是否遵循零假設或對立假設。
#Comparing the variance in life expectancy in South Africa & Ireland
df1 <-gapminder %>%
select(country, lifeExp) %>%
filter(country == "South Africa" | country =="Ireland"
因此,在將t檢驗應用於數據框(df1)並比較平均預期壽命後,就會看到下面的結果:
#Perform t-test t.test(data = df1, lifeExp ~ country) Welch Two Sample t-test data: lifeExp by country
t = 10.067, df = 19.109, p-value = 4.466e-09
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
15.07022 22.97794
sample estimates:
mean in group Ireland mean in group South Africa
73.01725 53.99317
愛爾蘭和南非的平均預期壽命相差20歲。現在我們需要檢驗南非和愛爾蘭平均預期壽命的差異是否實際有效,而不僅僅是偶然發生的。所以,接著進行t檢驗。
這裡要特別注意p值(p-value),也就是概率值。涉及到確保模型的重要性時,p值是一個非常重要的衡量標準,只有當p值小於預先設定的統計顯著性水平(理想情況下為0.05)時,才稱該模型具有統計學意義。從輸出結果中看,p值是4.466e-09,這是一個非常小的值。
在模型的簡要總結中,請注意另一個重要參數t值。較大的t值表明對立假設是正確的,即人均預期壽命的差異並不完全是因為運氣好而等於零。因此,在我們的例子中,零假設被拒絕。
為了對演示做總結,我們以洲為單位繪製了圖表,該圖表顯示出每個洲的平均預期壽命是如何隨著該大陸各自的人均GDP而變化。
#Plotting a gdpPercap vs lifeExp graph for each continent
#Install and Load ggplot2 package
install.packages("ggplot2")
library(ggplot2)
gapminder%>%
filter(gdpPercap < 50000) %>%
ggplot(aes(x=log(gdpPercap), y=lifeExp, col=continent, size=pop))+
geom_point(alpha=0.3)+
geom_smooth(method = lm)+
facet_wrap(~continent
上圖中,你幾乎可以看到每個大陸人均GDP與預期壽命的線性差異。這也表明R語言可以很好地用於統計分析。
……OK,fine……誰能看懂請拿走不謝,小編我……