> Modules non standards > numpy > Statistiques avec numpy
Statistiques avec numpy
Minimum et maximum :
- avec a = numpy.array([[1, 2, 3], [4, 5, 6]]) :
array([[1, 2, 3],
[4, 5, 6]])
- numpy.amin(a) ou numpy.min(a) ou aussi a.min() : renvoie la valeur minimum de l'array (sur toute l'array si à plusieurs dimensions).
- numpy.amin(a, 0) : la ligne des minima par colonne, donc renvoie array([1, 2, 3]).
- numpy.amin(a, 1) : la ligne des minima par ligne, donc renvoie array([1, 4]).
- numpy.amax : pareil pour le maximum.
- nanmin et nanmax : pareil en ignorant les valeurs non définies.
Valeurs statistiques de base :
- a.mean() : renvoie la moyenne sur toute l'array.
- numpy.mean(a, 0) : la ligne des moyennes, c'est à dire array([ 2.5, 3.5, 4.5]).
- numpy.median(a, 0) : la ligne des médiane, c'est à dire aussi ici array([ 2.5, 3.5, 4.5]) (cas particulier).
- numpy.std(a, 0) : la ligne des déviations standard par colonne au sens mathématique, c'est à dire divisé par racine de n, ici array([ 1.5, 1.5, 1.5]).
- numpy.std(a, 0, ddof = 1) : la ligne des déviations standard par colonne au sens statistique, c'est à dire divisé par racine de n - 1 (ddof : degrés of freedom), ici array([ 2.12132034, 2.12132034, 2.12132034]).
- numpy.var(a, 0) : la lignes des variances par colonne, donc ici : array([ 1.5, 1.5, 1.5]).
- numpy.percentile(a, 10) : valeur du premier décile.
- numpy.quantile(numpy.array([0, 4, 5, 3, 4, 2, 5]), 0.5) : la médiane.
- numpy.quantile(numpy.array([0, 4, 5, 3, 4, 2, 5]), [0.25, 0.5, 0.75]) : les limites des quartiles.
calcul de statistiques en ignorant les NaN :
- numpy.nanmean(ar) : la moyenne (attention, ar.nanmean() ne marche pas !
- numpy.nanvar(ar): variance.
- numpy.nanstd(ar): écart-type.
scipy.misc.comb(10, 5) : le coefficient binomial (nombre de combinaisons de 5 objets parmi 10) C(10, 5).
Calcul des quantiles :
- Avoir la valeur correspondant à un percentile donné : scipy.stats.scoreatpercentile([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 90) : calcule la valeur correspondant au 90ème percentile de la liste des données (avec interpolation). Cela donne ici 9.099999999 (avec 50, on a en fait la médiane).
- réciproquement, on peut calculer le percentile correspondant à une valeur donnée : scipy.stats.percentileofscore([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 9.099999999) : donne 90.0 (90ème percentile).
Calcul d'un histogramme :
- a = [2, 4, 5, 1, 4, 2, 9, 3, 4, 5]; (nbrs, intervals) = numpy.histogram(a) : renvoie le nombre d'éléments dans chaque intervalle, et les limites des intervalles. intervals a un élément de plus que nbr, et par défaut, le nombre de bins est de 10 entre min(a) et max(a). Donc ici, nbrs = [1 2 1 3 0 2 0 0 0 1] et intervals = [1., 1.8, 2.6, 3.4, 4.2, 5., 5.8, 6.6, 7.4, 8.2, 9.]
- (nbrs, intervals) = numpy.histogram(a, bins = 5, range = (0, 10)) : on impose le nombre de bins et les limites extrèmes dans lesquelles les intervalles sont déterminés. Si des éléments sont en dehors, ils sont ignorés.
- (density, intervals) = numpy.histogram(a, bins = 5, range = (0, 10), density = True) : normalise les valeurs de telle sorte que l'intégrale soit 1, c'est à dire la somme des valeurs pondérée par la largeur de l'intervalle. Ici sum(density) * (10 - 0) / 5 vaut 1.
- (nbrs, intervals) = numpy.histogram(a, bins = [0, 1, 4, 10]) : on peut donner aussi explicitement les limites des intervalles. Les intervalles sont ouverts à droite. Ici, renvoie nbrs = [0, 4, 6]
Coefficient de corrélation de Pearson :
- on peut utiliser mat = numpy.corrcoef([2, 4, 6, 2, 9], [3, 5, 9, 4, 7]) : renvoie une matrice 2 x 2 symétrique avec tous les coefficients, en l'occurence 1 sur la diagonale, et la valeur recherchée ailleurs. mat[0][1] vaut 0.77685086. C'est la valeur avec la normalisation par n - 1 par défaut.
- on peut aussi donner une matrice en input pour avoir la matrice des coefficients de corrélations des lignes 2 à 2 : mat = numpy.array([[6, 4, 3], [7, 9, 1], [2, 5, 8]]); numpy.corrcoef(mat) donne :
array([[ 1. , 0.57655666, -0.98198051],
[ 0.57655666, 1. , -0.72057669],
[-0.98198051, -0.72057669, 1. ]])
- attention donc, numpy.corrcoef procéde par défaut par ligne, chaque ligne représentant une variable !
- pour que chaque colonne soit une variable, faire numpy.corrcoef(mat, rowvar = 0).
- autre solution avec scipy : scipy.stats.pearsonr.
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert