Valeurs d'histogramme D'une série de Pandas

J'ai quelques valeurs dans une série Python Pandas (type: pandas.core.série.Série)

In [1]: series = pd.Series([0.0,950.0,-70.0,812.0,0.0,-90.0,0.0,0.0,-90.0,0.0,-64.0,208.0,0.0,-90.0,0.0,-80.0,0.0,0.0,-80.0,-48.0,840.0,-100.0,190.0,130.0,-100.0,-100.0,0.0,-50.0,0.0,-100.0,-100.0,0.0,-90.0,0.0,-90.0,-90.0,63.0,-90.0,0.0,0.0,-90.0,-80.0,0.0,])

In [2]: series.min()
Out[2]: -100.0

In [3]: series.max()
Out[3]: 950.0

Je voudrais obtenir des valeurs d'histogramme (pas nécessaire de tracer l'histogramme)... J'ai juste besoin d'obtenir la fréquence pour chaque intervalle.

Disons que mes intervalles vont de [-200; -150] à [950; 1000]

, Donc les limites inférieures sont

lwb = range(-200,1000,50)

Et les limites supérieures sont

upb = range(-150,1050,50)

Je ne sais pas comment obtenir la fréquence (le nombre de valeurs qui sont à l'intérieur de chaque intervalle) maintenant... Je suis sûr que la définition de lwb et upb n'est pas nécessaire... mais je ne sais pas ce fonction que je devrais utiliser pour effectuer cela! (après avoir plongé dans Pandas doc, je pense que la fonction cut peut m'aider car c'est un problème de discrétisation... mais je ne comprends pas comment l'utiliser)

Après avoir été capable de le faire, je vais jeter un oeil à la façon d'afficher l'histogramme (mais c'est un autre problème)

45
demandé sur Nickil Maveli 2012-10-30 01:01:02

3 réponses

Il vous suffit d'utiliser la fonction histogramme de numpy:

import numpy as np
count, division = np.histogram(series)

Où division est la bordure calculée automatiquement pour vos bacs et count est la population à l'intérieur de chaque bac.

Si vous devez corriger un certain nombre de bins, vous pouvez utiliser l'argument bins et spécifier un certain nombre de bins, ou lui donner directement les limites entre chaque bin.

count, division = np.histogram(series, bins = [-201,-149,949,1001])

Pour tracer les résultats, vous pouvez utiliser la fonction matplotlib Hist, mais si vous travaillez dans des pandas, chaque série a sa propre gérer la fonction hist, et vous pouvez lui donner le binning choisi:

series.hist(bins=division)
60
répondu EnricoGiampieri 2017-02-07 09:45:19

Afin d'obtenir les comptes de fréquence des valeurs dans une plage binned d'intervalle donnée, nous pourrions utiliser pd.cut qui renvoie des indices de bacs demi ouverts pour chaque élément avec value_counts pour le calcul de leurs comptes respectifs.

Pour tracer leurs comptes, un tracé à barres peut alors être fait.

step = 50
bin_range = np.arange(-200, 1000+step, step)
out, bins  = pd.cut(s, bins=bin_range, include_lowest=True, right=False, retbins=True)
out.value_counts(sort=False).plot.bar()

entrez la description de l'image ici

Fréquence pour chaque intervalle trié par ordre décroissant de leur nombre:

out.value_counts().head()
[-100, -50)    18
[0, 50)        16
[800, 850)      2
[-50, 0)        2
[950, 1000)     1
dtype: int64

Pour modifier le tracé pour inclure uniquement l'intervalle fermé inférieur de la plage à des fins esthétiques, vous pouvez faire:

out.cat.categories = bins[:-1]
out.value_counts(sort=False).plot.bar()

entrez la description de l'image ici

14
répondu Nickil Maveli 2016-12-18 16:35:04

Si vous dites que vous voulez obtenir des valeurs d'histogramme, vous cherchez simplement la fréquence de chaque valeur unique de votre série, si Je ne me trompe pas. Dans ce cas, vous pouvez simplement faire serie.value_counts(), ce qui vous donnera:

 0.0      16
-90.0      8
-100.0     5
-80.0      3
 63.0      1
-50.0      1
 130.0     1
 190.0     1
 840.0     1
-48.0      1
 208.0     1
-64.0      1
 812.0     1
-70.0      1
 950.0     1
3
répondu st19297 2016-11-25 04:48:23