![](/img/trans.png)
[英]How to get conditional mean and standard deviation from FIGARCH model in Python?
[英]How to get Mean and Standard deviation from a Frequency Distribution table in Python
我有一個元組列表 [(val1, freq1), (val2, freq2) .... (valn, freqn)]。 我需要獲得上述數據的中心趨勢(均值、中值)和偏差(方差、均值)的度量。我還想為這些值繪制一個箱線圖。
我看到 numpy 數組具有從值列表中獲取均值/中值和標准差(或方差)的直接方法。
numpy(或任何其他知名庫)是否有直接的方法來操作這樣的頻率分布表?
另外以編程方式將上述元組列表擴展為一個列表的最佳方法是什么? (例如,如果 freq dist 是 [(1,3) , (50,2)],獲得列表 [1,1,1,50,50] 的最佳方法是使用 np.mean([1,1,1, 50,50]))
我在這里看到一個自定義函數,但如果可能,我想使用標准實現
首先,我會像@user8153 那樣將那個凌亂的列表更改為兩個numpy
數組:
val, freq = np.array(list_tuples).T
然后你可以重建數組(使用np.repeat
防止循環):
data = np.repeat(val, freq)
並在您的data
數組上使用numpy
統計函數。
如果這會導致內存錯誤(或者您只想盡可能多地擠出性能),您還可以使用一些專門構建的函數:
def mean_(val, freq):
return np.average(val, weights = freq)
def median_(val, freq):
ord = np.argsort(val)
cdf = np.cumsum(freq[ord])
return val[ord][np.searchsorted(cdf, cdf[-1] // 2)]
def mode_(val, freq): #in the strictest sense, assuming unique mode
return val[np.argmax(freq)]
def var_(val, freq):
avg = mean_(val, freq)
dev = freq * (val - avg) ** 2
return dev.sum() / (freq.sum() - 1)
def std_(val, freq):
return np.sqrt(var_(val, freq))
要將(值,頻率)列表轉換為值列表:
freqdist = [(1,3), (50,2)] sum(([val,]*freq for val, freq in freqdist), [])
給
[1, 1, 1, 50, 50]
要計算平均值,您可以使用帶np.average
weights
參數的np.average
來避免構建值列表:
vals, freqs = np.array(freqdist).T np.average(vals, weights = freqs)
正如你所期望的那樣給出 20.6。 不過,我認為這不適用於均值、方差或標准差。
import pandas as pd
import math
import numpy as np
頻率分布數據
class freq
0 60-65 3
1 65-70 150
2 70-75 335
3 75-80 135
4 80-85 4
為類創建中間點列
df[['Upper','Lower']]=df['class'].str.split('-',expand=True)
df['Xi']=(df['Upper'].astype(float)+df['Lower'].astype(float))/2
df.drop(['Upper','Lower'],axis=1,inplace=True)
所以
class freq Xi
0 60-65 3 62.5
1 65-70 150 67.5
2 70-75 335 72.5
3 75-80 135 77.5
4 80-85 4 82.5
意思
mean = np.average(df['Xi'], weights=df['freq'])
mean
72.396331738437
標准差
std = np.sqrt(np.average((df['Xi']-mean)**2,weights=df['freq']))
std
3.5311919641103877
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.