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)
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)
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()
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()
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