J'ai des données comme ça.
Ram,500
Sam,400
Test,100
Ram,800
Sam,700
Test,300
Ram,900
Sam,800
Test,400
Quel est le moyen le plus rapide d’affiner la "médiane" à partir des données ci-dessus . Mon résultat devrait être quelque chose comme ...
Médiane = 1/2 (n + 1), où n est le nombre de valeurs de données dans l’échantillon.
Test 500
Sam 700
Ram 800
Python 3.4 inclut statistics integrated, vous pouvez donc utiliser la méthode statistics.median
:
>>> from statistics import median
>>> median([1, 3, 5])
3
Utilisez la fonction médiane de numpy .
Il est un peu difficile de savoir comment vos données sont réellement représentées. J'ai donc supposé qu'il s'agissait d'une liste de n-uplets:
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
La fonction median
renvoie la médiane à partir d'une liste. S'il y a un nombre pair d'entrées, il prend la valeur médiane des deux entrées médianes (standard).
J'ai utilisé defaultdict pour créer un dict contenant vos données et leurs valeurs, ce qui est une représentation plus utile de vos données.
Regarde ça:
def median(lst):
even = (0 if len(lst) % 2 else 1) + 1
half = (len(lst) - 1) / 2
return sum(sorted(lst)[half:half + even]) / float(even)
Remarque:
sorted(lst)
produit une copie triée de lst
;
sum([1]) == 1
;
Meilleure façon d'obtenir la médiane d'une liste avec des données entières:
x = [1,3,2]
print "The median of x is:",sorted(x)[len(x)//2]
J'ai commencé avec la réponse de user3100512 et j'ai rapidement réalisé que cela ne fonctionnait pas pour un nombre pair d'éléments. J'y ai ajouté des conditions pour calculer la médiane.
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])
devrait retourner 5,5