跳轉到我的部落格
ex1: given a data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36],求q1, q2, q3, iqr
solving:
步驟:1. 排序,從小到大排列data,data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]
2. 計算分位數的位置
3. 給出分位數
分位數計算法一
pos = (n+1)*p,n為資料的總個數,p為0-1之間的值
q1的pos = (11 + 1)*0.25 = 3 (p=0.25) q1=15
q2的pos = (11 + 1)*0.5 = 6 (p=0.5) q2=40
q3的pos = (11 + 1)*0.75 = 9 (p=0.75) q3=43
iqr = q3 - q1 = 28
import math
def quantile_p(data, p):
pos = (len(data) + 1)*p
#pos = 1 + (len(data)-1)*p
pos_integer = int(math.modf(pos)[1])
pos_decimal = pos - pos_integer
q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal
return q
data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]
q1 = quantile_p(data, 0.25)
print("q1:", q1)
q2 = quantile_p(data, 0.5)
print("q2:", q2)
q3 = quantile_p(data, 0.75)
print("q3:", q3)
分位數計算法二
pos = 1+ (n-1)\*p,n為資料的總個數,p為0-1之間的值
q1的pos = 1 + (11 - 1)\*0.25 = 3.5 (p=0.25) q1=25.5
q2的pos = 1 + (11 - 1)\*0.5 = 6 (p=0.5) q2=40
q3的pos = 1 + (11 - 1)\*0.75 = 8.5 (p=0.75) q3=42.5
```import math
def quantile_p(data, p):
pos = 1 + (len(data)-1)*p
pos_integer = int(math.modf(pos)[1])
pos_decimal = pos - pos_integer
q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal
return q
data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]
q1 = quantile_p(data, 0.25)
print("q1:", q1)
q2 = quantile_p(data, 0.5)
print("q2:", q2)
q3 = quantile_p(data, 0.75)
print("q3:", q3)
```## 案例2
給定資料集 data = [7, 15, 36, 39, 40, 41],求q1,q2,q3
分位數計算法一
import math
def quantile_p(data, p):
data.sort()
pos = (len(data) + 1)*p
pos_integer = int(math.modf(pos)[1])
pos_decimal = pos - pos_integer
q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal
return q
data = [7, 15, 36, 39, 40, 41]
q1 = quantile_p(data, 0.25)
print("q1:", q1)
q2 = quantile_p(data, 0.5)
print("q2:", q2)
q3 = quantile_p(data, 0.75)
print("q3:", q3)
計算結果:
q1 = 7 +(15-7)×(1.75 - 1)= 13
q2 = 36 +(39-36)×(3.5 - 3)= 37.5
q3 = 40 +(41-40)×(5.25 - 5)= 40.25
分位數計算法二
結果:q1: 20.25
q2: 37.5
q3: 39.75
**四分位數**
**概念**:把給定的亂序數值由小到大排列並分成四等份,處於三個分割點位置的數值就是四分位數。
**第1四分位數 (q1)**,又稱「較小四分位數」,等於該樣本中所有數值由小到大排列後第25%的數字。
**第2四分位數 (q2)**,又稱「中位數」,等於該樣本中所有數值由小到大排列後第50%的數字。
**第3四分位數 (q3)**,又稱「較大四分位數」,等於該樣本中所有數值由小到大排列後第75%的數字。
**四分位距**(interquartile range, iqr)= 第3四分位數與第1四分位數的差距
確定p分位數字置的兩種方法
position = (n+1)*p
position = 1 + (n-1)*p
在python中計算分位數字置的方案採用position=1+(n-1)*p
import pandas as pd
import numpy as np
df = pd.dataframe(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]), columns=['a', 'b'])
print("資料原始格式:")
print(df)
print("計算p=0.1時,a列和b列的分位數")
print(df.quantile(.1))
程式計算結果:序號a
b011
12102
310034
100計算p=0.1時,a列和b列的分位數
a 1.3
b 3.7
name: 0.1, dtype: float64
手算計算結果:
計算a列
pos = 1 + (4 - 1)*0.1 = 1.3
fraction = 0.3
ret = 1 + (2 - 1) * 0.3 = 1.3
計算b列
pos = 1.3
ret = 1 + (10 - 1)* 0.3 = 3.7
利用pandas庫計算data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36]的分位數。
import pandas as pd
import numpy as np
dt = pd.series(np.array([6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36])
print("資料格式:")
print(dt)
print('q1:', df.quantile(.25))
print('q2:', df.quantile(.5))
print('q3:', df.quantile(.75))
計算結果
q1: 25.5
q2: 40.0
q3: 42.5
import math
def quantile_p(data, p, method=1):
data.sort()
if method == 2:
pos = 1 + (len(data)-1)*p
else:
pos = (len(data) + 1)*p
pos_integer = int(math.modf(pos)[1])
pos_decimal = pos - pos_integer
q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal
q1 = quantile_p(data, 0.25)
q2 = quantile_p(data, 0.5)
q3 = quantile_p(data, 0.75)
iqr = q3 - q1
return q1, q2, q3, iqr
直接呼叫.quantile(p)
方法,就可以計算出分位數,採用method=2方法。
1. 分位數概念
2. pandas中的quantile
數學系列目錄
初等數學 漫談傅利葉1 從無窮級數到傅利葉 漫談傅利葉2 公式推導 三角函式正交性 漫談傅利葉3 收斂性 非週期函式的推廣應用 漫談傅利葉4 全時傅利葉的缺點與短時傅利葉 漫談傅利葉5 卷積與短時傅利葉的缺點 漫談傅利葉6 取樣與1d初步實現 漫談傅利葉7 帶有相位與幅值的1d實現 漫談傅利葉8 傅...
學習數學系列《一》
內容摘自 微積分摘要 高等數學ppt 由於標題寫高數有圈粉嫌疑,所以還是寫一些比較樸素的名字。實際上這個算是高等數學的學習。前幾天被一位神犇虐數學虐到哭所以自己還是默默地拿起了書。進入正題 第一節 1.1集合的對映 如果有一種規律f使得a中每乙個元素 x 都能與b中的唯一確定的元素f x 對應,那麼...
演算法趣題(Java隨筆) 數學系列
目錄 一 判斷閏年 二 矩陣乘積 三 哥德 猜想 四 完全數 五 親密數 六 數轉陣列 七 分解質因數 八 待續.四年一閏,百年不閏,四百年再閏 1 判斷閏年 static boolean isleapyear int year return false 執行測試 1 判斷閏年 main方法中執行 ...