[Python]大樂透統計學--中位數、眾數、六分位數
本篇文章以大樂透號碼說明統計學的中位數、眾數、六分位。
準備工作:將108年大樂透號碼存成Lotto_108.csv,內容可參考[Python]大樂透統計學--平均數、變異數@ KOEI的旅行 - 痞客邦 。中位數在該篇文章也稍有提到。
用Python運算大樂透中獎號碼的中位數、眾數、六分位。
讀取中獎號碼(樣本):
import numpy as np #刪除 特別號 print (lotto_data108) |
執行結果,得到108年各期號碼:
[[18 23 24 25 39 42] [ 6 7 8 20 47 48] [ 4 19 21 28 39 43] [13 20 22 31 34 42] ..... [ 9 18 31 45 48 49] [17 18 25 32 43 45] [10 14 26 38 39 47]] |
計算每期的中位數,獎號共有6個,中位數為第3個與第4個獎號之平均。例如:
108000001期:18,23,24,25,39,42 => 中位數=24.5
108000002期:06,07,08,20,47,48 => 中位數=14
108000112期:10,14,26,38,39,47 => 中位數=32
#計算每期獎號的中位數 |
計算結果:
樣本中位數: [24.5 14. 24.5 26.5 34. 20. 36.5 14.5 27. 20.5 28.5
...
23.5 17. 27. 13. 22.5 18.5 28.5 29. 25. 38. 28.5 32. ]
樣本中位數之平均: 25.544642857142858
|
中位數之平均為25.55,表示第3個與第4個獎號之平均為25.55,也就是平均每期1到25號有3個獎號,26到49號有另外3個。
另外一種中間號的統計方式,先列出第3個與第4個獎號間所有獎號,然後取眾數。中間獎號的眾數是中間獎號出現機率最高的號碼,即是最常出現的中間數字,所以它的左、右2邊通常各有3個獎號。
步驟1:列出每期第3個與第4個獎號間所有號碼,取包含第3個獎號,但不含第4個獎號。
108000001期:18,23,24,25,39,42 => 中間獎號:24
108000002期:06,07,08,20,47,48 => 中間獎號:08-19
108000112期:10,14,26,38,39,47 => 中間獎號:26-37
AllMiddleNo = [] for row in lotto_data108: sample_middle = list(range(row[2], row[3])) print(sample_middle) #串接樣本 AllMiddleNo.extend(sample_middle) print(AllMiddleNo) |
執行結果,中間號碼清單:
中間號碼: [24] 中間號碼: [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 中間號碼: [21, 22, 23, 24, 25, 26, 27] ... 中間號碼: [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44] 中間號碼: [25, 26, 27, 28, 29, 30, 31] 中間號碼: [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37] 全部中間號碼: [24, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, ... 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 25, 26, 27, 28, 29, 30, 31, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37] |
步驟2:計算所有中間號碼出現的次數,找出眾數。
#計算出現次數 counts = np.bincount(AllMiddleNo) #bincount:各個正整數出現的次數,從0開始算 print('每個中間號出現次數:' ,counts) sample_mode = np.argmax(counts) #argmax:(第一個)最大數的index,bincount的argmax就是眾數 print('中間號碼眾數:',sample_mode, '出現次數:',counts[sample_mode]) |
執行結果:
每個中間號出現次數: [ 0 0 0 0 1 1 1 1 3 4 4 7 13 13 19 20 20 23 29 31 29 25 33 36
36 39 40 39 39 38 37 35 33 26 22 21 17 10 8 7 5 5 5 4 2 1]
中間號碼眾數: 26 出現次數: 40
|
表示最常出現的中間號是26,它的左、右2邊通常各有3個獎號。也就是最常1到26號有3個獎號,27到49號有另外3個,這樣的機率是40/112 = 35.7% (出現次數40,共112期)。
六分位數將獎號分成6段,第1個六分位數取第1個與第2個獎號之平均;第2個六分位數取第2個與第3個獎號之平均;以此類推,第5個六分位數取第5個與第6個獎號之平均;而第3個六分位數即是中位數。例如:
108000001期:18,23,24,25,39,42 => 六分位數:20.5 23.5 24.5 32 40.5
108000002期:06,07,08,20,47,48 => 六分位數: 6.5 7.5 14 33.5 47.5
108000112期:10,14,26,38,39,47 => 六分位數:12 20 32 38.5 43
#六分位 np.set_printoptions(precision=1) #陣列print到小數第1位’ sample_six= np.percentile(lotto_data108, [100/6, 200/6, 300/6, 400/6, 500/6],axis=1,interpolation = 'midpoint') #interpolation='midpoint',取2數平均 print('全部六分位數:',sample_six) print('六分位數之平均:',np.mean(sample_six,axis=1)) |
percentile之作法參考numpy.org的文件numpy.percentile。
六分位數執行結果:
全部六分位數: [[20.5 6.5 11.5 ...... 18.5 13.5 17.5 12. ]
[23.5 7.5 20. ...... 21.5 24.5 21.5 20. ]
[24.5 14. 24.5 ...... 25. 38. 28.5 32. ]
[32. 33.5 33.5 ....... 30. 46.5 37.5 38.5]
[40.5 47.5 41. ....... 43.5 39. 48.5 44. 43. ]]
六分位數之平均: [10.9 18.5 25.5 32.6 39.8]
|
六分位數之平均為10.9 18.5 25.5 32.6 39.8
號碼共49個,以六分位數之平均,分成6組的分法為:
1-10, 11-18, 19-25, 26-32, 33-39, 40-49
與平分成6等分的分法略有不同,平分的6分位為:
1-8, 9-16, 17-24, 24-32, 33-40, 41-49
分成6個區間,表示每個區間平均都有一個號碼,但與實際獎號比較,例如:
108000001期:18,23,24,25,39,42
108000002期:06,07,08,20,47,48
108000112期:10,14,26,38,39,47
使用六分位分析獎號在六個區間的機率,結果每區平均分散的機率不高,每區平均0~2個數字,甚至也有到3個數字的。
留言列表