18

このようなデータがあります。

Ram,500
Sam,400
Test,100
Ram,800
Sam,700
Test,300
Ram,900
Sam,800
Test,400

上記のデータから「中央値」を特定する最短の方法は何ですか。私の結果は次のようになるはずです...

中央値 = 1/2(n+1)、ここで n はサンプル内のデータ値の数です。

Test 500
Sam 700
Ram 800
4

6 に答える 6

40

Python 3.4 には統計が組み込まれているため、次のメソッドを使用できますstatistics.median

>>> from statistics import median
>>> median([1, 3, 5])
 3
于 2014-03-17T15:15:06.770 に答える
35

numpyの中央値関数を使用します。

于 2012-05-07T12:52:17.767 に答える
31

データが実際にどのように表現されているかが少し不明確なので、タプルのリストであると想定しました。

data = [('Ram',500), ('Sam',400), ('Test',100), ('Ram',800), ('Sam',700), 
        ('Test',300), ('Ram',900), ('Sam',800), ('Test',400)]

from collections import defaultdict

def median(mylist):
    sorts = sorted(mylist)
    length = len(sorts)
    if not length % 2:
        return (sorts[length / 2] + sorts[length / 2 - 1]) / 2.0
    return sorts[length / 2]

data_dict = defaultdict(list)
for el in data:
    data_dict[el[0]].append(el[1])

print [(key,median(val)) for key, val in data_dict.items()] 
print median([5,2,4,3,1])   
print median([5,2,4,3,1,6])
#output:
[('Test', 300), ('Ram', 800), ('Sam', 700)]
3
3.5

この関数medianは、リストから中央値を返します。エントリの数が偶数の場合、中央の2つのエントリの中央の値を取ります(これは標準です)。

defaultdictを使用して、データとその値をキーとするdictを作成しました。これは、データのより便利な表現です。

于 2012-05-07T13:11:15.003 に答える
0

私は user3100512 の答えから始めましたが、偶数のアイテムでは機能しないことにすぐに気付きました。中央値を計算するためにいくつかの条件を追加しました。

def median(x):
    if len(x)%2 != 0:
        return sorted(x)[len(x)/2]
    else:
        midavg = (sorted(x)[len(x)/2] + sorted(x)[len(x)/2-1])/2.0
        return midavg

    median([4,5,6,7])

5.5を返す必要があります

于 2014-09-11T15:36:42.133 に答える