今天帶來的是Datawhal自主學習Numpy下學習打卡筆記第三部分—統計相關。
本文大致介紹了數理統計的相關背景知識,以及神奇的本福特定律。
本文素材來自網絡及Datawhale。
統計學
統計學是一門與數據的收集、組織、分析、解釋和呈現有關的學科。在將統計學應用於一個科學、工業或社會問題時,傳統的做法是先從要研究的統計群體或統計模型開始。人口可以是不同的人群或物體,如 "居住在一個國家的所有人 "或 "組成晶體的每個原子"。統計學涉及數據的方方面面,包括調查和實驗設計方面的數據收集規劃參見概率和統計學詞彙表。
當無法收集普查數據時,統計學家通過制定具體的實驗設計和調查樣本來收集數據。代表性抽樣保證了推論和結論可以合理地從樣本擴展到整個人口。實驗研究包括對所研究的系統進行測量,對系統進行操作,然後用同樣的程序進行額外的測量,以確定操作是否改變了測量值。相反,觀察性研究不涉及實驗操作。
在數據分析中主要使用兩種統計方法:描述性統計,使用平均值或標準差等指標對樣本數據進行總結;推斷性統計,從存在隨機變化的數據中得出結論(如:觀測誤差、抽樣變異)。描述性統計最常關注的是分布(樣本或人群)的兩組特性:中心傾向(或位置)旨在表徵分布的中心值或典型值,而分散性(或變異性)則表徵分布中各成員偏離其中心和彼此的程度。數理統計的推論是在概率論的框架下進行的,概率論涉及隨機現象的分析。
標準統計程序涉及收集數據,以測試兩個統計數據集之間的關係,或者測試從理想化模型中提取的數據集和綜合數據。為兩個數據集之間的統計關係提出了一個假設,並將其作為兩個數據集之間不存在關係的理想化零假設的替代選擇。拒絕或反駁零假設是使用統計測試完成的,該測試量化了在給定測試中使用的數據的情況下可以證明零假設為假的意義。從零假設出發,可以識別兩種基本形式的錯誤:類型I錯誤(錯誤假設否定了零假設,給出了「假陽性」)和類型II錯誤(錯誤假設未被拒絕且未考慮總體之間的實際關係)一個「假陰性」)。與該框架相關的問題很多:從獲得足夠的樣本量到指定充分的零假設。
生成統計數據的測量過程也會出錯。這些錯誤中有許多被分類為隨機(噪聲)或系統性(偏差),但也可能發生其他類型的錯誤(例如,失誤,例如分析人員報告不正確的單位時)。丟失數據或檢查的存在可能導致估計偏差,並且已經開發出解決這些問題的特定技術。
關於概率和統計的最早著作,是從概率論中借鑑的統計方法,可以追溯到阿拉伯數學家和密碼學家,尤其是Al-Khalil(717-786)和Al-Kindi(801-873)。在18世紀,統計數據也開始大量地來自微積分。近年來,統計數據越來越依賴統計軟體來進行這些測試,例如描述性分析。
數理統計是數學在統計學中的應用。用於此的數學技術包括數學分析、線性代數、隨機分析、微分方程和計量理論概率論 。
最早的概率和統計學著作可以追溯到8世紀至13世紀的伊斯蘭黃金時代的阿拉伯數學家和密碼學家。Al-Khalil (717-786)撰寫的《密碼電文書》,書中首次使用了換元和組合,列出了所有可能的帶元音和不帶元音的阿拉伯語單詞,最早的統計學著作是9世紀阿拉伯學者Al-Kindi (801-873)寫的論文《解密密碼電文手稿》。在書中,Al-Kindi詳細介紹了如何利用統計學和頻率分析來破譯加密信息。這篇文章奠定了統計學和密碼分析的基礎。Al-Kindi也是已知最早使用統計推理的人,同時他和後來的阿拉伯密碼學家發展了早期的統計方法來解密加密信息。Ibn Adlan(1187-1268)後來做出了重要的貢獻,就是在頻率分析中使用樣本量。
歐洲最早的統計學著作可以追溯到1663年,John Graunt發表了《關於死亡率法案的自然和政治觀察》。統計學思想的早期應用圍繞著國家根據人口和經濟數據制定政策的需要,因此其統計學的起源也就隨之而來。19世紀初,統計學科的範圍擴大到包括一般數據的收集和分析。今天,統計學被廣泛地應用於政府、商業、自然科學和社會科學。
現代統計學的數學基礎是在17世紀隨著Gerolamo Cardano、Blaise Pascal和Pierre de Fermat對概率論的發展而奠定的。數學概率論產生於對偶然性遊戲的研究,中世紀的Juan Caramuel等哲學家對概率的概念進行了研究,1805年Adrien-Marie Legendre首先描述了最小二乘法。
現代統計學領域出現在19世紀末20世紀初,分為三個階段。第一波浪潮在世紀之交,由Francis Galton和Karl Pearson的工作引領,他們將統計學轉變為一門嚴謹的數學學科,不僅用於科學領域,也用於工業和政治領域的分析。Galton的貢獻包括引入標準差、相關、回歸分析的概念,並將這些方法應用於研究人類的各種特徵--身高、體重、睫毛長度等。Pearson發展了皮爾遜乘積矩相關係數,定義為乘積矩,對樣本進行分布擬合的矩法和皮爾遜分布等,Galton和Pearson創辦了《生物統計學》(Biometrika),作為第一本數理統計學和生物統計學(當時稱為生物測量學)雜誌,後者在倫敦大學學院創辦了世界上第一個大學統計系。
Ronald Fisher在貴婦品茶實驗中創造了 "零假設 "一詞,"在實驗過程中,零假設永遠不會被證明或成立,但有可能被否定"。
20世紀10、20年代的第二波浪潮由William Sealy Gosset發起,並在Ronald Fisher的見解中達到頂峰,他撰寫的教科書為世界各大學的學術學科下了定義。Fisher最重要的著作是1918年的開創性論文《孟德爾遺傳假設下親屬間的相關性》(第一次使用統計學術語--方差),1925年的經典著作《研究工作者的統計方法》和1935年的《實驗設計》,他發展了嚴格的實驗設計模型並首創了充分性、輔助統計、費雪線性判別器和費雪信息等概念。 在1930年出版的《自然選擇的遺傳理論》一書中,他將統計學應用於各種生物學概念,如費雪原理(A. W. F. Edwards稱其為 "可能是進化生物學中最著名的論點")和費雪失控,是性選擇中關於進化中發現的一種正反饋失控影響的概念。
最後一次浪潮主要是對早期發展的完善和擴展,出現在20世紀30年代Egon Pearson和Jerzy Neyman的合作工作中。他們引入了 "二型"誤差、檢驗效能和置信區間的概念。Jerzy Neyman在1934年表明,分層隨機抽樣一般來說是比目的性(配額)抽樣更好的估計方法。
今天,統計方法被應用於所有涉及決策的領域,用於從經過整理的數據中作出準確的推斷,以及在面對不確定性的情況下根據統計方法作出決定。現代計算機的使用加快了大規模統計計算的速度,也使人力難以實現的新方法成為可能。如今統計學仍然是一個積極研究的領域,例如,如何分析大數據的問題。
數據收集
數據取樣
在無法收集完整的普查數據時,統計人員通過制定具體的實驗設計和調查樣本來收集樣本數據。統計學本身也提供了通過統計模型進行預測和預報的工具。根據抽樣數據進行推斷的想法大約始於16世紀中葉,與估計人口和開發人壽保險的前身有關 。
為了將一個樣本作為整個人口的參照物,重要的是它要真正代表整個人口。有代表性的抽樣可以保證推論和結論可以安全地從樣本延伸到整個人口。一個主要的問題在於確定所選樣本的實際代表性。統計學提供了估計和糾正樣本和數據收集程序中任何偏差的方法。還有一些實驗設計的方法,可以在研究的一開始就減少這些問題,加強其辨別人口真相的能力。
抽樣理論是概率論這門數學學科的一部分。在數理統計學中,概率論用於研究抽樣統計的抽樣分布,更一般地用於研究統計程序的特性。當所考慮的系統或人群滿足方法的假設時,任何統計方法的使用都是有效的。經典概率論與抽樣理論在觀點上的區別,大致是概率論從總人口的給定參數出發,推導出與樣本有關的概率。而統計推理則是反其道而行之--從樣本出發,歸納推斷出大群體或總群體的參數。
實驗性和觀察性研究
統計研究項目的一個共同目標是研究因果關係,特別是得出預測因素或獨立變量值的變化對因變量的影響的結論。因果統計研究主要有兩類:實驗研究和觀察研究。在這兩類研究中,都是觀察一個獨立變量(或變量)的差異對因變量行為的影響。兩種類型的區別在於如何實際進行研究。每一種研究都可以非常有效。實驗研究包括對被研究的系統進行測量,對系統進行操作,然後用同樣的程序進行額外的測量,以確定操作是否改變了測量值。相反,觀察性研究不涉及實驗性操作。取而代之的是,收集數據並研究預測因素和反應之間的相關性。雖然數據分析工具在隨機研究的數據上效果最好,但它們也適用於其他類型的數據,如自然實驗和觀察性研究--對於這些數據,統計學家會使用經過修改的、更有條理的估計方法(例如,差異估計和工具變量等),以產生一致的估計器。
實驗
統計實驗的基本步驟:
制定研究計劃,包括確定研究的重複次數,使用以下信息:關於處理效果大小的初步估計,替代假設,以及估計的實驗變異性。考慮實驗對象的選擇和研究倫理是必要的。統計學家建議實驗將(至少)一種新的處理與標準處理或對照組進行比較,以便對處理效果的差異進行無偏估計。設計實驗,使用區塊以減少混雜變量的影響,並將處理隨機分配給受試對象,以便對處理效果和實驗誤差進行無偏估計。在這一階段,實驗人員和統計人員編寫實驗方案,指導實驗的執行,方案規定了實驗數據的主要分析。按照實驗方案進行實驗,並按照實驗方案對數據進行分析。進一步對數據集進行二次分析研究,為今後的研究提出新的假設。記錄並展示研究結果。關於人類行為的實驗有特殊的關注點。著名的霍桑研究考察了西電公司霍桑工廠工作環境的變化。研究人員有興趣確定增加照度是否會提高流水線工人的生產率。研究人員首先測量了工廠的生產率,然後修改了工廠一個區域的照度,並檢查照度的變化是否會影響生產率。結果發現,生產率確實有所提高(在實驗條件下)。但是,這項研究由於實驗程序上的錯誤,特別是缺乏對照組和盲目性,今天受到了嚴厲的批評。霍桑效應指的是發現一個結果(在這種情況下,工人的生產率)由於觀察本身而發生了變化。在霍桑研究中,那些人變得更有生產力,不是因為照明被改變,而是因為他們被觀察到了(想到了當年被注視著完成家庭作業的恐懼)。
觀察性研究
觀察性研究的一個例子是探討吸菸與肺癌之間的關係。這種類型的研究通常使用調查收集對感興趣範疇的觀察結果,然後進行統計分析。在這種情況下,研究者會收集吸菸者和非吸菸者的觀察結果,也許是通過(cohort study)組群研究,然後尋找每組中肺癌的病例數。 病例對照研究是另一種類型的觀察性研究,在這種研究中,邀請有或沒有相關結果(如肺癌)的人參加,並收集他們的接觸史。
數據種類
科學家們曾做過各種嘗試,以產生測量水平的分類學。心理物理學家Stanley Smith Stevens定義了名義量表、序數、區間和比率量表。名義測量在數值之間沒有有意義的等級順序,並且允許任何一對一(注入式)的轉換。有序測量在連續的值之間有不精確的差異,但對這些值有一個有意義的順序,並允許任何順序保存的轉換。區間測量有定義的測量值之間的有意義的距離,但零值是任意的(如在經度和溫度測量的情況下,在攝氏度或華氏度),並允許任何線性轉換。比率測量既有一個有意義的零值,又定義了不同測量值之間的距離,並且允許任何重新縮放變換。
由於只符合名義測量或序數測量的變量不能合理地進行數值測量,所以有時將它們歸為分類變量,而比值測量和區間測量則歸為定量變量,由於它們的數值性質,可以是離散的,也可以是連續的。這樣的區分往往可以與計算機科學中的數據類型鬆散相關,二元分類變量可以用布爾數據類型表示,多元分類變量用積分數據類型中任意賦值的整數表示,連續變量用涉及浮點計算的實數數據類型表示。但計算機科學數據類型與統計數據類型的映射取決於對後者實施哪種分類。
還有人提出了其他的分類方法。例如,Mosteller和Tukey(1977)區分了等級、行列、計數分數、計數、份量和結餘。Nelder(1990)描述了數據的連續計數、連續比率、計數比率和分類模式。(另見 Chrisman(1998),van den Berg(1991)。
關於是否應該對從不同種類的測量程序中獲得的數據採用不同種類的統計方法的問題,由於涉及變量的轉換和對研究問題的準確解釋等問題而變得複雜。"數據與其所描述的內容之間的關係,只是反映了某些種類的統計報表可能具有真值,而這些真值在某些變換下並不是不變的。考慮一種轉換是否合理,取決於人們試圖解決的問題"。
統計方法
描述性統計
描述性統計(在計數名詞意義上)是一種總結性統計,它能定量地描述或總結信息集合的特徵,而廣泛意義上的描述性統計則是使用和分析這些統計數據的過程。描述性統計與推斷性統計(或歸納性統計)的區別在於,描述性統計的目的是對樣本進行總結,而不是利用數據來了解數據樣本被認為代表的人群。
推斷性統計
統計推斷是利用數據分析推斷基本概率分布屬性的過程。推斷性統計分析推斷一個群體的屬性,例如通過檢驗假設和推導估計。它假設觀察到的數據集是從一個更大的群體中抽樣出來的。推斷性統計可以與描述性統計進行對比。描述性統計只關注觀察到的數據的屬性,它並不以數據來自較大群體的假設為基礎。【1】
Benford's law
本福德定律,又稱紐科姆-本福德定律、異常數字定律或首位數定律,是關於許多現實生活中數字數據集合中前導數字的頻率分布的觀察。該定律指出,在許多自然出現的數字集合中,前導數字很可能在服從該定律的集合中,數字1作為前導重要數字出現的次數約為30%,而9作為前導重要數字出現的次數不到5%。如果這些數字是均勻分布的,那麼它們各自出現的次數約佔11.1%。本福德定律還對第二位數字、第三位數字、數字組合等的分布進行了預測。
這是關於任意(整數)基數表示的數的廣義定律的無限多案例之一,它排除了這種現象可能是10號基數系統的人為因素。Hill 在1995年發表了進一步的廣義結果,包括對第n個前導數位以及前導數位的聯合分布的類比聲明,後者導致了一個推論,其中重要數位被證明是一個統計學上依賴的量。
事實證明,這個結果適用於各種各樣的數據集,包括電費單、街道地址、股票價格、房價、人口數量、死亡率、河流長度以及物理和數學常數。就像其他關於自然數據的一般原理一樣--例如許多數據集都能很好地近似於正態分布這一事實--有一些說明性的例子和解釋涵蓋了許多適用於本福德定律的情況,儘管還有許多適用於本福德定律的其他情況難以得到簡單的解釋當數值分布在多個數量級上時,它往往是最準確的,特別是當產生數字的過程是由冪律描述的時候(這在自然界中很常見)。
該定律以物理學家Frank Benford的名字命名,他於1938年在一篇名為 "異常數定律 "的論文中指出了這一定律,儘管西蒙-紐科姆(Simon Newcomb)在1881年就曾提出過這一定律。【2】
公式
Datawhale講義
講義連結:
http://datawhale.club/t/topic/185
統計相關
次序統計
計算最小值
numpy.amin(a[, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue, where=np._NoValue])Return the minimum of an array or minimum along an axis.【例】計算最小值
import numpy as npx = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 35]])y = np.amin(x)print(y) # 11y = np.amin(x, axis=0)print(y) # [11 12 13 14 15]y = np.amin(x, axis=1)print(y) # [11 16 21 26 31]
計算最大值
numpy.amax(a[, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue, where=np._NoValue])Return the maximum of an array or maximum along an axis.【例】計算最大值
import numpy as npx = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 35]])y = np.amax(x)print(y) # 35y = np.amax(x, axis=0)print(y) # [31 32 33 34 35]y = np.amax(x, axis=1)print(y) # [15 20 25 30 35]
計算極差
numpy.ptp(a, axis=None, out=None, keepdims=np._NoValue) Range of values (maximum - minimum) along an axis. The name of the function comes from the acronym for 『peak to peak』.【例】計算極差
import numpy as npnp.random.seed(20200623)x = np.random.randint(0, 20, size=[4, 5])print(x)# [[10 2 1 1 16]# [18 11 10 14 10]# [11 1 9 18 8]# [16 2 0 15 16]]print(np.ptp(x)) # 18print(np.ptp(x, axis=0)) # [ 8 10 10 17 8]print(np.ptp(x, axis=1)) # [15 8 17 16]
計算分位數
numpy.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=False) Compute the q-th percentile of the data along the specified axis. Returns the q-th percentile(s) of the array elements.a:array,用來算分位數的對象,可以是多維的數組。q:介於0-100的float,用來計算是幾分位的參數,如四分之一位就是25,如要算兩個位置的數就[25,75]。axis:坐標軸的方向,一維的就不用考慮了,多維的就用這個調整計算的維度方向,取值範圍0/1。【例】計算分位數
import numpy as npnp.random.seed(20200623)x = np.random.randint(0, 20, size=[4, 5])print(x)# [[10 2 1 1 16]# [18 11 10 14 10]# [11 1 9 18 8]# [16 2 0 15 16]]print(np.percentile(x, [25, 50])) # [ 2. 10.]print(np.percentile(x, [25, 50], axis=0))# [[10.75 1.75 0.75 10.75 9.5 ]# [13.5 2. 5. 14.5 13. ]]print(np.percentile(x, [25, 50], axis=1))# [[ 1. 10. 8. 2.]# [ 2. 11. 9. 15.]]
均值與方差
計算中位數
numpy.median(a, axis=None, out=None, overwrite_input=False, keepdims=False) Compute the median along the specified axis. Returns the median of the array elements.【例】計算中位數
import numpy as npnp.random.seed(20200623)x = np.random.randint(0, 20, size=[4, 5])print(x)# [[10 2 1 1 16]# [18 11 10 14 10]# [11 1 9 18 8]# [16 2 0 15 16]]print(np.percentile(x, 50))print(np.median(x))# 10.0print(np.percentile(x, 50, axis=0))print(np.median(x, axis=0))# [13.5 2. 5. 14.5 13. ]print(np.percentile(x, 50, axis=1))print(np.median(x, axis=1))# [ 2. 11. 9. 15.]
計算平均值
numpy.mean(a[, axis=None, dtype=None, out=None, keepdims=np._NoValue)])Compute the arithmetic mean along the specified axis.【例】計算平均值(沿軸的元素的總和除以元素的數量)。
import numpy as npx = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 35]])y = np.mean(x)print(y) # 23.0y = np.mean(x, axis=0)print(y) # [21. 22. 23. 24. 25.]y = np.mean(x, axis=1)print(y) # [13. 18. 23. 28. 33.]
計算加權平均值
numpy.average(a[, axis=None, weights=None, returned=False])Compute the weighted average along the specified axis.mean和average都是計算均值的函數,在不指定權重的時候average和mean是一樣的。指定權重後,average可以計算加權平均值。
【例】計算加權平均值(將各數值乘以相應的權數,然後加總求和得到總體值,再除以總的單位數。)
import numpy as npx = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 35]])y = np.average(x)print(y) # 23.0y = np.average(x, axis=0)print(y) # [21. 22. 23. 24. 25.]y = np.average(x, axis=1)print(y) # [13. 18. 23. 28. 33.]y = np.arange(1, 26).reshape([5, 5])print(y)# [[ 1 2 3 4 5]# [ 6 7 8 9 10]# [11 12 13 14 15]# [16 17 18 19 20]# [21 22 23 24 25]]z = np.average(x, weights=y)print(z) # 27.0z = np.average(x, axis=0, weights=y)print(z)# [25.54545455 26.16666667 26.84615385 27.57142857 28.33333333]z = np.average(x, axis=1, weights=y)print(z)# [13.66666667 18.25 23.15384615 28.11111111 33.08695652]
計算方差
numpy.var(a[, axis=None, dtype=None, out=None, ddof=0, keepdims=np._NoValue])Compute the variance along the specified axis.ddof=0:是「Delta Degrees of Freedom」,表示自由度的個數。要注意方差和樣本方差的無偏估計,方差公式中分母上是n;樣本方差無偏估計公式中分母上是n-1(n為樣本個數)。
證明的連結 3
【例】計算方差
import numpy as npx = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 35]])y = np.var(x)print(y) # 52.0y = np.mean((x - np.mean(x)) ** 2)print(y) # 52.0y = np.var(x, ddof=1)print(y) # 54.166666666666664y = np.sum((x - np.mean(x)) ** 2) / (x.size - 1)print(y) # 54.166666666666664y = np.var(x, axis=0)print(y) # [50. 50. 50. 50. 50.]y = np.var(x, axis=1)print(y) # [2. 2. 2. 2. 2.]
計算標準差
numpy.std(a[, axis=None, dtype=None, out=None, ddof=0, keepdims=np._NoValue])Compute the standard deviation along the specified axis.標準差是一組數據平均值分散程度的一種度量,是方差的算術平方根。
【例】計算標準差
import numpy as npx = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 35]])y = np.std(x)print(y) # 7.211102550927978y = np.sqrt(np.var(x))print(y) # 7.211102550927978y = np.std(x, axis=0)print(y)# [7.07106781 7.07106781 7.07106781 7.07106781 7.07106781]y = np.std(x, axis=1)print(y)# [1.41421356 1.41421356 1.41421356 1.41421356 1.41421356]
相關
計算協方差矩陣
numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None,aweights=None) Estimate a covariance matrix, given data and weights.【例】計算協方差矩陣
import numpy as npx = [1, 2, 3, 4, 6]y = [0, 2, 5, 6, 7]print(np.cov(x)) # 3.7 #樣本方差print(np.cov(y)) # 8.5 #樣本方差print(np.cov(x, y))# [[3.7 5.25]# [5.25 8.5 ]]print(np.var(x)) # 2.96 #方差print(np.var(x, ddof=1)) # 3.7 #樣本方差print(np.var(y)) # 6.8 #方差print(np.var(y, ddof=1)) # 8.5 #樣本方差z = np.mean((x - np.mean(x)) * (y - np.mean(y))) #協方差print(z) # 4.2z = np.sum((x - np.mean(x)) * (y - np.mean(y))) / (len(x) - 1) #樣本協方差print(z) # 5.25z = np.dot(x - np.mean(x), y - np.mean(y)) / (len(x) - 1) #樣本協方差 print(z) # 5.25
計算相關係數
numpy.corrcoef(x, y=None, rowvar=True, bias=np._NoValue, ddof=np._NoValue) Return Pearson product-moment correlation coefficients.理解了np.cov()函數之後,很容易理解np.correlate(),二者參數幾乎一模一樣。
np.cov()描述的是兩個向量協同變化的程度,它的取值可能非常大,也可能非常小,這就導致沒法直觀地衡量二者協同變化的程度。相關係數實際上是正則化的協方差,n個變量的相關係數形成一個n維方陣。
【例】計算相關係數
import numpy as npnp.random.seed(20200623)x, y = np.random.randint(0, 20, size=(2, 4))print(x) # [10 2 1 1]print(y) # [16 18 11 10]z = np.corrcoef(x, y)print(z)# [[1. 0.48510096]# [0.48510096 1. ]]a = np.dot(x - np.mean(x), y - np.mean(y))b = np.sqrt(np.dot(x - np.mean(x), x - np.mean(x)))c = np.sqrt(np.dot(y - np.mean(y), y - np.mean(y)))print(a / (b * c)) # 0.4851009629263671
直方圖
numpy.digitize(x, bins, right=False)Return the indices of the bins to which each value in input array belongs.x:numpy數組bins:一維單調數組,必須是升序或者降序right:間隔是否包含最右返回值:x在bins中的位置。【例】
import numpy as npx = np.array([0.2, 6.4, 3.0, 1.6])bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])inds = np.digitize(x, bins)print(inds) # [1 4 3 2]for n in range(x.size): print(bins[inds[n] - 1], "<=", x[n], "<", bins[inds[n]])# 0.0 <= 0.2 < 1.0# 4.0 <= 6.4 < 10.0# 2.5 <= 3.0 < 4.0# 1.0 <= 1.6 < 2.5
【例】
import numpy as npx = np.array([1.2, 10.0, 12.4, 15.5, 20.])bins = np.array([0, 5, 10, 15, 20])inds = np.digitize(x, bins, right=True)print(inds) # [1 2 3 4 4]inds = np.digitize(x, bins, right=False)print(inds) # [1 3 3 4 5]
【1】WIKI百科
https://en.wikipedia.org/wiki/Statistics
【2】WIKI百科
https://en.wikipedia.org/wiki/Benford's_law