2017-09-07 1 views
-1

튜플 [(val1, freq1), (val2, freq2) .... (valn, freqn)]의 목록이 있습니다. 위의 데이터에 대한 중심 경향 (평균, 중앙값) 및 편차 (분산, 평균) 측정 값을 구해야합니다. 또한 값에 대한 상자 플롯을 플롯해야합니다.Python의 빈도 분포표에서 평균 및 표준 편차를 얻는 방법

숫자가 많은 배열에는 값 목록에서 평균/표준 편차 (또는 분산)를 얻기위한 직접적인 방법이 있습니다.

numpy (또는 다른 잘 알려진 라이브러리)는 이러한 빈도 분포 테이블에서 직접 조작 할 수 있습니까?

또한 튜플의 위 목록을 하나의 목록으로 프로그래밍 방식으로 확장하는 가장 좋은 방법은 무엇입니까? (예 : freq dist가 [(1,3), (50,2)] 인 경우, [1,1,1,50,50] 목록을 얻는 가장 좋은 방법은 np.mean ([1,1,1, 50,50]))

나는 사용자 정의 기능 here를 볼 수 있지만, 나는 값 목록에 (값, 주파수) 목록을 변환하려면

+0

: 당신은 또한 어떤 목적으로 구축 된 기능을 사용할 수 있습니다


는 메모리 오류가 발생하는 경우 (또는 당신은 가능한 한 많은 성능을 짜내 할) 묘사에 ... 그리고 내가 찾고있는 것을 명확히했다. 중복 된 태그를 제거 할 수 있습니까? – jithu83

답변

3

첫째, 내가 좋아하는 두 numpy 배열로 그 지저분한 목록을 변경할 것 @ user8153했다 : 그런 다음

val, freq = np.array(list_tuples).T 

어레이 (np.repeat은 루프를 방지하여) 재구성 할 수 있습니다

data = np.repeat(val, freq) 

numpy statistical functionsdata 배열에 사용하십시오. 난 당신의 솔루션을 돌렸다 @ayhan

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[-1] // 2, cdf)] 

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)) 
1
  • 가능하면 표준 구현을 사용하고 싶습니다 :

    freqdist = [(1,3), (50,2)] 
    sum(([val,]*freq for val, freq in freqdist), []) 
    

    [1, 1, 1, 50, 50] 
    
  • 을 제공합니다
  • 당신이 weights 인자를 np.average를 사용하여 값 목록의 건물을 피할 수의 평균을 계산하려면 사용자가 예상하는대로

    vals, freqs = np.array(freqdist).T 
    np.average(vals, weights = freqs) 
    

    가 20.6을 제공합니다. 나는 이것이 평균, 분산 또는 표준 편차에 대해서는 효과가 있다고 생각하지 않습니다.

관련 문제