Python+統計學 | 探索常用的數據分析統計分布

2021-01-14 數據分析1480
# 導入相關模塊import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns%matplotlib inline%config InlineBackend.figure_format = 'retina'

計算機發明後,便產生了一種全新的解決問題的方式:使用計算機對現實世界進行統計模擬。該方法又稱為「蒙特卡洛方法(Monte Carlo method)」,起源於二戰時美國研製原子彈的曼哈頓計劃,它的發明人中就有大名鼎鼎的馮·諾依曼。蒙特卡洛方法的名字來源也頗為有趣,相傳另一位發明者烏拉姆的叔叔經常在摩洛哥的蒙特卡洛賭場輸錢,賭博是一場概率的遊戲,故而以概率為基礎的統計模擬方法就以這一賭城命名了。使用統計模擬,首先要產生隨機數,在Python中,numpy.random 模塊提供了豐富的隨機數生成函數。比如生成0到1之間的任意隨機數:
array([ 0.32392203,  0.3373342 ,  0.51677112,  0.28451491,  0.07627541])

np.random.randint(1, 10, size=5)  

計算機生成的隨機數其實是偽隨機數,是由一定的方法計算出來的,因此我們可以按下面方法指定隨機數生成的種子,這樣的好處是以後重複計算時,能保證得到相同的模擬結果。在NumPy中,不僅可以生成上述簡單的隨機數,還可以按照一定的統計分布生成相應的隨機數。這裡列舉了二項分布、泊松分布、指數分布和正態分布各自對應的隨機數生成函數,接下來我們分別研究這四種類型的統計分布。

np.random.binomial()

np.random.poisson()

np.random.exponential()

np.random.normal()

二項分布是n個獨立的是/非試驗中成功的次數的概率分布,其中每次試驗的成功概率為p。這是一個離散分布,所以使用概率質量函數(PMF)來表示k次成功的概率:最常見的二項分布就是投硬幣問題了,投n次硬幣,正面朝上次數就滿足該分布。下面我們使用計算機模擬的方法,產生10000個符合(n,p)的二項分布隨機數,相當於進行10000次實驗,每次實驗投擲了n枚硬幣,正面朝上的硬幣數就是所產生的隨機數。同時使用直方圖函數繪製出二項分布的PMF圖。
def plot_binomial(n,p):    '''繪製二項分布的概率質量函數'''    sample = np.random.binomial(n,p,size=10000)      bins = np.arange(n+2)     plt.hist(sample, bins=bins, align='left', normed=True, rwidth=0.1)          plt.title('Binomial PMF with n={}, p={}'.format(n,p))      plt.xlabel('number of successes')    plt.ylabel('probability')
plot_binomial(10, 0.5)

投10枚硬幣,如果正面或反面朝上的概率相同,即p=0.5, 那麼出現正面次數的分布符合上圖所示的二項分布。該分布左右對稱,最有可能的情況是正面出現5次。但如果這是一枚作假的硬幣呢?比如正面朝上的概率p=0.2,或者是p=0.8,又會怎樣呢?我們依然可以做出該情況下的PMF圖。
fig = plt.figure(figsize=(12,4.5)) p1 = fig.add_subplot(121)  plot_binomial(10, 0.2)p2 = fig.add_subplot(122)  plot_binomial(10, 0.8)

這時的分布不再對稱了,正如我們所料,當概率p=0.2時,正面最有可能出現2次;而當p=0.8時,正面最有可能出現8次。泊松分布用於描述單位時間內隨機事件發生次數的概率分布,它也是離散分布,其概率質量函數為:比如你在等公交車,假設這些公交車的到來是獨立且隨機的(當然這不是現實),前後車之間沒有關係,那麼在1小時中到來的公交車數量就符合泊松分布。同樣使用統計模擬的方法繪製該泊松分布,這裡假設每小時平均來6輛車(即上述公式中lambda=6)。
lamb = 6sample = np.random.poisson(lamb, size=10000)  bins = np.arange(20)plt.hist(sample, bins=bins, align='left', rwidth=0.1, normed=True) plt.title('Poisson PMF (lambda=6)')plt.xlabel('number of arrivals')plt.ylabel('probability')plt.show()


指數分布用以描述獨立隨機事件發生的時間間隔,這是一個連續分布,所以用質量密度函數表示:比如上面等公交車的例子,兩輛車到來的時間間隔,就符合指數分布。假設平均間隔為10分鐘(即1/lambda=10),那麼從上次發車開始,你等車的時間就滿足下圖所示的指數分布。
tau = 10sample = np.random.exponential(tau, size=10000)  plt.hist(sample, bins=80, alpha=0.7, normed=True) plt.margins(0.02)
x = np.arange(0,80,0.1)y = lam * np.exp(- lam * x)plt.plot(x,y,color='orange', lw=3)
plt.title('Exponential distribution, 1/lambda=10')plt.xlabel('time')plt.ylabel('PDF')plt.show()

正態分布是一種很常用的統計分布,可以描述現實世界的諸多事物,具備非常漂亮的性質,我們在下一講參數估計之中心極限定理時會詳細介紹。其概率密度函數為:以下繪製了均值為0,標準差為1的正態分布的概率密度曲線,其形狀好似一口倒扣的鐘,因此也稱鐘形曲線。
def norm_pdf(x,mu,sigma):    '''正態分布概率密度函數'''    pdf = np.exp(-((x - mu)**2) / (2* sigma**2)) / (sigma * np.sqrt(2*np.pi))    return pdf
mu = 0 sigma = 1
sample = np.random.normal(mu, sigma, size=10000)plt. hist(sample, bins=100, alpha=0.7, normed=True)
x = np.arange(-5, 5, 0.01)y = norm_pdf(x, mu, sigma)plt.plot(x,y, color='orange', lw=3)plt.show()

以上從計算機模擬的角度出發,介紹了四種分布,現在讓我們看一下現實中的數據分布。繼續上一講數據探索之描述性統計中使用的BRFSS數據集,我們查看其中的身高和體重數據,看看他們是不是滿足正態分布。首先導入數據,並編寫繪製PDF和CDF圖的函數 plot_pdf_cdf(),便於重複使用。
import brfssdf = brfss.ReadBrfss()height = df.height.dropna()weight = df.weight.dropna()

def plot_pdf_cdf(data, xbins, xrange, xlabel):    '''繪製概率密度函數PDF和累積分布函數CDF'''
fig = plt.figure(figsize=(16,5))
p1 = fig.add_subplot(121) std = data.std() mean = data.mean() x = np.arange(xrange[0], xrange[1], (xrange[1]-xrange[0])/100) y = norm_pdf(x, mean, std) plt.plot(x,y, label='normal distribution') plt.hist(data, bins=xbins, range=xrange, rwidth=0.9, alpha=0.5, normed=True, label='observables')      plt.legend() plt.xlabel(xlabel) plt.title(xlabel +' PDF')
p2 = fig.add_subplot(122) sample = np.random.normal(mean, std, size=10000) plt.hist(sample, cumulative=True, bins=1000, range=xrange, normed=True, histtype='step', lw=2, label='normal distribution')      plt.hist(data, cumulative=True, bins=1000, range=xrange, normed=True, histtype='step', lw=2, label='observables')      plt.legend(loc='upper left') plt.xlabel(xlabel) plt.title( xlabel + ' CDF') plt.show()

plot_pdf_cdf(data=height, xbins=21, xrange=(1.2, 2.2), xlabel='height')

但是體重分布明顯右偏,與對稱的正態分布存在一定的差異。
plot_pdf_cdf(data=weight, xbins=60, xrange=(0,300), xlabel='weight')

將體重數據取對數值後,其分布就與正態分布非常吻合。
log_weight = np.log(weight)plot_pdf_cdf(data=log_weight, xbins=53, xrange=(3,6), xlabel='log weight')

相關焦點

  • 統計學——常用統計量以及統計三大分布
    統計學中最重要的提取信息的方式就是對原始數據進行一定的運算,得出某些代表性的數字,以反映數據某些方面的特徵,這種數字稱為統計量。用統計學語言表述就是:統計量是樣本的函數,它不依賴於任何未知參數。常用統計量① 樣本均值它反映出總體X數學期望的信息。樣本均值是最常用的統計量。② 樣本方差 它反映的是總體X方差的信息。樣本方差和樣本標準差也是最常用的統計量。
  • 正態分布的常用數據 - CSDN
    #尋找真知派#如上一篇文章所述,樣本所屬總體服從正態分布是數據分析和數據挖掘等數據處理的重要前提。如果我們採集的樣本並不能確認其總體是否服從正態分布,那麼數據處理的結果就是不可靠的。因此,對樣本數據進行正態分布檢驗十分必要。
  • 機器學習數學基礎:數理統計與描述性統計
    概率論中, 我們研究隨機現象, 隨機變量, 但是我們是假設它們的分布已知, 比如已知某一隨機變量服從什麼分布, 在這個基礎上研究性質, 特點和規律(數字特徵啊, 隨機變量分布啊等), 而數理統計中, 我們研究隨機變量的分布未知或者一部分未知, 要去做的就是通過從未知分布中抽取多個樣本, 對這些數據進行統計分析, 從而研究隨機變量的分布等。
  • 從零開始學Python可視化(二):掌握統計圖形的繪製
    折線圖和散點圖常用且實用,但是並不能滿足我們的作圖需求。這次我們會嘗試更多常見的統計圖形,比如條形圖、直方圖、餅圖等,我們的目標是掌握工作學習過程中使用最頻繁的圖形技能。1. 柱狀圖(條形圖) —— bar() / barh()柱狀圖又叫條形圖,用於繪製定性(分類)數據的分布特徵,比如不同國家的GDP、不同年齡段的平均體重等。
  • 數學不好、英語不好、非本專業,想學Python數據分析,能安排嗎?
    有不少小夥伴問我,我想學Python數據分析,但是數學不好,英語也不好,還不是計算機專業的,能安排嗎?我的答案是,能。我想提幾點初學者常犯的思維誤區,正是這些誤區在阻礙我們去嘗試新事物。誤區一:學習python數據分析需要很強的數理基礎這個想法『部分正確』。
  • 一名合格的數據分析師,統計基礎不可或缺!
    作者 | CDA數據分析師 來源 | CDA數據科學研究院從事數據分析工作,統計基礎不可或缺。今天小編就來給大家好好梳理一下關於一名合格數據分析師所要掌握的統計基礎都有哪些,旨在為大家查缺補漏,讓大家的數據分析之路走得更紮實穩靠。統計的基本任務是對經濟社會發展情況進行統計調查、統計分析,提供統計資料和統計諮詢意見、實行統計監督。
  • 輕鬆快樂學統計——新書推介:《漫畫統計學》&《民生統計面面觀》
    輕鬆快樂學統計——新書推介:《漫畫統計學》&《民生統計面面觀》 2015年9月,第六屆「中國統計開放日」即將舉辦,10月,第二個「世界統計日」也將在全球舉行。統計數據被廣泛關注和運用,不僅成為經濟運行的「千裡眼」、政府決策的「參謀部」、企業運營的「百寶箱」,還是百姓生活的「智慧幫手」。 也許你覺得自己應該學點統計學了,但那些專業而枯燥的理論讀本正在消耗你的熱情和自信;也許你想知道那麼多統計指標對於我們每一個普通人意味著什麼,應該如何正確使用,卻無從著手。
  • 總結|臨床研究常見統計方法與統計問題
    臨床研究統計中的常用統計方法 1.1  描述統計方法 描述統計一般在統計分析報告中首先進行匯報,且不可缺少。逐一對臨床研究和樣本人群的特徵對應的單變量進行概括描述,但不對總體特徵進行推斷。在隨機對照試驗等涉及多組試驗中可作為基線特徵可比性的參考。正確使用描述統計的前提是必須了解臨床研究中數據類型。
  • python機器學習:常用庫的介紹及安裝
    用Anacond安裝Numpy庫3、代碼編寫是python版本的選擇,python是一個比較特殊的群體,一般語言的各大版本都是向下兼容的,但是python大半本為python3.x的是不兼容python2.x得,所以在寫代碼之前要確認後面的代碼要使用
  • 學統計:掌握統計數據描述指標,構建數據分析的基礎
    1 計量變量 資料的自然分布形態,稱為規律。 趨勢:集中和分散 秩均值(按數值大小排序,提取每個數據的位次,即秩次,求秩次的均值),常用語非參數檢驗 1 計數變量 反映數據間的互不相容的屬性和類別,指標有率、構成比和想對比。
  • Python語言基礎50課(3)​|一行代碼統計序列ATCG含量
    五大標準的數據類型為:Numbers(數字)String(字符串)List(列表)Tuple(元組)Dictionary(字典)還有一個數據類型日常用的比較少,因此沒有怎麼涉及。簡單來說,每一個python文件可以看作一個模塊,而不同的模塊中函數名(變量名)可以重複。使用上面的例子來看,構建兩個文件:$ less module1.pydef foo():    print('hello, world!')
  • Python編程題:兩個日期間的天數統計(附代碼)
    由於python中time模塊的很多函數都是可以直接計算出指定時間的時間戳(秒數),所以統計兩個日期間的總天數就非常方便了!代碼與運行結果:struct_time類型與時間格式轉換思考:如果不使用上述方法,該怎樣統計兩個日期之間的總天數呢?
  • 基於統計的常用熱阻模型介紹
    介紹一下強光探照燈基於統計的常用熱阻模型典型的強光探照燈熱阻模型就是用一些熱阻網絡代替封裝的熱流路徑,進而可以通過計算或有限元(FEM)和計算流體力學(CFD)軟體在模擬和預測晶片溫度和線路板的溫度分布。熱阻模型又可分為穩態模型和動態模型。動態模型是以穩態模型為基礎加入熱容等因素而形成的,它需要考慮的環境條件因素更為複雜。
  • 解答熱力學與統計物理學三大古老問題,彌補統計物理學局限性
    三層次統計物理模型假設與超越熱力學、統計物理學經典知識的親力親為案例,是作者長期自由探索基礎研究工作的結晶.切身體會是:求真求實,如半個世紀自由探索,五十多年不懈堅持.提出統計物理模型假設,推導自然體系物態方程.
  • 2018.03:我國服務業價格統計的探索與實踐(「服務業價格統計研究...
    我國服務業價格統計的探索與實踐——服務業價格統計研究報告之一 「服務業價格統計研究國家統計局自20世紀90年代中後期開始進行服務業價格統計的研究與探索工作,經歷了傳統調查試點和大數據方式的探索,調查方法制度逐漸完善。本文介紹了我國服務業價格統計的相關理論、服務業價格統計的艱難探索歷程和統計體系的構架,並對我國服務業價格統計工作提出了幾點認識與思考。
  • 小白學統計|你會有被統計支配的恐懼嗎?
    結合具體的課程內容來看,本課程對大家數學知識的要求是相當基礎的,具體來說大家只需要了解一些基本的數學公式即可,如: 對數與指數的基本運算法則:ex、lnx的轉換 一元二次函數的性質:y= (x-a)2在x=a時y取最小值本課程所涉及的數學公式,是為了幫助大家理解一些分布(如正態分布)的性質和數據轉換的形式,完全不涉及複雜的公式推導。
  • 概率統計之《指數分布》相關基本概念、性質與典型例題分析
    一、指數分布  在概率論和統計學中,指數分布(Exponential distribution)是一種連續概率分布,可以用來表示獨立隨機事件發生的時間間隔,比如旅客進機場的時間間隔、中文維基百科新條目出現的時間間隔等等。
  • AP統計沒煩惱:解析最經典的三種概率分布|統計概率
    今天我們來科普一下在概率論當中非常典型的三種概率分布:分別叫做伯努利分布、二項分布以及正態分布。通過這三種分布的關係來跟大家分析一下考試好壞到底何天賦有何關係。這三種分布同樣也會出現在AP統計的考試當中,但是作為科普文,今天只重點討論三種分布之間的關係,而不會涉及到過多的計算和證明。(此文章可放心食用)伯努利分布我們先來從伯努利實驗談起。
  • 統計專業學什麼?美國大學統計專業本科常見課程,你了解嗎?
    除此之外,也有一些院校的統計專業設置有更加細緻的分類。以哈佛大學為例,他們的統計專業有四個學習方向:  1. General Track通識性方向  該方向是最靈活的,為統計理論、方法和應用提供了原理和技術的基礎。這個基礎可以應用到很多領域。  2.