零基礎學習Python數據分析:科學計算庫NumPy(2)

本節,我們將首先使用NumPy對單變數數據進行基本的統計計算,由淺入深進行學習。單變數數據被儲存在NumPy數組中。

Unit 3 Statistical Distributions with NumPy


Lesson 2 Introduction to Statistics with NumPy

一、平均數Mean

NumPy作為科學計算模塊,儲備了大量的統計函數。其中最常見的就是平均數的計算。np.mean

假設經營一家啤酒廠,在三地有經銷商。想計算一下每個地方一周平均銷售多少酒。

import numpy as npstore_one = np.array([2, 5, 8, 3, 4, 10, 15, 5])store_two = np.array([3, 17, 18, 9, 2, 14, 10])store_three = np.array([7, 5, 4, 3, 2, 7, 7])store_one_avg = np.mean(store_one)store_two_avg = np.mean(store_two)store_three_avg = np.mean(store_three)print store_one_avgprint store_two_avgprint store_three_avg

也可以使用np.mean計算百分比,按上節所學,邏輯操作中,NumPy將對數組中的每項進行評估,確定它是否匹配指定的條件。當把np.mean和條件結合起來後,會得到返回值為True的項目個數與數組長度的比值,因為,如果符合給定條件,則返回的對應數組值為True(為1),反之,則返回的對應數組值為False(為0)。(百分比)

用已經畢業的校友畢業年份數據集來說明,找出2005年以後畢業的校友佔總人數的比例:

import numpy as npclass_year = np.array([1967, 1949, 2004, 1997, 1953, 1950, 1958, 1974, 1987, 2006, 2013, 1978, 1951, 1998, 1996, 1952, 2005, 2007, 2003, 1955, 1963, 1978, 2001, 2012, 2014, 1948, 1970, 2011, 1962, 1966, 1978, 1988, 2006, 1971, 1994, 1978, 1977, 1960, 2008, 1965, 1990, 2011, 1962, 1995, 2004, 1991, 1952, 2013, 1983, 1955, 1957, 1947, 1994, 1978, 1957, 2016, 1969, 1996, 1958, 1994, 1958, 2008, 1988, 1977, 1991, 1997, 2009, 1976, 1999, 1975, 1949, 1985, 2001, 1952, 1953, 1949, 2015, 2006, 1996, 2015, 2009, 1949, 2004, 2010, 2011, 2001, 1998, 1967, 1994, 1966, 1994, 1986, 1963, 1954, 1963, 1987, 1992, 2008, 1979, 1987])millennials=np.mean(class_year>=2005)print millennials

返回值0.21

在二維數組中,np.mean可用於計算內數組或全部項的均值。

ring_toss = np.array([[1, 0, 0], [0, 0, 1], [1, 0, 1]])np.mean(ring_toss)

>>0.44444444444444442

np.mean(ring_toss, axis=1)

>>array([ 0.33333333, 0.33333333, 0.66666667]) 每個內數組的interior array的均值。

Ps.axis=1表示行,axis=0表示列。

np.mean(ring_toss, axis=0)

array([ 0.66666667, 0. , 0.66666667]) 每列均值。

二、離群值Outliers

離群值(outlier),也稱逸出值,是指在數據中有一個或幾個數值與其他數值相比差異較大。

識別離群值很重要,因為如果不注意它們,會扭曲數據並導致分析錯誤(比如確定平均值)。

當我們能夠識別異常值後,我們可以確定它們是否是樣本中的一個錯誤,或者它們是否代表了一個顯著的但實際偏離平均值的真實值。比如,給學生們測身高,其中一位用的是厘米做單位而不是英尺,則出現了一個錯誤的離群值。有時一些特殊情況也會造成真實的離群值。

使用numpy功能np.sort排序數據

在NumPy中,快速識別異常值的一種方法是對數據進行整理排序,一旦我們的數據進行排序,我們就可以快速瀏覽數組的開頭或結尾,看看有些值是否遠遠超出了預期的範圍。

學生身高中

heights = np.array([49.7, 46.9, 62, 47.2, 47, 48.3, 48.7])np.sort(heights)

>>array([ 46.9, 47. , 47.2, 48.3, 48.7, 49.7, 62]) 可以看到62是一個明顯的離群值。

三、中位數Median

python系統沒有自帶的median函數。Numpy作為python的科學計算庫提供了很多便捷的內置函數,np.median()即可計算中位數。

中位數和平均值的比較對於判斷是否為有偏分布非常重要。

四、Percentiles百分位數

中位數就是特殊的百分位數,有50%的數大於它,50%的數小於它。5%Percentiles表示5%的數小於此。

NumPy中計算百分位數的代碼是np.percentile

d = np.array([1, 2, 3, 4, 4, 4, 6, 6, 7, 8, 8])print np.percentile(d, 40)

>>4.00

第一四分位數(first/lower quartile)------25th percentile

第三四分位數(Third/upper quartile)------75th percentile

np.percentile(d, 25)np.percentile(d, 75)

>>> 3.5

>>> 6.5

有50%的數據分布在3.5-6.5.(interquartile range=6.5-3.5=3)。相同特徵類型的數據集interquartile range值越大代表方差越大。

五、標準差Standard Deviation

標準差(Standard Deviation)用σ表示。標準差是方差的算術平方根。標準差能反映一個數據集的離散程度。平均數相同的兩組數據,標準差未必相同。標準差定義是總體各單位標準值與其平均數離差平方的算術平均數的平方根。

NumPy中計算算數平方根用np.std。


https://s3.amazonaws.com/codecademy-content/courses/numpy/intro-stats-numpy.htmls3.amazonaws.com

本節參考資料。

推薦閱讀:

大數據交易的「上海模式」,底氣在哪裡? | 數據科學50人·湯奇峰
2018智能周報 | 02.17-02.25 | 附資源地址 | AI作惡、CVPR會議、IBM量子計算揭秘……
AI時代:聊聊大數據中的MapReduce
大數據計數原理1+0=1這你都不會算(五)No.55
巨變將至!未來人類不分階層,只分物種

TAG:數據分析 | 商業分析 | 大數據 |